VRChat: Unity 2018, Networking, IK, Udon, and More

Tupper
VRChat
Published in
16 min readNov 9, 2019

--

THIS BLOG POST IS OUT OF DATE. Most of the information here is incorrect or irrelevant. Do not use this blog post for reference links.

For the most up-to-date info regarding our latest VRChat upgrade, check out our docs and the VRChat 2020.1.1 Udon release blog / release notes.

In particular, you can find our Migration Guide in our docs, which is probably what you need!

We’ve been busy at VRChat working on a lot of big-ticket items, and we’re finally ready to start moving some of these into open testing! As of posting this update, we’re pushing a new build to Open Beta that contains a lot of changes, including a new Unity 2018 version (we’re on 2018.4.12f1 now) and a new Networking system. We’re also prepping some other stuff for release that isn’t quite ready yet (like some noodly things).

In addition to the Open Beta update, we’ve got a lot of other work we’ve been doing. We decided to make this massive post and tell you all about it. If big posts aren’t your thing, we’re also planning on doing a stream before the end of the year to talk about what’s coming for VRChat.

Let’s go ahead and get into it.

Unity 2018 LTS Upgrade

If the title isn’t clear enough, VRChat is currently planning to upgrade to Unity 2018 LTS. We’ve made some announcements on our Discord, but we’re aware not everyone is on there — although you really, really should be!

This upgrade is necessary to support upcoming features for VRChat, like an entire rework of all things UI (menus, HUD, interfaces and some new surprises), Udon, Avatars 2.0, systems to Enable Expression, and to provide creators more access to all these new systems (including connecting to Udon). We’ve got big plans for the coming future for VRChat, and this upgrade makes all the fun new stuff possible.

We don’t have a planned date for release of this update, but it is likely to be soon. There’s a few things we’re still working on. However, it is important for you to get a handle on what you need to do as a creator sooner rather than later so you aren’t caught off-guard.

If you just play VRChat and are interested in seeing what Unity 2018 LTS allows us to do, check out the “Not-So-Technical” parts below.

If you’re a creator and want to know some important tips and guides, check out the “Technical” parts a bit farther down.

If you’re just here for a quick summary, here’s a tl;dr:

  • We’re upgrading to Unity 2018.4. We’re not settled on which sub-version, but our Beta is on 2018.4.12f1 right now.
  • This upgrade is necessary to support upcoming features for VRChat, like a new UI, Udon, avatar features, and more. We’ve got big plans for the coming future for VRChat, and this upgrade makes it possible.
  • Creators: Check your content in the Open Beta. If anything looks off, grab the 2018 Unity version — a reupload will most likely fix the issues.
  • If you haven’t made any content, don’t worry about it. However, your help would be appreciated in tracking down bugs and issues!
  • If you find bugs, post about it on our Feedback boards.
  • We only upgrade to Unity LTS versions, which is why we aren’t going with a later version.
  • We don’t have a solid release date, but we want to get the 2018 upgrade out as soon as possible. We will announce via Discord and Twitter once we have a release date sorted for the Unity 2018 upgrade.

Unity 2018: Not-So-Technical Parts

How do I get into the Beta?

You’re already in! Just use the open-beta branch on Steam. If you’re not sure how to get to that, check out our #open-beta-info channel on our Discord to see a step-by-step guide, as well as information on how to see the latest changes to the beta.

Why are you upgrading again?

Keeping up with the latest Unity LTS is one of our goals, and is a requirement for a lot of our future systems to work properly.

There’s a large amount of new features we’ve got planned for VRChat that rely on Unity 2018 as a dependency. For example, we plan on creating a brand new UI, adding new Avatar features and systems, and many other upgrades — including Udon. There’s also large benefits for stability and security, like improved crash report analytics and other features.

This upgrade is necessary in order for VRChat to progress forward as laid out in our internal and public Roadmaps.

I don’t create stuff. Should I worry?

Nope! Sit back and enjoy the ride. If you want to help, though…

Can I help?

Yes, absolutely! Go into the open-beta branch on Steam. Try things out, and break stuff! If it breaks, document it and report it on our Feedback boards. Make sure you write your bug report well. Well-structured bug reports are vastly more useful than one-liners or too much writing, and are much easier to log and work on.

Why not a later version?

As a policy, we only update to Unity Long Term Support (LTS) versions. Unity 2018 LTS is the latest in that line, so that’s what we’re going with.

How much of a performance improvement do we get?

