Interest in a Blender Avatar creation workshop


I’m very interested too…still a beginner so I would love to attend…thanks to all who organize these sessions…





We had a great turnout, I think we were over 10 at one point… Server was rock solid! and once we all got signed into Joinme that worked great too.

Thanks to everyone who attended and looking forward to seeing you and any new folks next week, where we plan on starting the rigging and skinning, but if you are just joining don’t worry we can get you up to speed…


1 Like


Is someone videotaping this? I am at work while this is taking place. Thanks!

1 Like


Topics today:
-Fuse CC option?
-Rigging Primer

Anyone is welcome to tape if you like, It’s planned to be more of a discussion and tips rather than a tutorial per se.




Great crowd again, thanks for your comments and participation everyone…

One thing I totally forgot to do in my 30 minute rig-to-hifi demo was to re-scale and rotate the model as per @Menithal standards videos prior to import… this is the second time this has caught me, so I should have known. If you don’t do this your physics model will be way off after import once you get it into hifi… I can show you this next time.




Today I’m going to go over the fuse->mixamo->blender->hifi mess of a workflow, with some improvements hopefully can get something reasonable uploaded in the hour…




Bonus for today: try my avatar switcher tablet app: (loaded with an example from fuse)



A photoshop action may be the simplest eyelash fix.
Tho now im wondering if can be made to rebake the diffuse subtracting the lapha mask



Any idea how to get the maximo fbx convert as a non embeded texture fbx ?
(without using blender)



I wanted to check, but fuse refuse to start here.
Did you checked some eport function in the file menu ?



I replace the diffuse texture in Blender, fix the elbows, knees, wrists weighting, then export back to FBX. In fuse you can export the textures only, choose the PBR setting for the correct diffuse base color texture (with alpha channel)

1 Like


You might need to reinstall…=



I know, but not use it so much. that i do that if needed.
Mabye thing broke when i removed the broken FBX converter.



I finally find a way to convert the “embedded maximo FBX” to a “non-embeded FBX”
(I used Python + Python FBX SDK)

As I suspected, I can now customize the texture (see no 1)

I make also an attempt to add some alpha on the texture to fix the eyelashes and the hair…
si my diffuse texture have alpha…
But this is not working… (see 2 and 3)
they eyelash are still black and they hair we see some white strips. I guess it’s the alpha that is opacified as white surface.
It’s clearly not question of a % of alpha read in the texture… the hair one has more than 50% of alpha. I also add alpha zone on the texture body, on the part that are not used, to reach at leat a 10%.

I now suspect that the specular texture are maybe affecting the thing… I will try to add the alpha there too…
Let me know if you have any idea…



I just try to also add the alpha on the specular map… this has no effect…
So is this means that a setup on the material indicates to ignore alpha ?

I guess the next step is to convert to fbx-ascii and find where it is broken.
My brain is fighting right now between the desire to have this working and the absurdity of the complexity of such a processing to get a decent avatar …



The albedo (diffuse) contains the alpha channel, make sure to tick off alpha box as well as diffuse color. Oh also, the alpha is not variable, needs just 100% opaque or 100% transparent.

Question, when you do the export this way, do you get the mesh deformations? etc… ‘S’ legs and armpit holes etc?



Using the fbx converter I coded in python (based on Autodesk FBX SDK), my avatar stays intact between each conversion. No mesh issue, no rig issue.

(I’m to check how to turn this as a .exe to make this available to all.)

I have not been able so far to fix the Alpha…
but I found how to remove the eyelashes completly… (without using Blender or Maya)
Here the result:

Here is the path I did:

-Fuse… to Maximo
-Maximo to FBX (embedded)
-Convert FBX to FBX ASCII (non-embedded) using my python tool.
-In Notepad++, Seek and destroy the eyelash geometie node… and save
-Re-Convert FBX ASCII (non-embedded) to FBX BINARY (non-embedded) using my python tool.
-Use it in HF (with a quantity of “Clears Cache” to test all that)

So Now I have no more the eyelash issue (I have no more any eyelash at all)
And I can edit the texture in Photoshop or Gimp for:

  • Fix the ugly glowing nostril.
  • Customize my avatar textures if I want.

I learn that Blender fbx import/export is not base on Autodesk SDK, so it’s not a big surprise that it contain enough bug to be problematic (for complex objects like avatars at least). (Apparently, they can’t publish one base on Autodesk for Licence issues)
I found some other fbx import for blender, based on SDK, build by some people, but they don’t support too much option, (it was made for a specific context of usage) I got issues with those too.

That said… we are still very far from a straight forward flow.

P.S. By the way, I found also a way to have the mirror view in HMD…(realizing that I had never seen the face of my own avatar in HDM before…) To do this, set the view in mirror mode and close Interface… Then Launch it with a command line to start directly in HDM… (see: Is there a command line to launch Interface directly in HMD?) I don’t see great advantage to have all inversed as in a mirror (UI can’t work well)… maybe that would be better to just have the camera point of view, since we do want to see our avatar in HDM.



