Developer Update - 30 May 2024

Welcome to the Developer Update for 30 May 2024!

Today’s Dev Update thumbnail features Inokashira-kōen Station(井の頭公園駅) by nyanya! Enjoy a stroll around this realistic recreation of a railway station in Mitaka, Japan for PC Only.

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

Important Info / Announcements

VRChat GEAR is Here!

Rock official VRChat GEAR and check out our Merch Lab! We recently relaunched our official store, with all new merch – including thigh highs, a mug, a water bottle, pins, caps, and more!

Have a suggestion for new merch? Leave us a response on our Canny or tag us in #VRCGEAR on social media!

Ongoing Development

Localization Update - Hebrew

We actually accidentally name-dropped Hebrew in our latest Dev Update before it was ready!

Up until the start of last week, our Hebrew implementation suffered from being backwards as Hebrew is a Right-to-Left (RTL) language.

This required a bit more engineering time to get right since it required implementing something called the Unicode Bidirectional Algorithm. No easy feat! But, as a result, we’ve managed to achieve the basic RTL/LTR support that’s required for Hebrew.


To clarify, our menus are still laid out in a Left-To-Right format, but at least Hebrew text won’t be backwards, like this for example: !etuc yrev si taCRV

Boop! Booping is Incoming!

Our new “Booping” social feature allows users to send “boops” to their friends! They can attach any emoji to their boop, including custom and animated emojis so long as you’re a VRC+ user. When the recipient opens their notifications, they’ll see a Boop Explosion containing all of the boops they’ve just received!

Boops can be sent by opening the UserDetails page in either the Quick Menu or Main Menu in the Client and tapping the new Boop button. They can also be sent also from within the native Android app too.

Client:


Native App:


VRChat Constraints Revisited

parent_vrcconstraints

Development of VRChat constraints continues! When it was first announced that we were working on them, we mentioned that we’d be bringing a deeper technical dive in a few weeks. Well, here it is:

  • The initial version of the constraints system was a single component handling all of the constraint behaviors at once. This has now been split up into several different component types each with its own dedicated behavior, which matches Unity’s layout and will hopefully make animating these constraints more straightforward.

  • An automatic conversion option has been added to the SDK for avatar projects. If your avatar contains any Unity constraints, the SDK will offer to automatically replace them with identical VRChat constraints for you, while also remapping any animations on your avatar from the old constraints to the new ones. We hope this will make it easier to convert existing avatars that use constraints.

  • We’ve added two new advanced settings since the last update:

    • The new Freeze To World setting will cause the constrained transform to stop following its sources and keep its current pose in world space when switched on. This is our official implementation of “world constraints”, which is a specific combination of constraints often used by avatars to keep an object fixed in place. By using this advanced setting instead, you can replicate this behavior using just one constraint rather than needing several working together, which can help improve your avatar’s performance and make the avatar easier to build and maintain.

    • The new Rebake Offsets When Unfrozen setting works with the Freeze To World setting above to control how the constraint will behave when it’s unfrozen. If offset rebaking is enabled, the constraint will recalculate its offsets to keep the pose relative to its sources that it had at the time it was unfrozen, instead of jumping back to where it should be based on its original offsets.

Here’s a quick video illustrating the two new advanced settings applied to a parent constraint:

We’ve also been working through how VRChat constraints will be ranked for avatar performance.

Up to now, constraint count has been an unranked performance stat, with a suggested limit of 15 constraints per avatar. We are planning to make this a ranked stat as VRChat constraints are released. We aren’t ready to talk about the thresholds for each rank just yet, but we are aiming to keep them fairly lenient based on the performance difference between VRChat constraints and Unity constraints.

In addition to constraint count, we’re also intending to add a new performance stat related to constraints called Constraint Depth, which essentially tracks the deepest chain of constraints across your entire avatar. This is because constraints that do not depend on one another can be solved in parallel, while ones that do depend on one another need to be solved in a specific order. Based on our benchmarking, this gives a more accurate estimate of an avatar’s overall performance than just using the number of constraints alone.

VRChat constraints are in the closing stages of internal QA and are on target for release this July.

We look forward to seeing what you’ll create with them!

Avatar Download and Uncompressed Size Limit Reminder

July 16th – that’s 47 days until the limits are reduced for PC avatars!