This is a tricky question. Unity upgrades never give us performance improvements “for free”, for the most part. That being said, there’s a few features and systems that allow us to start working towards more efficient methods and implementations.

As an example, VRChat has had “multi-thread/multi-core support” for quite some time now (at least since Steam release). Unity 2018 and above grants the ability to more efficiently manage how tasks are assigned to threads. We’ll be using these upgrades as time goes on to improve performance. That being said, that kind of complete architectural change takes time — so don’t expect an immediate breakthrough. Much to the displeasure of both players and developers, “enable multi-core” is not a checkbox.

Is X going to break? Why?

Yes. Things are going to break. We realize that going through this is a pain, and we’re working on ways to make it easier for you (and us!) to do this in the future. We’ve also found some bugs with Unity that are holding things up, and we’re working with them to get those solved.

Thankfully, we’ve spent a good amount of time minimizing the amount of things that break, and reducing the number of things that need to be re-uploaded.

As far as “Why?”: Unity is a constantly-evolving engine, improving and adding features. This means that old features get deprecated or removed, while new features get locked behind upgrades. In order for us to grow and improve VRChat, we must upgrade.

What kind of cool toys do we get with Unity 2018?

A good bit! There’s a lot going on under-the-hood with Unity 2018. Here’s a super, SUPER short list.

  • Package Manager — Need to install ProBuilder? Post Processing? Unity Package Manager handles all that for you. Click, install, done. Are you a shader or editor asset author that wants to make sure your users are using the latest version? You’ll want to check out Package Manager too, because you can do all that.
Look at all that package management action
  • Progressive Lightmapper — Tired of having your massively overpowered GPU sitting idle while baking lighting? Me too. In Unity 2018, you can use the Progressive Lightmapper to bake your lighting in “real-ish” time using your GPU. This feature is still in-progress, but 2018’s version is nearly fully mature. If you’re not happy with results but still want to use your GPU, you can always look into using Bakery.
  • General Optimizations — Unity has spent a lot of time optimizing their engine and providing tools to developers to allow more efficient execution of code in various situations. In short, you should expect performance to be a bit better overall, and improve further over time.

There’s other items that we’re working on. You might want to search around a bit to see what’s new in Unity 2018. The interface has changed a little, as have some of the features available in the Editor.

In layman’s terms, Unity 2018 provides us with the latest and greatest platform to make our big projects (like Udon, new UI, networking improvements, new features) more possible, as well as enabling lots of other fun for upcoming updates. We have big plans for VRChat in the coming future, and Unity 2018 makes a lot of that possible.

Keep in mind that VRChat may not support all new features of Unity 2018, but we’ll support what we can. We’ll be investigating and adding support for new features as time goes on. For now, we’re concentrating on getting the Unity 2018 version of VRChat to a working state.

Unity 2018: Technical Parts

We’re going to provide some information in this post in a sort of Q&A, and go into detail where necessary.

Although this blog will not be updated if we move to another Unity version, you can always check our documentation for the latest upgrade process. We also provide links to various helpful tools and tips in that article.

Do I need to re-upload my avatar?

Probably not! Almost all avatar content will be fine. If you have some odd shader issues, go grab the latest version of your shader and re-upload after migrating your project to 2018.

Do I need to re-upload my world?

Probably not! If you’re still using Post Processing v1, you’ll need to swap to v2. It is not supported at all in Unity 2018. That’s the biggest change.

Do I really need to reupload everything?

This gets a little complicated. During the process of migrating and testing, we discovered several bugs with Unity involving older (made with Unity versions <2018) Asset Bundles that makes them display incorrectly in VRChat. These issues are bugs according to Unity, and we have been working with them to solve these issues.

Those bugs being fixed don’t cover all content issues, but we’re trying our best to help Unity and provide the information they need to get the problem solved. If these issues are resolved, it will mean that most content uploaded to VRChat from Unity 2017 or earlier should be OK without re-upload.

These bug fixes are not implemented yet in 2018.4.12f1, which is why we haven’t settled on a specific version yet. However, if you upload using 2018.4.12f1 and it continues to work fine in future versions, you should be OK and don’t need to keep re-uploading. This also goes for the previous versions we were using (9f1 and 11f1).

What’s going on with shaders?

You might notice that shaders are the primary issue with content upgrades. This is true both for worlds and avatars — when viewing legacy content (content older than the current version), shaders might not work properly.

