0

How to create a VRChat avatar

A step-by-step guide for creating an avatar for VRChat.

Optimization

How do I improve my avatar's performance?

We will be honest - improving your avatar's performance is time consuming and can be difficult. However you, the community and the people you play VRChat with will thank you. It will make the game run smoother and feel faster.

Need help? Please ask in our Discord server's #vrchat-help channel

Read VRChat's guide

Please read VRChat's official guide for optimizing your avatar. It has some great recommendations that we try not to repeat in this guide.

Performance Ranking

VRChat has a "performance ranking" system which identifies issues with your avatar and labels it from "Very Poor" performance to "Excellent" performance.

This system works most of the time however the following are not taken into consideration:

  • VRAM usage
  • download size
  • blendshape count

We strongly recommend that you address each of these things as well as the basic optimization steps.

Too Many Meshes

The performance of your avatar gets worse with the number of meshes you have. Even worse if they have bones. Use a tool to combine them together.

Unity

You can use Polytool to combine your meshes inside of Unity:

Blender

You can CATS to combine meshes together in Blender:

Too Many Polygons

3D models are rendered on the screen using thousands of polygons - usually 3 coordinates in a 3D space that are connected together and filled in to render a triangle. With enough triangles you can render a perfect circle or a face or anything.

The only way to reduce your polygon count is by decimating your meshes. Decimation in 3D modelling is reducing the number of polygons in a mesh. You can view the polygon count in the VRChat SDK:

The polygon count of the Canis Woof by Rezillo Ryker.

Unity

You can use Polytool to decimate your meshes inside of Unity:

There are other tools that we haven't tested which might work too:

Blender

You can use Blender to decimate your meshes then import them back into Unity. By default Blender cannot decimate a mesh with shape keys so we recommend you use the CATS plugin:

Too Many Materials

Each material on your meshes greatly impacts performance. We recommend you merge your materials and their textures together.

Unity

You can use Polytool to combine materials inside Unity:

There are other tools that we haven't tested that might work too:

Blender

You can use CATS to combine materials (called "texture atlas"):

PhysBones

Please stop using Dynamic Bones. They are CPU-bound so slow down the performance for everyone. PhysBones use your GPU which is better.

The VRChat SDK can automatically convert your bones to PhysBone. Please use it and tweak the new bones as necessary.

Quest

On Quest the performance system is much harder. A big challenge is there is a hard limit of 10 MB per avatar.

Very Poor ranking avatars will never be shown to Quest users unless they manually show your avatar. Your fallback avatar will be shown instead.

Textures

Textures have a large impact on final output size. Enable compression and lower the resolution of your textures to 1024x1024 or below.

Combine textures together (texture atlassing). See the "Too Many Materials" section.

Meshes

Some meshes might be too large in filesize or in polygon count. You should decimate these meshes or remove them completely.

Combine meshes together. See the "Too Many Meshes" section.

Tools

There are several community tools to help you make your avatar Quest compatible:

VRAM

VRAM is video RAM which is the amount of memory on your video card. When VRChat loads your avatar into the game it stores it into your VRAM in your video card. When you reach the limit of VRAM, VRChat will start storing avatars on your ordinary RAM which is very slow.

The VRAM capacity of Nvidia 30 series GPUs.
The VRAM capacity of AMD RX 6000 series GPUs.

Aim for 200 MB or less of VRAM. If each avatar in a world of 30 players is 200 MB then at least 6 GB of VRAM will be consumed.

Determining Your VRAM Usage

The only way to determine your avatar's VRAM usage is to use a Unity plugin or a mod in game (which we will not link here).

Lowering VRAM Usage

  • reduce the resolution of your textures
  • reduce the mesh size, material count, bone count, etc.

Download size

Although many users have a fast internet connection (in the U.S. the national average is 42.86 Mbps or 6.1 megabytes per second) some do not so you should consider the download size of your avatar.

Aim for 40 MB or less for your avatar. A 20 MB avatar will take 3.3 seconds to download with an average connection and everyone has to download your avatar when they join (as well as everyone elses!).

Textures

Textures have a large impact on final output size. Enable compression and lower the resolution of your textures to 2K (2048x2048) or below to improve your filesize.

Any masks or maps in your shaders will be bundled too. Set those additional textures to something very low like 1024x1024 or below.

Blendshape Count

VRChat doesn't seem to care about the blendshape count for skinned meshes. It usually isn't a big deal unless your avatar has a lot. If that is the case, consider "baking" blendshapes into your mesh (making the blendshape permanent then deleting it).

Blender

You can bake blendshapes in Blender:

Tips and Tricks

Disable "Update when Offscreen"

Meshes have a setting called "Update when Offscreen". If you disable this then your mesh will be invisible unless players are looking at it which saves VRChat from rendering it.

Remove unused animations

If you do not use an animation or a layer in your animator either delete it or set the layer weight to 0. Unity will ignore the animation.