Skip to content

3.57.0

Choose a tag to compare

@fernandotonon fernandotonon released this 24 Oct 03:25

TRELLIS.2 game-ready meshes keep fingers and faces, and shade correctly (#1134)

The manifold remesh added in 3.54 removed non-manifold edges, but it fused fingers, flattened faces and ears, and the baked normals lit wrongly. All three are fixed.

Detail is kept

  • The remesh now builds a signed distance field of the source instead of a touched-voxel mask plus blur (which grew every surface by about one cell and joined fingers). Thin sheets such as hair cards still survive as closed slabs.
  • The grid is fine and no longer depends on the triangle budget: it follows the source resolution (1024 for the balanced preset, 1536 for high), cropped to the model and capped at 900M cells. A figure peaks at about 3 GB and 25 to 35 s at 1024, and about 5 to 6 GB and 40 to 55 s at 1536 (measured on real generations; a bulky object such as a building lowers its own resolution to stay under the cap). QTMESH_TRELLIS2_REMESH_RES and QTMESH_TRELLIS2_REMESH_MAX_CELLS override it.
  • The reduction to the budget is done by meshopt (which preserves shape). The pinches it leaves are then split apart, so touching parts such as fingers pressed together end up as separate bodies instead of fused ones, and any remaining over-shared faces and small holes are repaired. On a real 25k-triangle character the result has no non-manifold and no boundary edges, and a strict (Roblox) budget is still a hard ceiling after the repairs.
  • Co-located vertex copies are left where sheets were split. A tool that merges vertices by distance will see those pinches again (about 0.5% of edges); the Weld tool's skin-weight unify handles them if you rig the mesh.

Normals are correct

  • The main bug: the detail normal map was baked with the textbook glTF bitangent sign, but the viewport rebuilds the bitangent from Ogre's tangent parity, which Ogre documents as the reverse. Every UV chart was lit as if its relief were flipped, giving dark smears on shoulders and sleeves and a dark patch on the jaw. The bake now uses the viewport's convention, with a regression test.
  • Output vertices are shaded with the dense model's normals instead of the coarse mesh's own, which removes the planar facets on faces.
  • Source normals are smoothed before baking, which removes the contour-line banding that the voxel terraces left on flat panels. QTMESH_TRELLIS2_NORMAL_SMOOTH and QTMESH_TRELLIS2_NORMAL_LOW override it (0 and 0 restore the old behaviour).
  • Vertices shared by opposite-facing sheets no longer get a cancelled normal.
  • The bitangent fix also applies to the detail-normal bake used by the TripoSR and TripoSG backends, because it builds its tangents the same way. It has not been verified on those backends.

Viewports

  • Light icons and gizmos are off by default. They sat in the middle of the model and ended up in screenshots. View → Show Light Icons turns them back on.

Character generator (#1129 to #1133, #1135)

Not usable yet: the two core data bundles (mhr_character.qmcb, ict_character.qmcb) are still not hosted, so the generator cannot download its data on first use and reports that it is unavailable. Only the optional hair bundle is hosted, and hair needs the native head, so it cannot be used either until the core bundles are published. The features and their tests are in this release; the core data is not.

  • Procedural skin texture: tone patches, blush, freckles and pores, baked in the body's own UV layout and evaluated at each texel's 3D surface position, so it is continuous across seams. On by default for the native head (--no-skin-texture).
  • Nipples and areolae painted into the skin texture, placed from the body's own shape, and body hair with a per-region density taken from the skin weights (--body-hair 0..1, default 0.5). No meshes or external assets.
  • Hairstyles: ten styles from MakeHuman's CC0 hair, converted once offline and re-bound to the MHR head so a style follows every head shape and moves with animation (--hair STYLE, --list-hair, --hair-colour).
  • Eyelashes: thin alpha-card strips on the lid margins that follow the blink, squint and brow shapes (--no-eyelashes).
  • Mouth and teeth sit a little higher and the lower teeth now follow the MHR jaw.

Build

  • The OpenRigLogic pin was repointed after upstream rewrote the history of its 5.8 branch (the old commit could no longer be cloned, which broke every fresh CMake configure). See cmake/OpenRigLogic.cmake.
  • Refactor: the eye loader, seating and skeleton straightening were split into small functions (#1128).