Skip to main content

Performance Ranks

The Avatar Performance Ranking System allows you to see how much a user's avatar is affecting performance via analysis of the components on that user's avatar. You can also use it on yourself to see how performant your avatar is.

This system is provided to inform users what is likely the most performance-heavy components on their avatars, and offer basic advice on what to look into when optimizing their avatar.

It is also used to drive the Minimum Displayed Performance Rank system, which is a way for users to decide what avatars they wish to show based on their Performance Rank.

This system is not meant to be an end-all-be-all authority on avatar performance, but is a good general guide to indicate if an avatar needs a bit more work to be performant.

Perf Ranks are not the final word!

Although the Performance Rank system does as best as it can to judge the "worst case" scenario of an avatar's performance, there are many ways to have a well-optimized avatar appear as Very Poor, and have a FPS hog rank as Excellent.

For the technically inclined: the Performance Rank system is based on a static analysis of the avatar's properties without any consideration paid to things like animators, shaders, texture resolution, pixel lights, and many more factors. However, it tends to provide an excellent litmus test for detecting problematic avatars 95% of the time!

Short Version

Aim for Good ranking. If you can't hit that, Medium is perfectly fine.

Creating avatars is already hard, and creating optimized avatars is even harder. It is a skill that takes a long time to build!

Keep in mind that many events, groups, and locations in VRChat may ask you to change your avatar if you show up in a Very Poor avatar. As such, even if you choose to use a Very Poor avatar in small instances with your friends, make sure you also have one meant for usage in instances with more people.

Your avatar affects everyone else's framerate, so be mindful of how your choices affect other people's experiences. Otherwise, they might see you as your Fallback!

Performance Ranking Icons

When you open your Quick Menu, you'll see icons appear on top of the nameplates of users.

The ranks are as follows:

IconPerformance RankDescription
imageExcellentThis is as good as you can get! The "Gold Star on the Fridge" rank.
imageGoodGood enough! A great target to aim for.
imageMediumDon't let the name fool you, Medium is plenty good. If you're here and don't want to work any farther up, you're fine.
imagePoorCould use some work.
imageVery PoorThis avatar has some serious performance problems. Since this rank is unbounded, it is very possible that your performance is suffering as a result of this avatar being visible.

Viewing Detailed Avatar Stats

If you click on a user with your Quick Menu open, you'll notice a new "Show Avatar Stats" button on the left side, displaying the icon of that user's Performance Rank.

avatar-perormance-breakdown.gif

If you click this icon, you can view the detailed Avatar Stats of that avatar. You can get to this for your own avatar by going to your Avatar Menu, clicking one of your avatars, and clicking the Avatar Stats button in the bottom left of the screen.

avatar-perormance-breakdown.gif

When you click the Avatar Stats button, you'll get a screen pop up with the details of avatar you're looking at, or your own avatar (if you clicked the button in the Avatar tab).

avatar-perormance-breakdown.gif

The color of the text matches the rank that the particular stat "drags" the rank down to.

You'll also see a "before and after" in the form of the "Original" and "Perf Filtered" lines. If you're using the Minimum Displayed Performance Rank system, you can see what the stats were before and after the system removed components. In the case of the Minimum Displayed Performance Rank system blocking an avatar for performance reasons, you'll only see the original stats.

In the example given above, Lights and Particle Systems are disabled due to exceeding the limit defined. Because Particle Systems employ at least one material each, the count of materials from Particle Systems is also subtracted from the pre-filtered avatar.

You can also see that we link to our Documentation, in particular our Avatar Optimization Tips.

Avatar Performance Ranking Stats

Here is a listing of all of the statistics that the system looks at and their description.

Bolded stats will cause the avatar to be fully blocked if they exceed the Minimum Displayed Performance Rank. If other stats (except for bounds) exceed the Minimum Displayed Performance Rank the avatar will only be partially blocked. The avatar will be shown with any components related to the exceeded stats will be removed.

For example with the Minimum Displayed Performance Rank set to Poor an avatar with 9 Trail Renderers (Very Poor) will be displayed with all of its Trail Renderers removed. Refer to Minimum Displayed Performance Rank for more information.

