Developer Update - 16 March 2023

My avatar goes from 15 MBs to 40+ Mb without any crunch compression. That’s a large jump?
What does VRC want the average size of an avatar to be in MBs?

Many of my avatars use DXT5/DXT1 (Alpha dependent) with 99% quality unless I specifically notice compression artifacts like on a high res smooth normal.

The default compression setting is normal, which for RGBA textures is DTX5. Most people enable this and drastically reduce their file size without thinking about it. No compression/High quality BC7 makes sense for avatars that are optimized/atlas’d/simplified down to a minimal amount of texture sets but the average user does not do that. They’re using kitbashed avatars from lots of sources so when you tell them to just flat out turn off compression their avatar download sizes are going to skyrocket.

*Post edit Zeni of the future.
A majority of this is wrong information and I had a very poor grasp of how compression worked at the time. Even if you don’t enable crunch compression, you avatars textures are still compressed in the build, just NOT with crunch. (What else was the point of the “Compression” but in load?!) I was assuming the file sizes displayed were FINAL sizes.

1 Like

Pleeeeeeeeease fix the “Camera wont take pictures in fly mode” bug. It’s been going on awhile now, past the last patch, and taking VR Wedding photos, and getting the right poses and improv shots is EXTREMELY difficult, having to switch fly on and off so many times.

Thank you!

Do you have a Canny post for that? I’ve been using the Flying camera mode quite often recently, I haven’t noticed issues personally!

2 Likes

Will Udon UI only support markdown or also Unity’s RichText?
Also, which flavor of Markdown are you guys aiming for? I guess we’ll get a full list of supported tags when Udon UI releases.

Markdown only, I believe.

You’ve answered your own question!

How much longer does it take to process ASTC? I was playing with it earlier and it feels like a substantially longer time. It takes so much longer I want to extract the processed texture to email to friend, like here is PNG for PC and ASTC for Quest.

Move or rename a file? Texture is processed again.

I haven’t tried the easy quest switcher, does it somehow cache the mobile texture or does it process every file in the project when switching?

But yeah, being able to grab ASTC textures out of the Unity Editor would make my day.

Not sure I totally understand the use case here - what you see in the file browser is just the source files, unless you have a post-build project (which uh, may be ripped?). Usually all you should see is the PNGs, and Unity creates the GPU compatible formats when building.

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).

image

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:

image

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”).

1 Like

Due to the feedback and some excellent discourse from community experts on the subject, we’re going to re-assess the warnings for Crunch!

Textures are hard. There’s several caveats to using Crunch, or BC5/7, or High vs Normal, etc etc. A flat recommendation does a disservice to specific setups.

As such we’ll re-assess this implementation and will get back to you soon with a more clever solution.

Notably, the ASTC recommendation is staying, because that one’s kind of a no-brainer.

5 Likes

I never said crunch does save on VRAM. Think that got misinterpreted ~ my issue was that they basically said crunch has no benefit whatsoever when DXT 1/5 can have a pretty substantial effect of download size on models with a handfull of texture sets.

If crunch didn’t work on download size it wouldn’t of been the first thing we tell users with a very high download size to try. (besides reducing resolution) Those of us with a slower connection would probably prefer a second of hitch (if even) over a whole +10 or more seconds to download the model.

1 Like

Check to make sure “Trigger to take photos” is toggled on in the behavior settings under the camera!

This basically as I understand it.

EDIT: Ok nvm, seems I might have gotten confused here. Disregard this canny ^^;

This should only affect the Stream camera. Does it also affect other modes?

Just tested again and no I totally got myself confused there. I think I might’ve misinterpreted something with the other user’s dilemma. ^^;

EDIT AGAIN: wait no they’re right. I cannot take photos in fly mode with photo camera. Making a new proper canny.

Importing a ASTC texture in KTX format takes less than 5 seconds, unity decodes a copy to use in the editor. However the program I used to make the ASTC textures takes way too long (10x the time unity takes) and they’ve removed support for ASTC in the latest version. GPUOpen-Tools/compressonator

I did some quick tests. A 1K matcap this one in particular, nice green glass took one or two seconds to process.

I have a 4K texture, took 1:50, aka 110 seconds to convert to ASTC 4x4, the output there is 21.9MB, too big, so then I ask for ASTC5x5, 95 seconds to convert. Takes only 5 seconds to put it back to ETC2

In the editor I ask it to duplicate a PNG, it processes it to 4K ETC2, so it takes 5 seconds to do this. I rename this file, it takes another 5 seconds, because again, PNG to compressed texture. If the default compression format was ASTC both of those operations would have taken over a minute. If I have my default set to ASTC and I save a copy of something I’d never upload, like the UV map, well, Unity is now going to process that into ASTC…

As shown with the exclamation mark,
image
The SDK is kind of caring more about the mess I have in my project rather than what makes it out the door…

Personally I have my working files in a PC project so its not a problem for me. I can copy just the good copy over to the Quest project, but I still have the lingering question about EasyQuestSwitch

Crunch compression between DXT and BC can be the difference between sub-10 MB and 40 MB. I highly advise against warning users to not use it and instead implement a method similar to Kyubuns’ ObjectWeightScale (【⭕2019対応】VRCアバター/ワールド体重計 - きゅぶんずラボ - BOOTH) somewhere in the content upload screen (After the content is packaged and compressed), where users can view their in-game file size.

Adding a file-size statistic field within Unity would also aid those with slower upload speeds understand how much data they are uploading (and how long they may need to wait). Alternatively, it would be one step closer to adding a text-based progression read-out for the upload progress of user-based content. (Example: A text field showing “Uploading: 18.2 MB / 25 MB” as the green bar fills)

Having spoken with many users and taught them how to properly reduce VRAM (Both texture and mesh) and aiding in lowering file sizes (To reduce avatar load time to reduce video-player desync in media-streaming-based lobbies), there is a general consensus that users are more than okay with the slight half-second hitch [Edit: Caused by crunch compression] of an avatar’s loading rather than waiting 15 seconds (or more, for the rural user-base who may spend 2-5 minutes loading a single avatar).

2 Likes

Udon Ui looks super straightforward, so excited for it to be ready!

1 Like

I ain’t gonna lie, my router almost said “I’m out” when he saw that update.
I’m glad you decided to roll back on that. While I know crunch doesn’t affect VRAM (and never thought it did), it does affect upload size and download size of avatars which (as seen of some of the avatars I have uploaded) can make some models go from being 150 MB to a mere 2 MB.

Do when are we going to gain the ability to scale avatar size?

Crunch compression does not work on BC textures to my understanding.

Most users don’t even want to use DXT textures and would prefer to use BC textures because they are higher quality. Crunch looks significantly worse than DXT1/5 (even with 100% quality) while only slightly reducing file sizes, so good luck convincing them.

I think if a user has such a large file size that it is affecting other users, they need to reevaluate more than just textures on their avatar. I think downscaling the textures would be more effective than crunching them, really. Oftentimes, the actual texture fidelity is more important than the resolution, especially for flatter textures that are more prone to banding and artifacts.

1 Like