Collision checks counted incorrectly
complete
H
Hugo Zink
Ever since the performance ranks were introduced, "dynamic bone collision checks" have been counted wrongly.
Dynamic bone does not actually calculate collisions for the root bone (the first bone in the chain). The root bone does not do a collision check at all. VRChat still counts it, however. This means all "collision checks" stats are off by one (per component). While this is already bad for the performance ranks themselves, it becomes a problem when dynamic bones are being automatically disabled over it.
Please correct this off-by-one issue ASAP.
Log In
Tupper - VRChat Head of Community
complete
This was corrected in a previous release.
The collision check count doesn't count the root bone. However, the root bone is still counted as a simulated bone because its transform is still modified, and therefore has a performance impact.
Kasaishiri
Transforms don't count correctly either, i have a few models with under the limit and they don't work with the default limiter. I use exclusions and end offsets on my dynamic bones.
Tupper - VRChat Head of Community
tracked
hakanai
Can confirm. Specifically "affected transforms" is miscomputed, and that error carries over to "collision checks", making it much easier to go over the limit without actually going over the limit. :(
Simple test case:
* Empty game object 1
* Empty game object 2
Dynamic bone script:
* Root = Empty game object 1
Expected affected transforms: 1
Actual affected transforms: 2
H
Hugo Zink
hakanai: that part is actually counted correctly. The simulation runs on the root bone and all transforms underneath. It's only collision checks that are counted incorrectly. The devs must have thought that the collision checks also apply to the root bone.
If you have a chain of dynamic bone transforms, the root bone will rotate by itself. It is simulated as much as everything else is.
hakanai
Hugo Zink: Do you have a source for that claim? When I read the code in UpdateParticles1(), it's starting the loop from 0 but it's clearly skipping the root bone because p.m_ParentIndex would be 0. In UpdateParticles2(), it's starting the loop from 1. In SkipUpdateParticles, it's starting the loop from 0 but again it's skipping the root bone.
Can you point to a line of code where it doesn't?
H
Hugo Zink
hakanai: actually you're right, I guess the root bone in general is counted when it shouldn't be.
Tupper - VRChat Head of Community
This is not relevant specifically to the Open Beta, so I am moving it to Bug Reports.