mgsx-dev / gdx-gltf

GLTF 2.0 3D format support and PBR shader implementation for LibGDX
Apache License 2.0
214 stars 50 forks source link

The GlbExporter is missing. #103

Closed bitdream closed 1 year ago

bitdream commented 1 year ago

The files from gltf exporter are not supported by Godot engine and lots of other engines... Every time I have to convert them into glb by some external tools. If this glb exporter is missing, what's the difference between this one and the old fbx-conv work flow?

mgsx-dev commented 1 year ago

The files from gltf exporter are not supported by Godot engine and lots of other engines...

What's the issue? I tested import in Blender and it works fine.

bitdream commented 1 year ago

The files from gltf exporter are not supported by Godot engine and lots of other engines...

What's the issue? I tested import in Blender and it works fine.

It only can be imported correctly in Blender. That's the issue. It can not be imported in Godot game engine or other online glTF viewers or Windows 3D model viewer. one example here: The glTF I exported with your gdx-glft: https://drive.google.com/drive/folders/1b1d5DEFLxNjQ51YaUUKSpWuDO7nwTsUz?usp=sharing The online viewer I used to import them: https://gltf-viewer.donmccurdy.com/ And the error messages:

Validation report


Report generated byKhronosGroup/glTF-Validator 2.0.0-dev.3.9.

