Unity Multipurpose Avatar
Unity Multipurpose Avatar, is an open avatar creation framework, it provides both base code and example content to create avatars. Using the UMA pack, it´s possible to customize the code and content for your own projects, and share or sell your creations through Unity Asset Store.
UMA is designed to support multiplayer games, so it provides code to pack all necessary UMA data to share the same avatar between clients and server. It may be necessary to implement a custom solution depending on your needs to optimize and reduce serialized data.
Performance and memory usage
UMA framework provides a set of high resolution content, flexible enough for generating a crowd with tons of random avatars or high quality customized avatars for cutscenes. Source textures are provided for generating final atlas resolution of up to 4096x4096. Depending on the amount of extra content being imported to the project, it might be necessary to handle memory management or reduce texture resolution.
Every UMA avatar created has it´s own unique mesh and Atlas texture, requiring extra memory. The standard atlas resolution of 2048x2048 is recommended for creating a small number of avatars, for games creating on a huge amount of avatars, using lower atlas resolution or sharing mesh and atlas data will be necessary.
UMA was initially planned to provide 50 avatars on screen, but the latest version can easily handle a hundred of unique avatars.
How does it work?
Creating 3d characters is a time consuming process that requires a number of different knowledge areas. Usually, each character is created based on an unique mesh and rig and is individually skinned and textured.
When developing games that might require a huge amount of avatars, it ´s expected to develop a solution to handle avatar creation in an efficient way. Usually they start from a set of base meshes and follow standards to be able to share body parts and content. Each project ends up with a different solution, and it ´s hard to share content or code between them.
UMA is meant to provide an open and flexible solution, which makes it possible to share content and code between different projects, resulting in a powerful tool for the entire community.
UMA has two main goals: Sharing content across avatars that uses same base mesh and optimizing created avatars, while providing the ability to change avatar shape in realtime.
To achieve that, a special rig structure was created that handles bone deformation in a strategic way that makes it possible to deform UMA shape based on changes on bones position, scale and rotation.
UMA example avatars are based on two base meshes, a male and a female. Each of them can share clothing and accessories, and can be used as a base on the creation of new meshes for different races.
Because clothes and accessories are skinned to UMA base meshes, they receive the same influence of UMA body shape, so any mesh deforms to any UMA body.
This way, if you have an armor or dress, it can be shared between all male or female avatars, even if they have very different body shapes.
An overlay system was implemented that makes it possible to combine many different textures when generating the final atlas. Those extra textures can be used to create even more variation to each avatar, and can be used for clothes, details and many other possibilities.
UMA optimization occurs in many steps: Each UMA avatar can have an unique texture atlas providing all necessary texture data, this makes it possible to have each UMA generating a single drawcall, in the case of a single material being used.
All UMA parts are baked together into one final mesh, which reduces the calculations involved in processing. Joen Joensen from Unity team implemented an advanced skinned mesh combiner to accomplish this.
On UMA latest version, the old CombineInstance() code is still available in case there´s no intention on using extra bones that would be dinamically included on avatar. The legacy code requires less processing time, but provides limited results.
How is content created?
Creating content for UMA doesn´t require much extra knowledge beyond the usual asset creation pipeline.
See Content creation for more details.
See Basic concepts to learn about the components that make up the UMA system.
Without Caitlyn Meeks-Ferragallo (Unity Asset Store Manager) and Jay Santos (Unity Field Engineer), UMA probably wouldn´t reach Asset Store any time soon, and even if it did, it wouldn´t have the same quality and flexibility it provides today.
Unity sponsored this project, making it possible to be available at Unity Asset Store for free. In the last months, I´ve received a huge help from Joen Joensen (Unity Software Developer, QA), he both provided feedback for UMA code and included his own scripts to the project.
Development Fernando Cardoso Emiliano Ribeiro (Huika Game Studio) - UMA Developer Joen Joensen (Unity Software Developer, QA) - Software architect
3rd party scripts Aras Pranckevicius (NeARAZ) - HUDFPS Joen Joensen - WorkerCoroutine, UMATextureImporter, SkinnedMeshCombiner Sven Magnus - MaxRectsBinPack
A huge thanks for the following beta testers and forum members Breyer, Cynel, ecurtz, FlorianSchmoldt, janpec, J f Ší , SinisterMephisto, Tesla Coil, virror, Whippets.