Avatar QualityQuality Description
PolygonsThe polygon count of the model in question, counted in triangles.
Bounds SizeThe total size of the avatar. If this is really huge, that user probably has a large animation on the avatar that isn't showing all the time.
Important note: Bounds Size will not cause the avatar to be blocked, even if it is below the "Minimum Displayed Performance Rank" setting.
Texture MemoryThe amount of memory estimated to be in use by the avatar's textures. These textures occupy space in both system RAM and in the video card's memory.
Skinned MeshesThe number of Skinned Mesh Renderer components on the avatar.
Basic MeshesThe number of (non-skinned) Mesh Renderer components on the avatar.
Material SlotsThe number of material slots on the avatar. Material slots are the slots on the mesh where you fit materials in. This is what counts toward Submesh creation, which incurs further draw calls. Keep in mind that Particle Systems will use one material slot, Particle System with trails use two, and Line Renderers use one material slot.
PhysBones ComponentsThe number of PhysBone components on the avatar.
PhysBones Affected TransformsThe total number of transforms affected by PhysBones components on the avatar.
PhysBones CollidersThe number of PhysBone collider scripts on the avatar.
PhysBones Collision Check CountThe sum of how many PhysBone transforms each collider can affect. This can count transforms twice or more, because a single transform can be affected by multiple colliders.
Avatar Dynamics ContactsThe number of Avatar Dynamics Contacts on the avatar.
AnimatorsThe number of Animators on the avatar. Important note: This will always be at least 1 due to the root animator being counted. This means that for the Excellent ranking, you can have no additional animators.
BonesThe number of Bones in the avatar's rig.
LightsThe number of Light components on the avatar.
Particle SystemsThe number of Particle System components on the avatar.
Total Particles ActiveThe sum of maxParticles across all particle systems on the avatar.
Mesh Particle Active PolysThe total number of polygons of Mesh Particles emitted by Particle Systems that are active. In other words, maxEmission * meshParticleVerts.
Particle Trails EnabledIf any Particle Systems on the avatar have Particle Trails enabled, this will be True.
Particle Collision EnabledIf any Particle Systems on the avatar have Particle Collision enabled, this will be True.
Trail RenderersThe number of Trail Renderers on the avatar.
Line RenderersThe number of Line Renderers on the avatar.
ClothsThe total number of Cloth components on the avatar.
Dynamic Bone Components(Deprecated) The number of Dynamic Bone scripts on the avatar.
Dynamic Bone Transforms(Deprecated) The number of transforms animated by any given Dynamic Bone script on the avatar.
Dynamic Bone Colliders(Deprecated) The number of Dynamic Bone Collider scripts on the avatar.
Dynamic Bone Collision Check Count(Deprecated) The total number of DynamicBone transforms affected by the Dynamic Bone Collider scripts on the avatar. This can count transforms twice or more, because a single transform can be affected by multiple colliders.

Avatar Performance Ranks - Value Maximums per Rank

Below, you'll find the limits for each of the Performance Ranks. If you go above these numbers for any category, you'll be bumped into the next rank.

For example (on PC), if your avatar has 2 Skinned Meshes, your avatar will be ranked as Good, as that exceeds the rating for Excellent, but does not exceed the rating for Good.

All GameObjects and Components are counted!

All GameObjects and Components, including those that are currently disabled, count towards the Avatar Performance Rank.

Mesh Read/Write Disabled

If you disable Mesh Read/Write on any mesh on the avatar (including particle systems), the "Polygons" count will read "Mesh Read/Write Disabled" and the avatar's Performance Rank will be immediately downgraded to "Very Poor" regardless of the actual triangle count on the avatar.

The SDK warns you of this and will require that you fix it before you upload.

PC Limits

On PC, the default Minimum Displayed Performance Rank level is set to "Very Poor". Currently, no avatars will be blocked by default due to performance ranking on PC, unless you've enabled the Minimum Displayed Performance Rank system.

Triangles (polygons) are a somewhat special case-- if you are 32k or less, you are marked as Excellent. Any number higher than 32,000 but lower than 70,001 will be marked as Good (unless some other stat pulls you down). If you exceed 70,000 polygons, the avatar will be marked as Very Poor immediately.

Avatar QualityExcellentGoodMediumPoor
Polygons32,00070,00070,00070,000
Bounds Size12.5m x 2.5m x 2.5m4m x 4m x 4m5m x 6m x 5m5m x 6m x 5m
Texture Memory40 MB75 MB110 MB150 MB
Skinned Meshes12816
Basic Meshes481624
Material Slots481632
Dynamic Bone Components041632
Dynamic Bone Transforms01632256
Dynamic Bone Colliders00432
Dynamic Bone Collision Check Count008256
PhysBones Components481632
PhysBones Affected Transforms1664128256
PhysBones Colliders481632
PhysBones Collision Check Count32128256512
Avatar Dynamics Contacts8162432
Animators141632
Bones75150256400
Lights0001
Particle Systems04816
Total Particles Active030010002500
Mesh Particle Active Polys0100020005000
Particle Trails EnabledFalseFalseTrueTrue
Particle Collision EnabledFalseFalseTrueTrue
Trail Renderers1248
Line Renderers1248
Cloths0111
Total Cloth Vertices050100200
Physics Colliders0188
Physics Rigidbodies0188
Audio Sources1488

Android Limits

Default Performance Rank Blocking

On Android (phones, tablets, and Meta Quest), the Minimum Displayed Performance Rank is set to Medium by default. This means you will not see any avatars ranked as Poor or Very Poor.

You can set your Performance Rank Block level to Poor to allow the display of Poor avatars. However, you cannot set your Performance Rank Block level to "Very Poor".

