Stop downloading avatars that exceed minimum performance rank
complete
Towneh
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.
Log In
Fax
complete
Scout - VRChat Head of Quality Assurance
tracked
FairlySadPanda
On #1, SDK-side trust gives people a trivially easy way of avoiding it, which is extremely bad for a trust-and-safety feature.
On #2, there's no sane way for VRChat to wire up Unity headless clients to do the validation because Unity is a terrible engine.
Story
FairlySadPanda: make it only matter for the initial process that already occurs, we already have a client-side check, so making a bypass for the sdk just makes it fallback to its sub-optimal current state. The feature would work perfectly fine to anyone who doesnt modify their SDK, which would be the massive majority, also happy 1 and a half year bump
Towneh
I should also add that another great benefit of having a method to know avatar metrics in advance of downloading it, is allowing the user to see the rating of another user whilst they are actively being file size blocked.
File size blocking prevents the avatar from being performance measured by your client.
Being able to see another users "measured rating" whilst actively blocking the download, because your suffer poor internet speeds, is extremely handy for those in the position of having to enforce community rules as an instance host.
As to how you would be able to identify what is "measured rating" and what is "actual rating" (from your client determining this), perhaps simply an asterisk in the corner of the rating icon.
Swingly
There's a problem with this.
VRChat calculates the performance rank locally when the avatar loads, there's nothing on the server storing the avatar's performance rank.
This makes it impossible to know the rank before it loads sadly.
But yea seems like you're aware, just pointing it out.
Fox P McCloud
Being able to stop an avatar download after it starts would also be a huge benefit.
Sometimes a 100+ MB avatar is starting to download, but if you hide it, turn on safe mode, or what have you, it'll continue to download.
This is especially frustrating when Everyone's avatar is 10-30 MB, but you've got one guy who's slowing the entire process down who you'd maybe like to load last or not at all (on a particular instance).
Obviously setting download limits is feasible, but sometimes 100 MB+ avatars are fine, in isolation, it's when there's a ton of them in a single world that this kinda issue crops up.