309 lines
20 KiB
Markdown
309 lines
20 KiB
Markdown
# RoM dungeon texture, lighting, and route review — 2026-10-06
|
||
|
||
This continuation reviews all 30 base RoM dungeons. Luna subprocesses handled
|
||
source-material inspection, original lighting recovery, and independent runtime
|
||
review. Screenshots from an isolated asset camera establish visual coverage;
|
||
ordinary production UI and keyboard input establish entry and walking evidence.
|
||
Neither method certifies every corridor, a full clear, or combat balance.
|
||
|
||
## Texture and material changes
|
||
|
||
The all-dungeon room review covers 30 entrances, 66 boss anchors, 74 diagnostic
|
||
corridor samples, and 36 mapping-hotspot views. The corridor cameras are samples
|
||
between authored anchors, not proof of connected walking routes. Large low-rank
|
||
UV metrics require source/material attribution before applying repeat tiling:
|
||
waterfall sheets and flow effects must not be treated as stone floors.
|
||
|
||
Six dungeons had exact native `gate_waterfall` materials exported as opaque,
|
||
with the compressed image losing its alpha: Cave of the Water Dragon, Kulech
|
||
Bones Nest, Mystic Altar, Raksha Temple, Sardo Castle, and Tomb of Seven Heroes.
|
||
The source-pinned material patch covers 40 native bindings (38 normal blends,
|
||
two additive bindings). Native prelit metadata also retains its verified unlit
|
||
semantics. The JSON-only alpha patch retains identical BIN bytes. The subsequent
|
||
unlit semantics pass can repack BIN layout; a final decoded-layout proof verifies
|
||
identical positions, normals, indices, every UV stream, morph targets, node
|
||
hierarchy/transforms, and exact PNG image bytes across all six candidates.
|
||
Optimization disables simplification and automatic texture resizing; the KTX2
|
||
decode proof demonstrates retained partial alpha, not lossless codec equality.
|
||
Mystic Altar's reviewed support-floor texture remains part of the canonical
|
||
input and its metadata is preserved.
|
||
|
||
The durable converter reads native alpha parameters and exact diffuse-channel
|
||
joins. `lib/native-alpha-cache-validation.mjs` rejects old resource caches unless
|
||
source hashes, exporter/converter/alpha-policy hashes, and raw/prepared native
|
||
material reports agree. `stage-native-waterfall-alpha.mjs` produces guarded
|
||
review candidates; `promote-native-waterfall-alpha.mjs` verifies identities and
|
||
creates exclusive baseline backups before updating canonical/shipping assets
|
||
and their current hashes. Historical proofs remain historical.
|
||
|
||
The Lair of the Demon Dragon's `magic_magma_02` sheets had the same provenance
|
||
gap. All three exact source rows (2, 3, 9) are prelit cutouts, with native alpha
|
||
test value 192. They now retain MASK cutoff 192/255 and unlit semantics, replacing
|
||
the opaque black slab with the source orange flow strips. The 512×128 UASTC
|
||
image retains alpha 0–255; source and decoded image each have 37,654 pixels
|
||
passing `>192`. Mean alpha error is 0.000244, so codec equality is not claimed.
|
||
The final canonical proof preserves all geometry, UVs, hierarchy/transforms, and
|
||
all 17 exact source PNG images. These are native flow-effect sheets, not stone
|
||
floor atlas mappings, so no repeat tiling was guessed. Its stage, response-body
|
||
SHA checks, first-hit material proof and screenshots live in
|
||
`artifacts/playtest/rom-room-coverage/lair-magma-alpha-stage/`.
|
||
|
||
The six waterfall acceptance pairs require the exact target texture to be the
|
||
nearest ray hit in both shipping baseline and compressed candidate. The served
|
||
candidate identity and native BLEND provenance are verified. Four-metre Kulech
|
||
and Tomb pairs supply additional surroundings; Kulech's additive effect is very
|
||
bright and is not credited as a complete scene-quality pass. Early bounding-box
|
||
views and the first misrouted comparison are diagnostic failures, superseded by
|
||
`gate-waterfall-triangle-pairs-report.json` and
|
||
`gate-waterfall-context-pairs-report.json`. Synchronous camera scans explicitly
|
||
refresh the camera matrix before raycasting; otherwise they can inspect the
|
||
previous pose between rendered frames.
|
||
|
||
The final Barren policy replaces whole-atlas repeats with four exact 256×256
|
||
native floor islands. Only triangle corners contained in one reviewed island
|
||
receive the ×4 presentation UV1; source UV0, geometry and original atlas remain.
|
||
Its walls use a fifth exact 256×256 crop from the native central wall region at
|
||
[256,0], sampled at two metres with mirrored edges and rotated phase blending.
|
||
Wall base contrast is 0.25 around the source atlas mean, with detail strength
|
||
0.85; floor detail strength is zero. This explicit browser treatment reduces
|
||
oversized smearing and obvious tile repetition without generating replacement
|
||
pixels. The original 47,084 triangles and eight native PNG images are retained.
|
||
Its exact crop RGBA proofs are separate from lossy compressed-texture metrics.
|
||
|
||
HOTO keeps its native non-repeating cliff artwork and UV0. Its revised v2 policy
|
||
samples the original full stone/moss tiles directly at two metres on floor faces
|
||
of materials 26 and 18. Those floors use base strength 1 and modulation strength
|
||
0; material 18 samples its own moss tile. Cliff materials 96 and 53 retain their
|
||
base artwork, with floor/wall detail strength 0.85, wall contrast 0.6 around each
|
||
source atlas mean, and rotated detail variation 1. Material 26 retains wall
|
||
strength 0; material 18 retains 0.45. These settings correct presentation scale,
|
||
not native texture resolution. The v1-to-v2 patch changes only approved material
|
||
metadata; all non-JSON chunks remain byte-identical in canonical and optimized
|
||
GLBs. All 189,855 source triangles and 17 native PNG images are retained. Source-detail
|
||
carriers require joining/pruning protections during optimization. HOTO adds no
|
||
cropped images; its decoded source-layout proofs are separate from lossy
|
||
compressed-texture metrics. The fixed-camera compressed comparisons use verified served hashes and
|
||
report no browser errors. Evidence is under
|
||
`artifacts/playtest/rom-deep-review/uv-stretch-review/`.
|
||
The v2 continuation is promoted through `promote-hoto-surface-v2.mjs`, with a
|
||
new exclusive recovery backup and `hoto-surface-v2-promotion-proof.json`.
|
||
Shipping SHA-256 is `b80b60cba6e5a0eb3e13bd7e048f9408f21bf870c0c81fc8de5c195d3a3eaee3`.
|
||
The unique v2 screenshots have pinned hashes in `hoto-surface-v2-visual-proof.json`.
|
||
The earlier shared HOTO v1 final screenshot names were overwritten during the
|
||
v2 comparison and are explicitly marked unavailable in its stage/promotion
|
||
reports. Their historical asset hashes remain recorded; those image paths must
|
||
not be treated as preserved v1 captures. Earlier diagnostic captures remain
|
||
separate evidence. The current unique v2 proof supersedes that comparison.
|
||
|
||
## Source lighting and shadows
|
||
|
||
The native zone exporter recovers environment settings and oriented zone
|
||
triggers from all 30 source WDBs. Generated data retains source hashes, native
|
||
ambient/primary/two secondary colors and directions, fog, time/weather groups,
|
||
and priority/parent relationships. The resolver converts runtime positions back
|
||
into source space and follows native trigger selection and setting inheritance.
|
||
Time/weather groups default to 0/0; this does not implement a live weather clock.
|
||
|
||
`DungeonLighting.tsx` supplies these settings to production RoM environments.
|
||
Rune colors are linear byte/255 values. Rune's unoccluded SH constant band is
|
||
supplied as ambient fill (4/17 of the weighted directional colors), with the
|
||
complementary 13/17 in Three.js directionals. This preserves readability in
|
||
roofed rooms without adding a guessed white light. Three.js angular diffuse and
|
||
PBR specular remain an adaptation; the original separately authored specular
|
||
path and full SH shader are not reproduced. Standard's source-primary shadow
|
||
follows the player's footing; High follows the camera. Missing native zones use
|
||
the reviewed presentation profile. WoW uses its existing profile lighting path.
|
||
|
||
The final adapted-source entrance check covers all 30 dungeons: 29 native-zone
|
||
selections and Grafu Castle's entrance profile fallback, with zero browser
|
||
errors. The broader source-lighting camera review covers 96 entrance/boss
|
||
anchors, 95 native-zone selections and the same one fallback. Four same-camera
|
||
profile comparisons establish that SH fill keeps Forsaken Keeper 3 and Ystra's
|
||
Raichika room readable; source-dark Sardo and Kulech remain dark interiors.
|
||
Barren's pale source lighting retains rock/sand detail without clipped whites.
|
||
|
||
## Origin water
|
||
|
||
All 126 source water layers retain their native GUID joins, visibility,
|
||
vertex RGBA, source tile coordinates and 30-frame normal sequence. Metadata now
|
||
also retains the first source vertex's split-plane height and exact serialized
|
||
full-model enable flag. Raw effect value 4 keeps its original value and unknown
|
||
enum name; Rune's non-DIRECT full-enable branch establishes its rendering policy.
|
||
|
||
The browser reflects the camera across that native plane, clips below it, and
|
||
captures the pre-water scene for refraction. It uses Rune's shared projected UV,
|
||
0.025 bump perturbation, and 0.02037/0.97963 Fresnel coefficients. Per tagged
|
||
asset root, four active 512-pixel target pairs share at most ten two-pass
|
||
captures per second. Oldest-request scheduling avoids render-order starvation;
|
||
inactive pairs release their slots when a later plane needs them. Materials
|
||
dispose shared targets once. Additional active planes and below-plane views use
|
||
the lit animated fallback. Reflect-class filtering and the native water SH
|
||
shader remain unsupported. Water stays visual-only.
|
||
|
||
Same-camera final water captures record visible glancing reflections, zero
|
||
browser errors, and approximately 60 FPS. Metadata-only promotion preserves
|
||
both canonical and optimized BIN hashes. Original-source water colors remain
|
||
unchanged. Evidence: `artifacts/playtest/rom-deep-review/water-screen-effects/`.
|
||
|
||
## Walking evidence and remaining route issues
|
||
|
||
Before this lighting/material continuation, ordinary UI walking covered all 30
|
||
current source environments: 489 attempted legs, 487 reached, 882/882 grounded
|
||
samples, 1,010.312 m travelled, and zero browser errors. Twenty-eight planned
|
||
walks completed. Raksha's first forward probe blocked while grounded; Dalanis's
|
||
second waypoint exhausted the movement time budget while grounded. These are
|
||
retained failures, not successful clears. See
|
||
`artifacts/playtest/rom-deep-review/ordinary-walking-baseline/results.json`.
|
||
|
||
The complete Origin source review still finds no supported entry-to-Falynum
|
||
connection. Full 256-chunk terrain and current options-aware collision/navigation
|
||
leave the Falynum platform disconnected. Its visible ROS platform is 7.23 m
|
||
above the ground below, and the native path component is separate. The referenced
|
||
boss Lua teleport is a combat catch-up action after acquiring an attack target,
|
||
not an approach transport. No bridge or approach teleport was inferred. The
|
||
entry-to-Life connection remains in the current Recast navigation and ordinary
|
||
walking proof. Detailed verdict:
|
||
`artifacts/playtest/origin-route-diagnostic/origin-falynum-source-connectivity-verdict.md`.
|
||
|
||
## Evidence and validation
|
||
|
||
- Room cameras: `artifacts/playtest/rom-room-coverage/`.
|
||
- Compressed alpha candidates and guarded promotion:
|
||
`artifacts/playtest/rom-room-coverage/native-alpha-stage/`.
|
||
- Adapted lighting: `artifacts/playtest/rom-source-lighting-adapted-entry-qa/`;
|
||
comparisons: `artifacts/playtest/rom-source-lighting-profile-compare/`.
|
||
- Native lighting resolver, linear runtime colors, source shadow pose,
|
||
terrain/water materials, water resource lifecycle/scheduling, native alpha
|
||
cache/staging/converter semantics, source UV exceptions, and optimizer policy
|
||
have focused passing tests. TypeScript checks pass.
|
||
|
||
The pre-v2 reviewed build is `artifacts/playtest/rom-deep-review/build-reviewed-20261006/`.
|
||
Its frozen manifest is `reviewed-content-manifest-20261006.json`, version
|
||
`content-fcd09f7c0f8f10be`, SHA-256
|
||
`f1a7ab2dc9a3d05513f3601ed5142011f71aa58155a7ec1d34bdc42e4f9309af`.
|
||
TypeScript, Vite production build, static precompression and release-bundle
|
||
verification pass: 1,328 modules, 126 chunks and 5,569 bootstrap objects.
|
||
Its all-30 quality audit matches 1,620/1,620 images to source resolution,
|
||
including five exact pixel crops, with zero downsizing, 2048-cap hits or issues.
|
||
This audit skips general pixel decoding; targeted codec/alpha proofs described
|
||
above cover the changed material families. All 162 dungeon GLBs validate with
|
||
zero actionable errors/warnings. KTX2 audit covers 106 visual assets and 12,897
|
||
compressed images with zero fallbacks; the existing performance budgets have
|
||
zero regressions. Focused runtime tests pass 83/83 and focused pipeline tests
|
||
pass 17/17. No readiness promotion, full balance sweep, commit, or external
|
||
deployment is part of this review.
|
||
|
||
The refreshed v5 build is `artifacts/playtest/rom-deep-review/build-surface-v5-20261006/`,
|
||
with index SHA-256 `ab46b9c47a0ba27b0b1c2e0a2c65ff02c613b7b87c54d37fe5ec9a7a41707e27`.
|
||
Its frozen manifest is `surface-v5-content-manifest-20261006.json`, version
|
||
`content-d1ec6f1f858f21c1`, SHA-256
|
||
`e102c30cc47a4130fff88809ce53453929e86e6f766b0afbbae8a8ad4a52fd7c`.
|
||
TypeScript, production build, 129-source static precompression (258 outputs) and
|
||
release-bundle verification pass. It retains 126 chunks and 5,569 bootstrap
|
||
objects. The refreshed all-30 quality audit again matches 1,620/1,620 textures,
|
||
including five verified crops, with zero downsizing, cap hits or issues. All 162
|
||
dungeon GLBs validate with zero errors/warnings. Focused checks pass 83 runtime
|
||
and 17 pipeline tests. See `environment-quality-surface-v5-20261006.{json,md}`.
|
||
|
||
The v5 ordinary walking checks reached 48/48 legs across Barren (27), HOTO (2)
|
||
and Origin (19), with 89/89 grounded samples, 101.826 m travelled and zero errors.
|
||
HOTO remains a six-metre probe; Origin follows Life. Root inspected Barren leg 11,
|
||
HOTO leg 1 and Origin leg 18 High frames: corrected detail is present, bodies and
|
||
equipment render, and Origin's documented opaque root cards remain. Evidence is
|
||
in `production-targeted-routes-surface-v5-20261006/`. Stockade's v5 fallback
|
||
selected **Bazil Thredd**, passed default/High settings and recorded zero browser
|
||
errors; root inspected the High frame. Its evidence is in
|
||
`graphics-fallback-surface-v5-20261006/`.
|
||
|
||
The final v5 entry pass reaches all 30/30 registered dungeons with ready assets
|
||
and grounded players in both Standard and High (150% render scale, 16× filtering,
|
||
authored ambient). It records 60 screenshots and zero browser errors. Independent
|
||
and root contact-sheet review found no actionable new entry regression; the
|
||
documented Raksha/source-panel framing limits remain, and Kulech's maroon
|
||
obstruction did not recur. See `production-entry-surface-v5-20261006/`.
|
||
`validation-summary.json` independently checks the frozen build/manifest, all 30
|
||
unique dungeon IDs, settings, movement outcomes and the three changed visual
|
||
assets against both shipping files and immutable content objects.
|
||
The local `dist` now contains that reviewed build: all 5,967 files match byte for
|
||
byte. The previous build is preserved at `pre-surface-v5-dist-backup/`; installation
|
||
proof is `local-build-install-proof.json`. This is a local installation, not an
|
||
external deployment. Final release hygiene is recorded after note updates in
|
||
`release-check-final.log`.
|
||
|
||
The pre-v5 intermediate frozen production pass rendered all 30 entrances through the
|
||
normal UI, with ready assets and grounded players in both Standard and High,
|
||
60 screenshots, and zero browser errors. The eight changed material/water
|
||
environments also received ordinary keyboard walking: 150/151 legs reached,
|
||
277/277 grounded samples, 325.037 m travelled, and zero browser errors. Raksha's
|
||
blocked first leg is retained. Stockade's graphics fallback selected Hamhock and
|
||
passed default/High rendering checks. Evidence is under
|
||
`artifacts/playtest/rom-deep-review/production-entry-final/`,
|
||
`production-walking-final/`, and `graphics-fallback-final/`.
|
||
|
||
The pre-v2 targeted routes use the reviewed build and frozen manifest above:
|
||
Barren reached 27/27 legs, HOTO 2/2 and Origin 19/19. All 95 sampled positions
|
||
were grounded, with 103.622 m travelled and zero browser errors. HOTO remains
|
||
only a six-metre collision probe; Origin targets the connected Life route,
|
||
not Falynum. Standard/High walking frames are in
|
||
`production-targeted-routes-reviewed-20261006/`. That Stockade fallback
|
||
selected **Kam Deepfury** and passed default/High settings, with zero errors;
|
||
its evidence is in `graphics-fallback-reviewed-20261006/`.
|
||
|
||
The pre-v2 all-30 entry pass also reached ready, grounded entries in Standard
|
||
and High with 60 screenshots and zero browser errors. Visual review flagged
|
||
remaining HOTO scale issues, addressed by the v2 policy above. Barren retains
|
||
broad source-painted striations despite the corrected fine detail. Raksha's
|
||
entry camera clips inside architecture and its first route leg remains blocked;
|
||
this is not a complete scene-quality acceptance. Wider source-anchor views
|
||
provide separate material/lighting coverage. Kulech's High entry frame contained
|
||
a maroon obstruction during combat. It did not recur in 25 consecutive High
|
||
frames in an ordinary-UI follow-up. The original Standard/High pair compares
|
||
changing combat states, so exact object attribution remains unproven; no lighting
|
||
defect was demonstrated. Read-only rays in the clear frames identify the static
|
||
source wall/stone behind it. See `kulech-obstruction/findings.md` and `frames/`.
|
||
|
||
Those intermediate production screenshots found further issues even though the
|
||
historical pre-crop audit's 1,615 matched textures retained their dimensions. Resolution checks do
|
||
not establish good surface mapping. Barren's whole-atlas repeat mixes floor and
|
||
wall regions; restoring UV0 removes the added bands but leaves oversized detail.
|
||
The promoted atlas-safe floor/wall correction and HOTO source-detail policies
|
||
above supersede those intermediate mappings.
|
||
Origin's giant-tree family also retained alpha pixels but lacked native MASK on
|
||
six canonical materials merged into one optimized material. Its source-pinned
|
||
JSON-only correction is now promoted, preserving every non-JSON GLB chunk and
|
||
all terrain/water settings. Seven freshly exported ROS resources prove standard
|
||
lighting and MASK cutoff 192/255; cache/converter smoke passes all seven. The
|
||
same-camera 3.5 m leaf close-up has matching served hashes, exact first hits,
|
||
unchanged lighting and zero errors. A separate leg-18 diagnostic context uses
|
||
the recorded walking position, but is not itself ordinary input evidence.
|
||
The separate `elves_vine` card also lost cutout semantics and compressed alpha.
|
||
Fresh exports independently prove that `elves_vine.ros` material 1 and
|
||
`act_green_tower.ros` material 3 use the same DDS with standard lighting and
|
||
MASK cutoff 170/255. Both canonical bindings and their optimized merged material
|
||
now retain that policy. The replacement 256×256 UASTC image retains nine mip
|
||
levels and all 10,407 source pixels passing the cutoff, with zero threshold-mask
|
||
mismatches; alpha bytes are not claimed lossless. The canonical BIN is unchanged,
|
||
and the optimized patch preserves all non-target buffer views, mesh streams,
|
||
terrain and water metadata. Same-camera served-hash proof removes the black
|
||
vine panel with zero browser errors. Its exclusive backup and proof live under
|
||
`artifacts/playtest/rom-deep-review/origin-root-card-attribution/`.
|
||
The residual leg-18 card is `Object01_1_mesh_0_10`, native material 1 from
|
||
`gaint_tree_a.ros`, using `elves_gaint_roots_village`. Fresh source flags request
|
||
alpha test 192, but all eight native DXT1 mips, the prepared PNG, and all ten
|
||
shipping KTX mips are fully opaque. This is not a lost-alpha regression. The
|
||
exporter supplies neither vertex-color/alpha nor face-culling channels, so the
|
||
complete native behavior remains unverified. No black-keyed mask or forced
|
||
cutout was invented. The card remains a visual limitation, documented in
|
||
`origin-root-card-attribution/residual-roots-village/roots-village-alpha-proof.json`.
|
||
Evidence and exclusive promotion backup:
|
||
`artifacts/playtest/rom-deep-review/origin-tree-alpha/`.
|
||
|
||
Mystic's crimson entry panel is the source-authored opaque
|
||
`cowcowcowcow01_164_mesh_0`; the source atlas is entirely opaque. Sardo's close
|
||
column is the authored `channel_pillar_01_52_mesh_0`, likewise opaque. Sardo's
|
||
first ordinary walking leg opens the room; Mystic's panel still occupies much
|
||
of some walking frames, so those frames do not establish whole-room lighting.
|
||
The source-anchor camera review supplies wider material/lighting coverage.
|
||
Exact source identities and framing evidence are in
|
||
`production-entry-final/entry-framing-attribution.md` and its JSON companion.
|