VRChat 2024.1.2

Live - 27 March 2024 - Build 1435

Watch the video patch notes here:

https://www.youtube.com/watch?v=AF1-ttjgjWY

Upcoming Avatar File and Uncompressed Size Changes

WARNING: NERD STUFF FOLLOWS. ☝️🤓

First, some definitions.

Avatar File Size - The download size of an avatar.
Uncompressed Size - The size of the avatar after it has been downloaded and unpacked for usage.

Memory Usage - The amount of system memory (RAM) an avatar uses. Sometimes referred to as "RAM usage."
Video Memory Usage - The amount of video card memory (VRAM) an avatar uses. Sometimes referred to as "VRAM usage."

SO. Last year, we quietly implemented a maximum uncompressed size of 1.2GB for avatars. This is a very large number! It is unfortunately still way too high and is negatively impacting the performance of our users.

To fix that, on PC, we're going to drop the maximum uncompressed size to 500MB, which means you can never go past that size.

We're also dropping the file size (download size) maximum to 200 MB.

These changes will appear in July of this year, but this update includes both a new avatar stat and a new slider that allows you to lower these limits yourself. The stat is called "Uncompressed Size." It's in the big main menu, right next to the avatar download size setting. We're also adjusting the SDK soon to let you see these sizes.

This would affect roughly 2% of avatars. This is enough of an effect where we'd want to give ample warning.

This does not affect Quest or mobile as much. There, the limits are already set to lower numbers of 10MB for file size, and 40MB for uncompressed size.

One more sidenote...

Sorry, this is a very 🤓 point, but it's important!

Uncompressed size is somewhat related to RAM and VRAM usage, but they are not the same thing. Lots of things change how much space an asset uses depending on what memory it is sitting in, and what it is being used for.

That being said, if you decrease or increase your uncompressed size by changing your avatar, generally speaking your RAM and VRAM usage will move in similar directions and amounts. That also means that, if you're VRAM constrained, it will help to drop your uncompressed limit to a number like 200 or 300MB.

VRAM usage optimizations are on the way.

Things That Are Kind Of A Big Deal

  • We got a haircut and hope you notice...
    (Refreshed the loading screen with new tooltips and a new color palette.)
  • The custom emoji limit for VRC+ subscribers has increased from 5 to 9!
  • Added the ability for instances to be closed from the Quick Menu Here tab.
    • After an instance is closed, queues are canceled and users will be unable to join.
    • You can only close an instance if you are the owner or have the "Manage group instance" permission.
  • Introduced VRCHeadChop to the avatars SDK.
    • This is a component that allows avatar authors to control which parts of their avatar are hidden from the perspective of the user wearing it.
    • Check out the documentation for details about how to use it!
  • And introduced AnimatorPlayAudio to the avatars SDK too!
    • This allows you to modify an AudioSource when transitioning to an animation state.
    • It can change the audio clip, volume, pitch, or loop. It can also play or stop the AudioSource automatically.
    • Check out the documentation here as well!
  • We've added a way for you to limit avatars shown based on their Uncompressed Size! Find this new setting next to your Avatar Download Size limit in the main menu settings.
    • This is not RAM (or VRAM), but it is related. See the patchnote preface.
    • Defaults to the hard limit of 1.2GB. This will change to 500MB in July 2024.

Not As Big A Deal But Still Important

  • You can now view public group posts of groups you're not a part of!
  • Added a debug option to display fallback shaders for your local avatar. The option will stay active when switching avatars but will reset on world change.
  • Reorganized the Config section of the Action Menu into Avatar and Action Menu settings.
    • The new Fallback Shaders option is in Avatar.
    • The Gestures option has been moved into Avatar as well.
  • Improved how avatar downloads are handled when VRChat is low on memory.
  • Improved world loading times on desktop PC!

