Better performing alternative to Dynamic Bone
complete
Kenzie
TL;DR: I’d like for the developers to work with the community and attempt to find a more performant alternative to the popular dynamic bones asset.
Okay, at this point I think everyone at least somewhat understands dynamic bone eats performance like an unsupervised child does chocolate. It’s arguably the most performance intensive thing VRChat allows, not counting intentionally laggy shaders, and the new avatar performance meter punishes accordingly.
So, what now? Are we supposed to just have tails, ears, long hair, open coats, capes, etc all just be as stiff as boards and disallow free moving objects on avatars? I’ve heard more than once someone respond to a question regarding long hair with “switch to short hair” or a response to loose clothing being “wear different clothes” but this poses a problem: we, as avatar creators, are being made to limit our creativity for optimization. I know there are people who can get away with no dynamic bones on their avatars, but that’s a very small portion of the community. So how about instead of indirectly punishing users for making things that require dynamic bones to function well, a better performing alternative to dynamic bones is whitelisted.
The main argument I hear against this is “everyone has dynamic bone,” but this argument is barely an argument in itself. Let’s be real, I’d wager that 90% of VRChat hasn’t even purchased Dynamic Bones, instead getting the asset through other means. So there probably won’t be thousands of people saying “but I paid money for this!” And, let’s say on the off chance there is a large backlash, to help mitigate this if an alternative is implemented there could be a grace period where both, dynamic bone and an alternative, are whitelisted. Maybe even older avatars keep the component active, similarly to legacy animations.
The only real question is: what do we replace it with? That’s partially why I’m making this canny. I’ll be honest in that I don’t know of any good alternatives by name, but I’ve heard other, more experienced creators, mention there are alternatives that can achieve the same effect with lower performance cost. Hopefully if this canny post gets traction other users can respond in the comments with suggestions they think the developers should look into testing. I’d like to see VRChat perform better, but I’d also like to retain as much artistic freedom as possible. So it’d be wonderful if we, the developers of the game and the community members, could come to a conclusion on what to do about the dynamic bone situation.
Log In
Aev
complete
Addressed via the addition of PhysBones!
Tupper - VRChat Head of Community
in progress
Tayou
i wish i knew more about all this stuff, but yea... its technically possible to do physics calculations on the GPU. http://elysianshadows.com/updates/wp-content/uploads/2011/05/cpe790FINAL.pdf
I just haven't found any easy implementation yet and building it completely from scratch wouldn't be easy at all....
I hope can find some way of utilizing the GPU for dynamic bones. That would increase the performance so much. (I wonder if that could be done outside of VRC, in the dynamic bones themselves maybe?)
Maribel Hearn
Dynamic bones don't eat frames as much as they want you to believe.
The biggest eater of frames is the lack of multi-threading.
The second biggest is IK, based on everything I have heard from so many people.
Another great place to start would be to reduce the performance impact of name plates.
If the game was multithreaded, people could have 1000 dynamic bone transforms on them and there could be 50 players in the room and you could still be at 45 FPS or better, assuming you are running a fairly recent i7 quad core or better CPU (A rough guess based on the CPU usage VRChat currently displays.)
Kenzie
Maribel Hearn: Oh trust me, I’m well aware of this. In an ideal world we could just get on a multithreaded version of Unity and be done with it, but that’s something the devs aren’t willing to do right now.
Really, getting a replacement for dynamic bones wouldn’t fix the problem, but it’d be a start.
Tupper - VRChat Head of Community
Maribel Hearn: "The biggest eater of frames is the lack of multi-threading."
I'd like to point out that VRChat has been multi-threaded/multi-cored since Unity 5.3, and probably earlier (I wouldn't know, I wasn't working at VRChat yet!).
The largest eater of frames is Dynamic Bones, followed by IK. We know this because we run VRChat regularly in editor and view profiling stats, which allows us to see per-script execution time and thread load.
Maribel Hearn
Tupper - VRChat Head of Community: Can you please explain to me then why my 8700k sees high usage on a couple threads, then low usage on a couple more, with the rest idle, all while I am getting 30 FPS with only 40% GPU usage? The CPU is far from being taxed. The GPU is hardly being used, and hasn't even boosted its clock speed. So I have to ask: How many threads is IK running on? How many threads is Dynamic Bone running on?
The answer is fairly obvious - Something within VRChat isn't efficiently multithreaded. Until IK and Dynamic Bones both run multiple threads each (Ideally 16 threads or more to take advantage of 8 core CPUs) this game will have frame issues. (Or until magical 20GHz CPUs make an appearance.)
If you are thinking of saying "IK and Dynamic Bones aren't part of VRChat," they are running in the game, and are therefore part of the game. If you can't multithread Dynamic Bones and IK because they are scripts that VRC Devs did not make and do not control, then new ones need to be made from the ground up that are multithreaded or GPU based.
Moving voice to a different thread technically makes the game "multithreaded" but that doesn't mean it is being taken advantage of. A properly multithreaded game will spread its load across all available threads evenly. This can be seen in titles such as Battlefield V where my 8700k sees equally high CPU usage across all twelve threads. If BF:V was threaded like VRChat, 9900k users running at 5GHz would get 30 FPS.
Bottom line, from what I have heard from so so many people in game... No one wants their avatar's hair and skirt to be rigid and stiff. Most will continue to use Dynamic Bone or cloth in numbers far higher than the cutoff for "poor" in the avatar performance ratings. Especially when it takes so little to be labeled "poor."
Miamikicchi
Alternatives: Bullet Unity, Havok Unity or maybe even allow people to make physics using the built-in Unity PhysX based system which are all GPU accelerated - VRC is heavy on the CPU anyway so outsourcing stuff to the GPU would work.
Also, in some ways, the holy grail is to allow animation overrides that move non-humanoid bones. Currently VRC doesn't allow for this. You know how most games
manually
animate the skirt, long hair, etc. during for example running animations? This is both extremely performant and
can look as good as you want and
helps keep the "creative ceiling" of VRC avatars high. As of right now though... it doesn't work, VRC doesn't support it.Kenzie
Miamikicchi: Only issue I can see with PhysX being used is not everyone has Nvidia cards, so they’d need to find some kind of way to account for that. I’m down with everything else you said, though.
Ritalin44
I mean... If you're not doing this already. You are the problem
Al Capone
Ritalin44: Wrong. VRC forces this to 60 on everything.
Ritalin44
Al Capone: well then Maybe devs should look into NOT doing that.
Tupper - VRChat Head of Community
Al Capone: Incorrect, we cap it at 60. We don't force it to 60.
Zephyr_Drake
I personally did a bunch of testing with character joints, this worked well, but had so much set up involved. Im fine with the set up personally, the question is to be asked if character joints, which rely heavily on rigid bodies, is more/less performace intensive than dynamic bone
Observer.
The developer of dynamic bones is still actively responding. They could contact the developer and push for testing a more performant version of dynamic bones. ie, looking to see if the ECS/Jobs system can benefit dynamic bones.
VRM would be a great system to test out though, and have both systems in the game where the performance metrics would reflect which system should be used without breaking compatibility with existing dynamic bone using avatars.
Casuallynoted
I remember seeing another canny about a specific avatar standard (VRM, if I recall correctly) that could be used for cross-platform avatar creation. As I understand it, the standard offers some kinds of tools that are similar to, but perhaps more optimized than, dynamic bone. Of course, I’m not knowledgeable enough to say anything for sure but I figured I would add that to the discussion.
The link to that canny is here but I think discussion regarding specifically the Dynamic Bone elements would do better in this thread:
Eiko™️
Casuallynoted: Yeah, the VRM format is backed by some pretty serious companies and usage is totally free. It was designed with stuff like VRChat in mind and is incredibly optimized. I'd really like to see them get to implementing it soon. It's a massive win for everyone.