feat(characters): import the Quaternius mannequin as a selectable skin
A third playable character, built with the pipeline skill from a source that was already in the repo: the animation library ships a rigged Mannequin mesh on the exact 53-joint reference skeleton, CC0, so it needed no download and retargets perfectly. 18 clips, 0.3% cross-leg bleed, 7% of verts at four influences — a clean authored-weight import. Licence recorded in mannequin.license.json as the other skins do. It has no cloth chains, correctly: it is a mannequin and has neither hair nor clothes. Importing it turned up two real bugs, both of which would have hit any flat-coloured or single-piece model: - LevelMaterials.apply_character_look treated ANY untextured surface on a character as the model's own outline shell and hid it, so the mannequin rendered as a solid black silhouette — its body and joint materials are untextured flat colours, not ink. _is_line_work() now asks whether the surface is named eyes*, is drawn front-face-culled (the inverted-hull setup), or is near-black. Taila and Miku are unaffected: their materials are textured and never reach that branch. Verified by render. - verify_character.py failed the build for having one mesh. That check cannot tell "the pipeline joined them" from "the artist authored one mesh" — Quaternius' mannequin is one piece on purpose. It is advisory now; the join path's two unambiguous signatures, cross-leg bleed and the 4-influences-everywhere spread, are still hard checks. Also restored Miku's description, which the re-import had blanked. 3 GLB skins selectable (6 with the built-in colour skins). Smoke 0 failures, 11/11 movement tests, cloth idle 0.024-0.078 deg/frame. Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
co-authored by
Claude Opus 5
parent
270d5f0973
commit
cd0d1b2d99
@@ -19,8 +19,16 @@ Toon-lighting that shell is what put a **white rim on every hair strand**. It is
|
||||
an inverted hull whose normals face away from you; a lighting model that adds a
|
||||
rim term lights it brightly exactly where it is supposed to read as ink.
|
||||
|
||||
`apply_character_look` therefore treats **any untextured surface on a character**
|
||||
as the model's own line-work and handles it flat and unshaded:
|
||||
`apply_character_look` therefore looks for the model's own line-work and handles
|
||||
it flat and unshaded. "Untextured" alone is NOT the test — that made every
|
||||
flat-coloured model render as a black silhouette, because Quaternius' mannequin
|
||||
has two untextured materials (a yellow body, lilac joints) and both were hidden
|
||||
as though they were an outline shell. `_is_line_work()` asks three things
|
||||
instead: is it named `eyes*`, is it drawn front-face-culled (the classic
|
||||
inverted-hull setup), or is its albedo near-black. An ink shell is black; a
|
||||
flat-coloured character is any colour at all.
|
||||
|
||||
What it then does:
|
||||
|
||||
- **Outline hull** → made fully transparent rather than deleted. Deleting a
|
||||
surface would renumber the rest and break the mesh's own skin bindings. The
|
||||
@@ -28,9 +36,15 @@ as the model's own line-work and handles it flat and unshaded:
|
||||
- **Eye cards** (`resource_name` starts with `eyes`) → flat ink, except anything
|
||||
with `HL` in the name, which is the glint in the pupil and really is white.
|
||||
|
||||
If a newly imported character comes out with a white halo, or with black eyes
|
||||
that should have irises, this function and its name-matching are where to look —
|
||||
the naming conventions vary by source and this is the one place they are read.
|
||||
If a newly imported character comes out with a white halo, a black silhouette,
|
||||
or black eyes that should have irises, `_is_line_work()` and the name-matching
|
||||
below it are where to look. The conventions vary by source and this is the one
|
||||
place they are read.
|
||||
|
||||
Taila's eyes still render as black cards rather than amber irises. Her eye
|
||||
surfaces are untextured, and the glTF import hands every untextured surface a
|
||||
default near-white albedo, so colour cannot tell an iris card from a lash card
|
||||
on her — the name is all there is, and `eyes*` currently means "ink". Unfixed.
|
||||
|
||||
## Materials on import: the unlit problem
|
||||
|
||||
|
||||
Reference in New Issue
Block a user