Repository navigation
PRD-560: add height fog and fix native color grading - #482
Conversation
Closed-form exponential height fog on scene.fogNode, added to the distance term. Mist ownership clears fogNode as well as fog.
heightFog.ts holds the closed-form maths and the TSL node, sky.ts the look numbers. snow keeps its storm-driven FogExp2 as the distance term. Mist clears fogNode too.
…es (PRD-560) The mist spec now covers scene.fogNode: the medium clears it with scene.fog, restores both on dispose, and compose rejects a lingering fogNode. The eleven FogExp2 kits' parent scaffold hashes follow their height-fog sources.
…RD-560) Each kit's setupSky must keep its old FogExp2 transmittance at its eye-level distance within 2%. Also reattach the racing and snow setupSky doc comments that the fog block had split from their function, and refresh those two scaffold hashes.
… open Phase 1 box 3: starter scenarios 4/4 on the height-fog arm and the mist arm, one fog owner read at runtime. Phase 2: the owned desktop host passes 300 frames with height fog. Phase 3: eight template gates pass, the docs specs and mirrors are in sync. AC-1a judged by a fresh judge, AC-2 delta -0.03 ms. Open: AC-1b (ridge contrast judged unclear), shooter and platformer gates, and the Pixel 8 check under Blocked on.
…p (PRD-560) Develop moved the thirteen scaffold trees (Strata integration, shooter ADS fix). The eleven FogExp2 kits carry height fog on top, so their createProject fingerprints are re-measured by the spec that asserts them. Rain and tower-defense keep develop's values.
PRD-560 AC-1b: second capture round,
|
| Pose | Verdict | Note |
|---|---|---|
| default | NEUTRAL | same at normal viewing, no artefact |
| high | NEUTRAL | haze band very slightly greyer, no banding |
| ridge | IMPROVEMENT | raised cube clearly deeper red, ground cube lighter; "clearly visible, moderate, not dramatic" |
| overall | IMPROVEMENT |
Mean saturation of the low block vs the high block: 0.491 vs 0.603 after, 0.407 vs 0.404 before (first round at 0.0012: 0.461 vs 0.516).
Ridge pose, before then after (run 1):
All frames, density-0018-<pose>-<before|after>-r<1|2>.jpg on the prd-560-screenshots branch, for example:
- https://raw.githubusercontent.com/ThreeNativeHQ/threenative-engine/487dccda66517e9975607cd780a1aef41fec49da/density-0018-default-before-r1.jpg
- https://raw.githubusercontent.com/ThreeNativeHQ/threenative-engine/487dccda66517e9975607cd780a1aef41fec49da/density-0018-default-after-r1.jpg
- https://raw.githubusercontent.com/ThreeNativeHQ/threenative-engine/487dccda66517e9975607cd780a1aef41fec49da/density-0018-high-before-r1.jpg
- https://raw.githubusercontent.com/ThreeNativeHQ/threenative-engine/487dccda66517e9975607cd780a1aef41fec49da/density-0018-high-after-r1.jpg
The rejected 0.0012 frames stay on the branch as <pose>-<arm>-r<n>.jpg.
Existing comparisons reattached on 2026-10-10; these reuse the recorded prior fresh-judge verdict, with exact AFTER source verified against checkpoint b8874801b. No new judgment was run. Current 0.0018 browser cost/native rendering and template runtime gates remain incomplete; Pixel 8 cost remains blocked. PR stays draft for user inspection.
|
Source checkpoint Scope correction: the historical starter gameplay/mist scenarios, browser GPU cost, and native desktop screenshot cover density |
|
Inherited template gate finished; this does not establish the current fog cost.
|
…t-fog # Conflicts: # packages/create-threenative/__tests__/scaffold.spec.ts
|
The native posterization was a pre-existing engine defect, also reproduced with the original FogExp2 control. The adapter offered Current combined candidate: four normal HUD-enabled desktop render-chain runs pass, two per arm, with grade applied in the final marker and zero diagnostics. A fresh independent visual judge returned IMPROVEMENT for both pairs and overall; geometry, shadows, camera framing and HUD layout are preserved. Distant-floor dark speckling remains. Antialias still reports the pre-existing |
PR #482: starter height fog at density 0.0021The images are pinned to commit VerdictsNative ( Browser (12 headed captures, 1920x1080, NVIDIA Turing): overall IMPROVEMENT. Ridge pose: IMPROVEMENT in both runs. Default and high poses: NEUTRAL. Verdicts are recorded under AC-1a in the PRD. ImagesNative before, from the historical Native after, from the Browser before and after, two runs per arm. The before arm is the FogExp2 control. The after arm is height fog at Native runs
Limitations
Pending
|
|
Puzzle visibility correction: only the authored phase-material emissive multiplier changes from 0.34 to 0.55. Geometry, lights, opacity, edge cages and fog are unchanged. The original lit probe passes 11/11 assertions twice: dark-pixel ratios 0.47530 and 0.47417 against the unchanged 0.5 ceiling, NVIDIA/Turing, original 1280×720 viewport. The complete canonical puzzle macro subsequently passes all 14 scenarios. Two fresh read-only judges return IMPROVEMENT for both pairs and overall. One notes the busy lattice; the second identifies the overlap as pre-existing, with no new or worsened artifact. Visual review alone does not establish physical playability. Banners preserve the original frame pixels. Run 1 — BEFORE / AFTER Run 2 — BEFORE / AFTER |































