feat(materials): masonry coursing, glass/banner materials, per-slot assignment, telephoto elevations
0.1.4 materials pass plus the camera fix levelling exposed. Materials (Tools/ue_build_demo_map.py): - ensure_material() gains optional masonry coursing (world-space course height, joint band, joint tint) and roughness variation, so facades read as coursed stone/stucco instead of one flat specular plane. - WorldPosition is in centimetres: course heights in metres are scaled by 100 (the first attempt divided by 0.55 and the coursing was invisible). - connect_material_expressions returns False rather than raising, so every link now goes through a link() helper that logs failures; UE has no MaterialExpressionLess, so the joint mask is Frac -> Divide -> OneMinus -> Clamp. - New materials: M_FacadeStoneShadow, M_FacadeGlass (specular 0.62 ~ IOR 1.5), M_FacadeBanner. - Material assignment is now per SLOT keyed on the imported slot material name. It was slot-0 only, which on the hero is the banner, so stone, shadow stone and glazing still wore flat Blender materials. Hero now 4/4 slots. Cameras (GigLineShotActor + ue_build_review_map): - Optional per-shot ShotFieldOfView; the shot tuples take a 4th element. - Elevations use a 42-55 deg lens from across the street: with the cameras levelled (0.1.2 follow-up) the building was small in frame, and tilting to fill it is what breaks the verticals. hero-facade-front sky 39% -> 20%, demo-spawn-view 23% -> 16%. Screenshots re-rendered for the whole set.
This commit is contained in:
1 parent
d6d3d54810
commit
9a3784683f
32 files changed
+243
-57
No files matched your search
@@ -525,3 +525,28 @@ Scope: facts and traps that cost time to establish. Planned work lives in [TODO.
|
||||
usage and a **traps** table; `setup.md` marks the fresh-checkout build verified and
|
||||
documents the two optional API keys; architecture 07 + combined doc corrected the
|
||||
build-output path.
|
||||
|
||||
## 2026-11-09 — 0.1.4 materials + architecture-camera pass
|
||||
|
||||
- **Material graphs**: `ensure_material()` now supports masonry coursing
|
||||
(`courses_m`) and roughness variation. **UE's `WorldPosition` is in
|
||||
CENTIMETRES**, so a course height in metres must be ×100 — the first attempt
|
||||
divided by 0.55 and produced coursing 100× too fine to see.
|
||||
- **`connect_material_expressions` returns False instead of raising**, so an
|
||||
unknown pin name leaves an input unconnected and the material silently compiles
|
||||
with a default (a mask of 0 is invisible). All links now go through a `link()`
|
||||
helper that logs failures. There is also **no `MaterialExpressionLess`**; use
|
||||
`Frac → Divide → OneMinus → Clamp` for a soft threshold band, or
|
||||
`MaterialExpressionStep`/`SmoothStep` if a hard one is wanted.
|
||||
- **Material assignment was slot-0-only**, which on the hero is the *banner* — the
|
||||
stone, shadowed stone and glazing kept their flat Blender materials. Assignment
|
||||
is now per slot, keyed on the imported slot material's name
|
||||
(`glass`/`banner`/`stoneshadow`/`stone`/`roof`/`wall`). Hero: 4/4 slots.
|
||||
- New materials: `M_FacadeStoneShadow` (same coursing, a stop darker),
|
||||
`M_FacadeGlass` (roughness 0.14, specular 0.62 ≈ IOR 1.5 expressed without a
|
||||
refraction pass), `M_FacadeBanner` (the one saturated surface).
|
||||
- **Camera FOV**: levelling the elevation cameras left the building small in frame
|
||||
(39 % sky). Added optional per-shot `ShotFieldOfView` to `AGigLineShotActor` and
|
||||
a 4th element on the shot tuples; a long lens (42–55°) fills the frame from
|
||||
across the street while the camera stays level, so verticals stay parallel.
|
||||
`review-hero-facade-front` sky 39 → 20 %, `demo-spawn-view` 23 → 16 %.
|
||||
Reference in new issue
Block a user