Developer Update - 31 October 2024

Happy Halloween and welcome to the Developer Update for October 31.

Today’s thumbnail features Ghost Hunters by Jar.

Our last Developer Update was on October 17. Check it out here.

Announcements

2024.4.1 is Out!

Yesterday, we released 2024.4.1. This was a relatively minor patch. It added some updates for hand tracking, as well as a bunch of bug fixes and small changes. Oh, and it added Halloween stickers. Just in time for today!

As always, you can read the full notes here. Or, if you’d prefer to watch Strasz read them to you, you can do that below:

Speaking of the Patch, a Note About a Small Sticker/Emoji Change

Since the release of Stickers, we’ve been evaluating our moderation processes regarding Stickers and Emoji, including our automated content detection system.

We’re pretty happy with how it’s worked out, so we will set Stickers and Emoji to be visible from all Trust Ranks in the default Shield mode.

This means Stickers and Emoji should be more visible to everyone!

We’re Streaming… Regularly!

Originally, we planned to stream on the Friday’s after we release a Developer Update… but they’ve been going so well that we’re going to try doing them regularly on Friday at 2PM PT.

This means that – yes! – there will be another stream tomorrow. We’ll probably check out some more Spookality content, as well as a few other worlds. We’ll also (as has become tradition) take questions from chat and do our best to answer as many as we can.

See you there!

VRChat Now Live on NVIDIA GeForce Now!

VRChat is now playable on NVIDIA GeForce NOW – giving gamers instant access to GeForce PC performance, on nearly any PC, Mac, SHIELD TV, Android, iOS device or Chromebook without any downloads.

Since it’s the PC version, GeForce NOW members receive the full VRChat experience, even on low-powered or incompatible devices!

Go Check Out the Spookality Winners!

Last week, we announced the winners of Spookality 2024! You can check out the top ten winners here.

But the best place to see them is in VRChat! You have until November 4 to see them – you can find all of our highlighted worlds in the respective world rows. You’ll also find our top worlds and avatars highlighted in the VRChat Home World!

Server-Side Enforcement for PC Avatar Download and Uncompressed Size

As mentioned in previous Dev Updates, we will implement new size limits for both the Download Size and Uncompressed Size avatar performance stats.

These limits have been in place for new avatars and updates to existing avatars for some time. However, starting tomorrow (November 1st, 2024), we will enable server-side security checks that will prevent avatars that exceed this limit from loading. They will be marked as “Security Checks Failed.”

These checks may take some time to complete, so while affected avatars may still be usable tomorrow, they will become unusable over time. We expect this to affect approximately 1 in 50 avatars across all VRChat PC avatars.

These changes only affect VRChat on PC.

Avatar Performance Statistic Previous Limit New Limit (Server-Enforced)
Download Size (PC) 500MB 200MB (-60%)
Uncompressed Size (PC) 1200MB 500MB (-58%)
  • Download Size - The asset’s size when downloaded from our servers in a compressed format, like a ZIP file.
  • Uncompressed Size - The total size of your avatar and all related assets once uncompressed – similar to what happens after you unZIP a file. This value has a close relation to how much memory your avatar uses while loaded.

These changes are aimed to improve performance across all of VRChat by setting limits to the avatars permitted on the platform.

Check out our page on Avatar Optimization Tips to learn how to optimize your content.

Optimization Advice

Many avatars exceeding these new limits employ excessive use of large (4k+) textures, large animations, and long audio files.

We’ve included some general advice here on how to address these problems.

Textures

For textures, reduce the resolution of textures on your avatar to 2k at maximum. Community-created tools like Thry’s Avatar Performance Tools (available in the VRChat Creator Companion) can assist with finding large textures in use on your avatar, and will recommend size reductions as well as format changes in order to save memory.

If reducing texture size causes blurriness in the details of your avatar, consider using shader features like decals, tiling, and masking. You may also consider re-organizing your model’s UVs to give more space to areas that need more detail. Two popular shaders for VRChat, LilToon and Poiyomi, offer these features.

Animations

Animations can be deceptively large, especially if they are “fully keyframed” with no tweening between different keyframes. These animations compress efficiently, but must be loaded into memory decompressed, which contributes to the Uncompressed Size stat.