Eleven templates previously gave low ground and high ridges the same distance-only haze. Their generated render source now integrates height fog, preserves the calibrated eye-level haze and colors the sun-facing horizon. The starter uses density 0.0021 with the integrated histogram exposure; the other kits retain their individually calibrated values. Mist retains sole ownership when enabled.
The native screenshot corruption was pre-existing: the original FogExp2 control also reproduced it. The native adapter advertised
float32-filterable, but the device did not request it. Requesting that optional supported feature restores continuous color grading; a native regression assertion checks adapter/device agreement. A separate pre-existing puzzle visibility failure is corrected by changing only the authored cyan phase-material emission from 0.34 to 0.55.PRD-560: all 8 phase boxes and all 3 acceptance criteria verified locally.
Browser height-fog captures use three matched poses, two runs per arm, headed NVIDIA/Turing WebGPU. Fresh review finds overall IMPROVEMENT, including stronger ridge contrast while low ground stays hazier. The measured incremental GPU cost is +0.019 ms and −0.043 ms in two interleaved runs against the +0.1 ms budget; coarse readback supports the budget claim, not a speedup claim. Browser/native evidence.
Puzzle’s original lit probe passes 11/11 assertions twice with unchanged limits. Two fresh critics judge both pairs IMPROVEMENT; the busy overlap is pre-existing. Puzzle before/after evidence.
Validation: root typecheck and lint pass; 127 focused height-fog/template/scaffold tests pass. No scenario, assertion, viewport, timeout or performance budget was relaxed. The complete local
pnpm testcommand remains red: the native suite lacks required local V8/QuickJS binaries and current dependency receipts, with consequent missing pump observations (23 failed, 1549 passed, 69 skipped in that suite). Fresh complete CI run 38152111029 now passes on candidate6e165574fff67419cb91e421464234f18f4e4c44: 51 successful checks, 25 intentionally skipped checks, andci-requiredSUCCESS. The native suite and selected native platform/integration jobs are qualified by that fresh run.Limits: Pixel 8 cost remains deferred; no phone-performance or full native palette-parity claim. Existing native horizon speckle and the antialias
Image is not definedlimitation remain outside this correction.Merge-queue qualification 38155269864 subsequently failed on the identical file tree. Unit shard 1 ran no tests after browser-dependency installation failed DNS resolution for
archive.ubuntu.com. Native test steps passed; its compiled-tree cache-upload post-step failed. Unit shard 4 had one classifier import child-process failure (2207 passed, 17 skipped), and exposure cold boot observed 149/180 frames before its unchanged 60-second deadline. Receipt and required-check jobs rejected those failures. The PR remains unmerged while the harness paths are examined; no budget or assertion was relaxed.One fresh full queue qualification was requested with the same pinned source after the DNS failure, native post-cache failure and passing 660 ms isolated import check. This is a new complete qualification, not a failed-job-only rerun. If cold boot repeats the same deadline failure, stop retries and investigate capture cadence with the original limits.
The single fresh queue retry 38159796759 failed different gates: unit shard 3 timed out in
world-gpu-scene.spec.tsafter 60 seconds (2640 passed, 16 skipped), and velocity integration exceeded its 22-second bridge advance deadline. The earlier DNS, import, native-cache and cold-boot failures did not repeat. The unchanged GPU-scene test passes in isolation locally in 36.7 seconds. Further blind queue retries are stopped while these harness paths are investigated; all original limits remain intact.