Hi @Alezia.Kurdis, Looks like you’re making some progress. I’m going to share some tips and source files maybe they can help.

Here is a complete fuse export for an Avatar I am calling ‘Messy guy’… any resemblance to Palmer Luckey is purely coincidental…

I exported him in parts for best texture usage, use the main as the avatar, and the rest as attachments:

main: (head,eyes,parts or body)


Blender source:

Original FBX from Fuse/Mixamo:

Easy way to remove eyebrows is in Fuse, you can hide them if you drill down into the options:

But Ultimately, for best result on eyelashes and hair, we need to bake out the PBR Diffuse maps that have the alpha in them from Fuse:

With those PBR images you will need to set your main diffuse texture to map to Base Color + Alpha in Blender:

I have looked at a bunch of different avatars from fuse, imported directly, and with the external workflow… consistently seeing some not-so-good weighting and skinning that needs to be fixed up in blender, plus Mixamo does not appear to export PBR images, this is the root of the ‘black eyelash’ problem I think.




Here the tool I used to convert the FBX
(sorry I have not been able to make a stand alone version…)

This too can convert:
“Embeded Binary FBX” => “Non Embeded BINARY FBX” (texture in a separated folder)
“Embeded Binary FBX” => “Non Embeded ASCII FBX” (texture in a separated folder)
“Non Embeded ASCII FBX” => “Non Embeded BINARY FBX”
“Non Embeded BINARY FBX” => “Non Embeded ASCII FBX”

This is the equivalent to a 2017.1 FBX Converter
(Autodesk stop to support FBX Converter app. with the version 2013.3)

You need to install: FBX SDK 2017.1 Python
You will found it here under the “Python Binding” Section:

You need to install Python 3.3.5
(nothing more recent… it need to be 3.3.5 (the 2014 old thing) Autodesk are not too much up to date)
You will font it here:

Once done, you will need to copy some files from FBX installation to the Python installation.
The procedure is here:

Now here the python script:
(Simply create a text file with the name of your choice, and replace the extension for “.py”)
Put this code inside of it:

from sys import exit
import fbx
import tkinter as tk
from tkinter import filedialog
from tkinter import messagebox

def getASCIIFormatIndex( pManager ):
    ''' Obtain the index of the ASCII export format. '''
    # Count the number of formats we can write to.
    numFormats = pManager.GetIOPluginRegistry().GetWriterFormatCount()

    # Set the default format to the native binary format.
    formatIndex = pManager.GetIOPluginRegistry().GetNativeWriterFormat()

    # Get the FBX format index whose corresponding description contains "ascii".
    for i in range( 0, numFormats ):

        # First check if the writer is an FBX writer.
        if pManager.GetIOPluginRegistry().WriterIsFBX( i ):

            # Obtain the description of the FBX writer.
            description = pManager.GetIOPluginRegistry().GetWriterFormatDescription( i )

            # Check if the description contains 'ascii'.
            if 'ascii' in description:
                formatIndex = i

    # Return the file format.
    return formatIndex

#get what to open
root = tk.Tk()
file_path = filedialog.askopenfilename(filetypes=[("FBX", "*.fbx")], title="Open FBX to convert",)

if not file_path: exit(0)

# Create an SDK manager                                                                                           
manager = fbx.FbxManager.Create()

# Create a scene
scene = fbx.FbxScene.Create(manager, "")

# Create an importer object                                                                                                  
importer = fbx.FbxImporter.Create(manager, "")

# Specify the path and name of the file to be imported                                                                            
importstat = importer.Initialize(file_path, -1)

importstat = importer.Import(scene)

# Create an exporter object                                                                                                  
exporter = fbx.FbxExporter.Create(manager, "")

# get the where to save
save_path = filedialog.asksaveasfilename(filetypes=[("FBX", "*.fbx")], title="Save converted FBX as", defaultextension='.fbx')

if not save_path: exit(0)

# Specify the path and name of the file to be exported

if messagebox.askquestion("File format...", "Do you want to export as an ASCII FBX? (By clicking NO you will get a BINARY FBX.)")=="no":
    exportstat = exporter.Initialize(save_path, -1)
    print("BINARY export.")
    asciiFormatIndex = getASCIIFormatIndex(manager)
    exportstat = exporter.Initialize(save_path, asciiFormatIndex)
    print("ASCII export.")

exportstat = exporter.Export(scene)

To run, just to double click on your .py file.
It will ask you the source file, and then the arrival filename. It will also ask you if you want it ASCII or BINARY.

This script can be easily modified to support others formats like OBJ and Collada… In fact, it used the file extension to figure what to do.