Draw prop models with a single atlas material
Each generated prop used one material per part (body, accent, metal...). The model pipeline now packs a prop's palette into one power-of-two colour atlas plus a matching metallic/roughness atlas and emits a single material: - atlas_for(): 8x8 cells per palette role, colours in sRGB, roughness in the G and metallic in the B channel of the second atlas; NEAREST sampling keeps cells flat. - build_glb(): every part merges into one primitive with constant per-vertex atlas UVs; the material uses baseColorTexture + metallicRoughnessTexture with factors 1.0. - audit_glb(): fails unless a prop has exactly one material, both atlas textures, two images, and TEXCOORD_0 on every primitive. - Removed the now-unused sRGB->linear factor helpers; colour travels in the texture. Verification: headless 181 -> 182 (new "one material per prop scene" test), Python tooling 53/53 (atlas determinism/size/UV/palette-override tests replace the old factor tests), model audit OK for all six props, screenshots regenerated and screen_designs.py compare still 6 good / 0 bad. Version 0.3.1.
This commit is contained in:
1 parent
7f92b8861d
commit
f2863abeac
32 files changed
+275
-97
No files matched your search
@@ -661,3 +661,20 @@ produces a 63 MB static bundle and it serves locally with HTTP 200s for html/was
|
||||
- [x] Cover the preset, the non-threaded choice, and the release wiring in
|
||||
`src/test/tests/test_web_export.gd`.
|
||||
- [x] Document the artifact in `docs/RELEASING.md`, the README gallery/status, and `PLAN.md`.
|
||||
|
||||
## Prop Texture Atlas
|
||||
|
||||
Completed 2026-10-31 (v0.3.1). Headless **182/182**, Python tooling **53/53**; screenshots
|
||||
regenerated and `screen_designs.py compare` still reports 6 good / 0 bad.
|
||||
|
||||
- [x] `model_pipeline.atlas_for()` packs each prop's palette roles into one small power-of-two
|
||||
PNG and a matching metallic/roughness atlas (roughness in G, metallic in B), with nearest
|
||||
sampling so a palette cell stays a flat colour.
|
||||
- [x] `build_glb()` merges every part into a single primitive with per-vertex atlas UVs and one
|
||||
material (`baseColorTexture` + `metallicRoughnessTexture`), so a prop is one draw material
|
||||
instead of one per part.
|
||||
- [x] `audit_glb()` checks the single-material/atlas contract (one material, both textures,
|
||||
TEXCOORD_0 on every primitive, two images).
|
||||
- [x] Tests: atlas determinism and power-of-two sizing, UV range, palette override reaching the
|
||||
atlas, and a Godot test that each imported prop scene uses exactly one material.
|
||||
- [x] Removed the now-unused sRGB→linear factor helpers (colours travel in the sRGB texture).
|
||||
Reference in new issue
Block a user