Fixes & Updates

  • Fixed a case that could cause invites and invite requests from other players to appear while you're set to Do Not Disturb.
    • Invites from another user will still appear for a short while if you request to join them while set to Do Not Disturb.
    • When you're set to Join Me, auto-accepted join requests no longer appear in your notifications.
  • The Accept button for join request notifications will properly deactivate when you are in an Invite-only instance.
    • Join request notifications will update their state whenever you move to a new instance. This will allow you to accept invitations if you move out of an invite-only instance and vice versa.
  • Other users no longer frighteningly vanish as you leave an instance.
  • We've changed the name of the Tooltip Language settings field to Preferred Language. The button for this setting will now display your current language.
  • Scaling a humanoid character no longer results in a slightly larger size than expected.
  • Fixed issue with inconsistent positions after crouch and prone.
  • Fixed issue where certain search buttons couldn't be selected.
  • Fixed portals not working in worlds with an invalid Spawn transform.
  • Smoothed out visual world loading hitches on Quest, Rift, and XRElite.
  • The "Go Home" confirmation modal header is no longer slightly off center.
  • Colors of collapsed side-bar cells within main menu pages should now stay consistent.
  • Removed the callout for Avatar Dynamics and PhysBones being a "brand new feature." We figured you know what those are by now...
  • Fixed additive particles rendering incorrectly on Quest.
  • Fixed a UI bug which would show the "You Are Here" label for instances you aren't in.
  • Improved PICO controller support, alignment, and added translation for PICO Store.
  • Fixed worlds with a disabled VRC_SceneDescriptor component causing performance degradation.
  • Visemes are back to animating locally again when your microphone output is set to 0% and not muted. (Streamers rejoice!)
  • Further rendering optimizations for impostors.
  • Adjust "Invite" pictures to ensure text readability by default by flipping the image horizontally for selfies.
  • Fixed an issue that caused distinct settings with the same name to be hidden when using the settings search feature.
  • User and world search results now match the web site results more closely.
  • Fixed a bug that caused notes not to appear in the User Profile when the user was also in the current instance.
  • Fix bug where groups would occasionally show announcements from the wrong group...oops...
  • Added eligibility check when you attempt to purchase VRChat Credits.
    • This will prevent purchases from happening on Steam and Oculus when they, you know, shouldn't be happening.
  • Join requests notifications received on Friends-only instances now disable the accept button and explain to the user that they should ask the instance owner to invite their requesting friend.
  • Desktop users can now use the camera UI while the camera is inside a player's selection pill.
  • Light probes now affect all parts of an impostor uniformly.
  • Impostors no longer trigger avatar haptics from long range.
  • Fixed an issue that could prevent VRChat from detecting audio devices after a disconnect/reconnect
  • Fixed timing issues that caused some specific audio devices to fail to reconnect.
  • Portal Placement now works with either hand instead of just the right (sorry lefties!). It'll also swap hands if the controller dies while active.
  • Fix bug where Loading Screen would not show up for quest users if Photo Camera was open before loading into a new world.
  • If you have no roles in a group the role list will now state that you have no roles instead of being sad and empty.
  • Fixed some of the spoken languages found on user profiles not setting correctly.
  • Added a Page Up and Page Down button to the Avatar Debug menu for VR platforms.
  • Fixed a bug where the Avatar Debug menu would have inaccessible information for certain Avatars.
  • Made a speculative fix for a rare case where players can get thrown around the world as they join a new instance.
    • It's hard to reproduce this internally because of how rare it is, so please let us know if you still encounter this issue! If programming bugs could be shiny like bug Pokémon, this would be one of them.
  • Subscribing to something with VRChat Credits that will add you to a group now shows group rules before purchasing.
  • The calibration mirror will no longer reflect remote players.
  • World thumbnail images seen while loading into an instance no longer appear blurry.
  • Improved PhysBone simulation at low framerates when the avatar is moving at high speeds.
  • Audio sources are now properly counted in the Avatar Details menu.
  • VRChat Credit bundles and VRChat Plus subscription prices now display as USD $ rather than just $.
  • Fixed a few bugs that could cause crashes or error avatars when other users switch avatars (especially on Android)
  • Ambient Occlusion effects no longer appear stretched on the user camera.
  • Fixed a regression that could cause particle systems with subemitters to not appear in mirrors or the user camera.
  • Local camera UI noises will now be properly affected by the UI volume slider.
  • Nameplates will now color-code the Impostor label and a little badge based on why the real avatar was blocked (just like they do for fallbacks).
  • The loading avatar will show properly in the main menu avatar preview again.

