Developer Update - 29 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.

You can read yesterday’s update here.

July 29 2022

Our normal full team sync-up in VRChat was cancelled in favor of our continued work on feature requests, and to get a Live-compatible Open Beta up.

Live-Compatible Open Beta

We’ve got a Beta out that you can try out with a bunch of new features. You can use these features right now. Join our Discord and check out the #open-beta-info and #open-beta-announcements channels to learn how to access the Beta.

This beta, unlike our usual ones, works with Live. You’ll be able to hang out during the weekend with your friends and try out these new features.

Due to the speed of implementation for these features, some of them may be in need of further polish (or might be buggy). Make sure you provide feedback via our Feedback forum.

You can access the vast majority of the new features via the Quick Menu’s “gear” tab on the far right.

Horizon Adjust

As mentioned yesterday, this feature lets you change your “horizon” such that you can use VRChat completely while in bed or lying down. This is different from the Movable Menu.

It works in both standing/sitting 3pt tracking modes, as well as with full body tracking. It’s worth noting that behavior while calibrating in full body tracking can be a little strange, and it’s possible that some setups might experience some strangeness.

If you’re having difficulty calibrating while your horizon is adjusted, try to make sure that you’re lying down completely flat.

As a warning, this mode can be disorienting – use it with care!

Horizon Adjust Known Issues

Horizon Adjust has some issues with loading screens and any UI that pops up, like the login screen if you log out.

Movable Main Menu

This is actually two features in one!

In the Quick Menu, you can lock the spawn location of your Main Menu to the center. If you set it to free, it will follow your line of sight-- even when you’re lying down!

In both modes, you also have the option to drag the Main Menu around so you can place it exactly where you want.

Check out this video:

Personal Mirror

This got a lot of additional work and polish today, went through QA, and was merged into the Open Beta.

Our primary goal was to push this feature out in a fairly basic state, but we’ll be iterating on it to add additional functionality as soon as we can.

Open it up via your Action Menu (the radial menu), under Options.

For now, the Personal Mirror settings don’t save between launches. We’ll fix that later.

Calibration Mirror

This is a special mode of the Personal Mirror. The Calibration Mirror appears when you calibrate and has its own settings which save seperately from the Personal Mirror so you don’t overwrite stuff.

Personal Mirror Known Issues

On Quest, leaving a world doesn’t remove the mirror, and it’ll be visible in the loading screen.

Portal Prompts

This optional feature prompts you when you walk into a portal to click or pull your trigger to go through. That way, you can’t accidentally walk through a badly placed portal.

You can turn it on in the Quick Menu.

To avoid confusion and better describe this feature’s functionality, it was renamed. The preview video below has the old name, we’ll change it before release.

Inverted Look-to-Move Improvement

When leaning very far back, or bending very far forward so that your headset goes slightly upside down, your look-to-move direction would suddenly point behind you. This change adds improvements to take into account if the headset is going upside down and allow you to continue to move forward during extreme leaning.

In simpler terms: we fixed movement for when you’re lying down on your back. Try it out, it’s always on.

Gesture Indicator

This is a feature where you can turn on a HUD element that shows the current Gesture in use on your controllers.

This task was created and assigned yesterday, and was completed and merged into today.

You can turn it on in your Quick Menu.

Home Instance Types

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!

You can adjust this in your Quick Menu.

Additionally, we decided to add an option when you click “Go Home” that allows you to return to the default VRChat home world. Likewise, if your home world fails to load, you’ll also be sent to the default VRChat home world.

Particle Limiter Toggle

This feature simply allows you to turn on and off the Particle Limits System.

This was added in! It’s in the Quick Menu. Turn it on and off. It’ll reload avatars when you do so to apply the limiter.

There’s some weird interaction with the existing config.json file, so if you plan on toggling this on and off, please remove the "particle_system_limiter" entry from the betas array in config.json as shown in the docs. If you have no idea what that means, don’t worry, you probably don’t have it on.

The custom limits you set in the file are still respected. So, if you wanted to have a config with the default values for some tweaking, it’d look like this:

    "ps_max_particles": 50000,
    "ps_max_systems": 200,
    "ps_max_emission": 5000,
    "ps_max_total_emission": 40000,
    "ps_mesh_particle_divider": 60,
    "ps_mesh_particle_poly_limit": 50000,
    "ps_collision_penalty_high": 50,
    "ps_collision_penalty_med": 30,
    "ps_collision_penalty_low": 10,
    "ps_trails_penalty": 10

Particle Limiter Known Issues

There’s a known issue where if you have the limiter enabled in config.json, it limits your own local avatar. This is unintentional – your own local avatar should always be unlimited from your point of view.

The UI version doesn’t have this issue, so it’s best just to remove the entry from the betas array.

Camera/Screenshot Lag

Currently, when you take a screenshot in VRChat, you’ll experience a short bit of lag.

In the Open Beta, this should no longer happen at all.

User Notes (Web-Only for now)

This feature is already live on the VRChat Home website! It lets you set notes on users, so you can note down where you met them, remember something to tell them, etc.

This task was a recent Jam project and was in progress already, so we just accelerated the web implementation a bit.

It’s website only to start. You can store up to 2000 separate notes, with 256 characters in each note.

This will be added into the VRChat application in Main Menu 2.0.

Auto-Disable Avatar Cloning on World Entry

Pretty self-descriptive. If this is on, your Cloning is turned off every time you go to a new world.

This was a straightforward request that was assigned yesterday and completed pretty fast. It’s in the Quick Menu under Safety.

