Developer Update - 28 July 2022

Hello! Welcome to the latest VRChat Developer Update. Here, we’ll be talking about what we’re working on and what our progress looks like so far.

These will be daily for a bit, although we’ll likely swap to a slower schedule eventually. We don’t think posting “worked on the same thing” 3 days in a row is interesting, even if it happens sometimes. (Unless you really want to see it.) So, without too much fanfare, let’s get into it.

28 July 2022

Production, Design, and Tasking Meeting

The Production and Design teams have been spending 100% of their time in the last few days gathering community feedback and translating it into actionable changes or feature adds. The Community team has been in direct contact with several communities and community leaders (such as Helping Hands, among others) to gather feedback. A large database now exists with all of the feedback and information we’ve gathered.

A full meeting of all production, design, and engineering staff met for an hour and a half to discuss. Tasks were sorted by priority (mostly informed by impact to accessibility) and how close each item was to being ready to ship. The focus was placed on speed above all else, with the understanding that this might result in initially rough results that need later polishing, or having to redo work later.

The team went through the highest items in this list and assigned them to engineers. Normally there’s a bit more process to this where projects have tasks, and then the tasks are handed down to engineers – but in the interest of time and utilizing people’s interests in working on specific things, we let people take things that were outside of their normal wheelhouse if they were interested in it.

Tasks were opened up to team-wide feedback for any additional notes and insights. Historically this has worked out very well – most people that work on VRChat also play VRChat a lot so lots of people have input sometimes.

Approximately two weeks of development was laid out. There’s more features after this list, but things are being doled out as fast as development completes. After the first batch of changes, a second batch will be built and assignments will be reassessed so that projects that were paused can resume. Regardless, every feature and change that was gathered by Production and Design is being considered at the very least (and in the vast majority of cases, is being implemented).

Some logistics were discussed. First off, Monday August 1st is a holiday for VRChat (we have a mix of Canadian and US company holidays). Some planning was done to account for this.

Second off, there was discussion about potentially getting a release out this week, maybe as a network compatible Open Beta. There might be some features that are done “enough” to release for people to try stuff out. The general consensus was “let’s see what happens.”

Features, Fixes, and More

Here’s just some of the stuff that got moved today. This will be quite long because everything moved today! No particular order here.

Horizon Adjust

This feature lets you change your “horizon” such that you can use VRChat completely while in a bed or lying down. This is different from the Movable Menu. Here’s a quick video showing off what it looks like from the viewpoint of someone else:

It’s kind of hard to tell, but the person in this video is lying down the entire time. They sit up in the last few seconds of the video.

This was part of a recent internal Feature Jam and is nearly complete. Currently the thought is to have it released in a network-compatible Open Beta before the weekend, but that depends on several things. The UI is getting shoved into the Quick Menu for now.

Microphone Sensitivity / Noise Gate

This was already part of a recent jam! It’s a pretty easy addition.

We’re looking into adding a simple UI element that lets you adjust where the mic starts going “hot” and sending audio.

This task got assigned out to the person who did the jam project.

Noise Cancellation

We did this too as part of a recent jam. It removes background noise from your mic.

There’s a bunch of noise cancellation libraries out there. We’re looking into RNNoise. It’s fast, reliable, proven. There’s also an implementation for Android we’re looking at.

This task got assigned out to the person who did the jam project.

Visual Settings

As described yesterday, Visual Settings are a set of features that includes a set of color-blindedness filters that can be set, as well as a slider that adjusts the intensity of these filters. Additionally, there is an option to affect only the VRChat UI, or the VRChat UI and the world you’re in.

Notably, the method we’re using to adjust colors for filtering in the prototype does not work on Quest due to graphical limitations. We will be addressing this with further iterative updates and adjustments.

This feature will also include the ability to turn off Bloom, as well as gamma/brightness and contrast sliders.

The code implementing the visual changes is complete, it is getting UI now and will move to QA soon.

Slider Snapping

This is an effort to add snapping to sliders in our menus. This is a pretty common request as its really hard to land exactly on 100% on the volume slider!

This is a pretty easy addition. Task was assigned. It’ll have a toggle to turn on and off across the whole UI. The easiest implementation would be to default to 5% snap points.

“Solo Audio” Button

Like on an audio mixer, clicking “Solo Voice” on someone would mute everyone in the instance except for that person. If you wanted to hear another person, you could toggle the solo button on them too and both solo’d users should be audible to you.

There’s some complications here but this would help a ton for users who get overwhelmed with audio. We already have existing “muted” indicators on nameplates so informing other users that they’ve been muted by you can be done without extra work.

There’s some concern about this setting getting stuck on for people. Design efforts were started to see how to address these problems, as this feature seems to address cases where audio might be overwhelming from too many people around you.

