Hello! Welcome to the latest VRChat developer update for 16 August, 2022.
This week, we’ve moved to two Dev Updates a week, on Tuesday and on Friday. We’ll do this for a few weeks, and eventually drop down to once a week.
Upcoming Releases
This week we plan to release 2022.2.2p3 out to Live. This means that all the features that are in Live Beta right now will be available for everyone!
If you’d like to see what these features are, check out some of our posts from last week. You can also check out the patch notes. It’s been updated with the stuff we released on Friday.
Next up, we have two main focuses in parallel: we’re aiming for more iteration on features, while we also push for 2022.3.1, which includes the Main Menu 2.0 Revamp.
Feature Work
Main Menu 2.0 Revamp
We’ve been working on the new Main Menu revamp for a very long time! You might’ve caught a preview of it in one of our previous dev updates where we showed off the movable main menu:
We’re planning on putting the new Main Menu into Beta very soon! Unless something changes, it should be live-compatible, so you’ll be able to use it while we iterate and improve it during the beta process.
Right now, we’re planning for it to be the main feature in 2022.3.1, which as we noted above, may be coming out as soon as next week. Fingers crossed!
We try to keep big feature releases like this limited to single features to reduce bug reporting strain. So, that update may focus entirely on the new menu. Again, plans in flux, so this might change.
We’ll have some more communications lined up when we release so that we can properly introduce the new UI to everyone.
Not much other info for now, but we thought we’d set you up.
Visual Adjustments
This feature allows some adjustment to how VRChat appears, primarily in color adjustment to ensure individuals with color blindness have some options to help them use our UI and enjoy VRChat.
It also includes the ability to adjust screen brightness, and reduce post-processing bloom intensity (or turn it off). We last talked about this feature here.
This feature is in continued development, and had to return to QA to get some bugs addressed.
Visual Adjustment Feedback
We’ve seen feedback that users would like to have more control over other visual effects in worlds. Our initial pass on this feature is focused almost entirely on improving accessibility.
Adjusting other post-processing effects (or permitting users to remove the stack entirely) impacts worlds and world creators in ways we need to review in-depth.
While it is true that many visual adjustments could be construed as accessibility-focused, some adjustments could be used in ways that make certain creations difficult or impossible to implement. As such, we have to measure the impact of these changes and additions before implementing them – because once we do so, it is difficult or impossible to go back and remove that feature without causing quite a bit of blowback.
In other words: we are taking our time and being careful with the implementation of features like Visual Adjustments to ensure it benefits the most people possible as much as possible, while simultaneously not overly limiting the ability of community creators to make the content they want.
Quick Menu UI Improvements
With all the features we’ve been adding to the Quick Menu, it became apparent that the scrolling and section-collapsing behavior of these sections wasn’t ideal. So, we did some work to improve it!
Here’s a video of our QA team trying to break the Quick Menu. Notice the improved scrollbar and how the menu remembers the previous position when switching tabs. Also, when you fold categories up, you no longer “teleport” across the menu. Nice!
Portal Placement
We’re implementing a way to vastly improve portal dropping! When you drop a portal right now, you blindly drop it in front of you, hoping that the location you’re putting it is valid. No more! Now, you get a nice UI showing you where the portal will be, and if the portal is valid or not.
We’ve shown these graphics off before, but just to catch you up:
Invalid Portal Location
Valid Portal Location Indicator
Portal Drop Preview
This feature had been queued behind other tasks, as we became resource constrained and had to wait to assign someone for implementation.
Some work got done, and now the task has a prototype. It’s waiting for initial testing and iteration.
Even More Personal Mirror Iteration
As we talked about last time, we had to make some trade-offs in how we implemented handling of transparency on avatars in mirrors. We’ve seen the feedback from users in the Live Beta, and we’re still researching the best path forward. Handling transparency in mirrors across the multitudes of user-created shaders is tough, and there hasn’t been an ideal solution we’ve found so far.
Also, the Face Mirror has a new scaling feature! That’s way easier to show off:
Unlimited Mirror Resolution
We got some feedback last time that users want to be able to save the “Unlimited” mirror resolution, instead of having it restart per-session. So, we did that. It saves between sessions.
Initially, we did this because setting your mirror to Unlimited resolution devours system resources, and someone clicking on a bunch of settings might not realize they just completely filled up their VRAM by clicking that button. The setting has a warning, but it can be a challenge to get important, complex information comprehended when someone’s smacking buttons.
We were able to mitigate part of this issue because of another non-user facing task we’re working on, where the user’s settings get sent to the output log. This means, at the very least, VRChat Support agents will be able to see that setting and potentially diagnose issues faster.
Hide Avatar by Distance
This feature is getting some more iteration to address some bugs and issues.
First off, users that you’ve blocked still have their proxies show up when they’re outside the radius. This was fixed.
Also, PhysBones poses would get reset when users left the radius and re-entered. This wasn’t desirable, so we also fixed it.
Finally, our investigation into animators resulted in us deciding that the lowest-risk approach is simply to disable all renderers on the avatars when they’re hidden. Animators still run, so the state of the avatar should be fine once it shows again. This will incur a performance cost, however, especially in cases where an avatar’s animator is poorly made.
Unfortunately, this is a bit of “damned if you do, damned if you don’t” situation, so we decided to err on the side of not breaking avatars for the time being.
For now, animators will continue to run, but renderers will be turned off. Of course, this isn’t a final decision, and we may return back to this later to see if we can come up with a better solution.
All three of these tasks were in QA testing, and some have passed.
Avatar Haptics
We last talked about this feature here, but in short: Avatar Haptics allows you to pat someone on the head, touch them on the arm, or grab their tail, and your controller will respond with some haptic feedback. No avatar setup is required for this.
For a little bit of tech insight, it uses a special rendering pass to detect avatars and depth, and uses that to calculate haptic strength.
One challenge we’re finding is that the Valve Index haptics aren’t giving us great haptic feedback. This is because the input hooks available to us are limited, since we’re still using legacy input. Upgrading our input integration is a very high-impact task (as in, we’d have to change a whole bunch of code) and is therefore out of scope of avatar haptics, but it does put more pressure on us wanting to do the input upgrade sooner rather than later.
For what it is worth, we already really wanted to upgrade our input system anyways, but this is just yet another reason.
This task is getting some engineering and optimization attention, because it uses some techniques that could impact performance.
Chatbox
We’ve gotten a ton of feedback from people using the Chatbox on the Live Beta! We’ve read as much as we can, and we’re still gathering more. There’s a lot of people asking for stuff that we already have on the roadmap (in addition to the bug reports), so let’s catch you up.
If you’re not familiar, the chatbox allows you to send messages in text format to users that are near to you in the same instance. The chatbox appears above your head when you send a message.
The intent behind the Chatbox is to provide an alternate way of communication that is as similar as possible to communicating with voice in VRChat. We want everyone to be able to talk with their friends in VRChat, but we also don’t want to turn VRChat into a “general chat”, text chatroom, or IM service. The chatbox is meant for ephemeral messages that allow people near each other to communicate, but disappear once they’re gone, just like voice.
Keyboard
A lot of people have talked about our keyboard. The new Chatbox feature and Keyboard Paste buttons have put a lot of pressure on it. A lot of people aren’t a fan of our implementation, and we aren’t either. It’s hard to use and slows everything down when it pops up.
We’re planning to redo our keyboard, likely sometime after the new main menu is released.
Currently, we’re in the design and iteration phase. We have a list of internal requirements for a new keyboard, and are figuring out the nuts and bolts of what we want the ideal VR keyboard to look like.
This is a high-priority task, as we’ve got a lot of new features pushing on the keyboard. However, due to its scope, it’ll come a bit later.
Chatbox Sound
We’ve received feedback that folks want a sound to be played when text is sent. We think that’s a good idea. We’ll be doing this and tying it to that user’s voice channel. You can toggle the Chatbox Sound on or off for everyone in the Quick Menu settings.
We’re also going to provide an OSC endpoint for “text finished” so you can play this sound at the appropriate time.
As a final note: muting people (either directly or via the safety menu) hides their chatbox right now, and it’ll also turn off the Chatbox Sound.
Chatbox Options
In total we’ll have these settings that you can adjust (these aren’t final):
- Chatbox Sound
- Toggles the sound that plays when someone sends a message
- On or Off
- Display Duration
- Changes the amount of time messages stay above someone’s head
- 2 seconds to 60 seconds
- Chatbox Opacity Slider
- Changes the opacity of the chatbox and related UI
- 10% to 100%
- Keyboard Opacity Slider
- Changes the opacity of the keyboard that appears for chatbox
- 10% to 100%
- Chatbox Size Slider
- Changes the size of the chatbox
- Small to Large
- Keyboard Size Slider
- Changes the size of the keyboard
- Small to Large
Action Menu and Bindings
Right now, the method you use to pull up the keyboard is the Action Menu. However, there’s been asks for other bindings, such as the traditional “T” key on the keyboard.
However, we need to ensure we’re not going to squash world bindings, because world authors using Udon can bind to any key they’d like. As such, this needs to be easily enabled or disabled from the Action Menu.
We’re also investigating adding VR controller mapping, but we need to ensure we’re not running over other settings.
Chatbox Position
We’ve received some feedback regarding the positioning of the chatbox. By default, we’re going to have it remain in its current position, which typically will be over a user’s head.
We realize that this might not work well with all avatars, so we’re looking into providing a second “middle” option that will move the chatbox up or down the chatter’s avatar to match the viewer’s height. We think this will help out users with shorter avatars.
Chatbox Visibility Range
Right now, chatbox visibility range is the same as user statuses, but we’re thinking it should be about the same as voice settings (like falloff, Earmuffs, etc).
So, we’re going to change it so that the chatbox fades out at the same distance that voice does.
Everyone or Friends by Default
We’ve seen a few requests from users who want the chatbox to be enabled for everyone by default. We understand the thinking here: why not let everyone communicate how they want, without having to jump through hoops?
While generally we’d agree, we think there’s a pretty strong moderation and safety impetus to limit it to Friends-only to start. Users who have your chatbox hidden will be able to see an activity indicator when you type, so it isn’t totally invisible. We’ll watch how people use this feature (and how often users get reported for abusing it) and re-assess this choice moving forward.
With that said, we’ll be keeping an eye on things, and are open to changing this. It’s often hard to gauge stuff like this via a beta. Only about 4-5% of the userbase has used the Live Beta, so it’s a bit difficult to see how people will use it en masse. Additionally, Beta testers consist primarily of very engaged users, so it can be tough to estimate how a new feature will impact newer or more casual users.
Visibility In Mirror
Ever see a shirt in a mirror? It’s backwards! That’s how mirrors work!
…but it’s not necessarily how we want chatboxes in mirrors to work. We’re looking into ways to solve this – likely with the use of a shader.
Filter
The chatbox will have a basic profanity filter that will be on by default.
We know that not all users will want this on, so you’ll be able to turn this off locally.
Chatbox Iteration
Here’s what we’re working on for the Chatbox this week, in rough priority order.
High
- Fix a bunch of bugs!
- QM Settings and new options
- Typing indicator should disappear after 5 seconds
- If player is muted or has voice blocked via safety, hide indicator
- The typing indicator should inherit settings from chatbox (opacity, size, etc)
Mid Prio
- Inherit voice falloff range for chatbox distance
- Add sound on message send
- Add binding for keyboard (T?)
- Make keyboard bindable in VR
- Implement “middle” chatbox placement
Other Stuff
Here’s some additional items that aren’t exactly ongoing development, but are things we’d like to let you know about.
Beta Feedback Board Changes
We get a LOT of feedback, especially during Beta releases. The volume of this feedback is pretty huge, and we have to be careful about how we organize and handle it so we don’t lose information in the process.
We’ve been working on organizing our Beta Feedback Board a bit better. Over time, you’ll notice that we’ll start implementing “Categories”, where you can mark your feedback or bug report as pertaining to a specific feature (you can always choose ‘uncategorized’). We’re also changing the way that this feedback is processed internally, to help handle the influx of feedback that comes with any Beta.
We’ve also implemented a “Build Number” field, so you no longer have to append the build number to the title of your post.
We’re also looking at ways to help people in increasing the quality of their feedback posts. High-quality feedback and bug reports are much easier to take action on, and reduce the risk of duplicate, non-constructive, or unactionable posts. This is probably the toughest part, but we’ll continue to work on providing ways to make this easier for everyone.
Continued Development
We’ve been very busy over the past few weeks. The pace is quite high, but we’re getting some seriously good work done rather quickly. However, this pace does bring up a few questions and challenges for our continued development efforts.
First off, we don’t want to burn our team too hard. VRChat doesn’t subscribe to the “crunch” culture of development, but there are certainly times where members of our team choose to go all-in. We have a lot of people on the team that are personally and emotionally invested in VRChat – people who were oftentimes hired directly out of the community. For many of us (T: myself included), VRChat is a dream job. However, that passion can easily overflow into working yourself too hard. We must be careful to guard against that enthusiasm turning into anything resembling a requirement, and we continue to be successful in that regard.
Second, despite the majority of these new features being things we already had lined up for eventual release (and as such, already had some good work done on them), there’s a lot of missing polish and standing bugs that come with rapid development. We have been circling back to fix these issues as we moved along, pushing critical ones out as small patches while the Live Beta continues feature iteration. In other words, if I had a 2003-era “Under Construction” GIF to put here and on every feature we’ve been working on, I would.
And finally, something to keep in mind is that the VRChat team isn’t the same size it was a year ago. We’ve doubled in size – which meant we had to do some serious organization! Although we weren’t disorganized before, scaling to our current size meant things needed to change. We had to figure out how to best organize projects internally, set up teams, structure, all that fun management stuff. Then, we had to try things out, and ensure it worked out for us.
We’re through most of those growing pains now, so we have more resources and more people to throw at more projects! Those projects are better organized, which helps us finish tasks more effectively and more efficiently. So now, we can develop more things, more quickly, simultaneously. We finally hit our stride not too long ago, which means we’re now capable of the kind of rapid iteration you’ve been seeing from us.
Of course, we’re not done growing, either. We’re still hiring.
All of that in mind, we feel it is important to tell you that we’ve seen all of your feedback over the past few weeks. We’ve learned lessons that have fundamentally changed our development process and priorities for both the near and far future. Your feedback is extremely important, and we want you to continue to tell us how to make VRChat better for you and the communities that you’re a part of.
We know how important VRChat is to you. VRChat is also extremely important to all of us on the team. We want to keep working with you to make it the best place for anyone and everyone to express themselves, create art, learn new things, share experiences, have fun with friends, and make some new ones.
Conclusion
That’s it for today! Remember, we’re at two updates a week now versus the daily ones from before. Expect the next update on Friday, August 19th.
Thank you!