Crunch does not save on VRAM. For DXT5 and DXT1, there are two versions: Crunched, and Compressed. Crunched textures load into a Compressed format when loaded into VRAM (to my knowledge). So it’s not that they’re being “uncrunched”, it’s that they’re being converted to DXT5/DXT1 Compressed (plus what Feilen said), which is what the CPU hitch is on load. This is because the GPU needs a version that can be loaded quickly from VRAM without extra processing (again, to my knowledge).
The actual size improvement for BC7 vs DXT comes from using DXT1, which does not have an alpha channel and is half the size of BC7. DXT5 is the same size as BC7, so DXT5 is functionally useless with the same size and lower quality, and we should only be using BC7/DXT1 compressed for textures (and BC3/BC5 where possible).
I don’t know what sort of compression VRChat uses for avatars and worlds, but similar to how PNG compression works losslessly while saving a lot of space, it seems to do a similar thing here. Your BC7/DXT1 Compressed textures (and everything else) can be compressed into a bundle losslessly. This format likely isn’t supported by VRAM since it needs processing to be unpackaged.
Here is my avatar for example, which has no crunched textures:
It’s because in most game titles, the game developers have direct control over optimization. Beyond drastically altering how the game works (and without mipmap texture streaming), people with 200-700+ MB of texture memory (not including meshes which are also in VRAM!) are going to flood your VRAM.
I was having this issue in a community I’m in, where my game would drop below 1 FPS and repeat frames in the buffer due to needing to constantly swap with system RAM to render frames. You’d see the “Copy” graph on Task Manager for the GPU go crazy. And I have 8 GB of VRAM!
To reiterate: if mipmap texture streaming is added to VRC, it will matter less what people’s textures actually are, since (afaik) most avatars should have mipmap streaming enabled already from the SDK warning about it. It can just swap to a lower quality mipmap if it starts to run out of VRAM. And sure, this doesn’t necessarily solve download size, but I think a 28 vs 35 MB download is not significant enough, especially when, to my knowledge, most people have 50 or 100 Mbps internet these days that can handle those downloads just fine. Ideally, you shouldn’t be making an avatar that is much more than 40-50 MB download anyways.
(Plus, I do think people saying “man your avatar looks like crap” is a bigger motivator for them to optimize than, “I can’t load your avatar at all”).