Hey all, Im wondering if anyone knows or can share any sort of bone limits theyve run into on next gen consoles. I want to keep the bones to a minimum, but I would also like to have twist joints and some facial stuff. I know NDA’s can be huge, so I dunno what everyone can share, but if you have ANY info on it at all, that would be great. Heck, even this gen. I`ll be using Unity, but their docs say to dont go too much higher than 30 bones. Not sure how accurate that is seeing as thats basically just 2 hands with full fingers…
I remember Crytek’s Ryse saying each character had 770 bones (at full LOD), with the faces having 260 alone. Though this is Crytek we’re talking about.
I can’t say I’ve seen anything else so far - it really depends on the engine/context. I imagine Unity has a max bone count.
Actually, that helps a lot, Pat. Thanks! Ill have to do some testing, but its going to be for an avatar system with possibly up to 60 people in the scene. I think I can get away with around 100 bones per character, but that's still a lot when you get many characters in the scene. This is all new territory for me, though, so Im not really sure. I guess Ill find out. haha
The 120 example was for a single character on screen, with not every joint used for weighting. (not saying they couldn’t have been).
We’ve done avatar systems in unity/ios as well, with 2-4 characters on screen. The skeletons were generated on the fly, from body_part/clothing assets (that had the full joint hierarchy in each). A programmer wrote a smart system that would compile everything needed, and put it on ONE character skeleton in-game (instead of having 10 skeletons for 10 parts/clothing, overlapped, to create 1 full character).
We’re actually doing the same thing. I have the base mesh that has each “body part” (torso, legs, feet, etc) in it, bound to a skeleton. Then the clothing for each piece is just its own piece with the skeleton it its file as well. The programmer then creates a skeleton based on the skellie from the base mesh, and then rips all the clothing of their skeletons and puts it on the newly created one. We’ve got all the working using temp art.
In a previous game we did for ios, we had ~60 bones per character, and were able to get 10-15 on screen pretty well. Slowed down a bit on iphone 4, but was fine on 5. But thats ios. We’ve moving on to next gen consoles. I just dont know ifits unity that cant handle a lot or not.
But as mentioned. Testing! I`ll report my findings.
There’s no way to answer this question outside the context of a particular engine; however one way to think about it is that the new consoles are in line with 75th percentile DX 11 PCs – At ship they will be less beefy than a fully tricked out current gaming PC. This is in contrast to last gen where the consoles were competitive with the best PCs of the day. So bone counts, etc for current generation PC games are probably in the right ballpark.
The other things to consider:
Dual quaternion skinning is slower than conventional linear skinning; but it eliminates the need for many of the fixup bones we often put in to fix up linear deformation artifacts. We used this on State of Decay and found it was worth the tradeoff.
One of the big limitations on skinning shaders is the boundaries of shader constants. Depending on the interaction of hardware and software, there’s some limit to the number of bones that can be pushed in a single update – if you go over that limit you effectively have to split the mesh into parts and draw the parts separately. That should be less of a problem nowadays because DX 11 has big constant buffers (up to 4k worth of Vector4’s, or 1000 matrices). So if you used to have a limit like 127 bones per skinned mesh, you probably don’t have that hard boundary any more. However you’re still rendering and updating all those bones on the CPU, and that is only about twice as fast as it used to be not counting memory overhead, etc. Id guess that more-than-doubling bones will result in slower perf than a comparable situation in current gen.
The 30 bone count in unity is low even for mobile. It sounds like old advice. However be warned that Unity does only software skinning unless you’re on a DX11 pc, so the skinning perf usually is a bottleneck
it all depends on performance, not only bone count is important but also how many bones drive each vertex at the same time. it also depends on how many different characters you have on screen at the same time and how much of the deformation is seen.
i have seen solutions built with 20 joints which could have easily passed with 4 joints because all the detail that was driven by the rest of the joints was not seen on screen.
the hardest part for creating rigs for games is using as less as possible amount of joints and minumum amount of influences per vertex as these will have a big impact on overall performance and framerate
Regarding the influences per vertex. When you bind a skeleton to the mesh, you can set max number of influences. Lets say you set it to 3. If you go in and start painting weights, will it allow me to paint more than 3 bones to influence one vert? That’s actually one thing I havent really thought about (or knew about) was the more influences, the heavier it is. I`ll definitely keep that in mind moving forward.
[QUOTE=StefanLipsius;22575]Thanks for the insight, everyone! Informative!
Regarding the influences per vertex. When you bind a skeleton to the mesh, you can set max number of influences. Lets say you set it to 3. If you go in and start painting weights, will it allow me to paint more than 3 bones to influence one vert? That’s actually one thing I havent really thought about (or knew about) was the more influences, the heavier it is. I`ll definitely keep that in mind moving forward.[/QUOTE]
If you’re using Maya, you can lock the influences but they’re a bit buggy, especially with undo. If you go over the limit it will throw around the weights. You can unlock the weights for tricky areas and then preen it back - but it’s good to go in with a minimalist attitude anyway and try and use weighting only where it’s needed. It’s good practice and it will prevent a lot of the bugginess in weight painting at the moment. For tricky balancing I tend to do that through the component editor.
Wuffles is exactly right. Maya will try to maintain that limit as much as possible, but don’t rely on it. Check you skin regularly, prune regularly, and be really aware as your smooth skin weights.
If you’re into scripting then write yourself a smooth weights brush that smooth’s all the weights on the affected verts at the same time whilst also pruning out down to your desired vertex limit ( for us at Lionhead its typically four bones per vertex ). That kind of tool speeds up skinning massively.
In terms of bone counts, as everyone says it really depends on the engine you’re using. Cryteks 600-700 bone count is crazy, but I gather they lod down almost straight away with only the cutscene sequences using the full resolution rig. For the previous few Lionhead titles we have worked with between 100-175 bones for a given character or creature, but it varies quite a bit.
If your engine has a decent lod’ing mechanism ( I don’t know much about unity ), then providing you set your lods up well you can usually push the bone limits quite high, but its then a balance of how long the setup time is versus how often you’ll see the effect of the really high res skeleton.
Thanks so much everyone. Definitely gave me a lot to think about. The scripting sounds a little out of my league for now. I can do some decent scripting, but in the grand scheme of things, I’m still VERY new to it all and use very basic methods. Definitely something to keep in mind for later though. Thanks!