Error | Message | Pointer -- | -- | -- MESH_PRIMITIVE_POSITION_ACCESSOR_WITHOUT_BOUNDS | accessor.min and accessor.max must be defined for POSITION attribute accessor. | /meshes/0/primitives/0/attributes/POSITION MESH_PRIMITIVE_INDICES_ACCESSOR_INVALID_FORMAT | Invalid indices accessor format '{SCALAR, SHORT}'. Must be one of ('{SCALAR, UNSIGNED_BYTE}', '{SCALAR, UNSIGNED_SHORT}', '{SCALAR, UNSIGNED_INT}'). | /meshes/0/primitives/0/indices MESH_PRIMITIVE_POSITION_ACCESSOR_WITHOUT_BOUNDS | accessor.min and accessor.max must be defined for POSITION attribute accessor. | /meshes/0/primitives/1/attributes/POSITION MESH_PRIMITIVE_INDICES_ACCESSOR_INVALID_FORMAT | Invalid indices accessor format '{SCALAR, SHORT}'. Must be one of ('{SCALAR, UNSIGNED_BYTE}', '{SCALAR, UNSIGNED_SHORT}', '{SCALAR, UNSIGNED_INT}'). | /meshes/0/primitives/1/indices MESH_PRIMITIVE_POSITION_ACCESSOR_WITHOUT_BOUNDS | accessor.min and accessor.max must be defined for POSITION attribute accessor. | /meshes/0/primitives/2/attributes/POSITION MESH_PRIMITIVE_INDICES_ACCESSOR_INVALID_FORMAT | Invalid indices accessor format '{SCALAR, SHORT}'. Must be one of ('{SCALAR, UNSIGNED_BYTE}', '{SCALAR, UNSIGNED_SHORT}', '{SCALAR, UNSIGNED_INT}'). | /meshes/0/primitives/2/indices MESH_PRIMITIVE_POSITION_ACCESSOR_WITHOUT_BOUNDS | accessor.min and accessor.max must be defined for POSITION attribute accessor. | /meshes/0/primitives/3/attributes/POSITION MESH_PRIMITIVE_INDICES_ACCESSOR_INVALID_FORMAT | Invalid indices accessor format '{SCALAR, SHORT}'. Must be one of ('{SCALAR, UNSIGNED_BYTE}', '{SCALAR, UNSIGNED_SHORT}', '{SCALAR, UNSIGNED_INT}'). | /meshes/0/primitives/3/indices MESH_PRIMITIVE_POSITION_ACCESSOR_WITHOUT_BOUNDS | accessor.min and accessor.max must be defined for POSITION attribute accessor. | /meshes/0/primitives/4/attributes/POSITION MESH_PRIMITIVE_INDICES_ACCESSOR_INVALID_FORMAT | Invalid indices accessor format '{SCALAR, SHORT}'. Must be one of ('{SCALAR, UNSIGNED_BYTE}', '{SCALAR, UNSIGNED_SHORT}', '{SCALAR, UNSIGNED_INT}'). | /meshes/0/primitives/4/indices MESH_PRIMITIVE_POSITION_ACCESSOR_WITHOUT_BOUNDS | accessor.min and accessor.max must be defined for POSITION attribute accessor. | /meshes/0/primitives/5/attributes/POSITION MESH_PRIMITIVE_INDICES_ACCESSOR_INVALID_FORMAT | Invalid indices accessor format '{SCALAR, SHORT}'. Must be one of ('{SCALAR, UNSIGNED_BYTE}', '{SCALAR, UNSIGNED_SHORT}', '{SCALAR, UNSIGNED_INT}'). | /meshes/0/primitives/5/indices MESH_PRIMITIVE_POSITION_ACCESSOR_WITHOUT_BOUNDS | accessor.min and accessor.max must be defined for POSITION attribute accessor. | /meshes/0/primitives/6/attributes/POSITION MESH_PRIMITIVE_INDICES_ACCESSOR_INVALID_FORMAT | Invalid indices accessor format '{SCALAR, SHORT}'. Must be one of ('{SCALAR, UNSIGNED_BYTE}', '{SCALAR, UNSIGNED_SHORT}', '{SCALAR, UNSIGNED_INT}'). | /meshes/0/primitives/6/indices MESH_PRIMITIVE_POSITION_ACCESSOR_WITHOUT_BOUNDS | accessor.min and accessor.max must be defined for POSITION attribute accessor. | /meshes/0/primitives/7/attributes/POSITION MESH_PRIMITIVE_INDICES_ACCESSOR_INVALID_FORMAT | Invalid indices accessor format '{SCALAR, SHORT}'. Must be one of ('{SCALAR, UNSIGNED_BYTE}', '{SCALAR, UNSIGNED_SHORT}', '{SCALAR, UNSIGNED_INT}'). | /meshes/0/primitives/7/indices MESH_PRIMITIVE_POSITION_ACCESSOR_WITHOUT_BOUNDS | accessor.min and accessor.max must be defined for POSITION attribute accessor. | /meshes/0/primitives/8/attributes/POSITION MESH_PRIMITIVE_INDICES_ACCESSOR_INVALID_FORMAT | Invalid indices accessor format '{SCALAR, SHORT}'. Must be one of ('{SCALAR, UNSIGNED_BYTE}', '{SCALAR, UNSIGNED_SHORT}', '{SCALAR, UNSIGNED_INT}'). | /meshes/0/primitives/8/indices MESH_PRIMITIVE_POSITION_ACCESSOR_WITHOUT_BOUNDS | accessor.min and accessor.max must be defined for POSITION attribute accessor. | /meshes/0/primitives/9/attributes/POSITION MESH_PRIMITIVE_INDICES_ACCESSOR_INVALID_FORMAT | Invalid indices accessor format '{SCALAR, SHORT}'. Must be one of ('{SCALAR, UNSIGNED_BYTE}', '{SCALAR, UNSIGNED_SHORT}', '{SCALAR, UNSIGNED_INT}'). | /meshes/0/primitives/9/indices MESH_PRIMITIVE_POSITION_ACCESSOR_WITHOUT_BOUNDS | accessor.min and accessor.max must be defined for POSITION attribute accessor. | /meshes/0/primitives/10/attributes/POSITION MESH_PRIMITIVE_INDICES_ACCESSOR_INVALID_FORMAT | Invalid indices accessor format '{SCALAR, SHORT}'. Must be one of ('{SCALAR, UNSIGNED_BYTE}', '{SCALAR, UNSIGNED_SHORT}', '{SCALAR, UNSIGNED_INT}'). | /meshes/0/primitives/10/indices MESH_PRIMITIVE_POSITION_ACCESSOR_WITHOUT_BOUNDS | accessor.min and accessor.max must be defined for POSITION attribute accessor. | /meshes/0/primitives/11/attributes/POSITION MESH_PRIMITIVE_INDICES_ACCESSOR_INVALID_FORMAT | Invalid indices accessor format '{SCALAR, SHORT}'. Must be one of ('{SCALAR, UNSIGNED_BYTE}', '{SCALAR, UNSIGNED_SHORT}', '{SCALAR, UNSIGNED_INT}'). | /meshes/0/primitives/11/indices MESH_PRIMITIVE_POSITION_ACCESSOR_WITHOUT_BOUNDS | accessor.min and accessor.max must be defined for POSITION attribute accessor. | /meshes/0/primitives/12/attributes/POSITION MESH_PRIMITIVE_INDICES_ACCESSOR_INVALID_FORMAT | Invalid indices accessor format '{SCALAR, SHORT}'. Must be one of ('{SCALAR, UNSIGNED_BYTE}', '{SCALAR, UNSIGNED_SHORT}', '{SCALAR, UNSIGNED_INT}'). | /meshes/0/primitives/12/indices MESH_PRIMITIVE_POSITION_ACCESSOR_WITHOUT_BOUNDS | accessor.min and accessor.max must be defined for POSITION attribute accessor. | /meshes/0/primitives/13/attributes/POSITION MESH_PRIMITIVE_INDICES_ACCESSOR_INVALID_FORMAT | Invalid indices accessor format '{SCALAR, SHORT}'. Must be one of ('{SCALAR, UNSIGNED_BYTE}', '{SCALAR, UNSIGNED_SHORT}', '{SCALAR, UNSIGNED_INT}'). | /meshes/0/primitives/13/indices MESH_PRIMITIVE_POSITION_ACCESSOR_WITHOUT_BOUNDS | accessor.min and accessor.max must be defined for POSITION attribute accessor. | /meshes/0/primitives/14/attributes/POSITION MESH_PRIMITIVE_INDICES_ACCESSOR_INVALID_FORMAT | Invalid indices accessor format '{SCALAR, SHORT}'. Must be one of ('{SCALAR, UNSIGNED_BYTE}', '{SCALAR, UNSIGNED_SHORT}', '{SCALAR, UNSIGNED_INT}'). | /meshes/0/primitives/14/indices MESH_PRIMITIVE_POSITION_ACCESSOR_WITHOUT_BOUNDS | accessor.min and accessor.max must be defined for POSITION attribute accessor. | /meshes/0/primitives/15/attributes/POSITION MESH_PRIMITIVE_INDICES_ACCESSOR_INVALID_FORMAT | Invalid indices accessor format '{SCALAR, SHORT}'. Must be one of ('{SCALAR, UNSIGNED_BYTE}', '{SCALAR, UNSIGNED_SHORT}', '{SCALAR, UNSIGNED_INT}'). | /meshes/0/primitives/15/indices MESH_PRIMITIVE_POSITION_ACCESSOR_WITHOUT_BOUNDS | accessor.min and accessor.max must be defined for POSITION attribute accessor. | /meshes/0/primitives/16/attributes/POSITION MESH_PRIMITIVE_INDICES_ACCESSOR_INVALID_FORMAT | Invalid indices accessor format '{SCALAR, SHORT}'. Must be one of ('{SCALAR, UNSIGNED_BYTE}', '{SCALAR, UNSIGNED_SHORT}', '{SCALAR, UNSIGNED_INT}'). | /meshes/0/primitives/16/indices MESH_PRIMITIVE_POSITION_ACCESSOR_WITHOUT_BOUNDS | accessor.min and accessor.max must be defined for POSITION attribute accessor. | /meshes/0/primitives/17/attributes/POSITION MESH_PRIMITIVE_INDICES_ACCESSOR_INVALID_FORMAT | Invalid indices accessor format '{SCALAR, SHORT}'. Must be one of ('{SCALAR, UNSIGNED_BYTE}', '{SCALAR, UNSIGNED_SHORT}', '{SCALAR, UNSIGNED_INT}'). | /meshes/0/primitives/17/indices MESH_PRIMITIVE_POSITION_ACCESSOR_WITHOUT_BOUNDS | accessor.min and accessor.max must be defined for POSITION attribute accessor. | /meshes/0/primitives/18/attributes/POSITION MESH_PRIMITIVE_INDICES_ACCESSOR_INVALID_FORMAT | Invalid indices accessor format '{SCALAR, SHORT}'. Must be one of ('{SCALAR, UNSIGNED_BYTE}', '{SCALAR, UNSIGNED_SHORT}', '{SCALAR, UNSIGNED_INT}'). | /meshes/0/primitives/18/indices MESH_PRIMITIVE_POSITION_ACCESSOR_WITHOUT_BOUNDS | accessor.min and accessor.max must be defined for POSITION attribute accessor. | /meshes/0/primitives/19/attributes/POSITION MESH_PRIMITIVE_INDICES_ACCESSOR_INVALID_FORMAT | Invalid indices accessor format '{SCALAR, SHORT}'. Must be one of ('{SCALAR, UNSIGNED_BYTE}', '{SCALAR, UNSIGNED_SHORT}', '{SCALAR, UNSIGNED_INT}'). | /meshes/0/primitives/19/indices Validation report Format: glTF 2.0 Generator: GDX glTF exporter 1.0 Stats: 448 draw calls 0 animations 448 materials 4816896 vertices 5376 triangles Extensions: None Report generated by[KhronosGroup/glTF-Validator](https://github.com/KhronosGroup/glTF-Validator/) 2.0.0-dev.3.9. Error Message Pointer MESH_PRIMITIVE_POSITION_ACCESSOR_WITHOUT_BOUNDS accessor.min and accessor.max must be defined for POSITION attribute accessor. /meshes/0/primitives/0/attributes/POSITION MESH_PRIMITIVE_INDICES_ACCESSOR_INVALID_FORMAT Invalid indices accessor format '{SCALAR, SHORT}'. Must be one of ('{SCALAR, UNSIGNED_BYTE}', '{SCALAR, UNSIGNED_SHORT}', '{SCALAR, UNSIGNED_INT}'). /meshes/0/primitives/0/indices MESH_PRIMITIVE_POSITION_ACCESSOR_WITHOUT_BOUNDS accessor.min and accessor.max must be defined for POSITION attribute accessor. /meshes/0/primitives/1/attributes/POSITION MESH_PRIMITIVE_INDICES_ACCESSOR_INVALID_FORMAT Invalid indices accessor format '{SCALAR, SHORT}'. Must be one of ('{SCALAR, UNSIGNED_BYTE}', '{SCALAR, UNSIGNED_SHORT}', '{SCALAR, UNSIGNED_INT}'). /meshes/0/primitives/1/indices MESH_PRIMITIVE_POSITION_ACCESSOR_WITHOUT_BOUNDS accessor.min and accessor.max must be defined for POSITION attribute accessor. /meshes/0/primitives/2/attributes/POSITION MESH_PRIMITIVE_INDICES_ACCESSOR_INVALID_FORMAT Invalid indices accessor format '{SCALAR, SHORT}'. Must be one of ('{SCALAR, UNSIGNED_BYTE}', '{SCALAR, UNSIGNED_SHORT}', '{SCALAR, UNSIGNED_INT}'). /meshes/0/primitives/2/indices MESH_PRIMITIVE_POSITION_ACCESSOR_WITHOUT_BOUNDS accessor.min and accessor.max must be defined for POSITION attribute accessor. /meshes/0/primitives/3/attributes/POSITION MESH_PRIMITIVE_INDICES_ACCESSOR_INVALID_FORMAT Invalid indices accessor format '{SCALAR, SHORT}'. Must be one of ('{SCALAR, UNSIGNED_BYTE}', '{SCALAR, UNSIGNED_SHORT}', '{SCALAR, UNSIGNED_INT}'). /meshes/0/primitives/3/indices MESH_PRIMITIVE_POSITION_ACCESSOR_WITHOUT_BOUNDS accessor.min and accessor.max must be defined for POSITION attribute accessor. /meshes/0/primitives/4/attributes/POSITION MESH_PRIMITIVE_INDICES_ACCESSOR_INVALID_FORMAT Invalid indices accessor format '{SCALAR, SHORT}'. Must be one of ('{SCALAR, UNSIGNED_BYTE}', '{SCALAR, UNSIGNED_SHORT}', '{SCALAR, UNSIGNED_INT}'). /meshes/0/primitives/4/indices MESH_PRIMITIVE_POSITION_ACCESSOR_WITHOUT_BOUNDS accessor.min and accessor.max must be defined for POSITION attribute accessor. /meshes/0/primitives/5/attributes/POSITION MESH_PRIMITIVE_INDICES_ACCESSOR_INVALID_FORMAT Invalid indices accessor format '{SCALAR, SHORT}'. Must be one of ('{SCALAR, UNSIGNED_BYTE}', '{SCALAR, UNSIGNED_SHORT}', '{SCALAR, UNSIGNED_INT}'). /meshes/0/primitives/5/indices MESH_PRIMITIVE_POSITION_ACCESSOR_WITHOUT_BOUNDS accessor.min and accessor.max must be defined for POSITION attribute accessor. /meshes/0/primitives/6/attributes/POSITION MESH_PRIMITIVE_INDICES_ACCESSOR_INVALID_FORMAT Invalid indices accessor format '{SCALAR, SHORT}'. Must be one of ('{SCALAR, UNSIGNED_BYTE}', '{SCALAR, UNSIGNED_SHORT}', '{SCALAR, UNSIGNED_INT}'). /meshes/0/primitives/6/indices MESH_PRIMITIVE_POSITION_ACCESSOR_WITHOUT_BOUNDS accessor.min and accessor.max must be defined for POSITION attribute accessor. /meshes/0/primitives/7/attributes/POSITION MESH_PRIMITIVE_INDICES_ACCESSOR_INVALID_FORMAT Invalid indices accessor format '{SCALAR, SHORT}'. Must be one of ('{SCALAR, UNSIGNED_BYTE}', '{SCALAR, UNSIGNED_SHORT}', '{SCALAR, UNSIGNED_INT}'). /meshes/0/primitives/7/indices MESH_PRIMITIVE_POSITION_ACCESSOR_WITHOUT_BOUNDS accessor.min and accessor.max must be defined for POSITION attribute accessor. /meshes/0/primitives/8/attributes/POSITION MESH_PRIMITIVE_INDICES_ACCESSOR_INVALID_FORMAT Invalid indices accessor format '{SCALAR, SHORT}'. Must be one of ('{SCALAR, UNSIGNED_BYTE}', '{SCALAR, UNSIGNED_SHORT}', '{SCALAR, UNSIGNED_INT}'). /meshes/0/primitives/8/indices MESH_PRIMITIVE_POSITION_ACCESSOR_WITHOUT_BOUNDS accessor.min and accessor.max must be defined for POSITION attribute accessor. /meshes/0/primitives/9/attributes/POSITION MESH_PRIMITIVE_INDICES_ACCESSOR_INVALID_FORMAT Invalid indices accessor format '{SCALAR, SHORT}'. Must be one of ('{SCALAR, UNSIGNED_BYTE}', '{SCALAR, UNSIGNED_SHORT}', '{SCALAR, UNSIGNED_INT}'). /meshes/0/primitives/9/indices MESH_PRIMITIVE_POSITION_ACCESSOR_WITHOUT_BOUNDS accessor.min and accessor.max must be defined for POSITION attribute accessor. /meshes/0/primitives/10/attributes/POSITION MESH_PRIMITIVE_INDICES_ACCESSOR_INVALID_FORMAT Invalid indices accessor format '{SCALAR, SHORT}'. Must be one of ('{SCALAR, UNSIGNED_BYTE}', '{SCALAR, UNSIGNED_SHORT}', '{SCALAR, UNSIGNED_INT}'). /meshes/0/primitives/10/indices MESH_PRIMITIVE_POSITION_ACCESSOR_WITHOUT_BOUNDS accessor.min and accessor.max must be defined for POSITION attribute accessor. /meshes/0/primitives/11/attributes/POSITION MESH_PRIMITIVE_INDICES_ACCESSOR_INVALID_FORMAT Invalid indices accessor format '{SCALAR, SHORT}'. Must be one of ('{SCALAR, UNSIGNED_BYTE}', '{SCALAR, UNSIGNED_SHORT}', '{SCALAR, UNSIGNED_INT}'). /meshes/0/primitives/11/indices MESH_PRIMITIVE_POSITION_ACCESSOR_WITHOUT_BOUNDS accessor.min and accessor.max must be defined for POSITION attribute accessor. /meshes/0/primitives/12/attributes/POSITION MESH_PRIMITIVE_INDICES_ACCESSOR_INVALID_FORMAT Invalid indices accessor format '{SCALAR, SHORT}'. Must be one of ('{SCALAR, UNSIGNED_BYTE}', '{SCALAR, UNSIGNED_SHORT}', '{SCALAR, UNSIGNED_INT}'). /meshes/0/primitives/12/indices MESH_PRIMITIVE_POSITION_ACCESSOR_WITHOUT_BOUNDS accessor.min and accessor.max must be defined for POSITION attribute accessor. /meshes/0/primitives/13/attributes/POSITION MESH_PRIMITIVE_INDICES_ACCESSOR_INVALID_FORMAT Invalid indices accessor format '{SCALAR, SHORT}'. Must be one of ('{SCALAR, UNSIGNED_BYTE}', '{SCALAR, UNSIGNED_SHORT}', '{SCALAR, UNSIGNED_INT}'). /meshes/0/primitives/13/indices MESH_PRIMITIVE_POSITION_ACCESSOR_WITHOUT_BOUNDS accessor.min and accessor.max must be defined for POSITION attribute accessor. /meshes/0/primitives/14/attributes/POSITION MESH_PRIMITIVE_INDICES_ACCESSOR_INVALID_FORMAT Invalid indices accessor format '{SCALAR, SHORT}'. Must be one of ('{SCALAR, UNSIGNED_BYTE}', '{SCALAR, UNSIGNED_SHORT}', '{SCALAR, UNSIGNED_INT}'). /meshes/0/primitives/14/indices MESH_PRIMITIVE_POSITION_ACCESSOR_WITHOUT_BOUNDS accessor.min and accessor.max must be defined for POSITION attribute accessor. /meshes/0/primitives/15/attributes/POSITION MESH_PRIMITIVE_INDICES_ACCESSOR_INVALID_FORMAT Invalid indices accessor format '{SCALAR, SHORT}'. Must be one of ('{SCALAR, UNSIGNED_BYTE}', '{SCALAR, UNSIGNED_SHORT}', '{SCALAR, UNSIGNED_INT}'). /meshes/0/primitives/15/indices MESH_PRIMITIVE_POSITION_ACCESSOR_WITHOUT_BOUNDS accessor.min and accessor.max must be defined for POSITION attribute accessor. /meshes/0/primitives/16/attributes/POSITION MESH_PRIMITIVE_INDICES_ACCESSOR_INVALID_FORMAT Invalid indices accessor format '{SCALAR, SHORT}'. Must be one of ('{SCALAR, UNSIGNED_BYTE}', '{SCALAR, UNSIGNED_SHORT}', '{SCALAR, UNSIGNED_INT}'). /meshes/0/primitives/16/indices MESH_PRIMITIVE_POSITION_ACCESSOR_WITHOUT_BOUNDS accessor.min and accessor.max must be defined for POSITION attribute accessor. /meshes/0/primitives/17/attributes/POSITION MESH_PRIMITIVE_INDICES_ACCESSOR_INVALID_FORMAT Invalid indices accessor format '{SCALAR, SHORT}'. Must be one of ('{SCALAR, UNSIGNED_BYTE}', '{SCALAR, UNSIGNED_SHORT}', '{SCALAR, UNSIGNED_INT}'). /meshes/0/primitives/17/indices MESH_PRIMITIVE_POSITION_ACCESSOR_WITHOUT_BOUNDS accessor.min and accessor.max must be defined for POSITION attribute accessor. /meshes/0/primitives/18/attributes/POSITION MESH_PRIMITIVE_INDICES_ACCESSOR_INVALID_FORMAT Invalid indices accessor format '{SCALAR, SHORT}'. Must be one of ('{SCALAR, UNSIGNED_BYTE}', '{SCALAR, UNSIGNED_SHORT}', '{SCALAR, UNSIGNED_INT}'). /meshes/0/primitives/18/indices MESH_PRIMITIVE_POSITION_ACCESSOR_WITHOUT_BOUNDS accessor.min and accessor.max must be defined for POSITION attribute accessor. /meshes/0/primitives/19/attributes/POSITION MESH_PRIMITIVE_INDICES_ACCESSOR_INVALID_FORMAT Invalid indices accessor format '{SCALAR, SHORT}'. Must be one of ('{SCALAR, UNSIGNED_BYTE}', '{SCALAR, UNSIGNED_SHORT}', '{SCALAR, UNSIGNED_INT}'). /meshes/0/primitives/19/indices
mgsx-dev commented 1 year ago

it should be OK now

bitdream commented 1 year ago

Thanks. The issue is indeed fixed. But please come back to the other question: do you have plan to add the GlbExporter in near future?

mgsx-dev commented 1 year ago

do you have plan to add the GlbExporter in near future?

No, this format is not so good (eg. can't share textures with other files, slower loading) so i don't plan to invest time in it.