High poly animation FBX import problem

Hello. So I’ve made a model in 3dsmax, made bones and skinned the model so all the mesh vertices are properly attached to the bones. Then I Turbosmooth it to give it a finer subdivided smooth look. I try to import it and it imports the animation and the model but not the high poly Turbosmooth modifier(yes I’ve tried check or uncheck ‘Turbosmooth’ in the FBX config, doesn’t work).

Now, I looked all over the net on how to solve this. I’ve come across the “oh, put the Turbo beneath the skin modifier”, which doesn’t really work because it messes up the skin weights and I have to reskin everything, and that just defeats the purpose of skinning a low poly model in the first place. Then I’ve tried the Skin Wrap the high poly model thing and convert it to skin modifier, which gives ‘ok’ results but not the precision I’m looking for. Then I tried in SkinUtilities, extracting the skin data from low poly mesh and then applying that to the turbosmooth-ed high poly mesh, which gives great results but again I’m noticing small incorrect deformations.

So the question is how the hell do these big game studios skin their 100k polygon characters and bring them animated into their Game engines?

All skinned models are imported into Unity as fbx files. One of the unfortunate limitations of fbx is it requires the skin modifier to be the top most modifier in the stack.

Have you looked into voxel and heightmap skinning methods?
https://knowledge.autodesk.com/support/3ds-max/learn-explore/caas/CloudHelp/cloudhelp/2016/ENU/3DSMax/files/GUID-B94BF35E-4AC5-4C46-B61B-566BB80BAA60-htm.html

https://knowledge.autodesk.com/support/3ds-max/learn-explore/caas/video/youtube/watch-v-Kimn7CIZ5bI.html
Keep in mind Unity’s limitation of 4 bone influences per vertex when using these techniques.

Beyond voxel & heatmap skinning I think your best solution is to use the skin wrap modifier, and then convert to skin and touch up the areas you need to, in order to get the skin looking acceptable.

From my limited understanding of bigger studios, they have several methods to overcome issues with skinning high resolution characters, - dedicated full-time technical artists, customized exporters, customized skinning methods which improve skinning workflow - so high polygon skinning isn’t as arduous.

Hmm… that one is for 3ds Max 2016. I have a much older 3ds Max version. But heatmap does seem interesting.

Anyway, any other suggestions are welcome. Maybe some scripts/plug-ins. I’ve been looking but haven’t found anything good.

@kreml

Hi there, I think you should do more reading about how skinning works exactly;

  1. you are weighting vertices to certain bones (let’s say A and B)

  2. Weight of vertex for particular bone defines how much it “moves” with it (a vert weighted 100% to A)

  3. When bones are transformed (rotated mostly), basically, vertices move along each bone they are weighted to and then find the interpolated position depending on skinning method (linear, spherical/dual quaternion)

  4. What you describe doing with turbo smooth, is simply put a “post” effect, you are subdividing result mesh of skinning an thus changing the “look” of joints, actually as “post effect”, there are useful effects that operate in similar manner, like Delta Mush…

but in this case you should focus on doing your best with skin modifier. Work around one joint at time, if you have to weight a vert to more than to 3 bones, you are most likely doing something wrong. First place joints carefully, smooth your weighting manually, or use methods suggested by @theANMATOR2b . That’s all there is to plain skinning. Most of the time culprit for bad deformation is wrong placement of joints, but then again, basic set of animation bones won’t ever allow for full range realistic deformation alone.

“So the question is how the hell do these big game studios skin their 100k polygon characters and bring them animated into their Game engines?”

Probably depends on engine and game, but choices like proper joint placement, additional deform bones, corrective morphs, skinning tech used (linear and/or dual quaternion), a combination of any and all of these contribute to result - in addition to most important stuff - experience and skill, tons of work most likely :slight_smile:

I’m well aware of how skin modifier works. I’ve been doing rigging since the 90s in 3dsmax. Skinned hundreds of models since then. Pretty much all of it has been for film/video, so I just rendered the animation out, didn’t have to worry about exporting it to FBX or whatever. Calling it a “post” effect is a bit of improper term. Max does make a real mesh actually, but it is based on the low poly skin. Sadly, Autodesk haven’t tried including it in an FBX in a proper way(only for 3dsmax itself I guess).

One of the wonderful things about putting skin modifier on a lower poly mesh and then subdividing it smoothly with Turbosmooth is that it becomes so much easier to animate and control, and if it gets too heavy for the comp I can just turn off Turbo and still get base mesh to work with while I’m animating. And that is what animators are interested in - easier work flow. I did skin a high poly character two years ago, I did get decent results with the skin but the model was a pain to animate because it was too heavy for the computer when I moved around the controls, there are too many vertices positions to process in realtime.

I haven’t had any trouble with having a vertex weighted to 3 bones. That hasn’t been an issue so far. The animation itself works fine in Unity. My understanding that the limitation in Unity is 4 bones on one vertices.

Anyway, didn’t expect much from posting on these Forums, since I’ve searched everywhere for this problem. But thank you guys for taking the time to try and help. I’ll figure something out.

