Files
healer-man/docs/ROM_ENVIRONMENT_REVIEW_2026-10-06.md
2026-10-06 22:25:34 -04:00

20 KiB
Raw Permalink Blame History

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.