Developer Update - 9 February 2023

Welcome to the Developer Update for 9 February 2023! This is the fourth Developer Update of 2023.

Thank you to ACChosen for their world, Club Orion, featured in the Dev Update thumbnail! One day I’ll get to DJ there…

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

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.

Once VCC releases, SDK2 will be deprecated simultaneously and SDK2 will no longer be available for download.

New Updates - Unity Version Upload Blocking

We are blocking any uploads from below Unity 2019, including 2018, effective immediately. Very old SDKs (2021 and prior; the year, not Unity) do not send a Unity version, and as such are currently unaffected, but will be blocked entirely in a few days.

Users will see a message in their Unity console if their SDK is too old and they’ve been blocked:

Any users still on a version before 2019 should follow the below upgrade guides, and work their way up to the Currently Supported Unity Version.

As noted in previous Developer Updates, at a future date (undetermined, but on the scale of “months away”), SDK2 worlds and avatars will no longer be permitted for upload. We will support existing SDK2 content within VRChat for as long as possible, but the additional technical load is not something we want to maintain indefinitely – and not something we want to wait on until it breaks without testing or QA.

There are several community-created systems out there that can help with the migration and adjustment to SDK3 and Udon!

Most notably, CyanLaser maintains CyanTrigger, which provides a SDK2-like interface for Udon. He also has created a SDK2 migrator, which can auto-convert SDK2 to SDK3, including complicated assets like the Standard Assets package that was supported with SDK2.

VRChat 2023.1.1 Patches

We’ve had a patch to 2023.1.1 since we did our last release!

2023.1.1p1

This patch included a few small changes.

Audio Changes

First, we changed how audio sliders work… again! A member of the community very correctly pointed out that we were using the wrong scale for audio, so we adjusted the curves once again. Woo, iteration!

Some avatars and worlds are too loud. Even setting your slider to 5% was too much! This problem became slightly worse due to the changes in 2023.1.1.

No more! p1 includes another tweak to audio sliders, making them slightly quieter overall. Setting an avatar to 5% will be quieter than ever, but going from 0-100% should still sound smooth.

Here’s a graphic to help show that comparison:

The red line is the old one, the curve we had for a long time. As you can see, the volume adjustment offered tons of options for low values, but very few for high values – in short, adjusting to values between 0 and 70% offered a lot of range. However, that range broke down at higher volumes, meaning the difference between 90% and 100% was nearly indiscernible. Additionally, at 0%, the curve didn’t drop to 0%. In math-teacher terms, it didn’t intercept the Y-axis at the proper value!

On top of that, “overdriving” to 125% would result in an out-of-control volume boost that got to super high levels! Although we warn users when they go above 100% Master volume, we wanted to get that under control.

The orange line is what we swapped to in 2023.1.1. You can see the problem here pretty fast because it’s reversed! At high volume levels, you have a lot of choices, but at low, 5% is too loud. The curve “drops” too steeply at the end.

The green line is what we’ve adjusted to. Although it appears to be linear, that’s only because the Y-axis is a logarithmic value. Perceived loudness works on the scale of “log2(x)*10”. So, we mapped that directly against volume, which is what most games and applications use. In addition, the boost to 125% master volume maps to a much-more-reasonable 200% instead of the ridiculous 400%, and the values between 100 and 125% are far more useful.

As a result, you get a lot of choices for both lower and higher volumes.

Psst, audio engineers, here’s what you’re lookin’ for:

<2023.1.1: “x”
2023.1.1: “log10(x)*20”
2023.1.1p1: “log2(x)*10”

Give this a shot and tell us what you think!

A Few Fixes

We also fixed a few other issues while we were at it!

First, we fixed an issue with favorite groups:

- Fixed avatar favorite groups sometimes appearing empty (including VRC+ ones)

This popped up mostly when users would edit their favorites on the site. This is fixed now, so users who had missing favorite groups can see them now! This was a particularly commonly-cited issue to our Support team, so we’re glad to have it solved!

Finally, we fixed an issue with Index controllers:

- Fixed Animator Tracking Control components not working for hands when using Index controllers

We had made some changes to account for the way Quest finger tracking works, and those changes bubbled up into PC VRChat as well. Due to the way we handle finger tracking and how TrackingControl state behaviors work, this one took a bit to track down! However, it’s fixed now. Once again, Index users can hold up a Peace sign without having their fingers next to each other. :v:

Current Development

Udon Networking Tweaks

