This feature request is to add support for streaming mipmaps for avatars and worlds.
Steaming mipmaps (unity docs) allows textures to be downscaled and dynamically loaded into VRAM. It does increase the size of each mipmapped texture by 33%, so package sizes will be larger. However, it allows textures to be loaded dynamically based on distance.
This would mean that a texture that traditionally may be 2.8 MB DXT1 at 2048x2048, may be under 44 KB if it is reduced to 256x256 in VRAM. So in worlds, this means significantly reduced VRAM usage when texutures are a certain distance away. Same with avatars if they are a certain distance away.
If tuned properly, this could mean that avatars that may traditionally take up 200 MB of VRAM, can instead take up magnitudes less. Often, 2K textures look just fine on most avatars from even 0.25 meters away. So being able to unload them for a smaller one would be significantly useful, especially for large meetup events.
Fax did mention that VRChat currently does not have mipmap streaming. The reasons are the following:
> Most notably - some user avatars may lack mipmaps, have them disabled, or have a maximum priority. This would adversely affect mipmaps with streaming enabled: Once you run out of VRAM, they’d appear blurry and stuck at a lower mipmap. Users might run into this issue maliciously, or accidentally.
Considering that the VRChat application currently allows avatars to be created with mipmaps, but they aren't shown, perhaps there is a way to allow the client to choose if they want them enabled? I do know many games have texture streaming as a togglable option, so perhaps VRChat can do this here? I would even be happy if this was an experimental feature that had risks associated with it, if it's for the sake of testing.
Fax also mentioned:
> Unfortunately, that wouldn’t fully solve the problem, as avatars uploaded without streaming mipmaps enabled effectively have an ‘infinite’ priority.
I see this as a non-issue, unless there are some other contingencies. Unity docs mention that it can load non-mipmapped textures alongside mipmapped textures. Considering VRChat doesn't have mipmap streaming already, this means that the game will be identical with or without mipmap streaming if all avatars don't have mipmap streaming. But in the event that half the lobby does, then there will be at least that many avatars that
will
save on resources, even if the others don't.
Also, perhaps (idk if this can work), but this may also mean that the avatar hider can unload textures properly? At least in theory, if the avatar is not loaded, it may load the smallest mipmap? This would save a LOT of VRAM for users that want to use the avatar hider.
This feature would help a lot for people that do not want to optimize their avatars. I do think VRAM over-utilization is one of the worst offenders in terms of VRChat performance. Solving this issue would help many, especially those with less VRAM.