Experimental Mac OS-X Maya 2018 support in the cmake
branch!
To try it out:
- I assume you installed Maya 2018 already
- install XCode from the app-store
- install CMake
- open a Terminal window
- See
Finder
Utilities
Terminal
- See
- clone the
cmake
branch of this repository- e.g.
git clone -b cmake https://github.com/WonderMediaProductions/Maya2glTF ~/Documents/Maya2glTF
- e.g.
- enter the cloned directory
- e.g.
cd ~/Documents/Maya2glTF
- e.g.
- run the build script
sudo ./macos_build_plugin.sh
- for some reason, the script needs be run as root
If all goes well, you should get the message All done!
.
Now open Maya, and execute the MEL command maya2glTF_UI
If this doesn't work for you, please create an issue.
Happy exporting!
V0.9.10 is released! See the releases tab.
-
Maya 2018 and 2017, tested on Windows 10 x64 only for now
-
To install:
- install the Microsoft Visual C++ redistributables.
- on many systems this is already installed, so you might want to skip this step.
- download the desired Maya2glTF_xxx.zip release
- extract the downloaded
zip
file to any location (e.g. your desktop) - open the created
Maya2glTF
folder - double click on the
deploy.bat
file- This will copy the plug-in and scripts to your
Documents
folder
- This will copy the plug-in and scripts to your
- re-launch Maya 2017 or 2018
- install the Microsoft Visual C++ redistributables.
-
To export:
- load a scene
- in the Maya script window, type
maya2glTF_UI
to launch the UI.- You might want to select the
maya2glTF_UI
script text and drag it using the middle-mouse-button to theCustom
shelf, or even better, make aglTF
shelf...
- You might want to select the
- select the meshes you want export
- or click the
select all polygon meshes
button
- or click the
- select the desired animation clips source using the dropdown box
- TRAX animation clips are also supported.
- only enabled clips on the first track are exported.
- if you have multiple characters, select the desired one.
- TRAX animation clips are also supported.
- hit the
export selected meshes
button.- currently the user interface is not automatically updated when you change or load a scene; just re-run the
maya2glTF_UI
script or hit therefresh user interface
button.
- currently the user interface is not automatically updated when you change or load a scene; just re-run the
- good luck! ;-)
-
To help:
- let me know if this doesn't work for you
- ideally make an issue, providing the OS, Maya and plug-in version, and a test-scene.
- if it does work, please give Maya2glTF a ⭐ on GitHUB, and spread the word 😎
- let me know if this doesn't work for you
-
To shade:
- I assume you already used something like Substance Painter to create glTF-PBR textures
- select the polygons you want to shade
- click the
assign PBR shader to selection
button - the first time, you need to select our PBR OpenGL shader at:
Documents\maya\Maya2glTF\PBR\shaders\glTF_PBR.ogsfx
- next, select all the PBR textures you want to apply in one go:
- for example, for the damaged helmet model, multi-select the following textures:
Default_normal.jpg
Default_albedo.jpg
Default_AO.jpg
Default_emissive.jpg
Default_metalRoughness.jpg
- for example, for the damaged helmet model, multi-select the following textures:
- now the PBR shader and all textures should be applied to your selection
- by default we use the following keyword-in-filename convention to detect the kind of texture:
basecolor
oralbedo
=> base color texturemetal
or_orm
=> metallic texturerough
or_orm
=> roughness textureoccl
or_orm
or_ao
=> occlusion texturenormal
=> tangent space normal texture- see also the
-mts
flag for MikkTSpace information if your models come from Blender
- see also the
emissive
=> emissive texturediffuse_env
=> Image-based-lighting (IBL) prefiltered diffuse environment map (PMREM)specular_env
=> Image-based-lightning (IBL) prefiltered specular environment map (PMREM)brdf
=> Bidirectional reflectance distribution function lookup table texture- you can customize these conventions, see
maya2glTF_assignPbrShader.mel
- all textures are optional
- see the glTF PBR page page for more info.
- the metallic and roughness textures are always merged into a single texture when exporting.
- If you provide JPEGs, we use Maya's JPEG encoder to generate this texture. However, the default Maya JPEG encoding settings are very low quality.
- The following MEL snippet sets the JPEG encoder quality:
putenv "AW_JPEG_Q_FACTOR" "92";
- The following MEL code enables maximum possible JPEG quality:
putenv "AW_JPEG_Q_FACTOR" "100"; putenv "AW_JPEG_SUB_SAMPLING" "1x1,1x1,1x1";
- The following MEL snippet sets the JPEG encoder quality:
- If you provide JPEGs, we use Maya's JPEG encoder to generate this texture. However, the default Maya JPEG encoding settings are very low quality.
At Wonder Media, we are specialized in creating realtime interactive 3D animation, for education, events and broadcast television, since 1992. We have developed our own multi-machine real-time 3D puppeteering software called AnimationNow, and we are about to upgrade this to make use of up-to-date rendering techniques.
If something goes wrong in our production pipeline, it usually is exporting our complex rigged Maya characters. In the past, we contributed both donations and patches to the open source OGRE exporter, but now we want to dig deep into the Maya API ourselves, so we can help out our artists if something goes wrong during the export.
glTF 2.0 seems to contain most of the features we need, and is extensible. IMHO glTF must become the defacto standard for animated 3D content. At Wonder Media, we plan to use glTF for all our 3D assets.
Maya interally uses a dataflow architecture (called the dependency graph). This means that power-users can connect the dependency nodes in the graph in any way they like. Unfortunately this awesome flexibility also makes it insanely difficult to develop an exporter that always works ;-)
I consider this plugin to be production quality now, but use it at your own risk :)
-
Supports Maya 2016 EXT2, 2017, 2018 (64-bit only)
- Maya 2016 is a different product from Maya 2016 EXT2 and is not supported, since I can't find a compatible devkit for it.
-
Windows only for now
- although the code is written using C++ 17 and should be platform independent, so can be ported by people with this experience (PR welcome! :)
-
Supports static and animated, skinned and morphed meshes
- Currently all animation is baked per frame, no compression is done yet
-
Supports multiple animation clips (node and joint transforms, blend shape weights)
- Blend shape targets are not sparse yet
-
Exports
POSITION
,NORMAL
,COLOR
,NORMAL
,TANGENT
,TEXCOORD
,JOINTS
andWEIGHTS
attributes -
Supports exporting to
glTF + bin
, singleglTF
or singleglb
files. -
Uses the same glTF code as the COLLADA2GLTF project
-
Currently Phong, Lambert and Blinn shaders are converted to PBR, but only the color texture and transparency is taken into account (this is mainly done for testing with existing models).
-
Comes with GLSL code with a friendly UI ported from the official Khronos PBR WebGL code.
- See
Maya2glTF\maya\renderData\shaders\glTF_PBR.ogsfx
- To use this hardware shader
- make sure the GLSL shader plugin is loaded
- use the OpenGL/Core Profile in Preferences/Display
- You can use the
Maya2glTF\maya\scripts\assign_glTF_PBR_material_and_textures.mel
script to assign multiple textures at once, based on filename patterns
- See
-
No lights or cameras yet
- unlikely to be added, we don't really need this, although not a lot of work
-
Currently out-of-the-box downloads are only provided for Windows x64, the MacOS plugin must be build from sources, using the
cmake
branch. The following guide describes how to build themaster
branch on Windows only.- If you want to try the exporter, but you can't build it, give me a sign
-
Right now this project requires Microsoft Windows x64 8.1 or higher
- It should be easily ported Linux, or older versions of Windows.
- Feel free to provide a patch request :)
-
I assume you already installed a GIT client for Windows
-
Install Visual Studio 2017
- Select at least the C++ desktop development payload
- In the individual components tab, select:
- the Windows 8.1 SDK
- the Windows Universal CRT SDK
- This document was written for Visual Studio 2017 15.5.2, newer versions might not work.
-
Install the Win64-x64 version of CMAKE
- Make sure to add CMake to the system path
-
Install the latest Maya devkit matching your Maya application version
-
We need to tell the Maya2glTF project where it can find the Maya devkit header and library files. Declare the following environment variables, or add
user macros
to the Visual StudioMicrosoft.Cpp.x64.user
property page- For Maya 2018:
MAYA_2018_SDK
-> thedevkitBase
sub-folder of the Maya devkit, e.g.C:\dev\Maya-2018-SDK\devkitBase
- For Maya 2017:
MAYA_2017_INC
-> theinclude
folder of the devkit, e.gC:\dev\Maya-2017-SDK\devkitBase\include
MAYA_2017_LIB
-> *thelib
folder of your Maya 2017 program installation*, e.g.C:\Program Files\Autodesk\Maya2017\lib
- For Maya 2016 EXT2:
MAYA_2016_EXT2
-> *the folder of your Maya 2016.5 program installation*, e.g.C:\Program Files\Autodesk\Maya2016.5
- For Maya 2018:
-
Run the
Developer Command Prompt for VS 2017
, and then clone this repository, including all dependencies. Oh, did I mention not to forget the dependencies? ;-)git clone https://github.com/WonderMediaProductions/Maya2glTF --branch master --recursive
-
Enter the
Maya2glTF
folder, and runwindows_build_dependencies
- After a couple of minutes, your console should turn green if this succeeds, or red if this fails. In the latter case, make sure you cloned the GIT dependencies, see the previous step...
-
Next build the
Maya2glTF
plugin itself, by running the following command inside theMaya2glTF
folderwindows_build_plugin *MAYA_VERSION*
Where MAYA_VERSION is either 2016, 2017 or 2018.
Obviously you can also use Visual Studio to build and debug the plugin.
-
Now export a 3D model:
-
Start Maya
-
Load a scene * NOTE to load scenes from this project, first set the Maya project to the
Maya2glTF\maya
folder- to see if the plugin was built correctly, it's best to use a scene from this repository, for example
Maya2glTF\maya\scenes\damaged_helmet.ma
- to see if the plugin was built correctly, it's best to use a scene from this repository, for example
-
select the nodes you want to export
- by default all descendants are also exported, unless you add the -selectedNodesOnly (sno) flag.
-
run the following MEL script
maya2glTF -outputFolder "<your output folder>"
-
I use the vscode glTF viewer
- Make sure to switch between BabylonJS, Cesium and ThreeJS, they all give different results...
-
If you want to contribute to the development, you might want to use the MEL script
Maya2glTF\maya\scripts\test-iteration.mel
. This unloads and reloads the plugin everytime, unlocking the DLL.
-
-
The supported plugin arguments are _
-outputFolder (-of) STRING
_(required)* * the output folder-
-scaleFactor (-sf) FLOAT
(optional)- scale factor to apply to the vertices
-
-copyright (-cpr) STRING
(optional)- copyright text to be embedded in the GLTF file
-
-selectedNodesOnly (-sno)
(optional)- only exports the directly selected nodes
- by default all descendants of the selected nodes are exported too
-
-sceneName (-sn) STRING
(optional)- the name of the glTF filename
- default is Maya scene name
-
-binary (-glb)
(optional)- exports a single
glb
asset file - default is a JSON
glTF
and binarybin
file containing the buffers
- exports a single
-
-embedded (-emb)
(optional)- embeds buffers into the
glTF
file, as base-64 encoded strings - by default the buffers are stored in a separate
bin
file
- embeds buffers into the
-
-initialValuesTime (-ivt) TIME
(optional)- the time where the initial/default values can be found
- by default frame 0 is used
- this frame should match the skin bind pose
- all nodes and meshes get their default transforms and weights from this time
-
-animationClipName (-acn) STRING
(optional, multiple)- the name of the animation clip
-
-animationClipStartTime (-ast) TIME
(optional, multiple)- the start time of the animation clip
- required when exporting animation clips
-
-animationClipEndTime (-aet) TIME
(optional, multiple)- the end time of the animation clip
- required when exporting animation clips
-
-animationClipFrameRate (-afr) FLOAT
(optional, multiple)- the frames-per-second of the animation clip
- required when exporting animation clips
- either you pass this for each clip, or once
-
-meshPrimitiveAttributes (-mpa) STRING
(optional)- the attributes for the shapes to export, separated by a vertical bar |
- by default all attributes are exported, e.g.
-mpa POSITION|NORMAL|TANGENT|TEXCOORD|COLOR|JOINTS|WEIGHTS
-
-blendPrimitiveAttributes (-bpa) STRING
(optional)- the attributes for the blend-shapes to export, separated by a vertical bar |
- by default all GLTF supported attributes are exported, e.g.
-mpa POSITION|NORMAL|TANGENT
-
-force32bitIndices (-i32)
(optional)- forces 32-bit indices to be written to the GLTF buffers
- by default 16-bit indices are used whenever possible
-
-disableNameAssignment (-dnn)
(optional)- do not assign Maya node names to GLTF nodes
- by default names are copied
-
-mikkelsenTangentSpace (-mts)
(optional)- use the 'MikkTSpace' algoritm for computing the tangents instead of those from Maya
- by default the Maya tangents are exported
- if you imported meshes from Blender without importing the tangents, and you just use Maya for doing animation, you should use this flag.
-
-mikkelsenTangentAngularThreshold (-mta)
(optional)- the angular threshold to be passed to the 'MikkTSpace' algoritm
- by default 180 is passed
- in general you should not use this flag, it is mainly for debugging
- the angular threshold to be passed to the 'MikkTSpace' algoritm
-
-skipStandardMaterials (-ssm)
(optional)- do not export standard materials (lambert, phong, etc), only GLTF PBR materials.
- by default standard materials are converted
- but just the color and transparency is copied for now.
-
-excludeUnusedTexcoord (-eut)
(optional)- exclude texture coordinates when the mesh primitive doesn't have textures?
- by default texture coordinates are always exported
- exclude texture coordinates when the mesh primitive doesn't have textures?
-
-defaultMaterial (-dm)
(optional)- always generates a glTF PBR material, even if no material is assigned to a mesh in Maya
- by default no default materials are generated
-
-colorizeMaterials (-cm)
(optional)- for debugging, generate a unique PBR material with a different color for each material
- by default no debug materials are generated
-
-dumpMaya (-dmy) STRING
(optional)- dumps debugging info of the Maya objects to the given filepath argument
- use the word
CONSOLE
to print to the Maya output window- WARNING: this can take a very long time if you have complex meshes!
- by default nothing is printed
-
-dumpGLTF (-dgl) STRING
(optional)- dumps a formatted version of the glTF asset file to the given filepath argument
- use the word
CONSOLE
to print to the Maya output window- WARNING: this can take a very long time if you have complex meshes!
- by default nothing is printed
-
-ignoreMeshDeformers (-imd) STRING
(optional, multiple)- blend-shape or skin-cluster deformers to be ignored
- by default no deformers are ignored
- use this if you have deformers that are used to generate different characters, but not for animation
-
-skipSkinClusters (-ssc)
(optional)- skip all skin cluster deformers, as if the mesh was not skinned
- by default no skin clusters are skipped
-
-skipBlendShapes (-sbs)
(optional)- skip all blend-shape deformers, as if the mesh was not morphed
- by default no blend-shape deformers are skipped
-
-redrawViewport (-rvp)
(optional)- redraw the viewport when exporting animation.
- by default the viewport is not refreshed, since this slows down the exporter
-