FBX2glTF Versions Save

A command-line tool for the conversion of 3D model assets on the FBX file format to the glTF file format.

v0.9.7

4 years ago

This is a small but important bugfix patch to release 0.9.6:

  • Fixed a struct initialisation issue which could damage vertex deduplication in the presence of blend shapes, leading to redundant, bloated output files. In practice, the problem seems to have been constrained to Windows, but we recommend everyone upgrade.

A few more goodies:

v0.9.6

4 years ago

It has been a full sixteen months since the FBX2glTF 0.9.5 saw the light. The code has changed quite a bit: FBX2glTF 0.9.6 aggregates 122 commits of varying magnitude, summarised below.

There are some enhancements, many many bug fixes, and some dramatic refactoring. The newness is exciting, but it's also cause for pause: not all the new code has seen much use, and some of it likely needs further iteration. Furthermore, there are many outstanding issues as well as pending PRs that need attending. All this means we should should expect either a 0.9.6b or a 0.9.7 before long.

Changes:

  • 3ds Max's "Physical Material" is now detected and parsed as a PBR material.
  • We now export FBX lights using the KHR_lights_punctual extension.
  • Better cross-platform handling of non-ASCII files and paths (though the SDK itself remains a source of truculence.)
  • User-defined properties on FBX nodes as well as materials are now transcribed into the associated glTF extras sections.
  • The time extents of animation clips are no longer sourced from the deprecated "animation take" logic; instead we introspect on the actual keys.
  • Draco compression settings are now far more configurable on the command line.
  • Dozens of nameless edge-case crashes have been fixed, platform-dependent compiler issues worked out, and typos corrected.
  • Multiple FBX entities that were previously distinguished by name now have more sophisticated identifying keys.
  • The tool now knows what release version it is, as opposed to the meaningless "2.0" it previously reported.
  • Blendshape channel names are now exported as the associated glTF accessor's name.
  • The codebase itself has been broken up and reorganised quite a bit, and made consistent through the glory of clang-format. There's more to do here, for days when deckchair rearrangement appeals.
  • There's now a Dockerfile available for the various situations in which that's useful.
  • We've embraced conan.io to speed up our builds. This means many of our third-party dependencies are now downloaded in precompiled binary form.
  • We now build (exclusively) against FBX SDK version 2019.2.
  • Smoke tests and automated release builds now run via Travis and AppVeyor.

v0.9.5

6 years ago

