Guides

Avatar Dynamic Bone Limits

Dynamic Bone is a very performance-heavy component, and it is easy for an avatar creator to overuse the component. VRChat has provided a method by which users can limit the number of Dynamic Bones permitted on avatars.

Toggling the Dynamic Bone Limits

You can access the Dynamic Bone Limits toggle by going into the Safety tab and clicking on the "Performance Options" button in the top right. The location in the UI is not final and will change as we iterate on further performance options.

For clarity, this system is optional and can be disabled with a single checkbox.

Clicking the Performance Options button will bring up a pop-up with details of the current options available. The only option at this time is the Dynamic Bone Limits system.

Clicking "Limit Dynamic Bone Usage" will toggle the system on and off. Closing the window will apply the changes. This will not require a reload of the avatars-- the change is applied immediately.

You can also view the current limits set on the right side of the window, as well as access this documentation via the View Documentation button.

If an avatar exceeds these values, all related components snap to their "initial position" are disabled.

If an avatar enables/disables Dynamic Bone components via an animation that brings it above/below the limit, the components will stop updating/start updating accordingly.

Value NameDescriptionDefault Value
Max Affected TransformsIf an avatar has more Dynamic Bone Affected Transforms than is listed here, all Dynamic Bone and Dynamic Bone Collider components will be disabled.32
Max Collision ChecksIf an avatar has more Dynamic Bone Collider Checks than is listed here, all Dynamic Bone Collider components will be disabled.8

For more detailed descriptions on what precisely these values indicate, check out our documentation on the Avatar Performance Ranking System.

The default limits were matched with the Medium ranking in Avatar Performance Ranks. So, if you are marked as Poor or Very Poor due to your Dynamic Bone components, they will be disabled.

If you find yourself over these limits and still want people with default settings to see your Dynamic Bones, check out our Avatar Optimization Tips.

Modifying the Dynamic Bone Limits

If you like, you can define your own limits for the Dynamic Bone Limits system. Customizing these numbers works similarly to the Avatar Particle System Limits, and the settings live in the same file.

🚧

Requires Restart

Editing these values will require an application restart before they take effect.

You can override the default values by adding or editing the config.json file in the following directory:

%AppData%\..\LocalLow\VRChat\vrchat

If the file doesn't exist, create it and name the file as such: config.json

Ensure that the file extension is json, and not txt. It is best to edit the configuration file with an editor like Notepad++.

Dynamic Bone Limits Configuration Options

Here are the variables you can change for the Dynamic Bone Limits System.

πŸ“˜

Disable Completely

Setting values to 0 will remove all relevant Dynamic Bone components on all avatars no matter the result of the component scan.

Variable NameDescriptionDefault
dynamic_bone_max_affected_transform_countChanges the limit of Dynamic Bone Transforms. Any avatar that exceeds this amount will have all Dynamic Bone and Dynamic Bone Collider components set to non-updating.32
dynamic_bone_max_collider_check_countChanges the limit of Dynamic Bone Collider Transform Checks. Any avatar that exceeds this amount will have all Dynamic Bone Collider components set to non-updating.8

Configuration Examples

Here are​ a few examples you might use for your config.json file. You can hover over the code blocks and click "copy" to copy them to your clipboard. From there, you can paste them directly into the config.json file. Keep in mind that you'll need to restart VRChat if you change the limits while you're playing.

As an example, your config.json set to disable all Dynamic Bones would look like this. Keep in mind this ignores any settings from the Avatar Particle System Limits configuration.

{
  "dynamic_bone_max_affected_transform_count" : 0,
  "dynamic_bone_max_collider_check_count" : 0
}

If you use the default Avatar Particle System config file, your config.json would look like this:

{
	"betas": [
		"particle_system_limiter"
	],
	"ps_max_particles": 50000,
	"ps_max_systems": 200,
	"ps_max_emission": 5000,
	"ps_max_total_emission": 40000,
	"ps_mesh_particle_divider": 60,
	"ps_mesh_particle_poly_limit": 50000,
	"ps_collision_penalty_high": 50,
	"ps_collision_penalty_med": 30,
	"ps_collision_penalty_low": 10,
	"ps_trails_penalty": 10,
	"dynamic_bone_max_affected_transform_count" : 0,
	"dynamic_bone_max_collider_check_count" : 0
}