Will unity support more than 4 weight(bone) influences per vertex at some point?

Im curious about why is there such a limitation in the first place and are there any plans to increase it?

I think the main reason the limitation exists is because it’s hardware-friendly: 4 bone IDs pack neatly into a 4-component vector (e.g. like a colour).

In theory it should already be possible to blow past that limit under D3D11.

I’m genuinely wondering under what situation 4 influences isn’t enough. Although it might make sense to have no limit, the way it is now sort of forces you to think a little bit about optimization and best practices. Culling a bone that has .005 of an influence probably isn’t going to completely destroy your deformation.

It is possible, UE4 has it. I don’t see why unity can not do it. The main take here is, performance and point mentioned by superpig.

Does anyone know if this limitation still exists? It would be quite useful to us to be able to use more than 4 (we actually 8 would be ideal for us). Cryengine can do it. Why not Unity?

Yes, the limitation still exists and AFAIK there are no plans to remove it.

Could you explain the details of your use case?

What I would like to see is dual quaternion support both in export to FBX and supported by Unity… It would be so great…

“Could you explain the details of your use case?”

Smoother meshes.

Particularly short, squat cartoony meshes where many of the body parts are interacting with each other. I’m rigging a very round character right now with a face rig. Since he is so round and short, his mouth is basically down in his spine. With 3 mouth joints, I only have the budget to include one spine influence, rather than a smooth blend between his neck and spine + mouth.

Max-4 presents a very tricky balancing act. It would be nice to sacrifice performance for a higher quality rig in some circumstances.

1 Like

I don’t suppose that rigging with blendshapes/morph targets would help you, instead of using bones for it?

Can this not be done with a custom shader? I don’t see the problem why not.

facial anims for example, although i made some with 4 bones only settings

2 Likes

It’s facial anims for us too.

I created a request here:

https://feedback.unity3d.com/suggestions/8-bones-per-vertex

1 Like

Seconded. Unity clearly is trying to be an engine used by AAA titles now, so they should update the outdated bone weight limit in accordance.

The game we are currently making has 40-75k poly characters (without clothing) and we have to put up with a lot of deformation quality issues due to this skinning limit.

Unity already provides quality options for limiting it down to 2 or 1 influence, so I don’t see how it would be an issue to bump the limit up to 8 and just default that option to 4 so the engine would perform as usual for the average user.

2 Likes

@superpig With the news that DX9 support will be phased out in 2017.3, does the team have plans to finally support 6 or even 8 influences? It’s becoming a point of contention when comparing to other notable game engines now.

And not to mention now the news of collaboration with OTOY and pushing Unity for filmmaking, more than 4 influences is an absolute must in the film industry for achieving the high fidelity of facial deformation required and deformation smoothing in general along large distance.

2 Likes

I have a bone driven digital wave (ocean type, breaking surf wave) that would benefit from having this ceiling raised. Looks great in modelling app, terrible in Unity.

Will have to re-rig at this point but a greater number of bones influencing would solve this

Remember though that it’s also the #1 mobile engine, so it shouldn’t rush into making any changes to core functionality or data formats if it risks reducing mobile performance.

I have to point out a little bit of sanity, blizzard use between 1-4 bones and blendshapes for everything else. If the larger companies in the world are mostly happy with 4 bone solutions + blendshape, why is using blendshapes out of the question? It’s “unlimited bone influences” and FBX file format does record the blend amount as keys so it would all just work playing back an animation normally.

The fact is… and this is a fact, most AAA games will use between 1 and 4 + blendshapes. 8+ is a luxury and the majority of games don’t do it.

The exception would be some PS2 games where every vert was essentially a bone. I don’t mean to dismiss what is said, just I asked around for the purpose of this thread and that’s the answers I got back (blendshape being unlimited freedom, essentially).

Without causing offence, I wonder if anyone knows why they cannot use blendshapes, given that they just work perfectly without code and offer unlimited deformation?

IIRC, when I tried to use blendshapes in some dynamic use case it was impossible to get the desired results with them vs freely moving and rotating bones. It was long ago so don’t remember if it was an Unity limitation or just blendshape mixing in general.

Blendshapes only solve the issue when it comes to non-dynamic deformation changes, like making the character smile. It does not solve janky deformations in situations where you don’t have much choice but to rely on bone influences, like rotating an arm around, there’s no solid way to generate a bunch of blendshapes to handle the various angles the arm can be to solve deformation issues. There’s a reason the default for bone influence in film is generally at least 5.

Using Blizzard as the shining example is a bit disingenuous. They don’t exactly make super realistic games, their most realistic endeavor so far is Overwatch, and that has quite a lot of janky deformations on characters actually, but it’s not a big deal because it’s not a game about interacting with characters up close in a cinematic way, it’s a fast paced shooter where performance and style is what’s most important, not cinematic quality. Also, you would be quite wrong if you were talking about their cinematic shorts, which will for sure be using more than 4 influences.

It’s not like Unreal provides 8 influences just for sh*ts & giggles ya’know. And let’s say I need to use bone-based deformation (we do), because I need to use information about those bone-locations to make a character accurately interact with other objects, clothes, etc… I can’t use blendshapes there, because blendshapes give me no feasible way to grab that surface distance/scale, and obviously we can’t do skinned-colliders so can’t use a raycast for that either.
For something like clothes, your solution would be to have to make blendshapes on every article of clothing that adjusts the clothing the same way the blendshapes do on the character… This is a HUGE workload increase what would simply be solved by having more influence so all we have to do is match the bone scale through script and be done (but even if did do blendshapes like that we still need surface distance for external interactions).

Also, it should be mentioned that blendshapes are hardly free. We already use blendshapes for some stuff where it’s reasonable, but we are making a high quality game with characters in the 40-70k poly range (just counting their base body). Adding lots of blendshapes is going to bog down performance with the numerous vertices there are going to have to be iterated over, so the blendshapes aren’t exactly making for a more efficient solution either. And we use a full-body IK setup on our characters, and we animate our characters inside of Unity now to improve our workflow.

And like I mentioned in my last comment… Unity is now trying to push their engine as a “Cinematic Tool”, adding a dang raytracer now and all kinds of filmic utilities. If that is something they truly want to push, then film-level bone influences should be included in those new features, and I’m sure you’ll be hearing more complaints about it if people do actually start picking it up for film-making.

3 Likes