Recalculate performance ranks every minute, instead of counting disabled objects
H
Hugo Zink
Disabled game objects and components now (unfairly) count towards performance ranks. This is obviously a lazy fix for the fact that people could bypass the ranks with animations.
Instead of doing this, the game should re-run the performance rank calculations about once per minute. The game could gather an avatar's components (such as dynamic bones), put these in a list, and then iterate over this list again once every minute or so (the time could be slightly randomized to prevent abuse). This avoids having to use FindComponent for every scan (which is expensive) while still allowing the scans to be redone.
This should make it impossible to bypass the performance ranks using animations, but without punishing people for having disabled objects on their avatar.
Log In
Tupper - VRChat Head of Community
We've considered this method and it carries its own set of problems with it.
H
Hugo Zink
Can you be more specific? What kind of problems?
Demirramon
Tupper - VRChat Head of Community: Are the problems bad enough to outweight the ammount of creators having all of their avatars hidden by a lot of people for unfair/unrealistic calculations? If creators get too frustrated, they will leave. That impacts the community in a very bad way. I know it's easier said than done, but the current method is, with all respects, bad. Even the previous method was less unfair.
Observer.
It might be faster to just iterate over that cached list of gameobjects and components more often to just check if their active state has changed. Once the active state has changed on an object/component then you can either flag the avatar to be rerun the rank check at a set interval, like every minute or random time as suggested, or immediately run the full performance check on the cached component list so that only the enabled components will have an effect on the rank.
In combination with the fact that safety settings and other performance options outright remove or disables certain components it would be good to have a more dynamic check as long as performance permits it happening to get more accurate readings.
H
Hugo Zink
Minor correction: I meant "GetComponent" and its related family of methods rather than "FindComponent", although I'm sure that much should be obvious.