KhronosGroup / glTF

glTF – Runtime 3D Asset Delivery
Other
7.18k stars 1.14k forks source link

Exporter Ecosystem Matrix and Checklist #1271

Open robertlong opened 6 years ago

robertlong commented 6 years ago

Currently we have a number of glTF exporters with partial support for glTF 2.0. It would be great if we could help artists find the right exporter for their pipeline and required features. We'd also like to help developers find the best projects for them to contribute to.

I'm compiling a matrix of exporters and their supported features. I could use the help of the community in building this matrix. I've created an exporter feature checklist for people to fill out and submit in this thread. I'll add it to the matrix and we can update it as these exporters mature. Hopefully, this pushes people to fill in the missing pieces of these exporters and we can enjoy a more robust exporter ecosystem.

Please let me know if there are items that should be added, removed, or changed in this list. My intention is to keep it high level enough that it isn't information overload, but detailed enough that you can find out if the exporter will work for you. Thank you!

glTF Exporters

Exporter Name .gltf/.bin .glb Morph Targets Skinned Mesh Buffer View and Accessor Reuse Mesh Instancing PBR Metallic Roughness PBR Specular Glossiness (Extension) Unlit Material (Extension) Additional Maps Multiple UV Sets Alpha Double Sided Materials Cameras Animation (TRS) Animation (Weights) Animation (Multiple) Draco Mesh Compression (extension) Extras Data Asset Info
glTF-Blender-Exporter ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ⚠️ ✔️ ✔️ ✔️ ✔️ ✔️
FBX2glTF ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️️ ⚠️
blendergltf ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
obj2gltf ✔️ ✔️ ⚠️ ⚠️ ✔️ ✔️
Babylon.js 3dsMax gltf exporter ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
Babylon.js Maya gltf exporter ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
Maya2glTF ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
UnityGLTF ⚠️ ✔️ ✔️ ✔️ ✔️ ⚠️
Sketchup glTF Export ⚠️ ✔️ ✔️ ✔️ ⚠️
COLLADA2GLTF ✔️ ✔️ ✔️ ⚠️ ⚠️ ✔️ ✔️ ✔️ ✔️ ✔️

Key:

glTF Exporter Checklist

Post template

# Exporter Name
- [ ] JSON Export (.gltf, .bin, .png/.gif/.jpg)
- [ ] Binary Export (.glb)
- [ ] Morph Targets
- [ ] Skinned Mesh
- [ ] Buffer View and Accessor Reuse
- [ ] Mesh Instancing
- [ ] PBR Metallic Roughness Material
- [ ] KHR_matrials_pbrSpecularGlossiness
- [ ] KHR_material_unlit
- [ ] Additional Maps
- [ ] Multiple UV Sets
- [ ] Alpha Coverage
- [ ] Double Sided Material
- [ ] Cameras
- [ ] Animation (TRS)
- [ ] Animation (Weights)
- [ ] Animation (Multiple)
- [ ] KHR_draco_mesh_compression.
- [ ] Extras Data
- [ ] Asset Information

If a feature is missing, please try to provide some details. If it has partial or no support please indicate that. Linking to specific Github issues would be even better!

donmccurdy commented 6 years ago

That is a beautiful and ambitious matrix you have created. 😁

Could I request an extra column for multiple animations? Sadly it is painfully missing from nearly all of these. I might also vote to remove the Draco column, as it feels like something that could be more effectively implemented as a post-optimization rather than in each exporter.

donmccurdy commented 6 years ago

glTF-Blender-IO

(NOTE: Maintainers please feel free to edit this comment if it needs correction, to keep the comment churn limited.)

zellski commented 6 years ago

From memory, this is FBX2glTF, but feel free to edit the borderline cases as you like:

FBX2glTF

Kupoman commented 6 years ago

blendergltf

edit: Added support for KHR_materials_unlit and control of the doubleSided material option. edit: Added "Animation (Multiple)" edit: Update Alpha Coverage status to supported

emackey commented 6 years ago

@donmccurdy I updated the doubleSided one to say:

⚠️ Double Sided Material (requires custom Cycles node, doesn't use Blender's own flag)

robertlong commented 6 years ago

I updated the matrix, added the multiple animations column, and edited the comments.

@donmccurdy and @Kupoman could you fill in the multiple animations item in your checklists? I think it's missing from both of those exporters, but I could be wrong.

@zellski the extras data on node is useful for application specific behavior that doesn't belong in an extension. I think it's hard to do in a general way to all the glTF properties, but node seems like it would be the easiest and most useful.

@donmccurdy I'd rather keep the Draco column. I think it's useful to be able to export an optimized asset directly from an exporter. Not all of them will implement the extension and when they don't users can use the glTF pipeline tool or some Draco compression tool.

donmccurdy commented 6 years ago

@donmccurdy and @Kupoman could you fill in the multiple animations item in your checklists?

I've updated both — blendergltf supports multiple animations, and support is in progress for the Khronos exporter.

@donmccurdy I'd rather keep the Draco column.

Ok, sounds good.

donmccurdy commented 6 years ago

obj2gltf

pjcozzi commented 6 years ago