Unity has built-in animation compression options for animations in the import settings. You can use “Keyframe Reduction” or “Optimal” compression, which will try to reduce redundant keyframes based on thresholds you set.

Audio Files

Audio files can be more challenging. Since these files must be uncompressed either at load or while they’re playing, the primary factor that affects their size is the length of the audio file.

You should avoid using audio files with a length greater than 10 seconds on avatars. This can be split across multiple files, so you could have 4x2.5 second clips and still have a reasonable amount of memory usage.

You can also reduce the size or usage of other resources on your avatar to make room for the audio file, if a longer one is necessary (say, for an avatar used in a performance).

Choosing how your audio file decompresses is an important part of optimizing the usage of audio in Unity.

  • “Decompress on Load” decompresses the audio at load time, reducing playback delay.
    • Works best for short, frequent sounds, like gunshots, stepping sounds, etc.
    • In VRChat, this can cause stuttering when your avatar loads, since the decompression must happen on the main thread. Just Unity things! :sparkles:
    • You should never use this mode for audio clips longer than a second.
  • “Streaming” reads small chunks from disk and decompresses them in real-time. This is ideal for longer audio files, though it can increase CPU use as the audio is playing.
    • Since VRChat is usually CPU-limited, Streaming isn’t often a good choice.
    • Avoid using long audio files on avatars.
  • “Compressed in Memory” is a middle-ground option, reducing memory consumption by keeping audio compressed but requiring a bit more processing to decompress during playback. It is a good choice for mid-length audio.

Development Updates

AMD GPU Users, Beware!

Since it is Halloween, what could possible be more spooooky than GPU driver issues! :ghost: If you use an AMD graphics card, you may be interested in the following notes.

Currently, we use a slightly hacky workaround to prevent stutter in certain VR configurations on AMD GPUs (usually when wireless streaming). Some might remember testing this on the old a-test beta branch, related to this Feedback post.

Now, first off: Don’t expect any magic bullets. Our internal investigation shows that the workaround does not cause any performance drops, and we are keeping it enabled by default. However. We do also see people continuing to report AMD weirdness, and we do take it seriously.

We’ve almost entirely ruled out any possibility that this is being caused by VRChat code. It might be the AMD driver, it might be Windows, it might be hardware, who knows. :person_shrugging:

But, in the spirit of at least trying, we have done two things in the recent 2024.4.1 release:

  • We updated our OpenVR library dependencies. This technically affects all GPUs. The expected change here is… none, but you never know, number go up :chart_with_upwards_trend:, maybe it fixed something.
  • We added a new command line flag, --disable-amd-stutter-workaround, which you can use on AMD systems to disable our hack. You’re on your own if you try this, most likely you’ll just get the stutter again. But if you do, and it does improve something for you, please let us know!

By the way, on AMD graphics cards we currently disable Hardware Video Decoding. This means video players run entirely on your CPU. We did this because using the hardware decoder built into some AMD cards would cause VR rendering to begin stuttering badly. We have heard some reports now that recent driver updates have fixed this issue - as such, we are looking into re-enabling hardware decoding on AMD cards, since it is much faster than CPU-based decoding.

We need to make sure it doesn’t cause any issues though, and that’s where you can come in - you can already enable hardware decoding using the --enable-hw-video-decoding launch flag. Note that on non-AMD GPUs this flag has no effect. If you are using AMD hardware, and you have set this flag, please let us know if you experience any stuttering issues while viewing video players in VRChat!

More Web Updates!

A few updates to vrchat.com/home from the web team:

  • Service-specific share buttons for worlds and instances have been replaced with native share sheets where available, and copy to clipboard buttons everywhere else.
  • Fixed a bug preventing access to your gallery if you had an image stuck in a state of being half-uploaded.
  • Various improvements to the DMCA claim and counterclaim forms.
  • A bunch of bugs relating to friend locations have been squashed.

Selfie Expression

Head and face tracking via the selfie camera is coming to Android mobile! (All processing is done on-device and nobody will ever see your real face.)

You’ll be able to move your head and eyes around and make expressions with your mouth. Our initial release will support expressions by taking advantage of the existing viseme blendshapes and eye-blink/eye-look on most avatars (so it’s very likely that this feature will “just work” on your favorite avatars!)

