# Track note: integration pass (world M1 + carrier M2 merged) 2026-10-05. Work only in `.wt\integ\TheDescentUE`. Final chain: build PASS (0 warnings, also `-DisableUnity` for the world files earlier), `import_assets.ps1` PASS, 49 of 49 tests PASS, every registered scenario PASS except `selftest_timeout` and `selftest_expect`, which fail on purpose (see the table at the end). ## The six failing scenarios: causes and fixes (nothing was fixed by widening a band) | Scenario | Cause | Fix | |---|---|---| | `look_calibrate` (and the unexplained darkness everywhere a `M_DescentSurface` or `M_Terrain` surface was lit) | `import_assets.ps1 -Force` rebuilt `MPC_Descent` once per asset module (assets_10, 20, 40, 41). Every rebuild gives the parameters new ids, so the materials built before the last rebuild failed to compile ("CollectionParameter has invalid parameter None") and the engine used its grey default material: the calibration wall was the checker texture, the terrain unlit. Not a carrier problem. | `ensure_mpc` rebuilds at most once per import run (`ctx.shared["mpc_done"]`), `Tools/ue/_helpers_look.py`. Rule recorded in STATUS: after any MPC change run a full import. | | `look_bloom` ("sphere luma 0.000") | same cause (the emissive sphere used `M_DescentSurface`) | same fix | | `m1_terrain_tour` (`start`) | same cause for the terrain material, and the `start` place is the carrier's centre (the camera was inside the hull) | the tour's `start` view looks from 150 m down the canyon, the carrier behind it | | `look_throat` | the view was inside the carrier (start pose = carrier origin) | camera at (250, 19, -30), 250 m from the carrier | | `m2_walk` (rooms 0.88) | two exposure authorities: the carrier scenarios' own post-process (bias 1.0 WITH the physical camera exposure, about 1/1146 per unit) against `ADescentEnvironment` (manual, no physical camera, about 1.0 per unit); the interior numbers were calibrated for the first | scenario environment (`M2SpawnEnv`) removed from `Scenarios_M2.cpp`; lamp unit 2700 -> 4.6, `EMISSIVE_NITS` 800 -> 1.36, `AMBIENT_NITS` 15 -> 0.0255 (factor `Tune::Carrier::InteriorExposureFactor` 0.0017, from the recipe in carrier.md and the physical-camera ratio); first run: 16 rooms 0.168-0.395 (band 0.10-0.45) | | `m2_exterior` | with the real water a hull 180 m away is fogged away; the old camera was 184 m out and the assertion measured the whole frame | camera 85 m off the beam; asserts the hull region < 0.12 and that something is lit (p99 >= 0.05); picture looked at: dark hull, sail, mast, one green nav light | ## Further defects found on the way (all fixed) * **PP_Water stencil**: custom depth/stencil is drawn without the main depth test, so an interior object hidden behind the opaque hull (the moon-pool shaft) made hull pixels "dry" and left an unfogged black rectangle on the hull seen from outside. PP_Water now exempts a pixel only if custom depth equals scene depth, **and only while the camera is dry** (`MPC_Descent.DryCamera`, written by `ADescentEnvironment`): seen from the sea, the pool rim, a window or a docked Tender are in the water. `look_dry_mask` now puts a dry volume around the camera first and also checks that the same box is fogged from the sea. * **A second environment authority**: `ADescentShowcaseRig` had its own fog and exposure and `ADescentEnvironment` yielded to it. The rig's fog and post-process are gone (fills are unitless lights; `SetOwnEnvironment` is a no-op), the yield logic is gone. The Kazah scenarios are now lit by the real environment. * The Tender headlight is `Descent::Look::ConfigureSpot(Headlight, TenderHeadlamp, HeadlightIntensityScale)` (`KazahTender.*`; `HeadlightIntensityCd`/`OuterConeDeg` removed). ## New in this pass * `m2_dry`: the "WAITS FOR MERGE" paths are real expectations (env section: Dry, no volumetric fog, snow 0, 26.0; `Descent.Look.Set WaterPP 0`; interior region identical with the water on or off (diff 0.0000 of 0.26); window region differs by 0.107; interior region not black). * `look_rooms` (in `Scenarios_M2.cpp`, shares the room helpers): 16 rooms on foot, 0.10-0.45 and env Dry / 26.0 / no volumetric fog in each. * `m12_boot` (nothing placed): boot report ok; mode Foot and HUD mode; room bridge, feet at deck 3; carrier at (0, 0, -30) yaw 0; env Dry 26.0; terrain: every chunk with a surface within 100 m of the carrier is meshed (112 chunks, 0 unmeshed; 620 meshed in all, 276k triangles); shots `bridge_forward`, `bridge_window`, `bay_pool`, `carrier_outside` (env Water there). * A plain start without a scenario (`-game -RenderOffscreen`, 50 s, process stopped by its own PID): boot "8 step(s) ran, all ok", no error or warning of ours (only the engine's ToolsetRegistry traceback). * `Docs\STATUS.md` consolidated (core + world + carrier + this pass). ## Changes in the carrier track's files `Debug/Scenarios_M2.cpp` (scenario environment removed, exterior camera and assertion, m2_dry real, look_rooms, m12_boot), `Core/Tuning/DescentTune_Carrier.h` (lamp unit, `InteriorExposureFactor`, `CalibrationExposureBias` removed), `Tools/ue/assets_35_carrier_materials.py` (EMISSIVE_NITS, AMBIENT_NITS, docstring). Other files touched: `Vehicles/KazahTender.*`, `Debug/DescentShowcaseRig.*`, `Debug/Scenarios_Kazah.cpp` and `Scenarios_Harness.cpp` (comments only), `Render/DescentEnvironment.*`, `Tools/ue/assets_41_pp_water.py`, `_helpers_look.py`, `Debug/Scenarios_M1.cpp`, `Scenarios_Look.cpp`. ## What the pictures show (looked at) `m12_boot_bridge_forward` (the helm console in front, the sea in the bow window), `_bridge_window`, `_bay_pool` (the moon pool: a glowing cyan surface inside hazard-striped rails; blooms strongly), `_carrier_outside` and `m2_exterior_exterior_dark` (a dark hull silhouette with sail and mast in the water, one green nav light), `m2_dry_bridge_water_on/off` (interior identical; the window teal with the water, black without), `kazah_showcase_front34` (the Tender in the real water). ## Open * The exterior picture is not "lit only by its own lights": at Z -30 the surface sun is on (L 0.36) and the hull top is dimly lit by it. Nothing but the environment's own lights is added. * The bridge view after Play faces the helm console at arm's length; the bow window is above it (`bridge_window`). The start pose is the carrier track's decision (41.8, 0, 1.5). * The bay pool surface is very bright (blooms); `M_CarrierPool` emissive is not recalibrated beyond the common factor. * Volumetric beams still not visible; marine snow not built.