Welcome to the Developer Update for January 26th, 2023! This is the second Developer Update of 2023.
If you’d like to catch up, you can read our previous Developer Update from January 19th.
VRCat “Early Supporter” Badge Distribution Ending
The VRCat Early Supporter Badge is getting retired at the end of the month!
This badge is the one that appears in your profile, as shown above. It’s been active since December 2020, so needless to say I think we’ve given everyone a pretty fair chance!
Don’t worry, VRCat will continue to pester you for treats from their vantage point on top of the quick menu.
Creator Companion Reminder
We’re currently planning to wait on the release of the updated VCC with the Web UI (we call it “VCC-Web”) before fully swapping to VCC.
Due to feedback, we are investigating direct downloads of packages. They’ll be VPM-compatible UnityPackages instead of the legacy ones. VCC will continue to be the recommended and primary method to set up the VRChat SDKs and keep them updated.
SDK2 Deprecation Reminder
In addition to moving our SDK management to the VCC, SDK2 will be deprecated simultaneously. SDK2 will no longer be available for download.
At a future date, SDK2 worlds and avatars will no longer be permitted for uploads. We will support existing SDK2 content within VRChat for as long as possible.
New Quick Menu Avatar Details
We’ve done some revamp work on the Avatar Details page on the Quick Menu! It takes after the style of the MM Avatar Detail page a bit more. It’s even got a Favorite Avatar Button in there. Also, we had a request to move the Texture Memory stat up near the Download Size stat, so we’ve done that as well.
For a peek behind the curtain, we also took the time to make some changes to how the stats are displayed to make it a bit easier for us to make changes to this page in the future.
Audio Slider Fixes
Our next release includes fixes for VRChat’s main audio sliders. Going from 0% to 100% will be smoother than before, which makes audio sliders more useful for setting a comfortable volume.
Here’s a video comparing what’s odd about our current audio sliders.
Volume warning, it gets quite loud!
You might notice that…
- VRChat was still audible at 0%
- VRChat did not get loud until you reach 75%-100%
- 125% was uncomfortably loud
Our next release fixes all that! 100% will sound as loud as before, but values from 0% to 99% are now calculated correctly. 125% will no longer blast you completely, and 0% will mute the game.
Setting any slider to 50% will now make it sound 50% as loud, as you’d expect. However, this change means that values from 1% to 99% will sound louder than before. We’ve adjusted VRChat’s default audio settings to compensate – they’ll sound as loud as they always have.
We could go on, so please leave a comment if you’d like to know more. We hope these changes will make VRChat more comfortable for you!
Heads up: Due to these changes, our next release will also reset everyone’s audio settings. We’ll notify users via a loading screen pop-up so nobody’s caught off guard.
Avatar Sync Bug
There’s been a bug for a bit where users joining a world would sometimes have parameters out of sync. One of our engineers who fixed up this bug gave some detail on the problem:
This is a bug that I worked on for a day or two of my jam week as it’s something I’d noticed while playing quite a long time ago that has persisted until present day. I’ve seen a lot of wardrobe malfunctions occur as a result (and some simply broken avatars in some circumstances), and a lot of people have headaches as they try to design their animator state machines to counteract the possibility of it occurring.
Here’s a video of the bug in action:
The first swap happens normally. Everything initializes as expected when I switch to the white-haired avatar. A few seconds later I repeat the process, and you’ll notice that this time the hair is briefly black and the socks are missing before it corrects itself a moment later. If my state machine were more fragile it may have never recovered, as it may have made transitions that it couldn’t return from. What’s worse is that this only happens for remote avatars (never locally), and usually only for some people in the room, which makes it very confusing for the user it occurs to and significantly more difficult for them to try and fix.
Ultimately, this ended up being a race condition between parameter sync and avatar initialization. When a user changes their avatar, they signal the avatar change and as they initialize their animator, they send a parameter sync to the room. When a parameter sync is received from the user, it is stored in a buffer and then applied to the animator for their avatar. When an avatar initializes for a remote user, it first has its default parameter values loaded and then any parameter sync data that has been received writes on top of those defaults.
Under certain network and processing conditions, if a parameter sync had not been received in a given time-frame, stale data in that buffer was being applied to the new avatar. This means that under certain circumstances, when a user loads in to a world it may first initialize their avatar with all zeroes for their parameter memory, or if they swap avatars it may apply the chunk of parameter memory from their previous avatar to the current one until the next parameter sync comes in and corrects it.
This bug was fixed by more closely associating a parameter sync with the avatar it was intended for, allowing us to determine whether or not the data in the buffer is stale. If it’s stale, we can just choose not to apply it, and have the defaults loaded while we wait for the parameter sync we now know is incoming. The solution is not complex, and most of the time spent was in attempting to reproduce the issue and determine exactly where things were going awry (because of parallelism and timing constraints, I couldn’t reproduce this in editor and had to build a new client every iteration).
Search Fine-Tuning and QoL
We’ve been working on a bunch of smaller changes that will make Search in VRChat much less of a pain in the butt to do, especially when you’re iteratively searching for different things one after another.
With these changes, search mostly work just like before with a few key changes:
- If you input custom search filters and execute the search, we now stash away those search parameters.
- While the Main Menu is still open, we override ALL subsequent searches, including canned searches, with those custom filters and indicate this fact using the golden text on the “Search Refined” button. This will exclude the query, and only the filters will be overridden.
- Once the Main Menu is closed, the custom search filters will clear and return to their defaults. This is the point where custom filters will have to be defined again if the user needs them.
- If the user swaps between World/User searches, that is another event that will clear out the custom search parameters as they’re not compatible with one another.
- “Relevance” in world searches is a “Sort By” parameter now. It always has been a sorting parameter in code, but the refine search modal has been updated to better reflect this.
- The “Update Results” button on the refine search modal will only become enabled if the user changes any options. This will hopefully serve as a better hint that this button must be pressed in order for the filters to be applied. Clicking out of the modal should cause it to close and not apply any changes.
- Like search filters, search queries will also remain in the search query box until the user closes the main menu or changes their query.
- Canned searches that use the “Exact” sorting option will disable the button to open the Refine Search Modal and will override any filters set by the user previously as “Exact” filters are only set internally to fetch specific results.
We considered changing the way you select filters, but decided to stick with the Refine Search Modal instead of transitioning to drop-downs. The current design works a lot better for settings that have multiple options that can be selected at once.
Here’s some videos showing our QA team putting these changes through their paces!
Updating your filters and then searching for something new retains your filter settings:
Closing the Main Menu will clear out your previous search term and filters:
Searching for the “Worlds by VRChat” canned filter is a special case and will not let you refine the search. As we expand the use cases behind canned searches, we might use this functionality again!
We hope these changes make interacting with our Search UI easier and more intuitive, as it’s a really important part of exploration in VRChat.
Quest Finger Tracking Updates
We don’t have any video because the engineer working on the project had their Quest act up today. But, here’s a bunch of changes coming for Quest Finger Tracking!
Please note: These features are for Quest only for the moment. We definitely want to get finger tracking over to PC at some point soon, but we don’t have an ETA just yet. We’re working on it, though!
You can now select one of three pickup options in Accessibility settings:
- Fist - Make a fist with your hand to interact with pickups
- Pinch - Pinch your thumb and pinky finger together to interact with pickups
- Both - Use either gesture to interact with pickups
You can use the pinch gesture in combination with the fist to “Use while equipped” currently held objects like pens, guns.
Gesture Lock: Hold your left thumb and pinky together to disable all finger tracking gestures except for the quick menu.
Jump Toggle: You can now turn off the jump gesture completely in the Accessibility settings.
Cancel Gesture: Tapping your thumb and pinky will close most prompts and menus.
Fixes & Adjustments
- Fixed orientation of grabbed objects to be more natural
- Fixed orientation of the portal placement arc
- You now keep held pickups grabbed if hand tracking is lost temporarily
- Your hands now hold their position if tracking is lost temporarily
A Few More Fixes
Fix on the way: The microphone selection bug where the client would use the wrong mic when starting in VR
Mentioned last week:
- Fixed and improved Camera UI scrolling in VR
- Fixed blocked users in the instance tanking your FPS
- Fixed vote-kick notifications not appearing
That’s all for this week! We had some things we wanted to get in this week but didn’t have time to get some good media and text for. We’ll get to it next week!
Thank you, and we’ll see you next time!