For example, if an avatar on Android exceeds 20,000 triangles (polygons), it will not display by default in the application. These avatars can be forced to show by clicking on each user and clicking "Show Avatar".

Notably, there is a hard cap on Avatar Dynamics systems on Android. It cannot be bypassed by using "Show Avatar". This is the hard cap:

If this cap is exceeded on Android, all Avatar Dynamics components will be removed from the avatar, even if Show Avatar is enabled.

danger

"Show Avatar" for Very Poor avatars functionality may be removed in the future, and Very Poor avatars may be removed from Android entirely. Please keep this in mind when creating avatars for VRChat on Android.

Avatar QualityExcellentGoodMediumPoor
Polygons7,50010,00015,00020,000
Bounds Size12.5m x 2.5m x 2.5m4m x 4m x 4m5m x 6m x 5m5m x 6m x 5m
Texture Memory10 MB18 MB25 MB40 MB
Skinned Meshes1122
Basic Meshes1122
Material Slots1124
Animators1112
Bones7590150150
PhysBones Components20468
PhysBones Affected Transforms20163264
PhysBones Colliders204816
PhysBones Collision Check Count20163264
Avatar Dynamics Contacts224816
Particle Systems0002
Total Particles Active000200
Mesh Particle Active Polys000400
Particle Trails EnabledFalseFalseFalseTrue
Particle Collision EnabledFalseFalseFalseTrue
Trail Renderers0001
Line Renderers0001

Removed Categories

The following categories are disabled on Android since they can never appear on avatars:

  • Lights
  • Cloths
  • Total Cloth Vertices
  • Physics Colliders
  • Physics Rigidbodies
  • Audio Sources
  • Dynamic Bone Components
  • Dynamic Bone Transforms
  • Dynamic Bone Colliders
  • Dynamic Bone Collision Check Count

These values may still appear in the in-app stats readout, but will always be zero.

Minimum Displayed Performance Rank

You can choose to manage avatars based on their Avatar Performance Rank. This option is available in the "Performance Options" menu, accessible as a button in the top-right of the Safety tab in the main menu.

When you choose a Performance Rank in this menu, all avatars that are below that level will have their components/display managed as described below.

ParameterDescription
PolygonsAvatar replaced with Fallback
Bounds SizeNo change
Texture MemoryAvatar replaced with Fallback
Skinned MeshesAvatar replaced with Fallback
Basic MeshesAvatar replaced with Fallback
Material SlotsAvatar replaced with Fallback
Physics Bone Components, Transforms, Colliders, CollisionCheckCount, or ContactsAll PhysBone, PhysBone Collider,and Contact components removed
Dynamic Bone Components or TransformsAll Dynamic Bones components removed
Dynamic Bone Colliders or Collision Check CountAll Dynamic Bone Collider components removed
AnimatorsAll animators (aside from root animator) removed
BonesAvatar replaced with Fallback
LightsAll Lights removed
Particle SystemsAll Particle Systems removed
Total Particles ActiveAll Particle Systems removed
Mesh Particle Active PolysAll Particle Systems removed
Particle Trails EnabledAll Particle Systems removed
Particle Collision EnabledAll Particle Systems removed
Trail RenderersAll Trail Renderers removed
Line RenderersAll Line Renderers removed
ClothsAll Cloth components removed
Total Cloth VerticesAll Cloth components removed
Physics CollidersAll Physics Colliders removed
Physics RigidbodiesAll Physics Rigidbodies removed
Audio SourcesAll Audio Sources removed

Minimum Displayed Performance Rank on PC

On VRChat for PC, the Minimum Displayed Performance Rank is set to "Very Poor" by default. This means that, by default, no avatars will have their components or display affected for performance reasons on PC. If you wish to change this, you can choose between "Medium", "Poor", or "Very Poor" options.

Avatar Performance Rank Blocking on Android

On VRChat for Android, the Avatar Performance Rank Block is set to "Medium" by default. You can choose to change this to "Poor" to see avatars of that rank, but your performance may suffer as a result.

You cannot disable the Avatar Performance Rank Block system on Android. In other words, avatars that are ranked as "Very Poor" will always have their display managed VRChat for Android, and may not display at all.

No matter what setting you choose, if the Avatar Dynamics component limits are exceeded on Android, all of those components will be removed. In short, there is a hard cap for Avatar Dynamics components on Android avatars.

Overriding Individual Avatars

danger

"Show Avatar" for Very Poor avatars functionality may be removed in the future, and Very Poor avatars may be removed from Android entirely. Please keep this in mind when creating avatars for VRChat on Android and Meta Quest.

You can choose to override the the entirety of the system (and the Safety system) by selecting "Show Avatar" on each user you wish to show.

Footnotes

  1. Bounds Size is determined by the maximum size of all components on your avatar. Trail and Line Renderers do not count for this calculation. 2

  2. If the Very Poor value is exceeded on Android, no matter the current "Show Avatar" state of the avatar, all Avatar Dynamics-related components will be removed. 2 3 4 5