Developer Update - 26 January 2023

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.

Ongoing Development

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. :smiling_face_with_tear: 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!

New Stuff
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

Conclusion

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!

26 Likes

Hi!

I’ve been having an issue where on startup, my selected microphone in VRChat is selected to a different input than what is displayed. Do the audio adjustments mentioned fix this bug? A few of us STTS mutes have accidentally voice revealed recently, after reloading in from a crash…

Thanks!!

2 Likes

please see:

6 Likes

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.

Interesting. So will it be possible to use the VCC to check which packages are up to date (or not), but then install packages yourself manually?

I don’t know the exact details but that sounds about right.

IMO, that method does seem kinda roundabout, considering you can install the SDK by just telling the VCC “hey, install it” and it handles it for you without manual import. but more options are (sometimes) better!

Yes - we think the VCC will eventually offer the best and easiest experience overall. It’s currently doing that for many people, but there are some cases where it’s making it harder so we want to make sure those creators affected can still use all the new stuff.

i got idea so when on desktop you could switch to vr by just open steam vr so bascily desktop to vr because there other games that do that i would love to have that feature without having to close the game having to reopen it.

Amazing, we were about to make a larger write up about this issue after i left a comment of the exact transfering of older params from previous avi. Wasn’t sure if it was known yet! Thankfully you were on top of it. Mighty awkward bug when it happens with certain girly clothing if you know what i mean.

:heart: that will be nice to fix issues around.

Hold your left thumb and pinky together

Can you please let us configure which hand is used for these (and all other!) functions? The lack of options makes a lot of these features unusable for players with physical impairments.

3 Likes

One of my biggest gripes with UI 2.0 has been the fact that searching & world browsing has been (in my opinion) negatively impacted.

One of the #1 things I would do back in the day was just scroll through the never-ending list of worlds in Labs/New, enter a world, check it out, and then hop to the next one.

With UI 2.0, every time you join a world then open the worlds menu back up, you’re tossed back to the top of the list. This loss of state is really annoying when you’re quick-hopping from world to world.

In terms of search, this same concept applies.
There are many reasons you might close your menu while searching for a world.

  • If you are with a group and you are trying to find a new world, you might open your menu, search a term, close your menu to move with the group, then open it back up to continue searching. I don’t want to re-type my search term and scroll back down. You could say that’s what saved queries are for, but that’s cumbersome to be dependent on. They also don’t maintain position.

  • If you’re exploring, you might want to continue from where you were.

I feel like clearing out the search completely is more cumbersome for a good exploratory experience because it “resets” you every single time, and even the “solution” to this, which is saved queries, doesn’t save your place in the list. In my opinion, the constant reset-to-zero discourages world hopping & exploration because it’s tedious.
Sure, the quick searches help you find new things when you’re looking for complete randomness, but if you’re browsing a specific search term, it seems as if you’d WANT to be able to treat it like a search engine in a web browser. Closing the menu is a required action at times. It’s also easy to do by accident.

I do wish there could be a compromise where you could have a toggle to, at minimum, maintain your query/filters between opening/closing the menu.

If saving the position in the menu is no longer viable (due to the implementation differences with paging), that’s understandable, but it also seems like it’d be completely possible to save your query, the offset, and however “shuffle” is being seeded to bring you back where you were by just structuring the API call to resume where you were. You’d need to account for the fact all the worlds above where you scrolled would need to be re-populated, but you can save on waste by just calculating the scrollbar offset, fill in the UI with proxy objects, and then just do the inverse search query as the user scrolls up.

When you scroll down, it maintains everything that you scrolled by until you close the menu, and then it purges it from cache. It makes sense to have it not cached, it’s very wasteful.

What I’m asking for doesn’t appear to be how the data-binding for the infinite scrolling appears to be designed. So it’d definitely take some reworking (if you didn’t want to keep everything cached and then we’re back to the cursed old infinite scroll), but it’s a massive usability gap.

Would be a nice option to have. Personally, I’ve found myself exploring Labs/New far less than I used to when state was maintained for the main rows. And I personally desire search to have the same kind of experience. If I’m exploring, resetting to zero every time is discouraging.

11 Likes

Tupper, if you could, i would like to ask a follow up on the avatar scaling feature.
From the last time i asked, around august i believe, has there been any progress or implementation from the VRChat team?

1 Like

Love the avatar sync fix… does this mean we don’t have to be as careful as to which side of a toggle is zero/false anymore?

1 Like

Same status: We want to implement world/instance rules before we implement Avatar Scaling (and other features)

Yessss! The worlds section always going back to the default ‘top of the list’ state is really annoying when trying to explore new or community labs worlds.

1 Like

Going to make checking texture memory usage so. much. less. finicky

And some day we will have texture memory metrics and limiting, some day.

(I understand why it isn’t exactly trivial to add, can’t trust upload SDK and can’t read until loaded in)

1 Like

But what if, you implement like the mods allowed to do. And when you finally finish those rules you switch to the new improved, and better way?
I know it is asking too much, but why not use this time to enjoy something that gives people smiles, instead of having to wait for the perfect and far long in the future project?

We’re not super keen on doing work that’ll be revamped in a later, relatively close release. That’s wasting valuable time!

The way that modifications did scaling is not exactly straightforward and has its own bevy of issues, and does not solve the issues that are solved by putting scaling behind World/Instance rules.

I don’t want this thread to turn into the same discussion on Scaling we’ve had lots of times, though. Check previous Dev Updates for more info!

Part of me really wants to have chatbox for desktop to be bound to enter, or y, or t.
Update: didn’t know this was a thing until now, thanks tupper

Maybe the ability to change keybindings on desktop? Maybe give desktop and VR users the ability to see previous chatboxes in another hand or on other side of the screen?

It’s bound to Y right now, isn’t it?