Developer Update - 15 December 2022

Welcome to the Developer Update for December 15th, 2022!

If you’d like to catch up, you can read our previous Developer Update from December 8th.

This is the last Dev Update for us until January 12 19, 2023! After this, we’re on holiday!

Despite some of the team taking time off, teams like User Support, Trust and Safety, DevOps, and other teams are 24/7. So, if you need us, we’re here! That being said, we’re ensuring everyone on the team has a chance to take at least a bit of a break.

VRChat New Years 2023

The VRChat New Years’ world, the VRChat Square, is nearly done! I told you last week I’d have some previews – and the team has given me one better! Check out this Save The Date video for the New Years celebration:

The VRChat Square is full of community-created content like posters, stores, and food trucks, as well as a bunch of little easter eggs hidden around! We’re really happy with how the world has turned out. We can’t wait for you to see it and explore!

We’ll put out a tweet soon with a longer version of the video. We’re still slotting some stuff in, but as you can see, it’s pretty far along! Here’s one more sneak peek to hold you over:

Schedule

Here’s how the schedule is looking (all times UTC):

The stream will start at 10:00 UTC December 31, with the first New Year in UTC+14, Kiribati!

From there, the VRChat Entertainment Network will come online and air user-submitted videos! These videos will continue to air through the night when a Stage isn’t live!

At 12:00 UTC, the Japan Stage goes live with a ~3-hour stream to ring in the New Year for the UTC+10, +9, and +8 timezones!

After the Japan Stage goes off the air, there are a few hours until the Europe Stage comes online at 22:00 UTC! We’ve got six artists lined up to play in the New Year for UTC+2, +1, and +0!

Finally, the Americas Stage comes online at 03:30 UTC to cover everything from UTC-3 to UTC-8! We’ve got another eleven artists signed on to bring in 2023 with gusto.

We can’t wait to see you at the party!

Creator Companion Reminder

We’ve released an in-app banner for the VRChat Creator Companion Getting Started guide! We’re doing this to get people more aware of the impending migration in January 2023.

SDK2 Deprecation Reminder

In addition to moving our SDK management to the VCC in January 2023, SDK2 will be deprecated simultaneously. SDK2 will no longer be available for download.

At a future date, SDK2 worlds and avatars will no longer be permitted for uploads. We will support existing SDK2 content within VRChat for as long as possible.

Ongoing Development

SDK Feature Sneak Peek

Some of the features we’re using in the VRChat NYE 2023 world will also come to you! Here’s a sneak peek:

Remote String Loader

When Momo first approaches the console, we see a joke in JSON format on the lower screen. This data has been fetched from a server and then printed directly to a text field!

This feature will enable creators to bring up-to-date information into their worlds without requiring a new upload. For some examples, you could show event schedules, high score listings, or change the weather in a world based on real-world data!

We haven’t yet decided on rate limits or whitelisted URLs. We’ll share more details as we develop the feature.

Video Recording

When Momo presses “Save Video”, a timeline plays music and mixes between some virtual cameras. The button also starts and stops a local video capture, saving a file to a VRChat folder within Videos on the user’s drive, or in the DCIM folder on a Quest.

This feature will enable creators to create virtual production studios within their worlds, and help visitors capture amazing clips!

For the full feature, we’ll need some safeguards to let users know when a world wants to save a video, and let them opt-in or cancel the recording. The feature will also offer many resolutions, framerates and codecs as it uses AVProMovieCapture under the hood. You will also be able to pause and resume a capture in order to do ‘in-camera editing’ and create a sequence as a user interacts with your world.

Again, more details as we continue to develop this feature!

Image Saving

When Momo presses “Save Image”, a new image file is created in the “VRChat” folder within “Pictures” on the user’s drive, the same place that the in-client camera uses.

This feature enables creators to choose a target RenderTexture whose contents will be saved, along with a filename to differentiate their captures, if desired.

Similar to Video Recording above, it needs some safeguards to ensure that worlds only save images with the user’s permission.

What’s planned for the SDK in 2023?

Increasing Communication with Creators

We’ll keep providing regular updates like these Dev Updates, letting you know what our current projects are and what to expect next.

We’ll also tell you when plans change, as they often do! We also use Feedback/Canny posts, the Ask Forums, and our official Discord server to communicate with creators. We want to hear what you think! As always, your feedback is appreciated.

Improving and Supporting What We’ve Got

We’re gearing up for some serious bug-squashing (ew). We’ll review everything in Canny related to the SDK and spend a good chunk of the year addressing existing issues and requests.

We’re working on better documentation – including websites, examples, and videos – and integrating them directly into the places you need them, like the Unity Editor, the Creator Companion, and in the VRChat Client.

We released some upgrades to the Udon Graph, and we’ve got plans that will greatly simplify how you can use it. Speaking of Udon upgrades…

Udon 2 (working title)

This is a big one! We’ve been working on a system that provides much more functionality while improving performance and maintaining backwards compatibility. We’re calling this Udon 2.

Before we describe some of the tech, here’s what this actually means for you as a creator:

  • The stuff you’ve already made runs faster in the new system, just by uploading it with the new Udon tools in your project
  • Can’t re-upload? Don’t worry, your old code will continue to work as before
  • Your Graph programs compile into C# instead of UdonAssembly, which is easier to understand and helps you learn C# if you want
  • You can use Lists, Dictionaries, Actions etc. – pretty much anything that C# can do. This makes it a lot easier to port existing work to VRChat

Now for some technical details: Udon 2 runs WebAssembly instead of UdonAssembly. Your programs are compiled into C# script assemblies using Roslyn, and run within VRChat using the same runtime as Blazor.