@kreml

  • About skinning - I explained because how you defined your situation; You should know that skinning for games in general works like I described, you have a mesh, then you deform it and that’s it. Unless you have some custom game specific stuff going on shaders… so that’s why.

With all the respect, no matter how much you’ve done 3D work, it wasn’t obvious in your question.

Also, don’t agree about saying Turbo smoothing mesh on top of skinning resolution mesh isn’t post effect - I understand what you are doing, have used it many times myself, well then, let’s call it post correction- I think you know I didn’t mean by “post” “fix it in post” kind of 2D image post processing, only meant that skinning is done, then you afterwards or as post correction modify shape of mesh, in this case by subdividing it.

Also, including/having support for turbosmooth in FBX wouldn’t mean it would be supported by Unity automatically, also, many target platforms might not be powerful enough to cope with that.

In general, out of the box Unity only supports bare bones skinning, unless you do something yourself… you are stuck with that.

Also, I mentioned skinning to 3 bones only as guidelines (same reason as first issue), yes unity supports typical amount of bones per vert, but if you have to resort to weighting to 3+n bones, in general one has botched something quite well :slight_smile:

“Anyway, didn’t expect much from posting on these Forums”

Well, in general I personally don’t expect much from free advice, I’m lucky if I ever get a reply that helps me even a little bit… I don’t think it’s reasonable to be frustrated by something I only invested my time into, didn’t pay a cent.

Some tips

  • Maybe also check out Unity Asset store Blacksmith demo characters, I think they are skinned too. Haven’t checked those, but they are at least dense meshes, however, movement range is most likely bit limited because of clothes.

  • Just remember the toolset - There is no dual quaternion skinning neither is there skinned mesh post correction effects or such out of the box, and using mecanim with extra deformation bones can be tricky.

  • Unity skinned mesh supports morphs, but I haven’t used them for deformation correction, so I’m not going to say they work for that.

  • Your best bet is most likely quality skinning to what you can arrive to using different methods.

EDIT:
Simply put, there is no out of the box support for subdivision surfaces like you describe. Who knows if/when/how OpenSubdiv and such will end up in game engines like Unity. Maybe if data is as mesh not triangles then it could work.
There have been games that use some sort of subdivision surfaces on static meshes and characters, not sure if they have used Catmull-Clark type typical 3D software solutions or something else instead of tesselation.

Yes - this is a great, well worn rigging and skinning process that benefits the animator.(when working on pre-rendered animations ;))
Consider downloading a trial version to use the voxel/heat map skinning. If you are running Max 2014, a trial version 2017 can save ‘as’ back 3 versions so you could essentially have a Max file that you could open in your personal version. Though I believe the enhancements in skin would revert to the normal skinning. However the voxel/heat map process would make it easier for you to skin a higher resolution character.

Another alternate I thought about - to help with animating a high resolution character - since you have a base resolution version - after getting the skinning locked down on the high resolution version, you could skin wrap a base resolution mesh to the rig and use that as a base mesh representation while animating, while the high resolution mesh is hidden.
When animations are finished unhide the high resolution mesh - delete the base resolution mesh - and touch up the animations (if needed).

Or if using biped - simply animate on the base resolution mesh rig, save animation and load onto the same rig used for the high resolution character.

Only way I’ve ever seen it handled well is with custom tools. The default tools in Maya and Max definitely leave a lot of artifacts in the process of copying weights from low rez to higher rez. I’ve done this and then used a weight hammer on the errant vertices with some success.
But I honestly find that the fastest way is to just buckle down and do it manually. I assign my weight values directly, edge loop by edge loop. In my own experience, you always end up having to come back and noodle so much that it’s best to just consciously assign values the first time around. I worked with a TD who said that at Blur he often ended up doing the same thing, because the best machines are still pretty limited in their capacity. Especially when it comes to special cases.

HOWEVER!
There is a recentish development by a Tech at Naughty Dog, Hans Godard, making some good use of the Delta Mush deformer. While Delta Mush isn’t new, it was only just officially implemented in Maya(though people had been doing their own implementations for a while). I’m not sure whether Autodesk added it to the last version of Max. I know they added the Geodesic Voxels. If not, I have seen people do their own implementations.
Anyhow, while no engine I know of has implemented Delta Mush(one day, I hope!) he made a video of a process for using a DM deformed mesh to compute skin weights and joints.

https://vimeo.com/106647863

He since released his skinning converter tool that he used in the process:

https://vimeo.com/123883474

So, this looks really promising. I haven’t tried it out in Maya, but I intend to soon. It would be a lot of work, but it’s definitely also replicable in Max if you have the patience and programming knowledge.

EDIT:
To further expound. In DX11 you can tesselate surfaces. It’s shader specific, so I’m pretty sure it will work with a skinned mesh in Unity. But I haven’t had need to try it out. Unity - Manual: Surface Shaders with DX11 / OpenGL Core Tessellation
So you can try exporting the lower res version and simply adding tessellation to the shader. That may get you what you’re looking for. It won’t be cheap, though!

1 Like