Welcome to the Developer Update for 28 April 2023! This is the 13th text Developer Update of 2023.
Batten the hatches! Mast… the uh… mainsails! Secure the… er, rum barrels? Sorry, my sailing education comes almost exclusively from Sea of Thieves. Today’s Dev Update thumbnail features Shiro K’s world Sailing!
If you’d like to catch up, read our previous Developer Update from April 20.
2023.2.2 Open Beta
An Open Beta is going on! You can see the patchnotes here. We’ll talk about some of the new features in Ongoing Development.
SDK EMail Authentication Changes
In a previous Dev Update, we discussed SDK Email Authentication! In short, this is a thing that happens when you log in, and we see that the login is odd or different in some way. If you don’t have two-factor authentication enabled, then we shoot you an email with a code you need to enter.
The launch was… a bit of a mess. We got a lot of people very confused! Sorry about that!
We turned it off, tweaked and fixed it up a bit, and have recently turned it back on with a bunch of bugs fixed.
Notably, even old SDKs can authenticate now – as long as they support Token-based 2FA. This means that as long as you’ve updated your SDK in the last… checks watch … four years, then you’ll be able to enter the email code in even if it’s asking you for a Token 2FA.
Creator Companion - Community Packages
Last week, we added Community Packages to the Creator Companion! Community Packages allow you to enhance your VRChat World and Avatar projects with packages made by the community without having to wait for us to curate the package you want.
This also means you’ll receive updates to those packages as often as the creators push them!
We created a short video to help you understand how Community Packages work:
Read our docs to learn more.
- How to add Community Repositories (it’s eeeasy)
- How to create a Package Listing if you’re an asset creator
- How to convert .unitypackage files if you’re an asset creator
Ongoing Development
Squishy Bones
This feature is now in Open Beta with VRChat 2023.2.2.
We’ve added a new PhysBones feature to VRChat – SquishyBones!
This video is for the Live release but you get a 'lil preview here.
Like the bunny avatar at 5 seconds in? It’s made by Moop! You can get it here.
This update adds features to allow bones to stretch and squish in additional ways they couldn’t before.
The existing value “Max Stretch” allows you to specify how much a bone’s length could grow/lengthen. This previously only mattered when someone would grab bones and pull it out, but now means much more.
The value “Stretch Motion” has been added which specifies how much a bone should allow motion to affect the length of a bone. A value of 0
(default) makes bones work as they do now, where bones retain their length. A value of 1
means that the bone will grow/shrink depending on how it’s moved. The Pull value is the force that attempts to return these bones back to their original length as well as orientation.
Here’s what it looks like when Stretch Motion is zero, which is the default.
… and here’s how it looks with Stretch Motion set to 1
!
We also added “Max Squish”, which specifies a percentage that the bone’s length can squish/shorten. This is similar to Max Stretch, just in the other direction. You can think of these terms as the min and max percentage of the bone’s length. Like Max Stretch, this value is affected when bones are grabbed and by Stretch Motion. In addition, colliders have a unique interaction with bones that can squish.
Here’s a video example of Grab Stretch and Squish.
Colliders can now affect the length of a bone by squishing them. Bones with a positive Max Squish value will be pushed away or down depending on the collider’s orientation. This can be used in a variety of ways from making bones that feel squishy to touch. If used with constraints, you can make unique buttons on an avatar.
A new parameter _Squish
was added, which is very similar to the existing _Stretch
parameter. It provides a float value ranging from 0
to 1
. This value represents how much the entire length of the bone chain is squished to it’s minimum length. Like _Stretch
, if a bone chain has multiple branches, it will choose the maximum value between all of them.
PhysBone Versioning
Providing these new features required some changes to how certain values were applied. These changes would have affected the appearance of existing VRCPhysBone components. To preserve existing avatar behavior, we have decided to add versioning directly to the VRCPhysBone component.
All existing VRCPhysBone components will use the old version 1.0 and work exactly the same. New components will default to the latest version, version 1.1.
If upgrading, you can change the dropdown to choose the latest version. You can freely change between versions.
Understand that some values don’t work exactly the same between versions! For this update, two specific values changed: Gravity and Stiffness.
Gravity
Previously, Gravity acted as a force that competed with Pull. To get a specific look, you needed to balance the ratio of these two values.
Now, Gravity acts directly as the ratio of how much gravity deforms the rest position of your bones. A value of 1
means your bones will always fall straight down, and a value of 0.5
means it will hover halfway between the rest position and the world down vector.
In practice, we have found this to be much easier to tweak the look you are going for.
Since gravity is no longer a force, Pull is the only force that dictates how fast the bones will fall into their new resting position. Previously many things that pointed straight down would look like (Pull: 0
Gravity: 0.3
). This now needs a configuration like (Pull: 0.3
Gravity: 1.0
).
Stiffness
Previously, Stiffness acted as a force whose vector was the last frame’s bone vector. This acted as a competing force with Pull and Gravity and was useful for dampening specific motions. Like Gravity, you needed to manage the ratio between this force and the other forces to get a specific look.
Stiffness now acts as a ratio between the current velocity and the velocity needed to keep the bone in its previous orientation. This is more of a technical difference than a difference of purpose, as you still effectively use this value the same as you would before.
This is called out because the exact values required to achieve a similar look will differ.
Guided Mode
This feature is now in Open Beta with VRChat 2023.2.2.
VRChat can be an overwhelming experience for new users. Choosing your first avatar, finding cool worlds to explore, and navigating the menu can be… well, a lot! We’re working on new features to make this experience feel more streamlined.
One of these new features is Guided Mode.
Guided Mode is a new UI “mode” that makes it easy to access the core features of VRChat. For example, cloning someone’s avatar, changing worlds, or blocking a user.
Guided Mode will give new users control over their experience without overwhelming them with options and choices.
Guided Mode will be enabled for everyone in Open Beta. However, once it’s pushed to the live client, we will roll the feature out slowly using “A/B testing.”
This form of testing turns the feature on for some users but not all. We will collect data to see how people use this feature, and if it is helping them have a better experience in VRChat. This way, we can ensure the changes we’re making to VRChat actually improve the experience!
Once testing is complete and Guided Mode is fully rolled out, we may provide a way for anyone to turn it on, in case you prefer a simpler experience.
We’ll keep tweaking and adjusting Guided Mode as more features are added to VRChat, focusing on helping new users. For example, someone could use Guided Mode to find Groups that match their interests. That’s the kind of experiment we want to do, so keep an eye out for that in the future.
We’ll provide the community with more information as we can. Notably, we won’t be announcing every A/B test we’re doing.
New SDK Features!
These new SDK features are now in Open Beta with VRChat 2023.2.2.
DataContainers and VRCJSON
We’ve added DataContainers! With them comes Lists, Dictionaries, and JSON for Udon! We’ve talked about this feature before in previous Dev Updates.
DataLists and DataDictionaries give Udon functionality similar to Lists and Dictionaries.
We’ve also added VRCJSON, a helper class that can convert JSON strings (such as those received from Remote String Loading) to and from DataLists and DataDictionaries. Read the Data Containers / VRCJSON docs page to learn more.
VRCAsyncGPUReadback
We’ve added support for AsyncGPUReadback! This allows you to read back data from GPU and shaders without a heavy performance cost! We’ve talked about this feature in previous Dev Updates.
We’ve added the VRCAsyncGPUReadback.Request
function and the corresponding OnAsyncGpuReadbackComplete
event. Using these, you can read data from the GPU into CPU memory without too much of a performance impact at the expense of delaying the data for one or more frames.
Check the ASyncGPUReadback docs for more info.
Udon UI Updates
We’ve got a quick update for the upcoming Udon UI feature! We’ve been working on some tests, and thought you might appreciate this peek into where we’re at.
This UdonUI test demonstrates some of the debugging capabilities available through the system. A world-space canvas created with Udon UI shows a few values updating in realtime on an “AnimalFriend” UdonBehaviour, like logs in the console but easily attached to the world… It also shows a button added to the QuickMenu which calls a method to control the same UdonBehaviour. All of the Udon UI functionality here was created without making any changes to the AnimalFriend Udon Program.
Group Filter Members by Role
As mentioned in the last Dev Update, the ability to filter members by role is coming VERY SOON! (it might even be out already, I haven’t checked!) This change will help you organize/view your Group members on the website.
Search for your own Group members is being worked on, but doesn’t have an ETA yet!
Conclusion
Whew, that was a lot! Sorry about the delay.
Thanks for reading, and we’ll check back with you next week!
(FYI, we’ll be skipping the Dev Update for May 11th. Just a heads-up!)