This patch release comes a little sooner than expected, because it fixes a crashing bug.

  • Fix embarrassing overrun while writing long integers to a buffer allocated for short ones.
  • Joyously accepted the @davilovick PR that eliminates FBX' use of scaling transforms on all nodes directly below the root. We now bake this scale factor (which comes from unit conversion) into the actual vertices.
  • We now mark exported materials up with a little metadata as to their origins. See https://github.com/facebookincubator/FBX2glTF/commit/e992aac1d93fdea60ad2534c3285686f54da1a13 for details.
  • Do a slightly better job locating textures in the local filesystem.
  • We now treat a PNG texture as non-opaque only if it actually contains alpha pixels < 255. Previously the mere existence of an alpha channel would result in glTF alpha-blending.
  • We now correctly clamp common constants (e.g. emissiveFactor) to glTF-approved values, since FBX allows them free range.
  • Improvements to the Lambert/Phong -> PBR conversion.
  • When we fail to load a texture, we now replace it with a tiny static transparent PNG, rather than a tiny static transparent GIF. (It's still possible that this is a generally poor idea; perhaps we should go the opposite route and use a very obvious 'broken' symbol texture.)
  • Somehow we weren't looking for an ambient occlusion texture. Fixed.

v0.9.4

6 years ago

After a few months of being mired in other obligations, here is a new pre-release patch 0.9.4 of FBX2glTF. This is mostly a catch-up release for the various fixes that have accumulated:

  • We now support 32-bit indices. By default, they are used for meshes with > 65535 vertices. The user can override this behaviour.
  • @robertlong implemented the new extension KHR_materials_unlit: https://github.com/facebookincubator/FBX2glTF/pull/61
  • @davilovick found and fixed a problem in the way we transform normals, binormals and tangents: https://github.com/facebookincubator/FBX2glTF/pull/48
  • @davilovick also came up with a great fix for nodes with duplicate names: https://github.com/facebookincubator/FBX2glTF/pull/51
  • FBX2glTF will now (once again) compute normals. By default, we only replace spot-replace broken normals, but the user can tweak the conditions.
  • @msfeldstein dragged the camera code into the modern age: https://github.com/facebookincubator/FBX2glTF/pull/50
  • Removed the broken and ornery code that tried to create fancy PBR textures from old-style Lambert/Phong type assets (but would often just create blank images). There is too much weird magic in those old models -- instead, FBX2glTF will now slam the material's diffuse texture (if it exists) into baseColor, and pick simple constants for metallicFactor and roughnessFactor.
  • Bumped the embedded Draco version we depend on to 1.2.5.

v0.9.3

6 years ago

Pre-release patch 0.9.3 of FBX2glTF brings a bunch of fixes, as well as the first means of importing PBR materials natively.

Main Feature

  • Materials that were exported via the Maya Stingray PBS ShaderFX preset will be picked up as native metallic/roughness by FBX2glTF and should, if all goes well, wiggle through the series of pipes and tubes and emerge unscathed on the glTF side of things.

Fixes and Tweaks

  • Instanced meshes will now be preserved as such, and no longer erroneously duplicated in the output. Many thanks to @davilovick for the fix.
  • The JSON block we generate should now be ordered more sensibly. The previous (unsolicited) alphabetisation of keys has been banished.
  • Blend Shape normals and tangents are now only included on opt-in command line options. It appears that they are often computed by the SDK, from the underlying geometry -- which is likely not at all what the artist wanted. That said, normal-less morph targets can look pretty terrible in their own way. Thus, we leave the choice up to you.
  • We now compute glTF opacity as the inverse of the average of the RGB channels of FBX transparency. This should yield more natural results.
  • We were erroneously marking some materials as transparent, when they should've been opaque.
  • We no longer warn against the (perfectly valid) situation when a material lacks diffuse texture or vertex colour. This does increase the need for more information about materials when running in verbose mode; see https://github.com/facebookincubator/FBX2glTF/issues/43.

v0.9.2

6 years ago

The second patch release of FBX2glTF continues our march towards the 1.0 feature set, while fixing some bugs that've cropped up.

The next major TODO item after this is Stingray PBS support.

New features and improvements:

Fixes

  • Enabling Draco support no longer results in an immediate program crash.
  • Cope gracefully with polygons that explicitly opt out of any material.
  • Empty animations no longer result in the generation of a spec-violating empty array. Thanks @robertlong!
  • Texture resolution now works properly when converting a .fbx in our current working directory.
  • The --keep-attribute option was inadvertently disabled. It's now back online.
  • The NPM module now reports error feedback correctly.

v0.9.1

6 years ago

The first patch release of FBX2glTF brings a small list of urgent fixes and pleasant improvements:

v0.9.0

6 years ago

This is the first public release of FBX2glTF, a previously internal Oculus/Facebook command-line tool for converting FBX models to glTF. Precompiled binaries are provided for Linux, Mac OS X and Windows platforms.

While the tool has been in steady use in internal 3D asset pipelines for many months, those use cases have necessarily lain within a limited range. FBX2glTF has not yet been exposed to the wide variety of FBX variations out there in the wild. For that reason, we're releasing this as version 0.9.0, a beta pre-release, with the intention of finding and fixing any critical issues in the next few months, until we're comfortable calling something 1.0.

We actively encourage feedback! If you don't see the behaviour you expect, and especially if the tool should crash, please file an issue with as much detail as you can.

For easy online viewing of glTF files, you might point a modern browser at this three.js based one or the babylon.js sandbox.