In case you’ve forgotten back in March, we announced the introduction of limits for both download size (compressed size) and the uncompressed size (which was previously called called estimated memory usage). We mentioned there have been limits already in place for a number of months, but as not to break content without notice (even if very unoptimised) these limits were set very high.

We want to reduce those limits to something more sane while still allowing tons of headroom to have things on an avatar.

So what are the current limits and what are we changing them to?

On PC
Download size (compressed size)

Current: 500 MB, Planned: 200 MB

Uncompressed size

Current: 1.2 GB, Planned: 500 MB

On Android (Quest)

Download size (compressed size)

Current: 10 MB, No planned change

Uncompressed size

Current: 40 MB, No planned change

So if you are creating avatars for Android, there is no change. If you create avatars on PC and they happen to have a lot of stuff on them, or if you are fond of very high resolution textures for everything, you may need to optimise.

Speaking of which, until now there’s been no indication in the SDK that these reduced limits have been exceeded, and we’re looking to fix that. In an upcoming SDK update we will be adding a warning to the build panel that indicates if the last built avatar went over the reduced limits.

Here are a couple screenshots showing what that looks like.

Unity_300mb
Unity_650mb

To conclude, this change won’t affect the vast majority of avatars, but it’s always worth checking to see where there’s easy gains for optimisation. If your avatars are in the danger zone, now is the time to act.

You can find optimisation tips at Avatar Optimization Tips | VRChat Creation. There’s many amazing optimisation tools out there created by the community which can help give detailed information on what’s taking up space and automate optimisation. Many of these can be added with just a few clicks to your project via the Creator Companion app.

As a brief note, we’d still really like to include tools within the SDK itself to help you optimize your avatar. That’s something we’d like to work on this year, although nothing is set in stone yet.

Next Upcoming VRChat Jam

Already?!

This is still in the works so some things are subject to change, but here’s what we’re thinking:

SUMMER MUSIC FEST!

Imagine a beachfront property or a tropical oasis with - a DJ setup?!

For our next VRChat Jam, we’re aiming to have a world and avatar jam from July 8 - August 2 2024 based on summer music festivals.

There will be two parts to this: the world entries and the avatar entries. You can enter for both or just one category!

So put on your straw hats, get those glowsticks ready, and let’s get to it!

Participants will be asked to make a cross-platform world and avatars that celebrates “Summer Vibes at the Beach”, whatever that means to you!

Worlds will be judged in these categories:

  • Summer Vibe-iness
  • Media Player Integration
  • Performance Level
  • Ease of Use

Avatars will be judged in these categories:

  • Summer Vibe-iness
  • AudioLink Integration
  • Performance Rank (Medium or better)
  • Extra Features

Much like Spookality, there will be a special world row and avatar section featuring the winners for at least a month after the jam. We’ll also try to feature clubs and venues that use the worlds and avatars from the jam on our socials, so tag us if you’re using them!

On the technical aspect, this may be one of the more challenging jams we’ve hosted. We’ll be asking for worlds and avatars with AudioLink, worlds with video/media players, avatars and worlds to be cross-platform (that includes Android and maybe even iOS if we’re ready by then!), avatars to be at least Medium performance rank, & more.

We’ll be providing a list of prefabs and resources we think world and avatar creators will need to know to get started in early July on our forums. There’s a lot to cover, so if there’s anything you think we should include, please let us know!

Conclusion

That’s it for this Dev Update! Lots to look forward to this summer, eh?

Our next text update is scheduled for June 13. See you then!

14 Likes

The images are missing!!!

3 Likes

Hi there!
Concerning the VRC “Freeze to World” property and also the “Bake Offsets” property, are the offsets synced to other clients/late joiners? I’m a bit worried that when making movable props that the transform will desync horribly if moving rapidly or if you have jittery movement.
Thanks!

6 Likes

Can you make constraints interaction between users?

3 Likes

fixed!! Sorry!

  1. Can everyone see this? Or is it local only? Can you disable it? I can imagine this becoming super abusable really quickly.
  2. I think it would be better to have it only appear on the message in the menu instead over having it be treated like any typical emoji usage.

Otherwise I think this is a cute feature!

4 Likes

is the world constraint going to be synced to late joiners?

1 Like

How does moderation work in this case? Can I block boops from everyone? Can I block boops from specific people without blocking them or muting them entirely?

Don’t forget there is a bug where crunch-compressed textures do not account for their VRAM usage in the uncompressed statistic.

4 Likes