Hi world creators! :wave:

We’ve been tuning network traffic outbound from the client. This may propagate as issues such as slow or clogged traffic in worlds that make heavy use of Udon networking (synced objects, ownership transfers, etc.)

If you notice anything out of the ordinary, please let us know on our Feedback boards.

JSON in Udon

Moving on, let’s talk about JSON in Udon! If you weren’t aware, the internet speaks in JSON. It’s a data format that pretty much everything uses that retains reasonable human readability.

Udon is gaining the power to parse JSON natively! You’ll be able to take in JSON-formatted strings, run a function that converts it to containers, and then you can either grab specific values or explore the entire structure programmatically. You can also go the opposite direction – create those structures and then translate them into JSON.

While this project originated as just JSON in Udon, JSON needed some sort of interface that was effectively Lists and Dictionaries. Over time, that particular interface expanded in scope to be it’s own thing entirely, and we kept adding more and more… so eventually, it had all the features and more that you’d need out of actual Lists and Dictionaries.

The key reason why we did not do List and Dictionaries before is that exposing them as-is would mean exposing thousands of different Lists and Dictonaries! This caused a significant strain on the code generation for Udon, and many, many edge cases that caused countless problems.

But this time, we’re only exposing one List and one Dictionary, called DataList and DataDictionary respectively.

These contain DataTokens. DataTokens, in turn, are capable of storing anything else – including other DataLists and DataDictionarys! This means you can create data structures that are nested arbitrarily deep, which is a requirement for JSON.

Overall, we believe this feature will allow world creators far more flexibility in how they store data. You can use that storage to create better save systems, better communication between UdonBehaviours, better communication inside UdonBehaviors, and do away with massive unwieldy Array structures that were never meant to carry the weight they currently are.

Okay, enough words. Let’s show off some examples!

This is a DataList that contains strings, and also another dictionary, which contains more strings!

These DataLists and DataDictionarys also come with a nice, fancy inspector view. This allows you to explore the structure with dropdowns, just like Unity’s hierarchy.

You can drag items to rearrange, change types, etc.

As noted before, they can nest arbitrarily deep:

You can also select specific components, even if a GameObject has multiple.

Keep an eye out for this feature in an upcoming release and SDK update! We’ve got quite a few things packed up for our next SDK release – we think it’ll be very exciting!

Localized Tooltips

We’re starting efforts on localizing our interface!

To begin, we’re localizing the tooltips that appear across the bottom of the menu. We’ll support English, French, Italian, German, Spanish, and Japanese to start. We’re working on adding Korean as well. This build is using auto-translation as a first pass, so errors are expected, as well as the typical auto-translator nonsense.

As a fun example, the auto-translator turned the English “Bloom Slider” into the French “curseur de floraison”, which… well, as cool as it sounds, we don’t have a slider for adjusting flowers. :upside_down_face: We’ll work through these!

Notably, we’re planning to use a community-powered localization tool to help us add more languages, and make our existing translations more accurate! Many applications use community-powered localization, and we’re excited to see the languages people provide translations for. More information on the process (where? how? when?) is upcoming.

Either way, here’s a sneak peek:

Camera Rule of Thirds Grid

The camera now has an option to show a rule-of-thirds grid for easier photo composition! Find the button on the far right of the options for the camera.

Conclusion

That’s all for this week! Whew, lots of techy stuff in this one.

We’ll see you next week!

22 Likes

I’ve been wanting more options for the camera. The 3x3 grid is a welcome addition! What about bubble levels to the camera? Part of me wants to have the flying camera to have the ability to do portrait photos. What about a dropdown menu showing all of the camera’s buttons instead of scrolling?

7 Likes

that’s going to be quite helpful for the Japanese vrchat Community the localized tooltips out of curiosity is the plan to eventually localize the rest of the UI as well

5 Likes

Beautiful, the addition of (functionally) lists and dictionaries is going to let me do a few things I wasn’t able to before without dealing with unreasonable Array structures.

2 Likes

Yep!

We’ve got “auto-level”. Is that not sufficient?

We’d probably save that for a camera UI redo, which isn’t in the books.

:crab:

This specific screenshot seems to imply that 2018 is too old and is being blocked :sweat_smile:

VERY happy about this, thanks :pray:

Could we get more clarification on why these changes were made and what specifically this will entail on a… slightly deeper level? (does anyone have testing results or specific numbers to share?)

:clap: :clap: :clap:

glad to hear it’s getting fully localized eventually as apparently that’s been quite the hinderance in Japanese vrchat adoption the lack of language support outside of English and any rough idea when the tooltips will hit open beta

1 Like

Yeah my wording is wrong. I think we are blocking 2018. I’m getting clarification now and will edit my post when I get the proper wording. I did that, go read the thing.

In very high-level, non-technical terms: these changes are being made to curb malicious activity as well as address some technical issues that I do not understand enough to elaborate on, and may not be necessary to illustrate.

What kind of information is most useful for you to know as a creator? If you can tell me that, I can get it for you.

We’ve got “auto-level”. Is that not sufficient?

A little unrelated, but I’d love auto level to be able to do portrait as well. Flying camera too.

Gooot it. That makes sense. Passing that on!

2 Likes

Will we ever see a menu option to disable “Chairs” globally? We all know the pain of finding an amazing world but constantly accidently clicking seats. Sometimes the chair toggle is hard to find, sometimes there isn’t even one to toggle. Being able to turn them off ourselves would save world creators from having to add the option.

2 Likes

For localized tooltips will anything be exposed to udon? I’m thinking just start with exposing the users choice in tooltip language could be useful for worlds.

Then worlds with multi language support could automatically use the right language.

Also consider publishing the translations under a permissive license, so like as a world creator I could copy/paste the volume control strings into my project. I really like the “don’t trust these translations” notice that Qt has.

2 Likes

be warned a toggle like that might break some worlds as chairs are used for more than just sitting like those MMD dance worlds or some worlds involving walking on walls

1 Like

i’m aware, but in that instance you can just re enable them

Probably not. As others have noted, people use stations for a ton of things, and simply turning off or removing the component would have a massive number of knock-ons.

There are potential ways around this I can think of (turn off the intractability) but since this feature would have a relatively low impact and mostly affects quite advanced users, I can’t see it high on the priority list.

Regardless, we’ve had it listed as a feature request for a very long time. It isn’t untracked, I just can’t see it happening any time soon.

Not yet, no, but I imagine in the eventual future we might have the ability for you to access the current language setting in Udon so you can adjust your text to match.

1 Like

FYI, we’ve just released 2023.1.1p2, which includes the Camera Rule-Of-Thirds feature, as well as some other stuff!

No, “auto-level” only works for landscape orientation, does not apply to portrait orientation. Auto-level only works when the subject is on the same level as the photographer, does not work when the subject is above or below the photographer. I find when holding the camera to take a quick photo, the overall picture ends up being tilted into one direction. I would have to refer to the frame of the camera viewfinder to make sure the shot is oriented correctly, which is not ideal given how quickly events tend to come and go.

I would like to see bubble levels added into the camera which can also “snap” into portrait or landscape if the player clicks on the levels themselves. No more photos in skewed angles.

5 Likes

This is fun!
One of advice for Japaneseization is that most nouns do not need to be written in Japanese.
For example, “Avatar” “Invite” “World” would be more natural if they were written in kana as they are pronounced in English.

5 Likes

Hi!

Loving the updates! Thanks for keeping us informed.

I had seen Tupper’s posts on twitter about the performance of some animators, and how some poorly optimized avatars have a incredibly large hit to performance.

I am not good with Unity… I usually stick to optimized prefabs and occasionally commission folks to work on adding stuff to my favorite packages… but I’m trying to learn to do some of the stuff on my own.

I am concerned that I may accidentally create a “crasher” avatar, if I try to Kitbash a few features together.

Are my concerns valid/do I have to be extra careful adding extra stuff with my face tracking animations? Or is it more the folks who know how to get around limitations and are intentionally making avatars that have more than they should be able to handle?

Is there a n00b/boomer friendly tool (barely able to make edits to my own avatars) to make sure I’m not ruining other peoples experience?

Thanks!

1 Like

Animators are bad, but not that bad.

Notably, the avatar I’ve been talking about on Twitter is likely hitting the “Constraint cliff”-- a Unity bug or behavior where if you have more than ~600 constraints in a single scene-- disabled OR enabled– your frametime skyrockets.

Constraints aren’t free. In fact, they’re more expensive than PhysBones!


I’ve edited the OP to correctly show our current old-SDK-blocking policy:

We are blocking any uploads from below Unity 2019, including 2018, effective immediately. Very old SDKs (2021 and prior; the year, not Unity) do not send a Unity version, and as such are currently unaffected, but will be blocked entirely in a few days.

1 Like