Here’s a vastly oversimplified explanation: This is a pretty common issue when upgrading between Unity versions. Unity is perpetually upgrading their rendering features with every release, and this involves changing how shaders, Post-FX, and under-the-hood features work. As a result, shaders must be compiled for a specific version of Unity. Although Unity does a decent job of displaying older shaders, it sometimes has issues and bugs.

These issues are usually solved by game developers by re-compiling. However, VRChat creators can’t do this unless you re-upload, because shaders are compiled at content build time. There isn’t really an easy way around this for us, unfortunately!

As previously noted, we are currently working with Unity to attempt to improve shader compatibility from older asset bundles, which should help “legacy content” display more reliably.

I don’t have my avatar/world files. Can you help me?

That is unfortunate, but there isn’t much that can be done. You need to keep backups or original copies of your files so you can re-upload your content when changes like this occur. If you have commissioned your content, had someone else make it, or something similar, we strongly encourage you to keep a copy of the files for yourself.

What about Future Proofing?

You might’ve noticed an option in our SDK to use “Future Proofing” to upload a raw Unity Package to our servers. This feature was originally intended to allow us to re-compile assets for new Unity versions, but various issues prevented that from being feasible or possible.

Right now, Future Proofing is an unused feature. Using Future Proofing is not currently recommended, and will not help you (at the moment) when upgrading between Unity versions.

What else?

You’re gonna need to grab the right version of Unity. Right now, we’re using Unity 2018.4.12f1. This is going to change. We haven’t put our pencils down yet, and we’re still upgrading our internal builds as new LTS patches come out. As previously noted, we’re also waiting on some fixes from Unity themselves. If you need to install 2018.4.12f1, please do so using this Unity Hub link (copy and paste into your browser):

unityhub://2018.4.12f1/59ddc4c59b4f

or this Direct Installer link. Do not use any other version!

This blog post will not be updated with new versions. If you want to see what version we’re currently on, you should always check our docs. Check this page for an always-up-to-date version of the “Migrate to 2018” guide.

You should start “finalizing” your content upgrades. We’re reaching the point where we’re in the final few weeks, and that means you should be testing your content iteratively to ensure it works. Try things out, test them, report issues to our Feedback boards. If you have content you want to ensure works 100% in the next update, you should keep an eye on our Discord Beta channels.

Please. PLEASE

Keep backups. Please, please keep backups! Do not upgrade your only Project folder to 2018 without performing a backup. In a perfect world, all of our creators would be using some form of version control, but we realize that can be a bit complicated. Please keep backups of your projects. We don’t want you to lose your work.

You must use the latest VRChat SDK. No other version will work and we won’t support old versions. You should be keeping that up to date, regardless! Ignore any version warnings you might see.

Submit feedback! If you run into issues, find bugs, or other problems, please submit feedback to our Open Beta Feedback boards.

A lot of community-created shaders will require re-upload. Check this list out to see if you’re affected. If you use a shader listed there, you’ll likely need to re-upload your avatar.

Advanced: We’re still using Unity’s native rendering pipeline, and we aren’t swapping to HDRP or LWRP/URP. This may be a future thing, but there’s a lot of caveats. In other words, select 3D when you’re creating a new project, not HDRP or LWRP/URP.

Networking and Inverse Kinematics

Earlier this year, we introduced a new method for networking your movements to others. This system is often referred to as “Networked IK”. Before this system existed, each client had to spend a lot of time processing the IK — the pose of the body given a few reference points — for each avatar in view. This was not good for performance, and was the biggest contributor to poor framerate on essentially all systems, even those that normally had no issues with most VR applications.

Networked IK reduced the load from this process by an order of magnitude (winning us quite a lot of frames), but as a result general fidelity of IK reduced. This meant that small movements, fast movements, and quickly-changing movements suffered significantly as a result of these changes.

Engineering a system that can handle a large amount of avatars in view delivering a varying amount of data at varying latencies, all while staying in sync with others is not an easy task. However, we have spent a large amount of time creating a new networking system to help improve fidelity while further reducing load on both network and your computer!

Here’s a general, high-level list of fixes and upgrades we’ve gotten as a result:

  • People that are closer to you should have smoother IK
  • Improved remote drawing using avatar hands
  • Improved remote painting in worlds like Just Graffiti
  • People far away or that aren’t visible use less bandwidth so people closer and visible can use more
  • Improved replication of pose, particularly in hand positioning
  • Improved replication of pose during fast or quickly-changing movements for people that are nearby and in-view
  • Designed to be tweakable and changeable while live, meaning we can adjust values to improve general behavior without having to issue a new client version
  • Increased performance overall

