Developer Update - 16 February 2023

Until there’s a mirror active and syncing physbone transforms to the mirror clone induces an excessive amount of GC calls, tanking CPU frametimes (assuming the performance tanks in game for the same reason it does in Unity with Av3Emulator when the mirror clone is active)

How “expensive” is it? Could it be made into a low priority background task, perhaps limited to scanning a limited number of objects/components per frame until finished, that executes periodically only for the avatar user, who will then communicate the current ranking to others? Additionally/Alternatively to periodic checks, a new animator state component that would trigger a rescan could be useful (though also open to abuse unless there is periodic scanning or unless the component is “injected” by the SDK at build time into all animation clips that toggle objects/components, some third party tools do something similar for other features)

Edit: Another, likely higher performance alternative - Insert a new semi-dummy component at runtime to every game object with any component that affects performance ranking (mesh, skinned mesh, particle emitters, etc), presumably that component will not be targetable by animation clips, so while it’s enabled consider the other components enabled, and while disabled consider them disabled (since it’s presumably disabled due to the game object being disabled, could add another check to verify that), the same logic could also be included with every VRC component so when a game object contains multiple VRC components (like physbones with different root/ignore transforms), turning some of them off without the game object would still allow the performance ranking to be updated.

2 Likes