Rather than continuing to increase the conditions banning insanely unoptimized avatars, which limits the scope of what the vrchat team can do without causing a bunch of people to complain, I have an alternative suggestion:

Add a rank above very poor that is banned by default from publics and when creating an instance friends or higher there will be a checkbox to allow them.

That way they are banned from most instances by default, but can be allowed in if the instance creator wants.

With this you can go with much lower limits.

7 Likes

Booping? I dig it. I’ll definitely intend on using this to boop a friend with a custom emoji that says “Check DMs”.

1 Like

Near the end of the video, turning off Rebake Offsets maintains the current offsets. I think returning it to the original offsets shown at the beginning of the video would be preferable.
It makes logical sense why it is this way, as the new offsets have been “baked,” but then switching off the rebake in an animation becomes useless. Turning them back to their original state would give it use.

2 Likes

I like this in theory. But really, if you’re uploading an avatar that is over 500 MB uncompressed, that avatar is just inherently awful. Most if not all of what people want should fit within the 500 MB limit.

The limits are nice because they should encourage people to learn how to do the absolute basics of optimization, which can spread to more avatars in general.

4 Likes

I can’t wait for the VRC Constraint. I can fix my avatar’s four arms, and my asset’s camera animation Hppe, it will be the best and possible support for Quest.

I really wish we could attach a preset message to these “boops” similar to invites and such.

I’ve always wanted a way to send the existing preset invite messages without actually inviting someone to act as a very basic way of messaging people.

Boops feels so close to being able to fill that gap, so I’m disappointed to see you can’t attach a message to them.
I feel like not being able to is just going to incentivize people to use up half their emote slots as text to communicate using boops anyway, which kinda sucks when it could just natively support preset messages.

5 Likes

Constrained transforms frozen to the world won’t be synced across late joiners initially. We are interested in doing this, but the scope of it goes beyond constraints since it essentially means allowing a limited number of extra network synced transforms on the avatar, which might have more uses beyond just constraints. That said, if you freeze a constrained transform while another user is already in the instance with you, you should both see it in the same place similar to how the world constraint setup with Unity constraints works now.

The focus for the Freeze To World setting is simplifying the existing process of locking a transform in place.

Hopefully I’m understanding this correctly, but constraints on your avatar would only be able to target transforms on your own avatar. You’d still be able to trigger animations on your constraints in response to things like contacts being triggered by other players.

3 Likes
  1. Can everyone see this? Or is it local only? Can you disable it? I can imagine this becoming super abusable really quickly.

Only you can see the Boops that are received - They’re entirely local. If someone else receives a boop, that won’t be visible to you.

Regarding avoiding abuse, there’s a few things we have in place - Firstly, booping is rate limited so this should prevent someone spamming boops. You also won’t receive boops from blocked users and cannot send boops to users that are not a Friend.

On top of this, we actually prevent multiple boops being sent to a single user until that user has actioned the previous boop. For example, if User 1 sent a boop to User 2, any subsquent boops would be automatically rejected until User 1 has actioned the received boop, whether that’s acknowledging the Boop notification using the checkmark button, sending a response Boop using the Reply button or simply dismissing the boop via the More Actions options.

Final note on this is that Boops also honor DND status as well, so if you have DND enabled you wont receive any boops.

6 Likes

If only there were some kind of direct messaging feature so we wouldn’t need these weird rituals of sending invites to people with custom text to check their messages, and now these boops.

The chatbox feature didn’t kill off people speaking orally with each other, allowing people to communicate (natively) across instances won’t make everyone into a hermit in their invite-only instance either.

Chatbox spawned the spotify playlisters though, so maybe it was a mistake…

6 Likes

How does moderation work in this case? Can I block boops from everyone? Can I block boops from specific people without blocking them or muting them entirely?

There’s no way to turn them off completely other than DND which would turn all notifications off, and there’s no way to block boops from specific people without blocking the user. As above though, we do have systems in place which we hope will prevent abuse.

2 Likes

I remember when “pens will kill VRChat” was an irrational concern. Pens won’t, chatboxes won’t, and DMs won’t.

1 Like

I enjoy the boop concept in theory, but I am really hoping for a way to toggle this on and off. If I’m having a serious talk with a friend, the last thing I’d want to see is a symphony of emojis. Going to DND status just to avoid one type of notification also seems like overkill, so… hoping for a middle ground here.

4 Likes