Commit Graph

15 Commits

Author SHA1 Message Date
Par Winzell da5d606c93 Documentation tweaks. 2018-02-19 20:15:01 -08:00
Par Winzell 608c6f1797 Add support for 32-bit indices.
This was way overdue. Breaking up large meshes into many 65535-vertex
primitives can save a few bytes, but it's really a lot of complication
for minor benefit.

With this change the user can force short or long indices, and the
default is to use shorts for smaller meshes and longs for longer.
2018-02-19 13:58:09 -08:00
Par Winzell 7c0715c4ad Clean house in material extensions.
- KHR_materials_common never had a real life in the glTF 2.0 world. One
day we may see a new extension for Phong/Blinn/Lambert.
- PBR_specular_glossiness is a poor fit for PBS StingRay (the only real
source of PBR we have) and has no advantage over PBR_metallic_roughness.
- The conversion we were doing for traditional materials to PBR made no
sense. Revert to a very simple formula: diffuse -> baseColor, simple
reasonable constants for metallic & roughness.
2018-02-19 08:57:19 -08:00
Par Winzell 67bb9372d7 Optionally compute normals from geometry.
The user can now ask for normals to be computed NEVER (can easily cause
broken glTF if the source isn't perfect), MISSING (when the mesh simply
lacks normals), BROKEN (only emptuy normals are replaced), or
ALWAYS (perhaps if the normals in the source are junk).
2018-02-18 22:19:24 -08:00
Par Winzell b95c50a72f Code to repair normals. 2018-02-18 14:42:30 -08:00
Par Winzell a3989249f3 Consistent naming of unlit extension use. 2018-02-02 07:08:00 -08:00
Robert Long 74479426a7 KHR_materials_unlit (#61)
KHR_materials_unlit support.
2018-02-02 06:57:36 -08:00
Pär Winzell 5eb36702b5
Make blend shape normals/tangents opt-in. (#40)
The FBX SDK absolutely claims that there is a normal layer to each
FbxShape, with non-trivial data, even when the corresponding FBX file,
upon visual inspection, explicitly contains nothing but zeroes. The only
conclusion I can draw is that the SDK is computing normals from
geometry, without being asked to, which seems kind of sketchy.

These computed normals are often not at all what the artist wanted, they
take up a lot of space -- often pointlessly, since if they're computed,
we could just as well compute them on the client -- and at least in the
case of three.js their inclusion uses up many of the precious 8 morph
target slots in the shader.

So, they are now opt-in, at least until we can solve the mystery of just
what goes on under the hood in the SDK.
2017-11-14 14:36:44 -08:00
Par Winzell e417fbe90e Fix the --keep-attribute option. 2017-10-24 08:50:46 -07:00
Pär Winzell 72eb620d87 Copy texture files to output dir when appropriate. (#23)
When we've successfully located a referenced texture image on the local
filesystem and we're generating non-binary, non-embedded output, copy
the source folder wholesale into the destination directory.

This means the output folder is always a full, free-standing deployment,
one that can be dragged into e.g. https://gltf-viewer.donmccurdy.com/
2017-10-23 19:30:51 -07:00
Par Winzell 998b7719cb Default to vertically flipping texture coordinates.
In the FBX world, (0, 0) is generally the lower left. By the glTF
specification, (0, 0) is the upper left. The only recourse is to
literally flip all texture files (generally unwise) or to remap the UV
space.

Is this confusing in an artist-to-engineer workflow? Maybe. But it's the
best option, and it seems reasonably easy to communicate.

To request unflipped coordinates, send in a --no-flip-v command switch.
2017-10-22 16:27:43 -07:00
Pär Winzell 8cf7f446b7 Further improvemens to texture resolution. (#16)
* Further improvemens to texture resolution.

- Move towards std::string over char * and FbxString where convenient,
- Make a clear distinction between textures whose image files have been
  located and those who haven't; warn early in the latter case.
- Extend RawTexture so we always know logical name in FBX, original file
  name in FBX, and inferred location in local filesystem.
- In non-binary mode, simply output the inferred local file basename as
  the URI; this will be the correct relative path as long as the texture
  files are located next to the .gltf and .bin files.

Primary remaining urge for a follow-up PR:

- We should be copying texture image files into the .gltf output folder,
  but before that we should switch to an off-the-shelf cross-platform
  file manipulation library like https://github.com/cginternals/cppfs.
  When we make that transition, all this texture resolution code will
  undergo another refactoring.
2017-10-20 09:42:39 -07:00
Par Winzell f2a057d783 Do a better job resolving texture files.
- Nix GetFileFolder(). It was not helping. Always search for textures
- near the FBX file.
- Use RawTexture::name for the texture name and ::fileName for the
  inferred local filename path.
2017-10-16 23:31:19 -07:00
Par Winzell e6cd0f012b Propertly transform UV coordinates.
We were mapping v to -v rather than 1-v, with fairly catastrophic
results. While fixing, take the trouble to introduce a more general
transformation mechanism than just an affine matrix.
2017-10-16 23:02:46 -07:00
Par Winzell 276a0dfb86 Initial commit. 2017-10-13 01:55:11 -07:00