From 76859b64cf3913ff353d8ea47ba99541f0147727 Mon Sep 17 00:00:00 2001 From: Zwitschi Date: Mon, 9 Nov 2026 17:57:54 +0100 Subject: [PATCH] docs(placement): the pavement is at 158 cm, not 380 - and my attempt to use it broke the floor Measured in the source geometry (Art/blender/site/site-2026-11-06.blend, metres): at the player's street section the north sidewalk tops out at 1.58 m and the road at 1.45 m. The 380 cm that has driven every placement decision came from the UE mesh's bounding box, which spans 279 m of sloping street and takes the highest point anywhere - 2.2 m above the surface where the player stands. That is the float, quantified at last. Moving the invisible collision slab to a 158 cm top did not work: with an 8 cm slab the player fell to Z -4410, and with a 50 cm slab it fell to the same place, so the slab was not colliding at all after the change. I could not identify why within this pass, so the change is reverted and the 380 stopgap restored - verified again by trace (mesh=Cube at Z 380, actor Z 470). Recorded in TODO.md with the two numbers and the next step: find why the slab stops colliding when it moves down, then set it to 158 and the player start to 247. --- Game/GigLine/Content/Hollywood/DemoMap.umap | 4 +-- .../Content/Hollywood/Site/M_Asphalt.uasset | 2 +- .../Content/Hollywood/Site/M_Concrete.uasset | 2 +- .../Hollywood/Site/M_FacadeBanner.uasset | 2 +- .../Hollywood/Site/M_FacadeGlass.uasset | 2 +- .../Hollywood/Site/M_FacadeStone.uasset | 2 +- .../Hollywood/Site/M_FacadeStoneShadow.uasset | 2 +- .../Content/Hollywood/Site/M_Ground.uasset | 2 +- .../Hollywood/Site/M_KerbConcrete.uasset | 2 +- .../Content/Hollywood/Site/M_RoadPaint.uasset | 2 +- .../Content/Hollywood/Site/M_Stucco.uasset | 2 +- .../Content/Hollywood/Site/Terrain_DEM.uasset | 2 +- .../Hollywood/Textures/T_Asphalt_BC.uasset | 2 +- .../Hollywood/Textures/T_Asphalt_R.uasset | 2 +- .../Hollywood/Textures/T_Concrete_BC.uasset | 2 +- .../Hollywood/Textures/T_Concrete_R.uasset | 2 +- .../Textures/T_StoneAshlar_BC.uasset | 2 +- .../Hollywood/Textures/T_StoneAshlar_R.uasset | 2 +- .../Hollywood/Textures/T_Stucco_BC.uasset | 2 +- .../Hollywood/Textures/T_Stucco_R.uasset | 2 +- Screenshots/README.md | 36 +++++++++---------- TODO.md | 2 +- 22 files changed, 40 insertions(+), 40 deletions(-) diff --git a/Game/GigLine/Content/Hollywood/DemoMap.umap b/Game/GigLine/Content/Hollywood/DemoMap.umap index 213306a..cab7416 100644 --- a/Game/GigLine/Content/Hollywood/DemoMap.umap +++ b/Game/GigLine/Content/Hollywood/DemoMap.umap @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:847f8086ff2862ef5d35a82c03560682d76aaa3de2275521da615c6903a2bfaf -size 792381 +oid sha256:3cb007628786ee67222a7747e86ee747493c66da68a607f2f5a930d781d8332f +size 790434 diff --git a/Game/GigLine/Content/Hollywood/Site/M_Asphalt.uasset b/Game/GigLine/Content/Hollywood/Site/M_Asphalt.uasset index 2ca89b2..73054fb 100644 --- a/Game/GigLine/Content/Hollywood/Site/M_Asphalt.uasset +++ b/Game/GigLine/Content/Hollywood/Site/M_Asphalt.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:aba3ce52494682b0a142efdc1ee6be7c06b130980cd5130130bdda672fb6ed21 +oid sha256:7ad6ef515ecbdf4a8ade4b47b898b9079a4a217b0782625ad8d34dc416e97d8a size 10019 diff --git a/Game/GigLine/Content/Hollywood/Site/M_Concrete.uasset b/Game/GigLine/Content/Hollywood/Site/M_Concrete.uasset index 5df49da..feb6b7b 100644 --- a/Game/GigLine/Content/Hollywood/Site/M_Concrete.uasset +++ b/Game/GigLine/Content/Hollywood/Site/M_Concrete.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:917b6d835d2db0132f2d6c3a4a91dfe6525fd73a60cf49e20de05d26777c27b5 +oid sha256:d4644aa72a005558c1e305e43819dac8b326503847bf040f54059a2adbf0d32c size 10024 diff --git a/Game/GigLine/Content/Hollywood/Site/M_FacadeBanner.uasset b/Game/GigLine/Content/Hollywood/Site/M_FacadeBanner.uasset index be36018..a1dd3bf 100644 --- a/Game/GigLine/Content/Hollywood/Site/M_FacadeBanner.uasset +++ b/Game/GigLine/Content/Hollywood/Site/M_FacadeBanner.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:63b3610233449e9f6b46bc8d206b2c834e2b1c8409175248237ebbf4da05d2a5 +oid sha256:cd193542a6efefe2bda0b61c9233f0ea8d44874f11a02c7f583144772752893e size 11419 diff --git a/Game/GigLine/Content/Hollywood/Site/M_FacadeGlass.uasset b/Game/GigLine/Content/Hollywood/Site/M_FacadeGlass.uasset index fbdf409..a0bed0e 100644 --- a/Game/GigLine/Content/Hollywood/Site/M_FacadeGlass.uasset +++ b/Game/GigLine/Content/Hollywood/Site/M_FacadeGlass.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0651669b0b29548ef23e6fe3876118971ed2c18e49e06af91008c445af409b06 +oid sha256:389281699bddcb8b4ec8e3107b615579022fcedb92c93d59ec735cc189a4af5d size 11414 diff --git a/Game/GigLine/Content/Hollywood/Site/M_FacadeStone.uasset b/Game/GigLine/Content/Hollywood/Site/M_FacadeStone.uasset index c4f55d4..8eef9f5 100644 --- a/Game/GigLine/Content/Hollywood/Site/M_FacadeStone.uasset +++ b/Game/GigLine/Content/Hollywood/Site/M_FacadeStone.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:89f12cee75ddca231c0f388b94461f9709ba4507d7c6f890026fe72d466b64ea +oid sha256:b7ae0d2a90648fe3eb0d98d798888bcf1a9e077f602af2d1c2faef9f7407f194 size 17083 diff --git a/Game/GigLine/Content/Hollywood/Site/M_FacadeStoneShadow.uasset b/Game/GigLine/Content/Hollywood/Site/M_FacadeStoneShadow.uasset index ada8cc9..bd11aa0 100644 --- a/Game/GigLine/Content/Hollywood/Site/M_FacadeStoneShadow.uasset +++ b/Game/GigLine/Content/Hollywood/Site/M_FacadeStoneShadow.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b7530e4a220ab745515e766005cd9aa481ae117ad4be9e8c0445559ccf0f4392 +oid sha256:1adb0fa4670daf81d9ce97d92d28ec5613f64c459bd94e05b962d6e484f53ee4 size 17113 diff --git a/Game/GigLine/Content/Hollywood/Site/M_Ground.uasset b/Game/GigLine/Content/Hollywood/Site/M_Ground.uasset index 02c4d67..d6038be 100644 --- a/Game/GigLine/Content/Hollywood/Site/M_Ground.uasset +++ b/Game/GigLine/Content/Hollywood/Site/M_Ground.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:07b99a2d61a3bbafa6d57f106ca9d038a659971cace6c754e83f488c497aa35f +oid sha256:db56fea698b4f17a82247ca2deae1c98f29f99505de9fd1cbd7bc9ff98223ddc size 10014 diff --git a/Game/GigLine/Content/Hollywood/Site/M_KerbConcrete.uasset b/Game/GigLine/Content/Hollywood/Site/M_KerbConcrete.uasset index 56ef7e8..8deba79 100644 --- a/Game/GigLine/Content/Hollywood/Site/M_KerbConcrete.uasset +++ b/Game/GigLine/Content/Hollywood/Site/M_KerbConcrete.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d433c5eff7ae980657836b56cd7406aaf21786f970459e30546d3b460110242f +oid sha256:cb8e9caeaf80c62af65ebfa2c978e9a75e3474a2e547b58531f102d72f6eedcd size 10044 diff --git a/Game/GigLine/Content/Hollywood/Site/M_RoadPaint.uasset b/Game/GigLine/Content/Hollywood/Site/M_RoadPaint.uasset index d75c9e8..20f06ff 100644 --- a/Game/GigLine/Content/Hollywood/Site/M_RoadPaint.uasset +++ b/Game/GigLine/Content/Hollywood/Site/M_RoadPaint.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:37cd0568f4b8e02f219fe0fc2031303c0dc459fc019100e752d4c149c1d28353 +oid sha256:73020e713d8976679469d078fc64ec5ea460aeb96ae9301852d3031ed22282a4 size 10029 diff --git a/Game/GigLine/Content/Hollywood/Site/M_Stucco.uasset b/Game/GigLine/Content/Hollywood/Site/M_Stucco.uasset index b20014e..20cc041 100644 --- a/Game/GigLine/Content/Hollywood/Site/M_Stucco.uasset +++ b/Game/GigLine/Content/Hollywood/Site/M_Stucco.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:239464e98fe12c96d6cccc29ac9b2e5b1bfd3f64d04bea3d871aacc332752c36 +oid sha256:da09f619bfeaa17fd37fc6ed15adc1cd4665835cc79aa5b0b3760a73bc0ef7ab size 11389 diff --git a/Game/GigLine/Content/Hollywood/Site/Terrain_DEM.uasset b/Game/GigLine/Content/Hollywood/Site/Terrain_DEM.uasset index 80d5bcc..22c0d8a 100644 --- a/Game/GigLine/Content/Hollywood/Site/Terrain_DEM.uasset +++ b/Game/GigLine/Content/Hollywood/Site/Terrain_DEM.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f11a4be6ad90833d8f62909f666d59db5ab70549c2c323651e316498dd91d18e +oid sha256:4c2a1c499defd55d39f76e4de20949c9969ee7380b762ef881e30ea0d2ba915b size 357901 diff --git a/Game/GigLine/Content/Hollywood/Textures/T_Asphalt_BC.uasset b/Game/GigLine/Content/Hollywood/Textures/T_Asphalt_BC.uasset index 1405434..aa6df99 100644 --- a/Game/GigLine/Content/Hollywood/Textures/T_Asphalt_BC.uasset +++ b/Game/GigLine/Content/Hollywood/Textures/T_Asphalt_BC.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c4e0ab7151c64f1564492785be5a1879fdcae71238aa67f87cc7497d6b6beb66 +oid sha256:7cfe29fcde6caf35a9ad1038491dbd1a30cf6c5dd93d6ab9ceac93e5990dd35e size 70879 diff --git a/Game/GigLine/Content/Hollywood/Textures/T_Asphalt_R.uasset b/Game/GigLine/Content/Hollywood/Textures/T_Asphalt_R.uasset index e7994a0..889aeed 100644 --- a/Game/GigLine/Content/Hollywood/Textures/T_Asphalt_R.uasset +++ b/Game/GigLine/Content/Hollywood/Textures/T_Asphalt_R.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5e9fb00fff55db75c8b56ebc12e4f68c316d546bb35101d9cfdf225ff42aabbf +oid sha256:d54589ec25fc6d8e14950c04b439dd3feff8e5239f73528256cb60fd7f895da8 size 29011 diff --git a/Game/GigLine/Content/Hollywood/Textures/T_Concrete_BC.uasset b/Game/GigLine/Content/Hollywood/Textures/T_Concrete_BC.uasset index 146ffd0..8e3b210 100644 --- a/Game/GigLine/Content/Hollywood/Textures/T_Concrete_BC.uasset +++ b/Game/GigLine/Content/Hollywood/Textures/T_Concrete_BC.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e28489ec782c7702204bc47690d416db6ad9b25779aa2984264554739581f1bf +oid sha256:46714e293ed0f105501e7bcb6a04762dd07c1ba19434555bd64d3bbedf7cb3db size 58568 diff --git a/Game/GigLine/Content/Hollywood/Textures/T_Concrete_R.uasset b/Game/GigLine/Content/Hollywood/Textures/T_Concrete_R.uasset index 9adceed..b261f3d 100644 --- a/Game/GigLine/Content/Hollywood/Textures/T_Concrete_R.uasset +++ b/Game/GigLine/Content/Hollywood/Textures/T_Concrete_R.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:43302038e2ab1db921c763873c165d77119303d9b17e09098fb016cecb1af9b3 +oid sha256:198d76c322d7a48cdb609d7fae9ad51ce202849a5e1edf44688fb2657044ea79 size 17517 diff --git a/Game/GigLine/Content/Hollywood/Textures/T_StoneAshlar_BC.uasset b/Game/GigLine/Content/Hollywood/Textures/T_StoneAshlar_BC.uasset index 626ca25..52d6ce9 100644 --- a/Game/GigLine/Content/Hollywood/Textures/T_StoneAshlar_BC.uasset +++ b/Game/GigLine/Content/Hollywood/Textures/T_StoneAshlar_BC.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ea0bb67b75e6daaf222b0eb90d8b30324d7f1fb387bd9daca433f1be4ff40570 +oid sha256:b53b7343e8018b449af6b7fedee380da0517fa915717e09d5171bd33b74b91b1 size 40610 diff --git a/Game/GigLine/Content/Hollywood/Textures/T_StoneAshlar_R.uasset b/Game/GigLine/Content/Hollywood/Textures/T_StoneAshlar_R.uasset index 3bc08af..104d6ee 100644 --- a/Game/GigLine/Content/Hollywood/Textures/T_StoneAshlar_R.uasset +++ b/Game/GigLine/Content/Hollywood/Textures/T_StoneAshlar_R.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:42943102023e0233908831512da57ed315b80ebf190703152eb040eaa27b9cbd +oid sha256:2aee6cb7dbf8622b7134103b50b689844324b6d0ec7052305b450b6abdc0a189 size 18770 diff --git a/Game/GigLine/Content/Hollywood/Textures/T_Stucco_BC.uasset b/Game/GigLine/Content/Hollywood/Textures/T_Stucco_BC.uasset index f9a35e2..b3e54de 100644 --- a/Game/GigLine/Content/Hollywood/Textures/T_Stucco_BC.uasset +++ b/Game/GigLine/Content/Hollywood/Textures/T_Stucco_BC.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:396225dc52a4fde43461179a0bca4ecc8f05824f0e68e539cc9fe886cac7629a +oid sha256:0112ff38f754fce68f1e4f6a75df4b07c27c65787001ebdaea521a8f614685d5 size 62746 diff --git a/Game/GigLine/Content/Hollywood/Textures/T_Stucco_R.uasset b/Game/GigLine/Content/Hollywood/Textures/T_Stucco_R.uasset index 89b2606..2b88303 100644 --- a/Game/GigLine/Content/Hollywood/Textures/T_Stucco_R.uasset +++ b/Game/GigLine/Content/Hollywood/Textures/T_Stucco_R.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:560af04c535ba4e4c949c7d304d15148f9dc19a3a4e9156e5d3cfb842e6ccdba +oid sha256:c0b3f7d08bd310f7ae0e779b009dd25be50438ddea97e223b4e1aad8e217f251 size 17541 diff --git a/Screenshots/README.md b/Screenshots/README.md index f5b0ff4..21bc757 100644 --- a/Screenshots/README.md +++ b/Screenshots/README.md @@ -13,29 +13,29 @@ Both capture passes are produced by [`Tools/render_screenshots.sh`](../Tools/ren | # | Part | Item | Status | Note | | --- | --- | --- | --- | --- | -| 1 | ReviewMap | [character feet](review/review-character-feet.png) | ☐ pending | | -| 2 | ReviewMap | [character](review/review-character.png) | ☐ pending | | -| 3 | ReviewMap | [ground contact](review/review-ground-contact.png) | ☐ pending | | -| 4 | ReviewMap | [hero facade front](review/review-hero-facade-front.png) | ☐ pending | | -| 5 | ReviewMap | [hero facade oblique](review/review-hero-facade-oblique.png) | ☐ pending | | -| 6 | ReviewMap | [hero portals](review/review-hero-portals.png) | ☐ pending | | -| 7 | ReviewMap | [npc prefab](review/review-npc-prefab.png) | ☐ pending | | -| 8 | ReviewMap | [overview](review/review-overview.png) | ☐ pending | | -| 9 | ReviewMap | [player placement](review/review-player-placement.png) | ☐ pending | | -| 10 | ReviewMap | [scale cubes](review/review-scale-cubes.png) | ☐ pending | | -| 11 | ReviewMap | [shadow compare](review/review-shadow-compare.png) | ☐ pending | | -| 12 | ReviewMap | [vehicle](review/review-vehicle.png) | ☐ pending | | -| 13 | DemoMap | [crossing](demo/review-demo-crossing.png) | ☐ pending | | -| 14 | DemoMap | [feet](demo/review-demo-feet.png) | ☐ pending | character and car float | | -| 15 | DemoMap | [north buildings](demo/review-demo-north-buildings.png) | ☐ pending | | -| 16 | DemoMap | [retail frontage](demo/review-demo-retail-frontage.png) | ☐ pending | | +| 1 | ReviewMap | [character feet](review/review-character-feet.png) | ☐ pending | | +| 2 | ReviewMap | [character](review/review-character.png) | ☐ pending | | +| 3 | ReviewMap | [ground contact](review/review-ground-contact.png) | ☐ pending | | +| 4 | ReviewMap | [hero facade front](review/review-hero-facade-front.png) | ☐ pending | | +| 5 | ReviewMap | [hero facade oblique](review/review-hero-facade-oblique.png) | ☐ pending | | +| 6 | ReviewMap | [hero portals](review/review-hero-portals.png) | ☐ pending | | +| 7 | ReviewMap | [npc prefab](review/review-npc-prefab.png) | ☐ pending | | +| 8 | ReviewMap | [overview](review/review-overview.png) | ☐ pending | | +| 9 | ReviewMap | [player placement](review/review-player-placement.png) | ☐ pending | | +| 10 | ReviewMap | [scale cubes](review/review-scale-cubes.png) | ☐ pending | | +| 11 | ReviewMap | [shadow compare](review/review-shadow-compare.png) | ☐ pending | | +| 12 | ReviewMap | [vehicle](review/review-vehicle.png) | ☐ pending | | +| 13 | DemoMap | [crossing](demo/review-demo-crossing.png) | ☐ pending | | +| 14 | DemoMap | [feet](demo/review-demo-feet.png) | ☐ pending | character and car float | | +| 15 | DemoMap | [north buildings](demo/review-demo-north-buildings.png) | ☐ pending | | +| 16 | DemoMap | [retail frontage](demo/review-demo-retail-frontage.png) | ☐ pending | | | 17 | DemoMap | [spawn view](demo/review-demo-spawn-view.png) | ☐ pending | character and car float | | 18 | DemoMap | [street level](demo/review-demo-street-level.png) | ☐ pending | character and car float | | 19 | DemoMap | [third person front](demo/review-demo-third-person-front.png) | ☐ pending | character and car float | | 20 | DemoMap | [third person walk](demo/review-demo-third-person-walk.png) | ☐ pending | character and car float | | 21 | DemoMap | [third person](demo/review-demo-third-person.png) | ☐ pending | character and car float | -| 22 | DemoMap | [vehicle](demo/review-demo-vehicle.png) | ☐ pending | | -| 23 | DemoMap | [wheel](demo/review-demo-wheel.png) | ☐ pending | car floats | | +| 22 | DemoMap | [vehicle](demo/review-demo-vehicle.png) | ☐ pending | | +| 23 | DemoMap | [wheel](demo/review-demo-wheel.png) | ☐ pending | car floats | | **Status:** ☐ pending · ☑ approved · ☒ rejected. "ReviewMap" rows are asset staging; "DemoMap" rows are the game map. diff --git a/TODO.md b/TODO.md index d85ff8a..c796b3e 100644 --- a/TODO.md +++ b/TODO.md @@ -26,7 +26,7 @@ Actionable task list for this project. This file is the single, central place fo - [x] Fix the character and car floating. **The measurement was taken at the wrong moment.** The foot probe ran in `BeginPlay`, while the pawn is still at its spawn height and falling, so every trace reported a surface far below it (`ground 366` against an actor at 561) and read as a float that was not there. The probe now runs **three seconds after spawn**, from the capsule's feet, on three channels, and names the actor it hits. Character: the player start at Z 600 left the soles 39 cm in the air (the capsule settles at 561 on this pavement); the start is now the measured 561. Car: the template's lowest geometry is exhaust, so grounding on the whole model put the tyres 4 cm above the origin - it is now grounded on its wheels, staged at Z 342 after the traced road height (366) disagreed with the visible road by ~25 cm. - [x] Fix the vehicle's material colour. The template's `car paint` is a legacy mix-shader graph that the FBX exporter cannot map, so `SM_Vehicle_Body` imported holding `WorldGridMaterial` and rendered black while Blender showed red. Legacy graphs are now converted to Principled before export (saturated colour wins over the grey diffuse next to it), and the staged body panel is assigned `M_Vehicle_HatchPaint`. Judge: `verdict=yes confidence=0.9`. - [x] Fix the missing vehicle glazing. The `windows` material was metallic 1.0 with roughness 0.0 - a black void that read as an empty cabin. Now tinted translucent (opacity 0.85, roughness 0.08); opacity 0.45 was tried first and made the glass invisible. The vision judge still returns `verdict=no` for the frame, disagreeing with what is visibly tinted glass; it is advisory, and the human verdict decides. -- [A] Put the player on the sidewalk, not the road. The judge now flags the character and car as floating in the spawn view, and its criterion is in the expectation ("a shadow more than a hand's width below an object means the object is floating"). Two readings are possible and both fit the pixels: the object really floats, or it stands on the raised pavement and the sun throws its shadow past the kerb onto the road. `Tools/shadow_gap.py` now does the measurement: object vs shadow in pixels, as a fraction of the object's height. It works on synthetic frames (tests pass) but returns `unknown` on the real spawn view, because the crop contains two surfaces - the pale wall behind and the dark road below - and a single global background cannot classify both. Next: per-region backgrounds, or crop tightly around the feet and their shadow only. +- [A] Put the player on the sidewalk at its real height. The judge now flags the character and car as floating in the spawn view, and its criterion is in the expectation ("a shadow more than a hand's width below an object means the object is floating"). Two readings are possible and both fit the pixels: the object really floats, or it stands on the raised pavement and the sun throws its shadow past the kerb onto the road. `Tools/shadow_gap.py` now does the measurement: object vs shadow in pixels, as a fraction of the object's height. It works on synthetic frames (tests pass) but returns `unknown` on the real spawn view, because the crop contains two surfaces - the pale wall behind and the dark road below - and a single global background cannot classify both. Next: per-region backgrounds, or crop tightly around the feet and their shadow only. **Root cause found: the player stands on the road.** Three spawn heights (455, 395, 469) produced **identical** captures, and the in-game probe names the surface every time: