VRChat 2022.4.1

Release - 3 November 2022 - Build 1258

This release has several big new features that you'll want to know about, so we'll cover those in depth before moving to the patch notes.

Important Note for VRChat Creators

❗️

If you are still using UnityPackage SDKs, please update to the VRChat Creator Companion.

Starting in January 2023, we will no longer provide UnityPackage versions of our SDK and you must use the VCC.

Additionally, the VCC does not support SDK2. As such, we are taking this opportunity to fully deprecate SDK2. SDK2 will no longer be available for download starting in January 2023.

If you do not migrate soon, you will have lots of issues going forward. Migrating to using the VCC is quick and easy.

Importantly, this also applies to older versions of UdonSharp. New upcoming features to Udon and the SDK will break older versions of U# which are deprecated and no longer receive updates. Please migrate to the VCC, which includes an always-up-to-date version of UdonSharp.

We're working on a UdonSharp migration guide for older versions of UdonSharp to help cover common issues when migrating, and how to fix them.

Quest Hand Tracking

You can now use the hand and finger tracking system built into the Meta Quest 2 and Meta Quest Pro headsets to track your hands, move your fingers, move around worlds, and use the VRChat menu!

This is a VRChat Labs experimental feature! It is an experimental, under construction, in-progress implementation-- even more than usual! That being said, it works pretty dang well and is a ton of fun!

Notably, this hand tracking system only works on VRChat on Quest 2 or Quest Pro stand-alone, and does not work via Quest Link, Quest Airlink, Virtual Desktop, or other PC-connected solutions for now. This is due to platform and technical restrictions. We're looking into ways to get this same capability on PC VRChat.

Check out this quick video to see how to use it.

To use it, just put down your controllers and put your hands out so the Quest hand tracking system kicks in. Of course, make sure you have the system enabled in the Quest settings.

To move around the world, hold your left hand up, palm facing your face. Touch your middle finger to your thumb in a "pinch" motion, and a small blue sphere will appear. While still pinching, move your fingers away from that sphere, and you'll move in that direction!

To turn left and right, do the same motion with your middle finger to your thumb, but with your right hand. While still pinching, move your fingers left or right. You'll turn!

You can turn with Comfort Turning (snap turning) on or off. If you have Comfort Turning on, you'll need to move your pinched finger "past" the turn point each time you turn. It might be easier to use this locomotion method with Comfort Turning disabled in your settings.

Pull up your VRChat Quick Menu by "pinching" your index finger and your thumb on your left hand. This is a "default" Oculus gesture, you'll see a little menu icon float over your hand and "fill up" as you long-pinch. To interact with the UI, point at it with your hand, and select things by pinching your index and thumb together.

You can mute yourself by holding your thumb and ring finger together for a moment on your left hand.

We've created a tutorial world to try this feature out!

Show / Hide Avatar Player Moderation Local Storage

Starting with this build, "Show Avatar" and "Hide Avatar" Player Moderations will be stored locally in a file.

Player Moderations are actions one player has taken on another. In this case, we are specifically only talking about Show Avatar and Hide Avatar actions. This does not apply to "Hide Avatar Globally", "Block", "Mute", or other player moderations. For simplicity's sake, we can call these "Show / Hide Avatar Settings."

  • When you click "Show Avatar" or "Hide Avatar" on a user, that setting will be stored locally instead of on the server
    • When logging in, you'll save your server-side settings locally
    • A week after this release goes live, this transfer will be turned off and the settings on the server will be deleted
  • If you use another device, that "Show" or "Hide" avatar action will not be transferred to that new device
  • If you completely clear your VRChat data, you will lose those settings
  • On Meta Quest, if you uninstall and reinstall VRChat, you will lose all Show and Hide Avatar settings

On PC, these are stored in %UserProfile%\AppData\LocalLow\VRChat\VRChat\LocalPlayerModerations. You can see the file format on the new "Local VRChat Storage" documentation page.

Networking Updates

We've made a bunch of improvements to VRChat networking, almost entirely around Udon and world creation! Fair warning: technical stuff follows.

Network IDs are now baked into the scene, and can be managed by creators. These Network IDs allow creators to move objects around their scene and across versions without breaking network compatibility. We've included a new Network ID Utility into the SDK that helps you migrate these IDs between projects, in case you're maintaining two projects for the same world.

🚧

You don't need to maintain separate projects for Quest and PC any more! You can just use the same project, and swap before building your second version.

Of course, Quest and PC scenes can vary greatly for optimization and other reasons. As such, we strongly recommend using EasyQuestSwitch to make this management even easier.

We're working on updating our documentation for this newer, easier process.

Object Owners no longer blast serialization data over the network when someone joins, which reduces the load on clients. There's also lots of little edge-cases improved for Object Sync.

Finally, we've greatly improved outbound event scheduling, which should improve IK and Voice transmission even under heavy load.

These changes have undergone heavy closed beta testing. In most cases, there's very little you need to do as a creator for this! Make sure you update your SDK so you can gain the full benefits of these new changes and the new tools available to you.

❗️

Update (11/11/22)

We've received reports about Udon networking issues after the latest VRChat update. Please visit our Feedback Board to let us know if your worlds are behaving unexpectedly.

Known bug: The OnVariableChanged event may be executed before Start. If your scripts were relying on OnVariableChanged being executed last, we recommend introducing additional checks (i.e. with Utilities.IsValid). A bug fix is currently underway.

VRCGraphics Functions

We've exposed a whole new set of Graphics functions to Udon, including (but not limited to) Graphics.Blit!

These functions will allow shader wizards to do all kinds of fancy stuff, well beyond what I can think up here. It'll also allow existing features like AudioLink to use much more optimized methods without anyone having to change their avatar shaders!

Check out the documentation here: VRCGraphics

Client

Features

  • Introduced Hand and Finger Tracking on Quest, including locomotion and UI interaction!
    • On the Meta Quest, use hand and finger tracking to move your avatar's hands and fingers!
    • Use a new locomotion method to move around, and interact with your menu!
    • This implementation is IN PROGRESS! It's SUPER experimental, even more than usual! However: we think it works pretty well and is a ton of fun. That being said, don't throw away your controllers just yet.
    • See this video for more details and a quick introduction
    • Only works on Quest Standalone for now due to platform and tech restrictions, does not work via Quest Link
  • Added a "Tools" section to Action Menu root page!
    • This section allows quick access to often-accessed "tools" like the camera, personal mirror, face mirror, and more
  • Added a Chatbox sound effect when someone sends a chat message!
    • A sound effect plays when a chat bubble is shown
    • There's a few different effects, they're randomly chosen
    • The volume of the sound is based on voice volume setting, as well as the Chatbox notification volume slider
    • This sound can be completely disabled with the toggle in the Chatbox settings
    • The OSC endpoint /chatbox/input was updated to include an additional bool parameter for MessageComplete which is used to trigger the notification SFX
  • Added binding options for pulling up the chatbox!
    • In the VRChat controller configuration, you can set one of your controller buttons to summon the Chatbox keyboard
    • If you're on desktop, you can use the Y key to pull up the Chatbox keyboard
      • This keybinding cannot be changed or disabled just yet (but we know people will ask for it! you should post a feedback item for it!)
  • Added a new position setting for the Chatbox: "Forward"!
    • "Forward" position has the chatbox floating somewhere between the avatar's feet and the nameplate
    • It can be toggled in the Quick Menu between "Above Head" and "Forward"
    • There's also a height adjustment slider so you can move around where the chatbox appears
  • Added a new "Show Own Chatbox" setting, defaulted to on
    • This is useful when using Forward position, because depending on your eye position and where you set the chatbox height, you might block your own vision

Changes

  • Moved Show and Hide Avatar Player Moderations to local storage.
    • This only applies to "Show Avatar" and "Hide Avatar" actions you take on other users
    • On PC, they're stored as documented here: https://docs.vrchat.com/v2022.4.1/docs/local-vrchat-storage
    • On Meta Quest, they're stored in the local storage for the application
    • This has no effect on how these are used, but it does have a few effects
      • When you click "Show Avatar" or "Hide Avatar" on a user, that setting will be stored locally instead of on the server
      • When logging in, you'll save your server-side settings locally
        • A week after this release goes live, this transfer will be turned off and the settings on the server will be deleted
      • If you use another device, that "Show" or "Hide" avatar action will not be transferred to that new device
      • If you completely clear your VRChat data, you will lose those settings
      • On Meta Quest, if you uninstall and reinstall VRChat, you will lose all Show and Hide Avatar settings

Improvements

  • Added "angle snapping" to personal mirror positioning
  • Improved pasting multi-line text into keyboard
  • You can now send UTF-8 text into the Chatbox via OSC
  • Added a "Flag Issue" button to the Debug section of the QM, which marks your output log with a timestamp so the Support team can look it up later
  • Chatbox width now dynamically adjusts to fit text
  • Chatbox should now show correctly and face camera in the mirror for both local and remote users
  • Adjusted nameplate and Chatbox pivot locations so it doesn't clip into avatars so often
  • Improve cursor-locking behavior on client launch
  • Improve avatar pose behavior when becoming visible
  • Allow Udon access to player velocity when not visible
  • Improved HUD shaders
  • Optimized UI when opening and closing menus
  • Improvements to audio input / output stability
  • Safety and security improvements

Networking Improvements

  • Improved network behavior when a new user joins the instance
    • Previously, when a lot of people used to join your instance, the Master would get clogged and wouldn't be able to send more data
    • Now, the instance stores the latest data and just relays that to new users that join
  • Networking limits are now parametric, which prevents users from getting kicked from sending too much outbound data
    • This greatly reduces the amount of random user disconnects
  • When the network is clogged, instead of stopping completely or disconnecting you, the traffic is handled a lot more intelligently
    • This means things with very high priority (such as IK and voice!) will not degrade
  • Various SyncPhysics improvements related to coming out of sleep, improving behavior on sudden impulses/changes
    • This should improve some cases where ObjectSync behaved badly, such as objects getting stuck in the air
  • Improved and added network-related debug menus
    • Improved the layout of debug menu 4
    • Improved the performance of debug menu 6 when in large worlds with many objects
    • Added debug menu 7, which displays the networking output of synced objects in your world, sorted and filtered to only show the top offenders

Fixes

  • Fix overflowing text on Gift VRC+ modal
  • Fix disappearing cells in Launchpad view
  • Styling fixes in Audio settings
  • Fixed saved searches being overwritten by subsequent searches
  • Fix for chatbox distance check to match max voice distance per player
  • Fixed some spots where we were still using the old keyboard
  • Told VRCat that they were muted this whole time (click on VRCat in your quick menu!)

SDK

Features

  • The SDK now keeps track of network IDs and bakes them into the VRCWorld, which means that you can safely delete objects and add new objects between world revisions without breaking sync for people that are on different versions
  • We've added a new Network ID Utility into the SDK that helps you migrate network IDs between projects, in case you're maintaining two projects for the same world

Udon

Features

  • Tons of new VRCGraphics functions!
  • New Types:
    • VRCShader - Overarching class for global shader setters
    • VRCGraphics - Exposes a subset of Unity’s built-in Graphics class
  • Newly Exposed Functions:
    • VRCGraphics.Blit() - Copies source texture into destination render texture with a shader. Note that we do not allow you to supply a null destination
    • VRCGraphics.DrawMeshInstanced() - Draw the same mesh multiple times using GPU instancing
    • VRCShader.PropertyToID() - Use PropertyToID to get an ID based on a shader property name
      • Call this function only once during initialization, the ID can be reused and will not change, even between different materials and shaders
      • Property names must be prefixed with _Udon, or be the literal string _AudioTexture
    • VRCShader.SetGlobal*() - Use the ID acquired with PropertyToID as a key and specify a value of the correct type
      • The value will be available in all shaders in the world (including ones on avatars!) under the name passed into PropertyToID
      • Available variants:
        • VRCShader.SetGlobalColor()
        • VRCShader.SetGlobalFloat()
        • VRCShader.SetGlobalFloatArray()
        • VRCShader.SetGlobalInteger() - still sets value as float for now, due to a Unity bug...
        • VRCShader.SetGlobalMatrix()
        • VRCShader.SetGlobalMatrixArray()
        • VRCShader.SetGlobalTexture()
        • VRCShader.SetGlobalVector()
        • VRCShader.SetGlobalVectorArray()
    • ControllerColliderHit and OnControllerColliderHit
      • Added an example for these functions under VRChat SDK>Samples>ControllerColliderPlayerHit

Documentation

  • Added Network ID Utility page to document the usage of the new SDK tool to help with syncing network IDs between identical scenes in different projects
  • Added Local VRChat Storage page to show the most useful locations to know where VRChat stores things locally, and what they do
  • Added VRCGraphics page to describe the new VRCGraphics Udon functions and types