Version: 2.0.0 (6e60b5e) · Profile: generic, no domain plugins installed
Summary
Run against verified interior crops of a wool/leather/knit garment with --spec ... --in-place, analyze_texture.py assigned every fabric a metal finish class and silently rewrote the authored roughness scalars to match.
| material |
actual finish |
assigned finishClass |
roughness before → after |
| wool melton |
woven matte |
painted-metal |
0.92 → 0.50 |
| leather |
pebbled dielectric |
brushed-steel |
0.50 → 0.35 |
| rib knit |
knit matte |
candy-coat |
0.85 → 0.18 |
A rib knit at roughness 0.18 renders as polished plastic.
What I think is happening
The finish vocabulary looks weapon-skin oriented (painted-metal, brushed-steel, candy-coat). With no domain plugin installed there is no fabric class available, so each crop is forced into the nearest class rather than the classification being refused. No warning is emitted, and the spec is patched in place.
The crops themselves were verified first — I had already checked each one visually to confirm it was on the part I thought it was, and the corresponding extract_pbr_evidence runs returned 0.80–0.86 confidence on the same pixels.
Suggested fix
Two things, either of which would have caught this:
- Refuse to classify when no finish class is within some confidence bound, rather than returning the nearest match. "I do not have a class for this" is a useful answer.
- Never silently overwrite an authored roughness scalar. The repo's own rule (
grimoire/build/threejs_skin_and_cloth_materials.md:115-116) is that roughness is reported, never gated, because screen-space geometryRoughness is added at shade time — so an authored value being replaced by an inferred one is a meaningful loss, and it happens with no record in the spec that it occurred.
Related: #135, #136 — all three surfaced in the same run, and all three share a root cause in the intake and material tooling assuming a rigid, saturated object photographed against a background.
Version: 2.0.0 (
6e60b5e) · Profile:generic, no domain plugins installedSummary
Run against verified interior crops of a wool/leather/knit garment with
--spec ... --in-place,analyze_texture.pyassigned every fabric a metal finish class and silently rewrote the authored roughness scalars to match.finishClasspainted-metalbrushed-steelcandy-coatA rib knit at roughness 0.18 renders as polished plastic.
What I think is happening
The finish vocabulary looks weapon-skin oriented (
painted-metal,brushed-steel,candy-coat). With no domain plugin installed there is no fabric class available, so each crop is forced into the nearest class rather than the classification being refused. No warning is emitted, and the spec is patched in place.The crops themselves were verified first — I had already checked each one visually to confirm it was on the part I thought it was, and the corresponding
extract_pbr_evidenceruns returned 0.80–0.86 confidence on the same pixels.Suggested fix
Two things, either of which would have caught this:
grimoire/build/threejs_skin_and_cloth_materials.md:115-116) is that roughness is reported, never gated, because screen-spacegeometryRoughnessis added at shade time — so an authored value being replaced by an inferred one is a meaningful loss, and it happens with no record in the spec that it occurred.Related: #135, #136 — all three surfaced in the same run, and all three share a root cause in the intake and material tooling assuming a rigid, saturated object photographed against a background.