Performance in VRChat is something that all creators must struggle with ? creating quality content while having the minimum impact on framerate is extremely important, especially when it comes to VR applications.
Dynamic Bones is a third-party component that VRChat supports. It permits ?secondary motion? in characters by simulating a hierarchical particle system on avatars. In short, it lets you have things like a tail that moves with your character?s movement, hair that sways as you tilt your head, and other similar effects. You also have the option to use Dynamic Bone Colliders, which let you interact with parts of your avatar you?ve set up appropriately.
However, Dynamic Bones has been a concern for VRChat performance for quite some time. They are one of the most resource-intensive components in wide use by VRChat users. Optimizing the component itself is difficult due to several technical, logistical, and other reasons (but is still something we plan on looking at).
Using various methods of delivering information and inspecting content, we?ve been trying to illustrate the need for best practices with Dynamic Bones. The latest step in this effort is the implementation of a customizable, toggleable Dynamic Bone Limitation option.
Dynamic Bone Limit System
This UI isn?t final, and will likely change a little bit before we go Live.
This pop-up can be found in the top-right of the Safety tab, under the ?Performance Options? button.
Find this in the top right of the Safety tab.
This ?Performance Options? button is currently available in the Open Beta, and will be going Live in our next release. If you?d like the full technical rundown, check out our documentation on the feature here.
How it Works
When an avatar loads, it is checked against the Dynamic Bone Limitation values. These values default to 32 ?Affected Transforms? and 8 ?Collision Checks?. You can customize these numbers by editing a configuration file. These limits affect all loaded avatars, including your own.
The defaults were chosen to match up with the Avatar Performance Ranking System?s Medium ranking. In short, if an avatar is ranked as Poor or Very Poor as a result of their Dynamic Bones, those components will be affected by the default settings.
Affected Transforms is the number of transforms affected by all Dynamic Bone components on the avatar.
Collision Checks is the number of Affected Transforms that can be acted on by all Dynamic Bone Collider components on the avatar. This is additive, so if two Colliders can affect one Transform, it counts as two Checks.
You can disable or enable the system at will with a simple check-box, and all avatars will have the new settings applied.
If any given avatar is found to violate the limits set, all relevant Dynamic Bone components on the avatar are disabled. For example, if an avatar is below the limit for Affected Transforms, but is above the limit for Collision Checks, all Dynamic Bone Colliders are disabled. However, if an avatar exceeds the limit for Affected Transforms, all Dynamic Bone and Dynamic Bone Collider components are disabled (as the colliders will have nothing to interact with anyways).
Additionally, any changes to Dynamic Bones scripts (such as animating them on/off) will recalculate the total number of transforms affected. If these new numbers go above or below the limit, the components will be disabled or enabled accordingly.
Set your Limits
As mentioned previously, you can choose to customize these limits. This is done (for now) in a configuration file that lives in the VRChat Application Data folder. You can find out how to create/access this file in our documentation. Changing these limits will require an application restart to take effect.
We realize that this is not an ideal method for you to change the limits on the fly. This behavior will be changed with future iterations, and users will be able to modify the limits in-app without requiring an application restart.
As an aside, setting your limits to zero will remove all Dynamic Bone-related components on all avatars regardless of the results of scans.
Looking to the Performant Future
The Dynamic Bone Limitation system is just the first step in what we?re calling the Performance System. Much like the Safety System, it will allow users to take control of what they see in VRChat. We see settings like this no differently from things like choosing a screen resolution or a texture quality in any given game or application ? they are your choice and determine the experience from your point of view.
If you want to have a high framerate at the expense of lowered fidelity, you should be able to choose that. If you wish to lose a bit of performance to gain some more features, you should also be able to choose that.
Much like most of VRChat, we plan on iterating more on this feature as we move forward, adding features and refining already-implemented systems. Keep an eye on our changelogs and blog posts to see what we?re up to.