Local Voice Falloff Slider

This would allow users to adjust their own local voice falloff.

There’s some concern that this will interfere heavily with custom Udon audio management scripts. It also may interfere heavily with our integration of Steam Audio. That’s been in development for a very long time but has made some significant progress lately.

The desire for this feature may end up with us pushing harder on Steam Audio instead, as we think that would fix a ton of the problems. ONSP (our current spatializer) is very harsh.

“Conversation Dome”

While working on the above two fairly similar features (Solo Audio and Local Voice), we’ve been pitching around the idea of a “conversation dome”. This is a sphere/dome around you with a customizable size. Anyone outside the dome will have their voice turned down almost completely, allowing you to “focus in” on the conversation near to you.

This seems like a more elegant and intuitive solution, so we might pivot and try that instead.

(Don’t worry, we still want Steam Audio either way.)

Steam Audio

Speak of the devil-- Steam Audio is a full audio system developed by Valve. It isn’t just for Steam-- it can run on just about anything. It just so happens Valve made it and distributes it for free.

We’ve wanted it for a very long time as ONSP (our current spatializer) has been found lacking for our uses. You can do some really neat things with Steam Audio, like baking occlusion and audio materials.

However, right off the bat, Steam Audio’s tuning for voice is way better than ONSP’s. That’s our main concern to start, because hearing a bunch of voices at once in VRChat is extremely disorienting.

We’re accelerating efforts and poking Valve a bit more because we think this could address a ton of problems. We think Steam Audio is quite close. Right now we’re waiting on Valve to get back to us regarding some crashing issues.

Avatar Distance Hiding

Hide avatars that are more than X meters away from you. This task got assigned out and is in design for UI!

The proposed implementation doesn’t completely hide avatars, but instead replaces them with a super low poly gray diamond with a circle on the ground beneath it. No IK. We don’t want people to be totally invisible as we’ve run into issues with that in the past.

This task is currently in development. Here’s what we’re thinking the low-poly diamond will look like:


No rig, no animator, static mesh, GPU instanced-- so super performant.

We’re also considering how this might affect performance, as a bunch of these on top of each other might cause issues if there’s transparency. As such, we’re probably not going to let them be transparent to start.

That causes other issues, though-- now you’ve got a bunch of diamonds blocking your view of the stage, potentially. As such, we’re considering further iteration where you can reduce them further only to the circle on the ground.

Text Input to Speech Voice Output

The weird header name is important. There’s a lot of different systems that we’ve seen requests for. Text-to-Speech for any given user’s voice, Speech-To-Text for voices of others, Speech-To-Text for all audio, Speech to Text to Speech for a form of voice anonymization…

This particular item is regarding inputting text into VRChat and getting a voice outputting from your avatar.

The PC implementation is fairly straight-forward, and there’s already a few assets available for purchase that we could use as our internal API. These would use the built-in Windows TTS API so you can install whatever voices you like.

Quest is a bit tougher as there’s no native TTS API. We could go with a cloud-based generation API but those get expensive! We’re looking into other solutions.

There’s the possibility of pushing for PC first, then working on Quest later.

Invite+ Fix

Secure instances had a bug that we didn’t catch where Invite+ didn’t work as described due to the changes we made with Secure Instances.

We fixed it. This is already live, no need to wait on a client update.

Ask To Portal

Common request: have a setting that, when enabled, requires that you interact with a portal to enter it. In VR or with a controller, it’s a trigger pull. On Desktop, it’s a left click.

Task was assigned and now has a prototype.

Near-Clipping Slider

This slider adjusts the near-clip on the user’s camera.

This is useful for very small avatars, but adjusting it too low can cause problems for worlds.

This task was assigned, but has some concerns, so it’s in design to try to work around the concerns.

Home World Instance Type

Some users want to load into a different instance type other than Invite.

So, now you can set your Home world to be any instance type – Invite, Invite+, Friends, Friends+ and even Public!

Task was assigned and now has a prototype.

Particle Limiter

This is a really straightforward change. The Particle Limiter has been in VRChat since 2018, but it’s been hidden in a config file – mostly because it tends to break really flashy animations.

We’re going to add a quick checkbox into the UI that lets you turn it on or off without restarting VRChat.

This option will be grayed out for Quest because it’s on by default and we don’t think letting people turn it off will do much good, it’s better that we get avatar creators on Quest to work within the limits.

We want to readjust the limits too, but that’s been left for later as it’ll complicate the task.

Paste Button

We want to add a paste button so its very easy to paste stuff into text fields you find in VRChat. This is most useful for pasting in YouTube links.

The new UI changes might cause doubled work here, so the new UI team is coordinating to ensure that the extra work is minimized.

