Developer Update - 7 December 2023

Welcome to the Developer Update for 7 December, 2023!

Today’s Dev Update features the world Snowpeak Retreat by Rum Ham, and avatars by TerraReef and Nae the Loud. It’s gettin’ pretty chilly out there, so sidle up to the outdoor fire pit, grab a drink, and warm up with some friends.

If you’d like to catch up, you can read our previous Developer Update from 22 November.

Important Info / Announcements

VRChat Mobile no longer requires VRC+!

We’re moving VRChat Mobile from Alpha to Beta status! What the heck does that mean?

You can now use VRChat on Android without having a VRC+ subscription!

We were always gonna do this, we were just waiting to get the app to a point where we felt good letting everyone use it. VRC+ users are more engaged and know how VRChat works, so we knew they’d have good feedback (you did!!) and you’d be tolerant to a bit of jank (you were!!).

However, with the release of the Native UI, we think we’re ready for a fresh round of users. Keep an eye out for new friends on VRChat Mobile! They’ll look like Desktop users but with “Android” on the nameplate. Be nice to them, and show them around!

Show them the magic of VRChat and what got you to stick around.

This change should be live VERY soon if not now, along with some communications on normal channels (Twitter, Discord, etc).

VRChat 2023.4.2p1 and p2 released!

We released patches! They had some stuff. P2’s probably the last patch of this year. See ya later, 2023!

New Years 2024 SOON!!

Submissions for VRCNYE 2024 have closed! We got a TON of posters, 11+ hours of video, amazing booths, and a secret special guest to model the “rooftop hangout” section in the NYE world.

We’re reviewing content now and making the hard decisions of what posters we can slip in.

Expect to see more announcements as we come closer to the event!

Content Gating Changes

We released Content Gating! But then, we tweaked it a bit.

The system is meant to be forced on for all users under 18. However, as it turns out, a lot of people did not put their correct age in, and we severely underestimated how many (legitimate!) cases of people putting in the wrong date existed.

So, we need to go back and implement a way for people to rectify errors in their personal information (in this case, their age) in a way that satisfies both safety and regulatory requirements.

As such, the age-based forced content gating is disabled for now, but will be returning early next year once our processes have improved.

In addition, due to overzealous tagging, the categories “Extreme Horror”, “Excessive Gore”, and “Extreme Violence” were removed from the age-based forced gating. We found that people were “too careful” with their tagging – and content that would go too far in those categories wouldn’t be allowed in VRChat anyways.

That last bit is subject to change as we work on the system, but we thought we’d let you know.

Ongoing Development

What the heck does “Security Checks Failed” mean

So some of you might’ve seen avatars with “:question:” and “:x:” characters on the thumbnails. What the heck are these?

These are the output of our content scanning system. A “:question:” means the avatar hasn’t been scanned yet. “:x:” means it failed. If there’s no mark, it passed!

Failed? Failed what?

Failed our security checks! In addition to determining avatar stats (so you don’t have to calculate it), our system also checks for various malicious patterns that show up in crashers. Bad asset bundles, egregious memory usage, that kind of thing.

If the avatar fails that check, it won’t be visible in VRChat.

Why are you doing this?

In short, we’re using this system to reduce crashers in VRChat. It’s been working for a while now and it is pretty dang good at its job.

What are the limits?

We’re not sharing that at this time, but they are very high limits. They are likely to be adjusted quite often, too, as we tweak to avoid false positives.

Oh. Cool. How do I know if something failed?

In your own avatar list, you’ll see a :x: in the corner of an avatar that’s failed checks.

The avatar won’t be usable, and the UI will display “Security Checks Failed” when selected in the menu. This’ll work both on your avatar and on the avatars of others when you click “View Avatar Details”.

My stuff failed, but it isn’t bad! Its not a crasher bro i swear just show my avatar

That’s fine! We are fully expecting some false positives.

If you have an :x: on an avatar you uploaded or see “Security Checks Failed”, please contact our Support team with the avatar ID, and they’ll pass it on to the relevant team.

You can also see this on the site if you try to view the avatar ID.

Head-Chopping, Reverts, and more, oh my

