Optimization also improves the chance that other players will see your avatar instead of a fallback.
Choose a Performance Target
VRChat ranks avatars from Excellent to Very Poor. Exceeding the limit in any single category lowers the avatar’s entire rank.
A practical target is Good for PC and Medium or better for mobile.
| Limit | PC Excellent | PC Good | Mobile Medium |
|---|---|---|---|
| Triangles | 32,000 | 70,000 | 15,000 |
| Texture memory | 40 MB | 75 MB | 25 MB |
| Skinned meshes | 1 | 2 | 2 |
| Material slots | 4 | 8 | 2 |
| PhysBone components | 4 | 8 | 6 |
| Bones | 75 | 150 | 150 |
View all current limits in the VRChat Performance Ranks documentation.
Check the SDK Build Panel
Open the VRChat SDK panel in Unity and select the Builder tab.
The SDK displays your avatar’s:
- Performance rank
- Triangle count
- Texture memory
- Material slots
- Mesh count
- PhysBones and contacts
- Download and uncompressed size
Check this panel regularly while editing. Disabled GameObjects and components still count toward the performance rank, so remove anything you no longer use.
Reduce the Triangle Count
Detailed avatar bases, clothing, hair, and accessories can quickly push the triangle count too high.
You can reduce triangles by:
- Removing geometry hidden beneath clothing
- Deleting unused accessories
- Simplifying tiny details
- Using Blender’s Decimate modifier carefully
- Rebuilding complex areas with cleaner topology
- Baking small details into normal maps
Avoid aggressive automatic decimation around the face, hands, and joints. These areas need enough geometry to deform correctly.
Combine Meshes
Each separate mesh adds rendering work. Skinned meshes are especially expensive.
Where practical, combine the body, clothing, and accessories into fewer skinned meshes using Blender. VRChat recommends aiming for one skinned mesh whenever possible.
Keep separate meshes only when they are genuinely needed for toggles or customization.
Reduce Material Slots
Every material slot generally creates another draw call.
Using the same material in several slots does not solve the problem. The number of slots on the renderer still matters.
To reduce material slots:
- Combine compatible textures into an atlas.
- Assign one shared material to the combined mesh.
- Remove duplicate and unused materials.
- Recheck every renderer in Unity.
For PC avatars, staying at eight material slots or fewer allows you to achieve a Good rank.
Optimize Textures
Textures are often the largest source of excessive VRAM usage.
A texture does not need to be 4K just because the original file was supplied at that size. Small accessories may only need a 512px or 1024px texture.
In Unity, select each texture and adjust:
- Max Size
- Compression
- Generate Mip Maps
- Platform-specific overrides
Use 2K textures only where the extra detail is visible. Combine smaller textures where practical and remove unused maps.
Remember that download size and texture memory are different. A small avatar download can still consume a large amount of VRAM.
Simplify PhysBones
PhysBones make hair, ears, tails, and clothing move naturally, but large setups can become expensive.
Improve them by:
- Removing PhysBones from details that barely move
- Shortening unnecessary bone chains
- Sharing colliders where possible
- Removing duplicate colliders
- Reducing the number of affected transforms
- Avoiding collisions unless they add something useful
Use PhysBones instead of the deprecated Dynamic Bones system.
Remove Unused Bones and Blend Shapes
Unused bones still add skinning work.
Delete bones left behind by removed clothing, accessories, or old PhysBone chains. Merge their weights into a suitable parent bone before deleting them.
You should also remove blend shapes that your avatar never uses. Keep only those required for facial expressions, lip sync, eye movement, and active customization.
Limit Particles, Lights, and Audio
Particles and lights can heavily affect performance in busy instances.
Avoid:
- Constantly active particle systems
- Large transparent particles
- Particle collision when unnecessary
- Excessive emission effects
- Real-time lights
- Long or high-quality audio clips
Mobile avatars cannot use several PC components, including avatar lights and audio sources. Treat these as optional PC features rather than core parts of the avatar.
Create a Separate Mobile Version
Do not upload the full PC avatar directly to Quest, Android, or iOS.
Create a mobile version with:
- Fewer triangles
- Fewer materials
- Smaller textures
- Simpler shaders
- Reduced PhysBones
- Unsupported effects removed
VRChat supports per-platform avatar overrides, allowing optimized PC and mobile versions to share the same avatar ID.
Current maximum avatar sizes are:
| Platform | Download size | Uncompressed size |
|---|---|---|
| PC | 200 MB | 500 MB |
| Android | 10 MB | 40 MB |
These are upload limits, not optimization targets. Staying far below them gives players a better experience.
Test Before Publishing
Use Build & Test to check the avatar inside VRChat before publishing it.
Look for:
- Broken animations
- Missing materials
- PhysBone clipping
- Poor mirror performance
- Excessive texture memory
- Features that fail on mobile
- Changes to the SDK performance rank
Test both PC and mobile versions when supporting multiple platforms.
Final Checklist
Before uploading your avatar:
- Check its performance rank
- Remove unused objects and components
- Reduce large textures
- Merge unnecessary meshes
- Reduce material slots
- Simplify PhysBones and colliders
- Remove unused bones and blend shapes
- Test animations and toggles
- Build a separate mobile version
- Back up the Unity project
Optimization does not mean removing everything that makes an avatar unique. Focus on features players will notice and remove the hidden waste they will not.