Upcoming Features, aka: :warning: These Are Not in the Open Beta :warning:

We also have a bunch of other things that got some mileage today. These aren’t released yet.

Paste Button on Keyboard

This task is actually two things – pop up the keyboard when you click into a text field in the world, and implement a “paste” button onto the default keyboard.

Apparently there’s a Copy button now too, so I guess we should change the title of the feature next time. :thinking:

We’d actually really like to redo our keyboard, but that was planned for a post-Main Menu 2.0 change.

This task was assigned, is in development, and has a prototype. There’s some additional design considerations so a meeting was scheduled for Tuesday.

NearClip Override

This feature allows users to override the NearClip setting as set by the world’s Reference Camera.

There were some concerns that this might break worlds – setting NearClip too low can cause Z-fighting. However, it was agreed that users that go out of their way to adjust this setting will notice and reset it on their own. We’ll observe behavior as people use the feature and if its an issue, we’ll have to find a fix.

For now, we’re providing three settings – world setting, 3cm (0.03m) and 1cm (0.01m). Both the 3cm and 1cm options come with a tooltip warning telling users that it might cause z-fighting.

This task was assigned yesterday, and has a prototype today.

Text to Speech

We’re looking into implementing a Text to Speech library directly into VRChat. We want to offer this on all platforms, so finding a solution that works on all platforms is ideal.

In particular, we’re looking at Meta’s Oculus Voice SDK. In addition to being easy to implement, it also supports several other voice features we’re looking into (speech-to-text-to-speech, for example). However, since it generates voice data in the cloud, there are limitations we have to try to design around, like voice customization. We must also consider and handle the requirement for us to disclose that enabling the feature requires communicating with a third party’s service.

We may or may not end up using this SDK, we’ll see.

This task is currently in exploration and design.

Speech Bubble

We’re experimenting with letting users chat in text form via a chat bubble that appears over your head.

We’ve had this idea a few times over the years. Our main worry is preventing the “cellphone problem.” We don’t want people staring at their menus messaging each other across instances, even if that’s what people do anyways with overlays and Discord.

We were disproved with the advent of OSC allowing users to have a speech bubble on their avatar. Users were using these systems without the disruption we expected – but you still had to figure out the rather complex OSC systems out there. Those systems are still there if you want a super-custom solution, but we wanted a native solution.

Needless to say, this is also a big benefit for accessibility.

The Speech Bubble allows for local communication. You have to be close enough to read the bubble to see the text.

We’ve got a very early prototype completed.

Additional Favorites

The big concern right now is not breaking paging in our current and new UI, so we had to be careful with the numbers we’re laying out.

Here’s the numbers we’re looking at, although they may change.

Friends: 3 lists * 150 favorites = 450 favorites (2.3x increase)
Worlds: 4 lists * 100 favorites = 400 favorites (1.56x increase)
Avatars: 1 list * 50 favorites = 50 favorites (2x increase)

Friends, worlds unchanged.
Avatars: 6 lists * 50 favorites = 300 favorites (3x increase)


This is a fairly common request, but we have previously done internal testing and benchmarking and were unsatisfied with the results.

(Warning, technical explanation from an engineer follows!)

We were able to put together a prototype build with integrated FSR, but enabling it resulted in significantly more noticeable aliasing (jagged edges) in VR even when not up-scaling. Despite the high resolutions of VR HMDs the large FOV (field of view) means that the pixel density is much lower than a desktop display which makes it much more susceptible to aliasing.

FSR 1.0 is a contrast adaptive sharpening and up-scaling process. Aliased edges are naturally high contrast, so FSR sharpens the jagged edge making the aliasing more noticeable. This coupled with the constant motion of the HMD creates shimmering pixels in the distance and on any sharp edges.

Aliasing can be mitigated by anti-aliasing techniques. VRChat already uses MSAA (Multisampled anti-aliasing), but that only smooths the edges of geometry and not textures or UI. Attempts were made to add additional anti-aliasing using FXAA (Fast approximate anti-aliasing) and TAA (Temporal anti-aliasing), but neither produced an acceptable result.

The only performance gain from FSR is from reducing the rendered resolution which directly increases aliasing which FSR accentuates. The sharping and upscaling process does take some GPU time, but less than rendering the full resolution image. From our testing, FSR didn’t do a good job of scaling things back up to make up for the lost resolution, and the performance gain was the same as simply lowering the VR render resolution (as expected).

In short, the render resolution drop helped performance, but FSR doesn’t do a good job of scaling back up, and produces visually worse results than just reducing render resolution in the VR compositor.

Either way, people want this. So, we’ll put it in despite these results.

This task has been assigned.

Hide Avatars by Distance

Hide avatars that are more than X meters away from you and replaces them with a super low-polygon placeholder.

Additional work was completed on this task. It’s currently awaiting QA, who are understandably a little overloaded.

There were some additional pitches to consider:

  • Exclude friends from hiding
  • Exclude “Shown” avatars from hiding
  • Should the placeholder show you what direction someone is facing?

There was also some exploration and discussion regarding optimization of IK data (don’t need to send/recieve IK to people that aren’t showing you currently) as well as transparency. It’d be good if the diamond was transparent, but there are concerns about overdraw.


Once again, these aren’t all the things we’ve got queued up-- its just the ones we’ve been working on. More to come.

We’re heading into the weekend! For us, it’s a three-day weekend, so you won’t see another update until Tuesday.

In the meantime, enjoy the beta, and make sure you leave some feedback!