Hi, Everyone.
We’ve encountered a problem that has had us hitting our heads against a wall for over a week trying to solve. Upon searching the various forums it appears that no-one has encountered this exact problem, and any other similar solutions put forward on said forums have been implemented but without success. Therefore I am putting it out there to see if we can’t solve it together.
I’ll try to include as much information about the problem as possible in my initial post. Then I will attempt to put forward a few hypotheses towards the problem. Finally I will summarise the problem as a whole so you don’t have to re-read all of this.
Background:
We have a mesh created in Max 2012: rigged with biped (extra 2x helper bones on forearm, and a tail), skinned, animated using mocap data, and ready for export to another program (in our case, Unity 3.5.8 - we cannot upgrade the project to Unity 4 for various in-house project spec reasons). I have done similar animations before with a number of other projects using Max 2012, but this time we are upgrading the project to Max 2013 for the first time. However, Max 2013 has the ability to export legacy .fbx files if needed.
Problem:
We use .fbx to export our mesh from Max with materials, animations (baked), and skin morphs to import into Unity (3.5.8) ready for the next step in the workflow. However, the mesh we see imported into Unity does not represent what we see in Max. It’s close, but there are clear faults in the mesh that appear to be skin-weight related.
Please see attached images for reference
Left: smooth, Max;
Middle: edged faces, Max;
Right: edged faces, Unity with annotations
We have tested various Unity import settings (Optimize mesh, Keyframe Reduction, Mesh Compression) with zero visible results/changes to the mesh.
Please note: the mesh’s skin weights have been tweaked over time (in Max) to accommodate a range of animations, but going back through the older mesh’s exports it seems the problem has been there always.
We have also tested the mesh in Unity with an .obj export with no problems whatsoever. This points toward the .fbx export/import being the cause (?).
Hypothesesssises:
The .fbx imports back into Max just fine, with animation and tex. There are no issues with the mesh whatsoever. This works with .fbx versions 2009-2013. However, each respective .fbx results in the same mesh problem when imported into Unity. Some forums have mentioned that Unity only supports certain .fbx versions. I am yet to prove/disprove this theory, but as I’m now using Max 2013 it is plausible that it is a factor, or at least could point toward the problem. This theory is further backed by the .obj export working successfully.
The Unity import settings are very accommodating with imports, and it’s possible that we’ve overlooked something that could be a simple as checking a box, but my feeling is that as we’ve not changed anything in Unity, therefore it must be an external factor that has caused this problem. However, I don’t want to be ignorant and rule it out as the above hypothesis only theorises that Max’s .fbx exports are possibly slightly incompatible when it comes to skin weights.
I’m 99% certain it’s an .fbx problem, I just can’t figure out if it’s Max or Unity that I should be looking at.
Summary:
- Using Max 2013 and Unity 3.5.8: we are unable to get Max’s skin weights to 100% transfer into Unity via .fbx. Something we don’t normally have a problem with.
- We think it’s either Max’s .fbx export settings, or Unity’s import settings, but that’s only from what we have deduced from our tests.
- I have access to Max 2009, 2012, 2013 and Unity 3.5.8 and 4. Ideally I’d like the workflow to be: Max 2013 > .fbx > Unity 3.5.8 in this case. Workarounds are welcome, but ideally Max and Unity.
Thank you for your time in advance,
Tom (3D Artist/Animator/Modeller)