For people using solutions such as VRCFT for animator parameter based face tracking, that will continue to work as it has before, however the Selfie Expression feature doesn’t interact with the avatar’s animator so these will be separate things.

In future versions we plan to offer new SDK support for higher fidelity face tracking, but that won’t be available at the time of initial rollout. Future plans for higher fidelity SDK support will aim to make assets created with blendshapes supporting VRCFT as reusable as possible when reuploaded with the future SDK.

We’ll keep you informed in future dev updates as we make progress towards support for more platforms and higher fidelity (Desktop and iOS are planned as well), but for now you can look forward to using face tracking for your existing avatars on your Android mobile device!

Examples Added to the Creator Docs

We’ve added all the World Examples from Example Central to our Creator Docs to make them easier to find! They were previously hosted in our Ask Forums.

Example Central was released in SDK 3.7.2 and provides examples for the VRChat SDK, which you can browse, download and modify to learn from for your own projects. We’ve also published our eight Persistence Examples to the beta docs, which help you get started using Persistent UserData in your Worlds.

These two sets of examples join the existing Creator Economy Examples, which demonstrate nine different ways to integrate the Creator Economy SDK into your Worlds. We can’t wait to see what you make from these starting points! Please share your feedback with us using the Example Central Canny Board.

Conclusion

That’s it for this week! See you again in two weeks: November 14!

9 Likes

The opening to the Dev Update video makes me want to have Strasz narrate my D&D game. Happy Halloween!

Ooooh, really nice that webcam support for face tracking on desktop is planned. I’ve always wanted to have face tracking but current options are out of my price range. ^^;

5 Likes

For stickers, one big problem I and many others are running into again and again is the lack of space. not placing a lot, but if say… alll your stickers are favorouted via other players, and you want to tempereroly get rid of one to get a new one, you will never be able to use it again, since it was from someone else you don’t have the file for the sticker, not to mention re-uploading a sticker is a big hastle every time you want to switch out two that you have the files for.

Something like a sticker bank where you can stach (especially other people’s) stickers that are not in use in your menu, then swap them out via the website or ingame. this way people can have a bank of other people’s that they can share and use, without having to sacrifice others if wanting to use a new one or switch it out.
This wouldn’t usally be a problem for things like emojis, but since stickers are so dynamic, more of a sharable use, and can stack together, you need a lot more space than what is normally given.

1 Like

Is Udon 2 still on track for end of year availability?

2 Likes

the facetracking on android is AWESOME, i thought this could be a cool feature for vrc like 1-2 months ago, but never expected it to come this soon. but hey, you also need to allow android users to get rid of verypoor avatars and their size restrictions, its crazy how you can see avatar on the menu (without taking any fps hit) but cant use it in the game.

2 Likes

You can export stickers from vrchat. If you hit the edit button for them in-game there’s a button in that menu for downloading the image locally.

2 Likes

Looking forward to this. One of the pain points I have w/ vrcft is that it uses ~120 bits of my avatars parameter space which sometimes limits what I can do on an avatar. Being able to get that back with built-in facetracking support would be nice.

Udon persistence stuff seeming coolio
Gotta wait and see how much people use it and if they do anything interesting with it.



First off, issues with AMD stuff actually usually not AMD’s fault. It’s usually someone else designing something while bought out completely by nVidia, building it exclusively for one framework, and not testing/building it properly for the other (this happens the other way around, nvidia gpu’s having issues with stuff designed exclusively for AMD); this is almost always a developer failure, wherever the issue resides.

If you build for both hardware and driver api’s simultaneously, you know what you can and can’t do properly and can build things stably without cucking one or the other.

Unlikely. Especially because it’s an issue that occurred with unity version change.

As an AMD user for well over a decade, the troubles they have are usually blown out of proportion or misunderstood. As anyone really should be doing; choosing an ideal driver version (applies to nvidia as well) and stick with it until you have an explicit reason to find a new ideal driver version. If the problem persists across most recommended viable driver versions from the last couple years, then the issue is most likely not driver related… and it’d only be hardware if it was specific to certain cards/chipsets.

