Don'ts of Avatars and Optimization
Don’ts of Avatars
Don’t put automatically playing audio on your avatar (like music that plays when it loads in). That audio will also replay any time a player reloads avatars, like every time they change their safety settings. It’s one of the most obnoxious components you can put on an avatar, it’s completely unsolicited, and everyone in the world hears it at an equal unspatialized volume, so please don’t use it.
Don’t put real-time lights on your avatar.
Avoid gratuitous particle effects; they are extremely obnoxious, tank the framerate, and are often nausea, epilepsy, and anxiety inducing.
DO NOT PUT SCREEN WARPING EFFECTS ON YOUR AVATAR. This is the single worst component type you can apply to an avatar, as it is usually unsolicited and the effect is literally sickening, as in nausea, epilepsy, and anxiety inducing.
Avatar Optimization Tips
Avatar download size
- On each texture file (image, typically .jpg or .png), in the inspector window,
under compression, select normal quality (if it isn’t already)
- Enable crunch compression
- Click apply
(You can do this with multiple textures selected to expedite the process)
The total number of triangles on your model via decimation. You can either use quick decimation via CATS, or for better results you can use CATS to separate the model (like by loose parts) and apply decimate modifiers to those parts individually.
Combine identical materials via CATS Optimization dropdown, Material tab.
Create atlases of different materials. This will merge multiple textures/materials into one (reducing draw calls & increasing performance).
The fewer the better. You can reduce the number of bones by merging their weights into their parents. Many MMD models come with far too many bones on parts like clothing than is optimal for VRChat. CATS has a bone merging section.
Dynamic bones are from a paid Unity add-on that allows for bones to delay their return to their neutral position using physics. It is mostly used for hair or animal ears. They are often the single most performance-intensive component you can put on an avatar, so if you choose to use them, keeping their number to a minimum is essential. Merge bone chains!!!
Note that Oculus Quest does not support dynamic bones.
Dynamic bone component
This is put on the parent bone of the to-be-affected child bones. The fewer the better. For example, if you want dynamic bones on your hair, you can put a single dynamic bone component on the head bone (and exclude all the non hair bones) instead of putting a separate dynamic bone component on each chain of hair bones.
Dynamic bone collider
Allows collision of dynamic bones on your own avatar. Generally doesn’t work well and is horrendous for performance. Ideally avoid, if you need them then have a maximum of 2, one for each hand.
Note that the collider shape is a capsule, not a sphere.
The colliders can be easily removed though Pumkin’s Avatar Tools.
There is a feature in Performance options in Safety settings called Limit Dynamic Bone Usage, enabled by default. This limits the number of Dynamic bones to 32 and the maximum dynamic bone components to 8. Try to stay below this threshold by merging bone weights and using fewer Dynamic bone components, but putting exclusions on them (e.g. put one on the head bone for the hair but exclude all the non-hair components).
The Sins of Avatar Stats (review)
Absurd material counts (MERGE SAME MATERIALS IN CATS, COMBINE DIFFERENT MATERIALS USING THE MATCOMBINER IN CATS)
Unassigned dynamic bone collision checks
Gratuitous dynamic bone colliders / collision checks
Gratuitous dynamic bone components
Gratuitous dynamic bones (MERGE THESE CHAINS VIA CATS!!!)
Absurd polygon count
Absurd particle count