Physbones
PhysBones is a set of components that lets you add secondary motion to avatars, permitting you to add motion to things like hair, tails, ears, clothing, and more! Using these well will make your avatar seem more dynamic and real.
PhysBones is a replacement for Dynamic Bones. While both systems share a lot of concepts, there are some major differences with PhysBones, so not all avatars may directly translate over to VRChat’s system.
An example of how to use Physbones can be found in the SDK under VRCSDK\Examples3\Dynamics\Robot Avatar
.
VRCPhysBone
Defines a chain of bones to be animated with PhysBones. These can be used to simulate soft-body and secondary motion like hair, tails, floppy ears, and more! It has many configuration options, and can be set up in many ways.
Additionally, PhysBones can be interacted with by you and other people! If you've given the other user permission, other people can grab PhysBones set up on your avatar, and pull the Trigger while holding the PhysBone to "Pose" it and hold it in position. You can also disable this in configuration to not allow posing, not allow grabbing, or allow no collisions at all.
Although not designed as such, PhysBones also serves as a reasonable cloth substitute until such time that we implement our own Cloth component.
Versions
You can now select the version of VRCPhysBone component you would like to use directly on the component. By default the latest version will be chosen when creating a new component. Existing avatars will continue to use their previous version unless manually updated and re-uploaded.
Version 1.0:
- The base version of the VRCPhysBone component.
Version 1.1:
- Squishy Bones update, allowing for bones to squish and length to be affected by motion.
- Gravity now acts as a ratio of how far the bones will rotate when at rest. A positive Pull is required for bones to move in the direction of gravity.
- Stiffness now acts as a ratio which keeps a bone in it's previous orientation.
Transforms
Root Transform
- The transform where this component begins. If left blank, we assume we start at this game object.
Ignore Transforms
- List of ignored transforms that shouldn't be affected by this component. Ignored transforms automatically include any of that transform's children.
Endpoint Position
- Vector used to create additional bones at each endpoint of the chain. Only used if the value is non-zero. Usually you'll want to increase this along +Y, which points "up" the bone.
Multi-Child Type
- Behavior of the root bone when multiple bone chains exist. This has three modes:
If set to Ignore, the root bone will not move, and will ignore physics. Useful for things like hair, since you can use one Physbone component on the root to affect all of the hair bones!
If set to First, the root bone will form one continuous chain with the first bone chain in the hierarchy. Every other chain will still work, but they will start from the first bone in each respective chain rather than the root like the first chain.
If set to Average, the motion of the root bone will be the average of all of the other chains. This means that the base of each chain will be able to move.
If you are using a single root bone, or a single root bone with several children (but no grandchildren), you must define an endpoint position!
For example, if you put the PhysBone component on any of the RootBone
s below, you must define an Endpoint Position in order for PhysBones to work. This is different from Dynamic Bones!
Single Bone
RootBone
Multiple Children, Single Root
RootBone
ChildBone1
ChildBone2
ChildBone3
ChildBone4
You can also address this by adding "end bones" after each ChildBone
, but that involves editing the armature.
Forces
Integration Type defines the type of math used to simulate the motion of any transform affected by this component. Depending on which you choose, your options available in the Forces section will change. You can choose between two:
Simplified
is a more stable method that feels a bit slower and less reactive to external impulses and forces, but is easier to configure.Advanced
is less stable, but allows more complicated configurations, and tends to be more reactive to external impulses and forces.
With default settings, both of these modes act fairly similarly, but adjusting the settings and testing them out will quickly reveal how they differ.
Most (if not all) of the options below allow for Curves by pressing the C button next to the slider. Curves let you adjust the value over the length of the bone chain, and allow for VERY complicated setups within bone chains!
In fact, most PhysBones settings allow for the use of Curves! Learn how to use them and your PhysBones will look amazing!
Pull
- Amount of force used to return bones to their rest position.
Spring
- Amount bones will wobble when trying to reach their rest position. Only available in Simplified Integration Type.
Momentum
- The amount bones will wobble when trying to reach their rest position. Only available in Advanced Integration Type. Despite the description being the same, the effect is slightly different than Spring.
Stiffness
- The amount bones will try to stay at their resting position. Only available in Advanced Integration Type.
Gravity
- Amount of gravity applied to bones. Positive value pulls bones down, negative pulls upwards.
Gravity Falloff
- Only available if Gravity is non-zero. It controls how much Gravity is removed while in the rest position. A value of 1.0 means that Gravity will not affect the bone while in rest position at all. This allows you to have the effects of gravity when the bone is rotated off the initial position without affecting the bone's rest state.
One way to use the Gravity Falloff parameter is that if your hair is modeled as already being in the pose you want when standing up normally, you can use 1.0 gravity falloff. That way gravity won't affect you when you're just standing there, and your hair will rest in its modeled position. If your hair is modeled 45 degrees straight out and you want it to be affected by gravity enough to have a nice curve (but not completely straight out or completely straight down), the slider allows you to fiddle with it and use like 0.5-0.8 to only have a fraction of gravity at rest pose.
Immobile Type
changes how Immobile
works.
If set to All Motion, Immobile
reduces any motion as calculated from the root transform's parent. This is the default mode for new PhysBones and converted Dynamic Bones. In this mode all PhysBone movement in either scene-space or playspace will be dampened by the Immobile
factor.
If set to World (Experimental), Immobile
negates only positional movement from the reference of the scene root transform. Motion via animation or IK still affects the bones normally. This mode may change in the future!
This means that moving around in your playspace will still affect your PhysBones' movement as normal, but locomoting (pushing on your joystick to move) will have its movement dampened by the Immobile
factor.
Limits
Setting Limits allows you to limit the amount that a PhysBone chain can move. This is useful when you don't want hair to clip into your head, and is far more performant than a collider!
Additionally, when configuring options for Limits, a visualization of those limits will appear in the Scene view when you have the PhysBone chain selected. These can be extremely helpful when fine-tuning Limits!
Limit Type
has several modes. All of them allow for the adjustment of Rotation
in terms of Pitch
, Yaw
, and Roll
-- alternately, along the X, Y, and Z axes respectively.
None
None
means no limit is enabled on this bone chain. There are no configuration options.