Avatar Optimization Tips
This guide is not meant to be the end-all, be-all of avatar optimization! Optimizing your avatar properly requires pretty wide knowledge of a ton of things. We don't expect everyone to know everything.
However, we try our best to keep this document updated with the most common things people miss, and the most important targets to hit.
If you have input on optimization tips, please use the Suggest Edits button in the top right and add your own!
Do you want your avatar to be efficient and be loved by everyone because of all the frames you're saving them? Follow these tips and you should be good!
Any recommended numbers or limits in this document are subject to change at any time. Although some of the descriptions provided below are not precise in a technical manner, this document is intended to assist novice users in learning how to optimize their avatars.
Community-created blender plugins like Cats or Tuxedo allow users to very easily optimize their models and assist with common VRChat avatar problems. We strongly recommend using tools like this! It makes your job easier, and improves performance for all.
As a sidenote, the SDK's Build Control panel provides numbers of components on avatars to help with optimization.
Optimize your content for Android/Quest
When developing content for Android, please keep the Content Limitations in mind! For example, avatars don't have access to all shaders and avatar components.
In addition, you should optimize your content for Android. This improves your avatar's performance rank and allows more players to see your avatar.
Do not use Dynamic Bones!
Dynamic Bones is a Unity Asset that you can purchase that allows you to define bones on your avatar's rig to move around as if they were hanging. You can also define static forces like gravity which can make hair fall more realistically.
Dynamic Bones is deprecated and will be removed eventually. Use PhysBones instead.
VRChat will automatically convert Dynamic Bones to PhysBones at runtime.
Do not use Unity Constraints!
Unity Constraints are components provided by the engine that allow you to change the position, rotation and scale of transforms on your avatar based on one or more other transforms.
The engine's constraints are sorted based on the dependencies between them every frame, which means they can cause significant performance problems when enough of them exist at once. Use VRChat Constraints instead, because they're designed to provide better performance in the context of VRChat avatars.
VRChat will automatically convert Unity constraints to VRChat constraints at runtime.