Any chance the following folks could chime in on their glTF exporter capabilities?

Thanks, it is deeply appreciated! 👏

deltakosh commented 6 years ago

Sure thing!

deltakosh commented 6 years ago

Babylon.js 3dsMax gltf exporter

deltakosh commented 6 years ago

Babylon.js Maya gltf exporter

pjcozzi commented 6 years ago

Very nice, thank you kindly @deltakosh!

ziriax commented 6 years ago

Maya2glTF exporter

Details

Short term backlog (coming weeks)

Long term:

Desired pull requests

donmccurdy commented 6 years ago

Thanks @Ziriax! Would you mind editing to match the template (and then add any notes inline or below that)? 😇

robertlong commented 6 years ago

Updated the matrix. Thanks everyone!

ziedbha commented 6 years ago

UnityGLTF

Looking to fix some bugs with texture exporting and accessor information soon.

donmccurdy commented 6 years ago

/cc @CentaurMare

CentaurMare commented 6 years ago

Sketchup glTF export

⚠️ JSON Export (.gltf, .bin, .png) (Creates .gltf embedded, does not write external .bin/.png files) ✔️ Binary Export (.glb) ❌ Morph Targets ❌ Skinned Mesh ❌ PBR Metallic Roughness Material ❌ KHR_matrials_pbrSpecularGlossiness ❌ KHR_material_unlit ❌ Additional Maps ✔️ Alpha Coverage ✔️ Double Sided Material ❌ Cameras ❌ Animation (TRS) ❌ Animation (Weights) ❌ Animation (Multiple) ❌ KHR_draco_mesh_compression. ❌ Extras Data ⚠️ Asset Information (no copyright information)

Sketchup only supports diffuse materials (textured and non-textured), and doesn't support animations.

pjcozzi commented 6 years ago

@lasalvavida or @ziriax any chance you could provide input on COLLADA2GLTF for this capability matrix?

lasalvavida commented 6 years ago

Thanks for the reminder @pjcozzi, I'll try to get to this sometime this evening

lasalvavida commented 6 years ago

COLLADA2GLTF

donmccurdy commented 6 years ago

Thanks @lasalvavida! One minor thing: I'm taking "Animations (Multiple)" to refer to grouping <animation_clip/> nodes into separate glTF animations, per https://github.com/KhronosGroup/COLLADA2GLTF/issues/130. To my understanding COLLADA2GLTF does not support this quite yet.

lasalvavida commented 6 years ago

I'm taking "Animations (Multiple)" to refer to grouping nodes into separate glTF animations, per KhronosGroup/COLLADA2GLTF#130. To my understanding COLLADA2GLTF does not support this quite yet.

Makes sense, I'll uncheck it.

ziriax commented 6 years ago

@robertlong I updated the Maya2glTF matrix, the exporter now supports exporting blend-shapes and skinning. Can you update the main matrix please? Thanks!

Kupoman commented 6 years ago

Fixed the problems with alpha coverage output in blendergltf. I have updated the status post to reflect these changes.

donmccurdy commented 6 years ago

The BabylonJS 3DS Max exporter is listed twice - is that a typo, or is there another tool we'd meant to link to?

robertlong commented 6 years ago

Yeah, thanks for catching that. I've removed the duplicate entry.

pjcozzi commented 6 years ago

@robertlong perhaps it is worth adding an N/A icon since some tools would never be able to check all the boxes since their input format, e.g., OBJ, doesn't support the features.

pjcozzi commented 6 years ago

Does anyone else want to chime in here?

Perhaps

lasalvavida commented 6 years ago

Update: double sided materials are supported in COLLADA2GLTF 2.1.1

deltakosh commented 6 years ago

Update for Babylon/s maya exporter:

Babylon.js Maya gltf exporter

robertlong commented 6 years ago

Updated, thanks @deltakosh!

pjcozzi commented 6 years ago

@robertlong do you think these features should also be part of the table?

robertlong commented 6 years ago

Thanks @pjcozzi, I've updated the matrix to include those columns. I haven't filled them in yet though. I'll need some help from the community.

including sharing an instance with different materials

How would you define an instance with different materials? I didn't know this was currently possible in glTF 2.0.

donmccurdy commented 6 years ago

How would you define an instance with different materials?

In three.js we try to assume this is the intention when two meshes reference the same accessors but different materials. The spec does not explicitly state any such relationship, and it gets complicated when multiple primitives are considered, but I think it's reasonable to encourage exporters to reuse accessors wherever possible. In any case, loaders should not have to compare vertex data to identify reused meshes.

EDIT: Related — https://gist.github.com/mattdesl/aea40285e2d73916b6b9101b36d84da8

robertlong commented 6 years ago

Thanks, yeah that makes sense.

Buffer reuse for vertex attributes is probably another best practice that may belong in here somewhere. Maybe I'll make a separate column for these two features. What do you think?

donmccurdy commented 6 years ago

Guessing you mean buffer views, not buffers, but yeah bufferview de-duplication — and generally not creating more bufferviews than necessary — could be reasonable to include here. I think they could be combined in a single column.

robertlong commented 6 years ago