No decapitations here. In 2023.4.2, we made some changes to how constraints in mirrors work, and also how they interact with our internal “Head Chopping”, i.e. scaling down the head bone so you don’t see your own eyeballs from the inside (because that is terrifying). This was done for performance, and we did see an actual performance improvement by doing so!

We did, however, also see a lot of feedback that this broke certain features on existing avatars, like hoods, snouts, hair, glasses, etc. that were using constraints to “undo” our internal head chop. Thus, we reverted that change for now in 2023.4.2p2.

So, we will be working on a custom solution!

VRCHeadChop

We’re working on adding support for customizing how your avatar’s head appears in first person!

This is a fairly specialized use case for avatars currently achievable using Unity constraints - we’re now looking at adding this use case to the SDK in an official way to help make this technique more accessible and performance friendly. This will involve a new component added to the avatars SDK named VRCHeadChop.

In the demo video above, the hair and ears are kept visible while the rest of the head is scaled away.

A few extra details:

  • You’ll be able to add multiple head chop components to your avatar if there are multiple bones you want to control.
  • The head chop component can be toggled on and off via an animator, where a disabled component won’t scale its transform away.
    • If all of the head chop components on an avatar are turned off, the entire head will be chopped as usual (until any of the components are turned on again).
    • You could use this to make expressions toggles that turn parts of the head on and off, for example.
  • None of this will change how your avatar appears in mirrors or to other users – it’s applied from your first person perspective only.

Once that has been out for a while, we are considering reimplementing the original constraint fixes, since they do improve performance. We will take extra care to keep as much functionality as possible this time around, and by then also hopefully the new officially supported component will have gained traction

Oh, also, I’ve been told to mention “therians” here, for furry brownie points. :thinking:

nVidia Variable Rate Shading

Nvidia VRS Foveated Rendering wises fwom the gwave!

This one was a little contentious since we initially announced it, before realizing we’d have some incompatibilities with the single-pass instanced stereo we were hoping to move to. Some stuff has happened since then that frees us up to continue investigating it!

Here, have some cool images, taken in Chromatic Frequency by Axinovium:

You can read more about nVidia’s Variable Rate Shading here.

We’re doing experimentation with VRS right now, hopefully for public release eventually. Don’t have any scheduled release date yet. We just think it’s neat. :camera_flash:

Conclusion

That’s it for this Dev Update!

We’re skipping our next Dev Update, because its smack-dab in the middle of the holiday break. Take a breath, take it easy, drop by the VRChat NYE2024 event!

We’ll see you next year, on January 4, 2024, for what’ll probably be a pretty lightweight Dev Update.

Thank you!

19 Likes

Will VRS support gaze? Will we need to use VRChat’s official (and not fully functional) eye tracking if so?

Hope y’all add per-eye blink to that to ease that transition!

3 Likes

that VRCHeadChop component seems really cool! Hope to see more stuff like that in the future.

3 Likes

Nvidia VRS Foveated Rendering? Is this compatible with Pimax foveated rendering? Would be useful to eventually crank up my resolution. Not sure how to go about enabling it.

HeadChop sounds like fun for the user experience! I just hope it has a settings toggle.

I’ve been told to mention “therians” here, for furry brownie points.

Yep. You’ll start to notice therians in VRChat more frequently. They use Theta Delta (ΘΔ) to represent themselves as such; pretty neat. The more you know!

1 Like

So wait I’m confused, one sentence says that a disabled component shows the bone, but then the next sentence says all disabled components hides all bones? Seems to contradict itself.

Just a reminder that to replace the functionality of scale constraints that creators need both the ability to show something that is a child of the head, as well as hide things that are not children of the head.

You would want to use this in place of Pimax’s foveated rendering, among other things it has support for supersampling the center of your view. If I’m remembering Pimax’s implementation right, it should also provide a bigger performance boost. Win/win!

By default it will likely be set up as FFR, there’s quite a few design considerations/technical constraints that haven’t been sorted out yet.

HeadChop will be exposed as a component you can animate on/off to toggle individual bones. We’re leaving it up to avatar creators as to whether to make that runtime-toggleable or not.

