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.
Current Development
Udon Networking Tweaks
Hi world creators!
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
. DataToken
s, in turn, are capable of storing anything else – including other DataList
s and DataDictionary
s! 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 DataList
s and DataDictionary
s 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. 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!