Creators (SDK 3.5.2)

You can also find the SDK changelog here: https://creators.vrchat.com/releases/release-3-5-2. This domain will be used for SDK beta docs from now on!

  • The worlds SDK will now suggest replacing Unity's default UI shader with a super-sampled shader where appropriate.
  • Exposed System.BitConverter, System.Buffer and System.Text.Encoding to Udon.
  • Added DataToken BitCast method.
  • Added ResultBytes field to string downloader event to allow raw data downloads.
  • If an Udon script uses [RequireComponent] the SDK will now silence some harmless errors while building.
  • Updated UnityEngine.Timeline package version & added to base SDK package dependencies.
  • A bunch of ClientSim changes:
    • Added all supported languages.
    • Added support for player scaling APIs.
    • Fixed EditorOnly objects not getting removed in Play Mode.
    • The stacked camera is now enabled/disabled depending on the state of the pause menu in order to improve performance.
  • Changed "Polygons" to "Triangles" in SDK avatar performance stats for more accurate description of recommended limits.
  • Fixed issues with InputUse Udon events firing constantly when using VRChat Mobile. They should now only fire when a genuine tap is done, not while swiping or long-pressing.
  • The avatars SDK now warns against using mixed Write Defaults settings across avatar animators.
  • Adds new "OnInputMethodChanged" Event to Udon, which is triggered whenever the user switches Input Methods, from a Keyboard to a Game Controller, or a Game Controller to a Touchscreen, for example. See Udon Input Events.

Android

  • A bunch of native mobile UI notification improvements!
    • Notification tabs have been renamed & reordered
    • New visuals for all notification types (text sizes, colors, icons, etc.)
    • Added swipe feature for notifications (swipe left to see additional options).
    • Notifications have been divided into two categories, New (<24h) and Older (>=24h)
    • Notifications have a "time ago" on them (i.e. now, 5h, 3d, etc).
  • Microphone should now start reliability when switching worlds.
  • We've now disabled Tutorial Labels for interactables in worlds when Direct Touch is enabled. This does not include Tutorial Labels for held objects, just objects that are yet to be interacted with.
  • Fixed an issue on mobile where Tutorial Labels can be stuck in their original position when a pickup is interacted with.
  • The PTT button on mobile will now highlight red when the mic is active and you are not pressing the button and blue when the mic is active and you are pressing the button.
    • The highlight activation is triggered by the noise gate setting.
    • A mute reminder popup will display the first time the mic is detected as active and you are muted.
    • This will happen once per launch for the first 3 launches on a fresh install. This is saved to player prefs so reinstalling or clearing your data will reset the popup.
  • Fixed a caching issue that was causing the Notifications page to fail to load properly.
  • Fixed an issue where the bottom nav bar disappears from Notifications page.
  • Added haptic feedback support.
  • Fixed a crash caused by trying to access the world options before you're authenticated.
  • Having a PC-only home world set and loading in on mobile no longer sends you to an error world. You'll correctly go to the VRChat home world.
  • Fixed a bug that displayed the wrong help tooltip icon.
  • App will no longer crash when clicking Jump In Now.
  • App will no longer crash when the app resumes, specifically after minimizing the app to retrieve an SSO code.

Network Changes From Previous Beta

  • Users and nameplates no longer appear at 0,0,0 for a moment while loading in.
  • The amount of data that you can send with manual synced UdonBehaviours in one serialization has been increased from 65024 bytes to 280496 bytes.
  • Fixed timing for OnPlayerJoined and OnPlayerLeft so that the VRCPlayerApi instance in these callbacks is now guaranteed to be valid.
  • It is less likely for ObjectSync to be floating for late joiners.
  • ObjectSyncshould behave better when coming to a rest.
  • Avatar scale will sync faster when joining a world.
  • Users that are still on a loading screen will now appear later and with a progress bar indicating they are "Loading In..."
  • LocalPlayeris now guaranteed to be valid in Start and OnEnable.
    • This was already mostly reliable, but there were some race conditions where it could fail.