2 Likes

LET’S GOOOOO

1 Like

Glad to see some of the age gating restrictions lightened a little, definitely felt like forcing on anything not to do with primarily adult/suggestive content was a bit much.

Also WOO HEAD CHOP!!!

Edit: When can we expect head chop to come out anyway? I presume next year?

2 Likes

that’s pretty nice I love to see that :heartbeat:

Am I correct in understanding that Head Chop just changes the scale and position of bones to reflect a shrunk or unshrunk head bone, or is there some deeper rendering magic going on?

The reason I ask is that Modular Avatar’s Visible Head Accessory performs mesh manipulations to ensure that there are no polygons that are weighted to both first person visible and non-visible bones, to avoid artifacts where boundary polygons clip through the viewpoint. I’m curious as to whether those manipulations will be needed going forward (I’m certainly happy to change it to stop using constraints though!)

2 Likes

VRS being wesserweckted fwom the gwave
Is a welcome addition

1 Like

Dynamic foveated rendering will probably be supported via the existing eye tracking endpoints, yes - no reason to double the work!

Not sure where per-eye blink fits into DFR though?

1 Like

Very neat. Its good to see that the devs are listening to the community. But on the topic… I really dont like how the new monetization features are subscription based. I want to just pay for things once and have them, you know?
I also bought a subscription which only lasted a day because I guess it hit the end of the month? I really dont like it working like that at least.

2 Likes

Nice that we finally have a proper way to counteract the head shrinkies. After having made a hat visible in first person i realized how powerfully immersive firstperson elements were. Calling it “Head Chopping” though :fearful:

That’s all very good! I have to say that I’m very concerned about the security checks on my avatars tho, some are heavy and I need them to be like that, and I don’t want to concact the support everytime.
Also I hate crashers and trollers and I’m glad you’re doing something about it.

What about the new unity version?

It’s nice to continue working on improving performance, but some of the attempts feel like they need to be communicated up front to avoid, and there are many potential problems behind every change.

If there is no planning in advance, once the changes are made, they can only create a new thing and gradually replace the old thing, and should not modify the old thing too much.

Currently, there are four main aspects that consume CPU in VRchat: PhysBones, Animation, Constraint, and Udon.

Although Udon has been trying to improve performance for a long time, the biggest problem comes from data. The script designed by Unity3D is designed for data manipulation, although it is not structured in terms of ECS, which makes the components intuitive and easy to operate.

However, after the design of Udon VM and other designs, data operations such as packaging of Udon VM have become more expensive. It will be more expensive to repeatedly request a large amount of data in triggers such as Update, such as avatar related on Player, etc., with Unity in order to The GC design that can interact with different languages ​​​​to achieve memory management has done too much damage to the cache, resulting in a performance-destroying experience and a CPU-dependent LLC (referred to as L3).

Although I guess there may be limited improvement in Udon2, I hope this part of the problem will be taken into consideration.

3 Likes

Hey @tupper !

I know y’all have been busy with multiple projects, but there is any status updates regarding Udon 2? Even just a short a response eases my curiosity.

Thanks!

Thank you for the info on the new security checks! I am really happy to have this along with serverside stats, even if there will be a few growing pains here and there.

I’m wondering if there’s any status updates on the 2022 SDK. Working in 2019 is well… you can guess, and my current project would benefit immensely from it.

Thanks!

It’s great to see an official solution for controlling head visibility, but I do want to say, please don’t make the mistake in thinking this is the only thing scale constraints are used for. They’re easily the rarest constraint outside of head related uses, but also required for other advanced avatar tricks. Hopefully we can get the majority using constraints for the simple head visibility to switch over to the more optimal solution, but I’d hate to see the scale constraint functionality taken away entirely from the other use cases with no alternative.

Perhaps a warning could be included in the SDK upload page?
“This avatar is using scale constraints. Please use the ‘HeadChop’ component instead if applicable.”
Make a short video to demo the new component. People like videos. It looks easier to use for the typical purposes, so it should gain traction just fine.

That way people using constraints for functions that HeadChop cannot fill, can still do so.

1 Like