Script for importing Adobe Fuse character model into Unity (fixes materials)

I have made a script that imports characters from Adobe Fuse CC (Beta) and makes the necessary modifications to the materials and texture maps. Without this script the imported character materials are all broken.

Note, the attached script is not designed to work with characters downloaded direct from the Mixamo store. It is designed to take a character that was made in Fuse, and uses the textures that Fuse exports that are designed for use with Unity. The textures within the FBX files are not ideal for use in Unity.

Using this script the results are quite close to the quality within the Fuse window e.g.

To use the script:

  • Download MixamoUnityImporter.cs
  • Within Unity create folder called Mixamo
  • Create a folder within Mixamo called Editor
  • Copy the script into the Editor folder
  • Now the script should exist as Assets/Mixamo/Editor/MixamoUnityImporter.cs

The workflow is as follows:

  • Create a model using the Adobe Fuse application
  • Export textures for Unity 5 into a new folder with the same name as the character
  • From Fuse select File → Animate with Mixamo
  • Download the rigged character as a Unity FBX file
  • Save the Mixamo FBX file beside the exported textures folder
  • In Unity, click the menu Mixamo → Import from Fuse with exported Unity textures
  • Choose the FBX file to import

This results in importing the character to Assets/Mixamo/[Character Name]/ and a prefab is created that references the updated materials.

To see some examples of the problem see:

Most solutions say to simply set the shader render modes to Opaque or Transparent/Fade, but this is only part of the solution this script performs:

  • Set shader render modes correctly per material
  • Create new materials for Eyes and Eyelashes
  • Correct the MetallicAndSmoothness map (has inverted alpha)
  • Set texture import settings correctly (alpha channel, normal maps)
  • Set smoothness per material to roughly match visuals in Adobe Fuse CC (beta)
  • Create prefab ready for easy use

UPDATES:

  • Updated to handle masks (partially), gloves, shoes, hats.

  • Updated to correctly handle non-alpha hair.

  • Update to fix problem when textures are reimported e.g. by copying the imported character folder to another computer, or pulling commits of characters from Collaborate.

3135870–245611–MixamoUnityImporter.cs (20.6 KB)

11 Likes

Updated to handle masks (partially), gloves, shoes, hats.

3138446–238033–MixamoUnityImporter.cs (19 KB)

4 Likes

Updated to correctly handle non-alpha hair.

3162799–240695–MixamoUnityImporter.cs (20.5 KB)

4 Likes

Thanks! I will try this out.

Edit: Works great!

1 Like

Nice job, works like a charm !

Glad it works for you :). My main problem with it still is that I can’t work out how to automatically set the model to Humanoid during import. Apart from that it still probably needs manual tweaks to the material parameters to best match what we see within Fuse.

I’m trying this script out, downloaded some characters from the Mixamo store but there is no exported textures folder with the characters, only the FBX models. When I try the import it gives me this error:

Yeah, this script is designed to work with a character that was created in Fuse, then uploaded to Mixamo, then downloaded again. Fuse can export textures designed specifically for Unity.

I have another (earlier) version of the script that works without the exported textures from Fuse i.e. can work with FBX direct from Mixamo store, but the quality is not as good, and so I didn’t put as much effort into that version of the script.

Ok, I was just playing around and noticed that when I imported the models into Akeytsu it created a “modelname.fbm” folder. I renamed the folder to “modelname” and the import seemed to work but then gave this critical error:

…and the models came in untextured; however, I noticed the texture names are not the same as the model names. Is this a problem?

Yeah it is a problem. As I said above, this script is designed to work with the textures exported from Fuse, not the textures that are within the FBX file. I’ll upload the older version of the script that uses the FBX only, but the results are not as good as when using textures exported from Fuse.

No, it’s ok. I’d rather figure out what the naming convention is from Fuse and just set up the same naming conventions for the Mixamo store characters. I haven’t used Fuse, can you just give me the example naming conventions for the textures?

EDIT: Nevermind, I just tested Fuse and see that it exports an AO, Base Color, Metallic, Normal and Roughness. The Mixamo store only exports Diffuse, Normal and Specular. I see that it’s more than a naming convention issue…

Here’s an example of a character created in Fuse called “FemaleScan1b”. I’m not sure this will help with the script. The script assumes you are working with the Fuse character, not the Mixamo store characters. The store characters have some different structures in their FBX files that the script will fail to pick up on. I won’t upload the old version of the script, it’s broken, sorry.

Note that the folder in the above image was created by Fuse when exporting textures specifically designed for Unity. The FBX files contain different file formats that will not work as well, and will not work with this script.

1 Like

Update to fix problem when textures are reimported e.g. by copying the imported character folder to another computer, or pulling commits of characters from Collaborate.

3135870–245611–MixamoUnityImporter.cs (20.6 KB)

Hi I get this error when trying to use your script.

NullReferenceException: Object reference not set to an instance of an object
MixamoUnityImporter._process_model (System.String character_name, System.String folder, System.String filename) (at Assets/Mixamo/Editor/MixamoUnityImporter.cs:270)
MixamoUnityImporter.ImportCharacter () (at Assets/Mixamo/Editor/MixamoUnityImporter.cs:102)

[quote=L-Tra
in, post: 3246980, member: 141755]
Hi I get this error when trying to use your script.

NullReferenceException: Object reference not set to an instance of an object
MixamoUnityImporter._process_model (System.String character_name, System.String folder, System.String filename) (at Assets/Mixamo/Editor/MixamoUnityImporter.cs:270)
MixamoUnityImporter.ImportCharacter () (at Assets/Mixamo/Editor/MixamoUnityImporter.cs:102)
[/quote]

First, be sure you are using the latest version. Also, note that this script only works with characters exported as FBX from Adobe Fuse CC (Beta), with textures exported from Fuse specifically made for Unity. Other characters, including many of those downloaded from Mixamo, will have a different and incompatible configuration. It does however work for characters originating from Fuse, uploaded to be rigged by Mixamo, then download the FBX for Unity.

If this is your case then there must be a bug, and it would help if you could give me a copy of the character you are attempting to import so I can reproduce the problem here.

Cheers,
Saul.

i imported Mixamo fbx to 3ds max and without changing anything, i export it to fbx from 3ds max. then i import to Unity. No errors. A little light colored on the texture though, but for my use, its negligible

I uploaded the file here - http://digitaleon.com/scratch/gunman.zip
Same error here, only difference from your instructions is that I included a single animation from mixamo. The file is partially imported but there is no prefab.

NullReferenceException: Object reference not set to an instance of an object
MixamoUnityImporter._process_model (System.String character_name, System.String folder, System.String filename) (at Assets/Mixamo/Editor/MixamoUnityImporter.cs:270)
MixamoUnityImporter.ImportCharacter () (at Assets/Mixamo/Editor/MixamoUnityImporter.cs:102)

More information - I tried just grabbing the FBX without animating it first…the same thing happens.

NullReferenceException: Object reference not set to an instance of an object
MixamoUnityImporter._process_model (System.String character_name, System.String folder, System.String filename) (at Assets/Mixamo/Editor/MixamoUnityImporter.cs:270)
MixamoUnityImporter.ImportCharacter () (at Assets/Mixamo/Editor/MixamoUnityImporter.cs:102)

@L_Train - make sure that the filename of your Fuse model doesn’t contain any underscores. The script looks for the base name of the texture files by splitting the string at the “_” character, as that is how the textures and materials are named. So it looks for the texture at the wrong path.

If it does contain underscores, then re-export the model from Fuse (via Mixamo) using a name without underscores, and try the process again.

1 Like