From my understanding of the current fall-back system: The entire avatar bundle is first downloaded and performance is determined by your game client, before being replaced with a fall back avatar, with their original assets unloaded from your video memory.
But in doing so there are two issues:
1) For every avatar that exceeds the minimum performance rank, you have to wait for the download to finish before it can be determined.
2) Your video ram is constantly being loaded and unloaded during this process.
In large worlds, such as those used for popular music events or that have high user traffic, where there is constant leaving and joining, this can be quite impactful, should a lot of the users exceed the desired minimum performance rank. Often it is the case that users may need to wait up to several minutes for avatars to finish downloading on slower connections, only for the avatar assets to be thrown out.
Currently hundreds of communities in VRChat are resorting to enforcing minimum ranking rules as part of these type of events, which are often contentious, causing conflict and resulting in constant moderation of users.
Could there not be a system where before the full bundle is downloaded and loaded, your game client can check to see if it should do or not via the use of a smaller "meta" file, pointer or tag against the blueprint id?
I envision two possible places this could be done:
1) At the time of upload, the VRChat SDK in Unity creates the required rating reference based on what is observed in the build panel.
This has little to no impact to VRChat's infrastructure, as this is computed by the user. However, you run the risk of the user spoofing their rating and circumventing the system, as this works on trust.
Should you also have a situation where you initially load an avatar that is tagged with a performance rating better than it actually is, your game client would still use the fall-back, once it has inspected the ranking for itself.
At this point you are still no worse off than you were before, but users with mismatching rankings should probably be reported for breaking ToS.
2) Do not trust the user to supply this information, but instead compute it on VRChat end and attach the determined ranking to the blueprint id.
This does come at cost to VRChat's infrastructure, and may be vastly more complicated to do on assets once bundled up, but avoids user spoofing the system.
I would appreciate any thoughts or comments on this idea, please note that this does not address the issue of ideal performance metric tuning, which should be kept in their own separate canny threads.