These changes aren’t just for improving networking for IK, but for all things that rely on the network. This means (among other things) that synced objects should take less bandwidth. However, IK is likely the most “visible” way to see these changes.

We’re still improving this system. Our current work is on improving how we select individuals for higher fidelity, so users you need more data from to provide a consistent experience will have higher IK fidelity.

Thank you to Kung for recording! Check out the full video here.

These changes are wide-sweeping and represent a massive change to the way Networking and IK works. This is a first release of a complete rewrite of how we handle IK and networking for it. All users will feel the effects of this, but we strongly encourage users who employ Full-Body Tracking to test things out. That means you, FBT dancers! It just so happens that dancing is a pretty dang good way to assess the effectiveness of these changes, so give it a shot like Kung did.

Test, compare, contrast, and let us know on our Feedback boards. This is an early build that needs mass testing in order for us to determine tweaks that are necessary. Your feedback is not only greatly appreciated, but vital to the process!

Udon

One of the biggest features we’ve been working on (and you’ve been very patiently waiting for) is Udon, VRChat’s custom programming language. Udon is a way to create interactive, complex experiences in VRChat using a node-based interface so any user can build something as simple or as complex as they’d like.

Right now, if you’re a 3D artist, shader guru, or world creator in VRChat, you’ve got a place to work your magic. If you’re a programmer or scripter, you might be a bit lost — and Udon will help solve that.

Even if you aren’t that technically inclined, Udon is designed to be easy to create basic interactions, but also scale to allow highly complex behavior.

Unity 2018 provides many features that allow us to progress on Udon, and this upgrade is vital to the implementation of Udon overall. It is one of the main reasons we’re doing this upgrade!

In our previous roadmap, we stated that we were targeting Closed Testing at the end of Q3 2019, and Open Beta into Release during Q4 2019. We are making progress and plan on having a progressive Beta release soon! We’ll talk more about that plan in the coming weeks.

The short version is that we’re on track to get Udon into Open Beta this quarter (Q4 2019). It is important to note that our plan for an Open Beta is a sort of “soft release” — in other words, during the Open Beta it will be possible to create and visit Udon-powered worlds in VRChat on the Live version of the application. Closed Beta will also be a bit different.

However, it is likely that a Full Release of Udon will not occur until Q1 2020, likely earlier rather than later. We plan on having a pretty rigorous Beta cycle for Udon to ensure that we cover as much as we can for creators. It is far more favorable to us to delay Udon’s release slightly to ensure that it is where we want it to be instead of releasing it too early. We know this might be a bit frustrating, but hope our community can understand that a slight delay is more appealing than a half-baked release.

If it helps any, keep in mind that “Full Release” doesn’t mean you won’t be able to use Udon in Live until the release occurs, but is more like a developmental milestone where we call “Udon 1.0” complete.

All that being said, we’d love to show off what’s currently possible in Udon in our internal testing. Here’s some of what our QA team has whipped up:

Nodes ‘n noodles for the RedRunner player controller. UI not final.
RedRunner ported and running in Udon, in VRChat

Tupper do you actually know what a tl;dr is

hmmmmmmMMMMMMMMMMM

No, I don’t.

But really, we’ve been quiet lately because we’ve had our heads down, working hard on a ton of things. You’re starting to see some of these projects come to fruition, like the 2018 upgrade, Udon, the new Networking and IK systems, and more.

We’re on-target with many of the items on our previously-shown roadmap. Some items have moved a bit, but we’re still focused on Stability, Security, and the SDK (and Udon!). Our goal is to continue enabling expression for all of our users, and empowering creators with tools and features to make amazing new things in VRChat.

As we’ve hinted not-so-subtly several times, we’ve got plans to move on to other big projects like a new User Interface, menus, HUD, new Avatar Features (which we’re calling Avatar 2.0), systems to Enable Expression, and ways to tie it all together and let creators really work their magic.

We’ll be talking more about those projects as they progress, but for now, that’s what we’ve got. Check out the Open Beta, test your content, try the new IK system, and submit feedback on our Feedback boards. We’ll let you know where we’re going from here.

In addition, we’re planning on having a final Dev Stream before the year’s end. No date yet, but we’re setting up for it! Just keep an eye on our Twitter and Discord.

Thanks for reading!

--

--