That and potentially more performant animators! :D
The VRCFT community has done a lot to make the animators lighter on CPU time but it’s still an extra load. Dx

My biggest issue with a lot of this stuff (besides peoples’ weird rigging values), is the remote user update rate being as abysmal as it is, with the ~8-12hz we’re forced to live with, and precision loss… We’ve been feeling this pain ever since they added Network IK years back.

Back in the day, tracking was really accurate even for remote users, to the degree where you could snipe a target with a particle on an avatar very far away and the aim be pretty darn close; now it’s like 5-15 degrees off typically.

Quick or small movements are interpolated heavily, so you can’t see peoples’ micromovements anymore… They did this because of quest performance.

3 Likes

Float interpolation would be neat to have as an in-game feature I suppose.
We rely on OSCmooth to make it look passable these days.

The performance restrictions for very poor avatars for self is a bad decision on the devs part. Having a prompt to allow higher performaning phones to run one single very poor avatar wouldn’t be hard on too hard. Been using Samsung A52 with 6GB during the Alpha.

1 Like

Is the avatar size limit going to be also for your own local avatars? Sometimes I want to have that 4k or 8k texture, or high detail when I’m making content solo, streaming alone, etc. I don’t care if it turns into a fallback for others if I’m in it, but for solo instances, I would really appreciate the extra detail.

2 Likes

4k texture is only ~50mb uncompressed per texture for 8-bit RGBA. There’s nothing stopping you from using them, just not a crapton of them.

I often use a couple 4k textures on my avatars and i stay under 200mb uncompressed and <60mb compressed.

50mb’s per texture.
4 textures per material.
Say, 3 materials per avatar, just for the body.

Adds up pretty quick. One of my avatars has a crap ton of clothing and is about a 150mb download. I have another that I use for photos. The scales need to be 8k, otherwise it looks like a blurry mess. Which is the only reason why I would ask for your own avatar to still be visible, but other’s cannot see it.

1 Like

The restriction is pretty generous. Even if i were to port a character from a photorealistic porn game that has way too much detail in the skin and everything prioritizing beauty over optimization, could probably still keep it as an avatar under 500mb uncompressed - so i dont see the issue honestly.

Over 500mb is mostly reckless misuse.

What do you need 4 RGBA textures per material for??
Normal maps should be changed to RG BC5 so they use half the memory, and all PBR maps (roughness, specular, etc) should be R BC4 or packed into a single texture to avoid wasting channels.

A square 4k image that’s 32-bit (8 bit per channel, RGBA) will use:
4096 * 4096 = 16,777,216 pixels
8 bits per channel * 4 channels = 32 bit = 4 bytes
4 * 16,777,216 = 67,108,864 bytes = 64 megabytes

48mb for RGB (no A)

If you only have Normal, Roughness and Specular for example, they can be in a single RGBA texture, so you’d only have 2 textures 64mb each per material.

Mask textures can be very low resolution and single channel.

1 Like

I don’t, but I was using that math you provided.

My normals are maybe 22mbs, each texture (albedo, smoothness, and emmissions) are about 10mbs after crunch compression. I understand that it gets uncompressed on load. I only have a few that I use the full 500mbs uncompressed, but I would rather have one larger avatar with these outfits than multiple. Where myself and others will have to re-download the same base avatar, just with other clothing options.

I already have 530 some avatars on my account. I don’t want to hit 600 again.

Don’t use crunch and you won’t need such high resolution textures as often. Use BC4/5/7 in the overrides tab and they will look very nice and clean. Most of the time even above 2k is unnecessary, and i will point out that i am very meticulous about quality and constantly complain about peoples’ textures.

Having that many outfits on an avatar is more of a life choices problem lol.

1 Like

2k on a human avatar and clothing I get. I can definitely tell the difference between 2k and 4k on good fur, and 4k and 8k on something with say, scales, like a dragon.

Trust me, I’m very meticulous and conscious about how my stuff looks as well. Why do you think I’m asking if my own avatar can still be shown without making the textures all muddy for high quality photos?

We have an option for 8k photos. I have a PC that can take them like they’re FHD. I want to use everything to it’s limits and not be forced to downgrade.

1 Like