Yeah, I meant buffer views. Cool, I'll add the column.

alexkowel commented 5 years ago

Hi, thank you for making this list. We at Soft8Soft develop glTF exporters for 3ds Max and Blender.

Verge3D for 3ds Max

alexkowel commented 5 years ago

Verge3D for Blender

More info on how to use these exporters can be found here.

thomlucc commented 5 years ago

Update for Babylon.js 3ds Max glTF Exporter Checklist:

[✔️] JSON Export (.gltf, .bin, .png/.gif/.jpg) [✔️] Binary Export (.glb) [✔️] Morph Targets [✔️] Skinned Mesh [✔️] Buffer View and Accessor Reuse [✔️] Mesh Instancing [✔️] PBR Metallic Roughness Material [❌] KHR_matrials_pbrSpecularGlossiness [❌] KHR_material_unlit [✔️] Additional Maps [✔️] Multiple UV Sets (Only supports up to 2 UV sets currently) [✔️] Alpha Coverage [⚠️] Double Sided Material (Only supported for 3dsMax Standard materials) [✔️] Cameras [✔️] Animation (TRS) [✔️] Animation (Weights) [✔️] Animation (Multiple) (Includes support for per-node animation selection) [❌] KHR_draco_mesh_compression. [❌] Extras Data [⚠️] Asset Information (No support for copyright info yet)

Update for Babylon.js Maya glTF Exporter Checklist:

[✔️] JSON Export (.gltf, .bin, .png/.gif/.jpg) [✔️] Binary Export (.glb) [✔️] Morph Targets [✔️] Skinned Mesh [✔️] Buffer View and Accessor Reuse [✔️] Mesh Instancing [✔️] PBR Metallic Roughness Material [❌] KHR_matrials_pbrSpecularGlossiness [❌] KHR_material_unlit [✔️] Additional Maps [✔️] Multiple UV Sets (Only supports up to 2 UV sets currently) [❌] Alpha Coverage [❌] Double Sided Material [✔️] Cameras [✔️] Animation (TRS) [✔️] Animation (Weights) [✔️] Animation (Multiple) [❌] KHR_draco_mesh_compression. [❌] Extras Data [⚠️] Asset Information (No support for copyright info)

MiiBond commented 5 years ago

Adobe Dimension Export:

[✔️] JSON Export (.gltf, .bin, .png/.gif/.jpg) [✔️] Binary Export (.glb) [❌] Morph Targets [⚠️] Skinned Mesh (Prerelease only) [✔️] Buffer View and Accessor Reuse [✔️] Mesh Instancing [✔️] PBR Metallic Roughness Material [❌] KHR_matrials_pbrSpecularGlossiness [❌] KHR_material_unlit [✔️] Additional Maps [❌] Multiple UV Sets [✔️] Alpha Coverage [❌] Double Sided Material [✔️] Cameras [⚠️] Animation (TRS) (Prerelease only) [⚠️] Animation (Weights) (Prerelease only) [⚠️] Animation (Multiple) (Prerelease only) [✔️] KHR_draco_mesh_compression. [✔️] Extras Data [✔️] Asset Information

Adobe Dimension Import:

[✔️] JSON Export (.gltf, .bin, .png/.gif/.jpg) [✔️] Binary Export (.glb) [❌] Morph Targets [⚠️] Skinned Mesh (Prerelease only) [✔️] Buffer View and Accessor Reuse [✔️] Mesh Instancing [✔️] PBR Metallic Roughness Material [❌] KHR_matrials_pbrSpecularGlossiness [❌] KHR_material_unlit [✔️] Additional Maps [❌] Multiple UV Sets [✔️] Alpha Coverage [❌] Double Sided Material [✔️] Cameras [⚠️] Animation (TRS) (Prerelease only) [⚠️] Animation (Weights) (Prerelease only) [⚠️] Animation (Multiple) (Prerelease only) [✔️] KHR_draco_mesh_compression. [❌] Extras Data [❌] Asset Information

pandaGaume commented 3 years ago

Update for Babylon.js 3ds Max glTF Exporter Checklist: [✔️] JSON Export (.gltf, .bin, .png/.gif/.jpg) [✔️] Binary Export (.glb) [✔️] Morph Targets [✔️] Skinned Mesh [✔️] Buffer View and Accessor Reuse [✔️] Mesh Instancing [✔️] PBR Metallic Roughness Material [✔️] KHR_matrials_pbrSpecularGlossiness [✔️] KHR_material_unlit [✔️] Additional Maps [✔️] Multiple UV Sets (Only supports up to 4 UV sets currently) [✔️] Alpha Coverage [⚠️] Double Sided Material (Only supported for 3dsMax Standard materials) [✔️] Cameras [✔️] Animation (TRS) [✔️] Animation (Weights) [✔️] Animation (Multiple) (Includes support for per-node animation selection) [❌] KHR_draco_mesh_compression. [❌] Extras Data [⚠️] Asset Information (No support for copyright info yet) [❌] KHR_material_clearcoat (planned 5.0) [❌] KHR_material_sheen (planned 5.0) [❌] KHR_material_transmission (planned 5.0)