Right now, this task is in design stages. The above problems complicate it. It won’t take long to implement, though.

Better Portal Placement

We’ve wanted to shove portal placement on the end of the Holoport interface for a long time. This is pretty often asked for, so we’ve assigned it.

The interface and method needs a bit of design, so it’s currently getting a design pass.

Haptics on Touch

This feature causes your controller haptics to activate with varying strength when you touch various Avatar Dynamics systems.

This task was assigned out. The Avatar Dynamics development team is working with the assigned developer to ensure that the checks don’t impact the very finely high-performance optimizations that were done for PhysBones and Avatar Dynamics.

Increased Favorites

This is pretty straightforward at first appearances, but there’s concerns with avoiding paging problems we’ve got with the old UI. The new UI can handle it just fine, but the current Main Menu has a lot of cruft that prevents reliable paging to work, preventing any given group from having more than 100 items in it.

The backend team is working with our Unity engineers to find the best way forward.

Personal Mirror

This is a local-only summon-able mirror you can use for tons of purposes.

We had a prototype whipped up for the summer jam a few weeks ago, so we’re rolling with that! It should be out pretty fast. It needs some art (icons, mostly) but it’s nearly there.

Here’s an updated video preview of the prototype. It’s nearly done!

There’s some additional work needed for the full body calibration mirror, so that’s getting worked on too right now.

Full Body Tracking Calibration Visualization

There’s a few requests for better visual feedback on how “close” the calibration is for your full body to your avatar. Our FBT and IK focused engineers are looking at ways to best represent this.

This task is in design, so it may take a bit before it gets to prototype stage. The engineer working on this is currently working on another task on this list.

Camera Changes

Screenshot Lag

There’s a long standing bug where you lag a bit when you take a screenshot. This is a common request. Should be easy! Task got assigned.

Portrait Mode

When you take pictures sideways on your phone, the image saves in the appropriate orientation. We should do that too. Task got assigned.

Increased Screenshot Resolution

We want to (effectively) uncap the resolution setting you can choose for your camera. There’s some concerns as once you go past 8k, you have to resort to tiling to capture the full resolution, and that can have weird issues with post processing in worlds. Task got assigned.

We’re investigating workarounds for that problem, but if its anything more than an easy fix, 8K will probably be the max rez you can set for now.

We’re also looking into adding a way to set the rez in-app, but we might not have the room for now until we get the Main Menu.

User Notes

This feature lets you make notes on individual users. You can store up to 256 characters in each note, and have a note on up to 2000 people.

This was actually done experimentally for an internal Features Jam week! It looks like we’re going to try to implement it web-first, and then get the in-client edit and display features working in an upcoming release. It might have to wait on Main Menu 2.0, we’ll see.

Hide Avatar by ID

This feature would let you block a specific avatar ID so no matter who’s wearing it, it is blocked.

Some design considerations were being discussed, primarily with the overlap with Safety systems and how “Show Avatar” would work. It was decided that the system would override Safety, but would be overridden by clicking “Show Avatar” on someone.

This task is in development and a prototype should show up soon.

We were considering if “Hide Avatar by Author” was a good idea. We decided, for now, it has a lot of social implications we weren’t comfortable with. It could have odd “cooling effects” on the network of public avatar creators we weren’t comfortable with tackling right away. Maybe later, once we’ve thought about it.

Safety and Security

There’s more items being discussed around safety and security, primarily with how to address crasher avatars. It was known and expected that, with the release of EAC, crash avatars would become far more prevalent very quickly. We’ve had several efforts in progress for a while to help counter crashers, but they are very big efforts and require more time. They won’t be a quick turn-around, but thankfully several of these have been in progress for a long time already, so maybe we’ll get something soon.

We would like to give more details out to the community, but showing our hand is tough as it risks malicious actors getting a preview of what they’ll need to account for. Sorry! You’ll have to trust us here that we’re working on it. It’s a major item of concern for us.

Trust and Safety has increased sanction severity for the creation and usage of malicious avatars.

SteamVR in Proton

It turns out that EAC broke SteamVR in Proton. Valve noticed quickly and Proton Experimental[bleeding-edge] has been updated with a fix.


That’s all for now. As mentioned at the top, we’ll be doing this daily for a little bit to see what the community response is.

See you tomorrow!


Oh! I forgot to add this one.

Main Menu Location / Moving

This is a very common request where users want to be able to have the main menu spawn directly in front of them instead of at an odd angle on the ground-- and also to move it around once spawned.

This is already in place in the new Main Menu. We’re working on back-porting the feature to the current Main Menu.

This is in development and a prototype exists for both the current Main Menu as well as the new Main Menu. We’ll have a video for you next time.