†: Limitations apply - the compiler will use C# 7.3 for Unity 2019 compatibility, and you’ll still need to work within the Udon VM sandbox, so you can’t access the local filesystem or make arbitrary web requests, etc. Multithreading will not be supported at launch, though we’re looking into it. Also, while it’s using WebAssembly, you will not be able to upload WebAssembly directly at launch.

Custom Graph Nodes

You can use U# to create custom nodes for the Udon Graph! With this change, you can write a static UdonSharp function and have it appear in your graph search. We imagine people will make libraries of custom nodes that work together to provide building blocks, and we’re building a test set ourselves.

For an example, check out the image below, which shows what it takes to toggle a GameObject using the existing graph compiler compared to the graph you can make with a simple custom node.

When do I get all this cool stuff?!?!

We’ve been working on Udon 2 for much of 2022, and we’ve got a few steps in mind to make the switch over. Currently, we’re in Phase 1, Udon as it exists today.

Our next step is to release an upgrade to the graph that outputs C#. This is Phase 2. This may seem like a small step, but it unlocks the ability to create Custom Graph Nodes. The GraphSharpCompiler is complete and working in all our internal tests – but we need a system to share and manage these custom nodes before they’ll be truly useful, so we’re going to build that before releasing the new compiler.

In the meantime, we’ll continue building out the WebAssembly systems, which will be able to use the new C# programs more directly. We’re not ready to put dates to these milestones yet, but we’ll continue posting updates as we have them.

When we switch over to the new WebAssembly VM (Phase 3), we’ll include compatibility tools to run UdonAssembly programs in the Unity Editor and the VRChat client. So, existing content should all continue to work, and each creator can update their existing content to the new system on their own schedules.

Conclusion

That’s it for the last Dev Update of 2022! Whew!

As you can see, we’ve got a ton of cool stuff lined up for you next year. Between Groups, all those new SDK features, Udon updates, new features, fixes, polish, improvements, and a few things we haven’t told you about yet, we have a lot on the way for you! We’re excited to get all of this stuff to you so we can watch you use it to make VRChat a great place for everyone to be.

As a final note, remember: thanks to the holidays, we’re going to get a lot of new friends in VRChat that are getting into VR for the first time. Try to remember what it was like for you, that first time in VR. Remember that person you met early on that taught you the ropes, and kept you around? Be that person for them.

Thank you, and have a wonderful rest of 2022.

39 Likes

Looking forward to Udon 2

11 Likes

Will the boost in udon 2s performance be similar to running native c# in unity?

Certainly cool to see!

5 Likes

Will the NYC World have any accessibility options to reduce onscreen fx from the world? I am visually sensitive so too much activity causes issues. Last year no such option existed.

3 Likes

It will be in between, generally faster than Udon, but generally slower than native Unity C#. There are some cases like if you’re doing particularly allocation-heavy operations that may approach Unity C# performance just based on the allocator differences though. But in general it will still be slower than native Unity C#.

10 Likes

Exciting stuff!

3 Likes

Happy Holidays!

4 Likes

I’m just happy to hear things like multi-dim arrays will no longer be a PITA

1 Like

Best Update Paragraph

10 Likes

Thanks for bringing this up!

I’d say that this year’s NYE world is a little visually intense. In addition, there’s a toggle to turn off the video screen as well as adjust the volume.

Once the NYE world has been released, please let us know if these changes helped you! (Or if they didn’t, so we can do better next time.)

5 Likes

Sad there is still no mention of avatar scaling… alas. Looking forward to seeing what you guys come up with it, nonetheless.

4 Likes

Sounds very cool.

“pretty much anything that C# can do”
Out of curiosity, does that include creating classes that don’t derive from UdonSharpBehaviour?

6 Likes

Yeah it does

10 Likes

Very excited to hear about the Remote String Loader!
Then we’d just need to have a handy way to save back to a web api and we’d have world persistence finally! :wink:

4 Likes

Udon 2 looks promising!

Though my only fear is new NYC World. Looks way to simpler to last years, which had a lot backlash. And the visual might be too intense for some people.

Custom nodes does make it a bit easier looking at the example, but any time i look at udon graphs, it’s harder to understand than even the code, and i’m very very adverse to code. This feels like an improvement but not any type of real solution for ease of use.

The easiest scripting systems to learn and use are fill-in-the-blanks systems, which SDK2 had, it was perfect, easy to learn, hard to mess up. Most people don’t need the full array of C# capabilities, they just need basic functions for basic tasks - toggle a game object, spawn a prop, play an animation clip. Limited fill-in-the-blanks type interfaces are what most people need for accessibility of world development. If it’s integrated into udon, then perhaps allowing people to expand upon it or tweak it manually, but still bulk done by a basic trigger → effect ui.

With Udon, you have to understand a bunch of jargon and whatever else, or you have to know the coding syntax. If you are familiar with code you’re going to have an easier time. This is still a massive barrier of entry for many people without the time or energy to learn a whole language or convoluted graphing system.

1 Like

What’s the reason for switching to Wasm? Is it just a more mature and standard technology than UdonAssembly? Are there any potential speed gains?

3 Likes

It provides similar sandboxing to UdonAssembly while being capable of running faster. And it’s compatible with existing toolchains so building the tooling needed is much less complex since it’s mostly established.

6 Likes

I really hope Udon 2 will contain List<> and AsyncGPUReadback, other than that hype for more performance (even if its not native C#, it will probably more than suffice)

4 Likes

I’m excited in the next year. :heart: pretty awesome world.

4 Likes