From 627737062b1fe224d2028776182dbb632a77861b Mon Sep 17 00:00:00 2001 From: Zwitschi Date: Mon, 9 Nov 2026 15:27:58 +0100 Subject: [PATCH] test(vehicle): a review shot, and the judge that proves the car is missing Adds demo-vehicle to the camera list and the visual targets, plus shot 9 in Screenshots/README.md - marked FAIL, because that is what it shows. The vehicle is staged and runs: spawned at (-12950,-900,120), 9 visual panels attached, panel 0 visible with a 238 cm extent, settled at Z 119 cm. The capture shows an empty road with a soft shadow. Two checks disagree in a useful way: visual_loop --verify PASSES the frame (it only tests size, blankness and tonal range, so a well-exposed empty road passes), while judge_screenshot returns verdict=no confidence=1.0. Strongest clue, recorded in TODO.md: a downward trace from the vehicle finds no ground at all (ground at Z -9999), so the car sits over a surface without collision or inside geometry - the shadow and the panels are not in the same place. Diagnostics added along the way: mesh/visibility/bounds at BeginPlay, per-panel world positions and extents, and the ground trace. The visual panels were also unhidden from the physics mesh: SetVisibility(false, ...) hid them whether or not propagation was requested. --- 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 +- .../Theatre/SM_Trim_BladeSign.uasset | 2 +- .../Theatre/SM_Trim_BladeSignBracket.uasset | 2 +- .../Theatre/SM_Trim_BladeSignFrame.uasset | 2 +- .../Theatre/SM_Trim_MarqueeCanopy.uasset | 2 +- .../Theatre/SM_Trim_MarqueeFascia.uasset | 2 +- .../Theatre/SM_Trim_MarqueeSoffit.uasset | 2 +- Game/GigLine/Content/Test/ReviewMap.umap | 2 +- .../GigLine/Source/GigLine/GigLineVehicle.cpp | 94 +++++++++++++++++++ Game/GigLine/Source/GigLine/GigLineVehicle.h | 15 +++ Screenshots/README.md | 1 + Screenshots/demo/review-demo-crossing.png | 4 +- .../demo/review-demo-north-buildings.png | 4 +- .../demo/review-demo-retail-frontage.png | 4 +- Screenshots/demo/review-demo-spawn-view.png | 4 +- Screenshots/demo/review-demo-street-level.png | 4 +- .../demo/review-demo-third-person-front.png | 4 +- .../demo/review-demo-third-person-walk.png | 4 +- Screenshots/demo/review-demo-third-person.png | 4 +- Screenshots/demo/review-demo-vehicle.png | 3 + TODO.md | 1 + Tools/ue_build_review_map.py | 4 + Tools/visual_targets.json | 10 ++ 42 files changed, 172 insertions(+), 44 deletions(-) create mode 100644 Screenshots/demo/review-demo-vehicle.png diff --git a/Game/GigLine/Content/Hollywood/DemoMap.umap b/Game/GigLine/Content/Hollywood/DemoMap.umap index 7d8a4ec..b55506f 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:0ae39cea4fc5ff97c70d3f8f1b3c74126a3a58400889db64f26ccf31fa4ba663 -size 783091 +oid sha256:af0272708acdbd7eba626a0b57cdbb22eef3ab5fc0dec34cb2d46299176ac169 +size 784827 diff --git a/Game/GigLine/Content/Hollywood/Site/M_Asphalt.uasset b/Game/GigLine/Content/Hollywood/Site/M_Asphalt.uasset index c60feda..bc9888f 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:d3defe86834db254c86d0121b3f71ebf85618780e67ba42551e0901dd9ac7ab2 +oid sha256:a9f4e6d8dfe1c6c283932b96e7c911ee201ed928937c999356080d189aec1f25 size 10019 diff --git a/Game/GigLine/Content/Hollywood/Site/M_Concrete.uasset b/Game/GigLine/Content/Hollywood/Site/M_Concrete.uasset index e15c856..f88a95a 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:a77aa28c72442e05ce640df34c652744f322151917219ed8a0318847f9bb1a42 +oid sha256:ccfec0a4667593dfe5d61727428a22c36a58a4d4ebc7cd84856f402291b558bf size 10024 diff --git a/Game/GigLine/Content/Hollywood/Site/M_FacadeBanner.uasset b/Game/GigLine/Content/Hollywood/Site/M_FacadeBanner.uasset index 167f1a8..c39d79d 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:40cc43b90731a8b54294856830adb2ecc46fa91bbb2ecee07cfea034fb5a498e +oid sha256:e02ef94225ab38e7fa2c99ed2e165d37fbd292286d6fd48a61d6575c1052dcbb size 11419 diff --git a/Game/GigLine/Content/Hollywood/Site/M_FacadeGlass.uasset b/Game/GigLine/Content/Hollywood/Site/M_FacadeGlass.uasset index a44049b..6798eb0 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:60cd410834ea7cb58f61c4b3fbb68769a6ee9a9382449d76926e56d00b9f0cb4 +oid sha256:61c0bd4eaad4af33f8125b953ca271995cc7f7446aa57b81225ae01866ef32d3 size 11414 diff --git a/Game/GigLine/Content/Hollywood/Site/M_FacadeStone.uasset b/Game/GigLine/Content/Hollywood/Site/M_FacadeStone.uasset index 598a250..ca349ea 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:63449a2e6e764b51a4e8348bb758de5336a1051bc31a2b59cfb2b5f091370527 +oid sha256:a4b4e371fc7a6d294ec12db11d7280cef67cf8f28b223955c7094d9157d8580d size 17083 diff --git a/Game/GigLine/Content/Hollywood/Site/M_FacadeStoneShadow.uasset b/Game/GigLine/Content/Hollywood/Site/M_FacadeStoneShadow.uasset index 347ea32..ed98408 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:716422f08665cbf68511210a90cf7d4a9bd55ef259dc1a0b5a5927b3ee1f5d33 +oid sha256:26e082988e793cfc4114494d0c1ff3371db8d30efe01f8275777be905f7a01db size 17113 diff --git a/Game/GigLine/Content/Hollywood/Site/M_Ground.uasset b/Game/GigLine/Content/Hollywood/Site/M_Ground.uasset index 9f28069..dc1297a 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:da189d7135dde22e69e34e35465cf706d54c0229213bf71cfefcf79d95c977a2 +oid sha256:e82fc935b9fd38c4cc0c5c7019fc435ba4020aa1893e932b64a850d7a968ccca size 10014 diff --git a/Game/GigLine/Content/Hollywood/Site/M_KerbConcrete.uasset b/Game/GigLine/Content/Hollywood/Site/M_KerbConcrete.uasset index 0cfcf99..99a6a46 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:6422f922cdbb15c04223a7f8f87a55b76a06e5d43f4803694cc9ffa446fe3a21 +oid sha256:da7aff3c4f373c7c523a32a8b3ea3bf3a154fdd75e196dfe9e31e4ed2d96329f size 10044 diff --git a/Game/GigLine/Content/Hollywood/Site/M_RoadPaint.uasset b/Game/GigLine/Content/Hollywood/Site/M_RoadPaint.uasset index 8e4cbfc..c882ac5 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:118705b5b5b71585c836deb4b7fd1e83aab173e2e90a55cd3a402a35cf778e78 +oid sha256:ecff33d1850ca619beca813b188aec89a6116118d6a3dddf36f42a2c36f4f29b size 10029 diff --git a/Game/GigLine/Content/Hollywood/Site/M_Stucco.uasset b/Game/GigLine/Content/Hollywood/Site/M_Stucco.uasset index 71bc086..ac1d8e6 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:e650732418aeac33c84a8dfc232b270e566b420468cd30d80a66153117dab966 +oid sha256:ac8a37d40accf0437281c86778e9d80b945ab87526dfc6f26675fb10a16b1ff2 size 11389 diff --git a/Game/GigLine/Content/Hollywood/Site/Terrain_DEM.uasset b/Game/GigLine/Content/Hollywood/Site/Terrain_DEM.uasset index ea4d52c..936e09c 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:d9e8d9c6e05fd050ab696c4784d9ca127ad7c491909166a3bd8f6fd25bc03f5f +oid sha256:a0546554fa3548e2a73d0e804a50ee4240e789aee2fed2f31683993e92d91929 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 0c7d3e3..dcf2bad 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:b014f7387fed856f544e1cb1162d766655d1d2e37773259aafd8e53eead836b3 +oid sha256:de93a3bae1110a1a99dbdaf4f7e1d82a8ad8528448955fcb517212f128e75060 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 67e9bd8..119f3b6 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:b95fb9db1f8df08864049e2015d0536d58ceaf30fa6594989ec446e3447ac708 +oid sha256:e1d5e7cb2d90178e6e080cedbca5f4e1bc9da63bddc61e4fc01607c4e5611f93 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 a881fc3..8c1ee49 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:bb6912c5c709dc8bfea3538bb030393dfd92cb91bb901e98d2512ac3e49c777f +oid sha256:e7f9d5f5ee0e163f716cf20be13dba5706ef57266df5d37e9c06b9a0a46cf513 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 e935557..8d6e4c4 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:cc74c1af5fa8e8591e6502eecd37f6effc1b58b028d56776cb25467dbd7a00d6 +oid sha256:8ec3e277643acb6a199813f1018ada166fd4a864ac28735022516f9ff818b05d 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 35fadbf..8e38f35 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:dadce20c944e295ad83087ba780ccd1783959772f3202d2bf3ebd6f82c5253c4 +oid sha256:474fbe2dbd512d173f9e14d58d5542b36cde146010d0803bb9f9a68e197354c2 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 5d37253..f9db325 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:0e5fca9d6b1a59c5bef1d124dfcc9698466bc63f930ec9b3ca0ba57cb5c08a34 +oid sha256:0d18be3c8bceaa379c2a0144883f3674c8d1e80e783e31f7633143febeb5c3f7 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 0a56d5a..70b3879 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:2622cdadac63220f5c09d6b2840e3ac320489cec6faf53cc1e94011e7eab37fd +oid sha256:8e332f41edb84ae6e74af02f569f6b0dec2ca1a94d4702a6d81ede4607f90056 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 e48df06..60d6e22 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:de8bc07b1d8ee444bc4a2af0794030005c56f292d8c86512e220316f2b17a7c3 +oid sha256:68c93bfc445b19b3695c99cd39b3fc30cd1cbec60738fe4a29e7e4a9663fd18f size 17541 diff --git a/Game/GigLine/Content/Hollywood/Theatre/SM_Trim_BladeSign.uasset b/Game/GigLine/Content/Hollywood/Theatre/SM_Trim_BladeSign.uasset index 7d97515..af8adb6 100644 --- a/Game/GigLine/Content/Hollywood/Theatre/SM_Trim_BladeSign.uasset +++ b/Game/GigLine/Content/Hollywood/Theatre/SM_Trim_BladeSign.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3ba3d7ac8b9ba43c83f7bca84b01d2bdd802a6e49d721a03c91672bd669843d1 +oid sha256:5a24b9658538cfc154da6b4808ffec148a50aec97d1fa8791a048b5625dd8d57 size 72330 diff --git a/Game/GigLine/Content/Hollywood/Theatre/SM_Trim_BladeSignBracket.uasset b/Game/GigLine/Content/Hollywood/Theatre/SM_Trim_BladeSignBracket.uasset index 6a50acd..d6d3c09 100644 --- a/Game/GigLine/Content/Hollywood/Theatre/SM_Trim_BladeSignBracket.uasset +++ b/Game/GigLine/Content/Hollywood/Theatre/SM_Trim_BladeSignBracket.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:551224fcdf597a1cb4c4ae12fd2f5c5d0d67800d16f0ff16d3f8723c745e26ff +oid sha256:30eb9df44bdec11dc680e773d7469d50d22f2d9d590d399b686a465aa1964290 size 72466 diff --git a/Game/GigLine/Content/Hollywood/Theatre/SM_Trim_BladeSignFrame.uasset b/Game/GigLine/Content/Hollywood/Theatre/SM_Trim_BladeSignFrame.uasset index b51f07f..5751f5d 100644 --- a/Game/GigLine/Content/Hollywood/Theatre/SM_Trim_BladeSignFrame.uasset +++ b/Game/GigLine/Content/Hollywood/Theatre/SM_Trim_BladeSignFrame.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0ebdf21e52c475de97950ac636133ef3407dae6a32adef1d70317aa9484be5dc +oid sha256:7f36cbfda57284bee28efc58064a915d9bff3dde3da357e41f6a26615154602b size 72406 diff --git a/Game/GigLine/Content/Hollywood/Theatre/SM_Trim_MarqueeCanopy.uasset b/Game/GigLine/Content/Hollywood/Theatre/SM_Trim_MarqueeCanopy.uasset index 7230223..d85f6bc 100644 --- a/Game/GigLine/Content/Hollywood/Theatre/SM_Trim_MarqueeCanopy.uasset +++ b/Game/GigLine/Content/Hollywood/Theatre/SM_Trim_MarqueeCanopy.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:696f90c246d4ce2cdd526c11cfce9082bc6c2ae215dc5c20216ad488eeac2aa1 +oid sha256:9ba950e934e25a8fa6639b5bb0f4b285f4da3d27c393434ada7636d858192d40 size 72370 diff --git a/Game/GigLine/Content/Hollywood/Theatre/SM_Trim_MarqueeFascia.uasset b/Game/GigLine/Content/Hollywood/Theatre/SM_Trim_MarqueeFascia.uasset index e29c8ff..63239cd 100644 --- a/Game/GigLine/Content/Hollywood/Theatre/SM_Trim_MarqueeFascia.uasset +++ b/Game/GigLine/Content/Hollywood/Theatre/SM_Trim_MarqueeFascia.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e3d573014075d06f373e11b07cd16ca6f6d27e52067119929c274ca3b0eaa9b8 +oid sha256:1d94bcc8abadee6885774beb4a9e477ed613625906717fffd12eb983fc098a0e size 72438 diff --git a/Game/GigLine/Content/Hollywood/Theatre/SM_Trim_MarqueeSoffit.uasset b/Game/GigLine/Content/Hollywood/Theatre/SM_Trim_MarqueeSoffit.uasset index bfebe19..abe6073 100644 --- a/Game/GigLine/Content/Hollywood/Theatre/SM_Trim_MarqueeSoffit.uasset +++ b/Game/GigLine/Content/Hollywood/Theatre/SM_Trim_MarqueeSoffit.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:123283642a811e9ba202127a3da4b30e7b4b6dc2c2629a24497f4e8eaf352893 +oid sha256:3766be668086908c09c2478aafad6a63bfd72743f801fa365fb13089d63c5cbc size 72413 diff --git a/Game/GigLine/Content/Test/ReviewMap.umap b/Game/GigLine/Content/Test/ReviewMap.umap index dc7c1bf..8312a66 100644 --- a/Game/GigLine/Content/Test/ReviewMap.umap +++ b/Game/GigLine/Content/Test/ReviewMap.umap @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:58ee12bbe157aa0bdfd30fcf43f4a6d80fac644790ee79ec408a384bb9b9dcfd +oid sha256:3a7e7415b2def35efd7bdecaa3e8e7dc88b11a68c7d7db51defa43e166e93a60 size 30542 diff --git a/Game/GigLine/Source/GigLine/GigLineVehicle.cpp b/Game/GigLine/Source/GigLine/GigLineVehicle.cpp index 5e58e1d..081d460 100644 --- a/Game/GigLine/Source/GigLine/GigLineVehicle.cpp +++ b/Game/GigLine/Source/GigLine/GigLineVehicle.cpp @@ -36,6 +36,68 @@ AGigLineVehicle::AGigLineVehicle() } } +void AGigLineVehicle::BuildVisuals() +{ + // One component per authored system: body, glass, front and rear lights, mirrors and + // the four wheels. Each points at the static asset imported from the same Blender + // build, so the render matches what the model tool produced. + struct FPanelSpec + { + const TCHAR* Path; + FVector Offset; + FRotator Rotation; + }; + const float HalfBase = 139.0f; // wheelbase 278 cm / 2 + const float HalfTrack = 81.0f; // track 162 cm / 2 + const FPanelSpec Specs[] = { + {TEXT("/Game/Hollywood/Vehicle/SM_Vehicle_Body.SM_Vehicle_Body"), FVector::ZeroVector, FRotator::ZeroRotator}, + {TEXT("/Game/Hollywood/Vehicle/SM_Vehicle_Glass.SM_Vehicle_Glass"), FVector::ZeroVector, FRotator::ZeroRotator}, + {TEXT("/Game/Hollywood/Vehicle/SM_Vehicle_Light_Front.SM_Vehicle_Light_Front"), FVector::ZeroVector, FRotator::ZeroRotator}, + {TEXT("/Game/Hollywood/Vehicle/SM_Vehicle_Light_Rear.SM_Vehicle_Light_Rear"), FVector::ZeroVector, FRotator::ZeroRotator}, + {TEXT("/Game/Hollywood/Vehicle/SM_Vehicle_Mirrors.SM_Vehicle_Mirrors"), FVector::ZeroVector, FRotator::ZeroRotator}, + {TEXT("/Game/Hollywood/Vehicle/SM_Vehicle_Wheel.SM_Vehicle_Wheel"), FVector(HalfBase, HalfTrack, -16.f), FRotator::ZeroRotator}, + {TEXT("/Game/Hollywood/Vehicle/SM_Vehicle_Wheel.SM_Vehicle_Wheel"), FVector(HalfBase, -HalfTrack, -16.f), FRotator::ZeroRotator}, + {TEXT("/Game/Hollywood/Vehicle/SM_Vehicle_Wheel.SM_Vehicle_Wheel"), FVector(-HalfBase, HalfTrack, -16.f), FRotator::ZeroRotator}, + {TEXT("/Game/Hollywood/Vehicle/SM_Vehicle_Wheel.SM_Vehicle_Wheel"), FVector(-HalfBase, -HalfTrack, -16.f), FRotator::ZeroRotator}, + }; + + int32 Index = 0; + for (const FPanelSpec& Spec : Specs) + { + if (UStaticMesh* Mesh = LoadObject(nullptr, Spec.Path)) + { + UStaticMeshComponent* Component = NewObject(this, + *FString::Printf(TEXT("Panel_%d"), Index)); + // Attach to the actor root rather than to the physics mesh, so the visuals are + // independent of the simulated component's own state. + Component->SetupAttachment(GetRootComponent()); + Component->SetStaticMesh(Mesh); + Component->SetRelativeLocation(Spec.Offset); + Component->SetRelativeRotation(Spec.Rotation); + Component->SetCollisionEnabled(ECollisionEnabled::NoCollision); + Component->SetMobility(EComponentMobility::Movable); + Component->RegisterComponent(); + Panels.Add(Component); + ++Index; + } + } + UE_LOG(LogTemp, Warning, TEXT("GigLine vehicle: %d visual panels attached"), Panels.Num()); + for (int32 PanelIndex = 0; PanelIndex < Panels.Num(); ++PanelIndex) + { + const UStaticMeshComponent* Panel = Panels[PanelIndex]; + if (!Panel) + { + continue; + } + const FVector Where = Panel->GetComponentLocation(); + const FBoxSphereBounds B = Panel->Bounds; + UE_LOG(LogTemp, Warning, + TEXT("GigLine vehicle: panel %d at (%.0f,%.0f,%.0f) visible=%d extent=%.0f"), + PanelIndex, Where.X, Where.Y, Where.Z, + Panel->IsVisible() ? 1 : 0, B.BoxExtent.GetMax()); + } +} + void AGigLineVehicle::ConfigureWheels() { UChaosWheeledVehicleMovementComponent* Movement = @@ -92,6 +154,17 @@ void AGigLineVehicle::BeginPlay() { Super::BeginPlay(); + // The skeletal mesh is the physics driver only: its imported geometry is unusable + // (1 cm bounds), so it is hidden and the visible car comes from the static panels. + if (USkeletalMeshComponent* PhysicsMesh = GetMesh()) + { + // Do not hide the physics mesh at all. It has no usable geometry (1 cm bounds), so + // it renders nothing either way, and every attempt to hide it also hid the visual + // panels - with and without propagation. Leaving it visible avoids the fight. + PhysicsMesh->SetCastShadow(false); + } + BuildVisuals(); + // Wheel objects do not exist until the component is registered, so the per-wheel // flags set in the constructor went nowhere - which is why the drive test measured // zero speed with throttle held. Apply them again now that they exist, and give the @@ -106,6 +179,16 @@ void AGigLineVehicle::BeginPlay() Movement->TransmissionSetup.bUseAutomaticGears = true; Movement->TransmissionSetup.FinalRatio = 3.5f; Movement->SetThrottleInput(0.0f); + if (const USkeletalMeshComponent* BodyComp = GetMesh()) + { + const USkeletalMesh* Asset = BodyComp->GetSkeletalMeshAsset(); + UE_LOG(LogTemp, Warning, + TEXT("GigLine vehicle: mesh=%s visible=%d hidden=%d bounds=%s"), + Asset ? *Asset->GetName() : TEXT("NONE"), + BodyComp->IsVisible() ? 1 : 0, + BodyComp->bHiddenInGame ? 1 : 0, + *BodyComp->Bounds.BoxExtent.ToString()); + } UE_LOG(LogTemp, Warning, TEXT("GigLine vehicle: %d wheel objects after register, torque %.0f"), Movement->Wheels.Num(), Movement->EngineSetup.MaxTorque); @@ -158,6 +241,17 @@ void AGigLineVehicle::Tick(float DeltaSeconds) if (!bSettleReported && SettleElapsed > 3.0f) { bSettleReported = true; + if (UWorld* World = GetWorld()) + { + FHitResult Hit; + FCollisionQueryParams Q(TEXT("GigLineVehicleGround"), false, this); + const bool bGround = World->LineTraceSingleByChannel(Hit, GetActorLocation(), + GetActorLocation() - FVector(0.f, 0.f, 2000.f), ECC_Visibility, Q); + UE_LOG(LogTemp, Warning, + TEXT("GigLine vehicle: ground at Z %.0f cm, actor %.0f cm, height above ground %.0f cm"), + bGround ? Hit.ImpactPoint.Z : -9999.f, GetActorLocation().Z, + bGround ? GetActorLocation().Z - Hit.ImpactPoint.Z : -9999.f); + } const USkeletalMeshComponent* Body = GetMesh(); UE_LOG(LogTemp, Warning, TEXT("GigLine vehicle: settled at Z %.0f cm, simulating=%d, speed=%.0f cm/s"), diff --git a/Game/GigLine/Source/GigLine/GigLineVehicle.h b/Game/GigLine/Source/GigLine/GigLineVehicle.h index 9d38fe8..1673300 100644 --- a/Game/GigLine/Source/GigLine/GigLineVehicle.h +++ b/Game/GigLine/Source/GigLine/GigLineVehicle.h @@ -29,6 +29,18 @@ public: virtual void BeginPlay() override; virtual void Tick(float DeltaSeconds) override; + /** + * Visual panels, as static mesh components. + * + * The skeletal vehicle asset imported with no usable geometry (runtime bounds of + * 1 cm), so the car was invisible in the scene while its physics body still cast a + * shadow - the "no vehicle in scene" report. The static assets are correct (body + * 476 x 176 x 128 cm), so the visible car is assembled from them and the skeletal + * mesh stays as the physics/animation driver only. + */ + UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Visual") + TArray> Panels; + /** True once the vehicle reports a forward speed above a walking pace. */ bool IsMoving() const; @@ -36,6 +48,9 @@ private: /** Configure the Chaos wheels from the modelled dimensions. */ void ConfigureWheels(); + /** Attach the visible panels from the imported static systems. */ + void BuildVisuals(); + float DriveElapsed = 0.f; bool bDriveReported = false; FVector DriveStart = FVector::ZeroVector; diff --git a/Screenshots/README.md b/Screenshots/README.md index 598453f..3e2d684 100644 --- a/Screenshots/README.md +++ b/Screenshots/README.md @@ -26,6 +26,7 @@ Every shot is embedded below, in order, so the whole review happens in this file | 6 | [Third-person body](#6-third-person-body) | ☑ 2026-11-09 | ☑ 2026-11-09 | | 7 | [Third-person front](#7-third-person-front) | ☑ 2026-11-09 | ☑ 2026-11-09 | | 8 | [Third-person walk](#8-third-person-walk) | ☑ 2026-11-09 | ☑ 2026-11-09 | +| 9 | [Vehicle](#9-vehicle) | ☐ FAIL 2026-11-09 | ☐ pending | **Verified** is what `--verify` reports: the frame is not blank, is the right size, and has tonal range. **Approved** is the owner's verdict, recorded here. Each shot also has an **expectation** in [`Tools/visual_targets.json`](../Tools/visual_targets.json) describing the content it must show. diff --git a/Screenshots/demo/review-demo-crossing.png b/Screenshots/demo/review-demo-crossing.png index 1f29922..308e3cc 100644 --- a/Screenshots/demo/review-demo-crossing.png +++ b/Screenshots/demo/review-demo-crossing.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:731f2faa63389dbee36a8358ff41abac69a74e849213216a0a83abe6cf85c402 -size 3057777 +oid sha256:cb705199f2074f35d2e11bd2bbcdce2928a67f119ee1928c926559afe176fb29 +size 3001385 diff --git a/Screenshots/demo/review-demo-north-buildings.png b/Screenshots/demo/review-demo-north-buildings.png index b2fa858..426ea8d 100644 --- a/Screenshots/demo/review-demo-north-buildings.png +++ b/Screenshots/demo/review-demo-north-buildings.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:74f38c5b32ec809021b2995f0d5bf1b228353094a686e3a448eda11ae9615ce9 -size 2614266 +oid sha256:d89867fb1bec5a22b9eafac29018bc26a9fa65e95f209b612cf3d6fb6d3222e7 +size 2613417 diff --git a/Screenshots/demo/review-demo-retail-frontage.png b/Screenshots/demo/review-demo-retail-frontage.png index 646d086..0ef323f 100644 --- a/Screenshots/demo/review-demo-retail-frontage.png +++ b/Screenshots/demo/review-demo-retail-frontage.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:05cda3f01c86933282fc3fbeacde75913386b628ee8fa565a11bbd6c4701af6e -size 2487940 +oid sha256:d044e2762894cd759af9c1b5a917f222dbc0a463612afffd2da8129c9c75a099 +size 2488576 diff --git a/Screenshots/demo/review-demo-spawn-view.png b/Screenshots/demo/review-demo-spawn-view.png index bae3463..cf5092b 100644 --- a/Screenshots/demo/review-demo-spawn-view.png +++ b/Screenshots/demo/review-demo-spawn-view.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:acad766685069d61f9bf0671d040bc0983d36d0f3f904f50c8988aaf00db90f1 -size 2882484 +oid sha256:2ad3cda4213a129d231494a55904661116bfcfd79c36b73039a2330b9dfa7262 +size 2883573 diff --git a/Screenshots/demo/review-demo-street-level.png b/Screenshots/demo/review-demo-street-level.png index 3668af9..16ee34f 100644 --- a/Screenshots/demo/review-demo-street-level.png +++ b/Screenshots/demo/review-demo-street-level.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6d94e22d0a86a36b9f6ce2192dc9ba748d57776def5de615f988e5469983f67e -size 2798239 +oid sha256:1cc0996bc7006af844f411f87cf5fc6aff4cf6e28ed7b0555762ebe00cb84c09 +size 2792875 diff --git a/Screenshots/demo/review-demo-third-person-front.png b/Screenshots/demo/review-demo-third-person-front.png index df5c0dd..1280665 100644 --- a/Screenshots/demo/review-demo-third-person-front.png +++ b/Screenshots/demo/review-demo-third-person-front.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:147af27e6dac9ab1bb5fc366f5fece894c3f845da67a00d0682b576900953ed0 -size 2794138 +oid sha256:8e17116389d1d4c09fe5da30ec51801f1244e71aea99ca637f4ee51e548ac4f9 +size 2752714 diff --git a/Screenshots/demo/review-demo-third-person-walk.png b/Screenshots/demo/review-demo-third-person-walk.png index 306ed77..79518fa 100644 --- a/Screenshots/demo/review-demo-third-person-walk.png +++ b/Screenshots/demo/review-demo-third-person-walk.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f9588e860a668a8b0e6fbe2b699f8bb5614672653a9738235d0e8b916a9a0939 -size 2173213 +oid sha256:c0ef12f46155409e6d57129c799077ef098a5b474d6d3ec8d5ee18537fe27a97 +size 2255600 diff --git a/Screenshots/demo/review-demo-third-person.png b/Screenshots/demo/review-demo-third-person.png index 9c0b403..a8e75e5 100644 --- a/Screenshots/demo/review-demo-third-person.png +++ b/Screenshots/demo/review-demo-third-person.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5aa4c6b6cabdc38fdaef8d1aaebb897eefae01f4001ff873fdadd57c3db968bd -size 2974710 +oid sha256:8890193319982cf48753481429bed073f702fd790235db44b50d368caa8df4ef +size 2973077 diff --git a/Screenshots/demo/review-demo-vehicle.png b/Screenshots/demo/review-demo-vehicle.png new file mode 100644 index 0000000..e7afdf8 --- /dev/null +++ b/Screenshots/demo/review-demo-vehicle.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c71c205eff7a60692b1b9a2bb6e5a5b710153b65c3cf737fff8db3aa07c3d6a9 +size 3002759 diff --git a/TODO.md b/TODO.md index 3acf57b..18fd4b9 100644 --- a/TODO.md +++ b/TODO.md @@ -21,6 +21,7 @@ Actionable task list for this project. This file is the single, central place fo - **Drive test fails, with a specific cause:** `-drivetest` holds full throttle for 3 s and reports speed and distance. Result: `speed=0 cm/s, travelled 2.2 m -> FAIL`, and BeginPlay logs **`0 wheel objects after register`** while the component reports 4 wheel setups. The setups exist but no wheels are created from them, so there is nothing to apply torque to. - **Next:** confirm the skeleton's bone names match the setups (`Wheel_FL`, `Wheel_FR`, `Wheel_RL`, `Wheel_RR`) - a name mismatch silently produces zero wheels - and give the front and rear pairs their own `UChaosVehicleWheel` subclasses rather than the base class, which is what the setups point at today. - **Also open:** LOD group wiring, enter/exit, driving route, handling. +- [A] Fix the vehicle not rendering in the scene. **Chased to a strong clue, not yet solved.** The vehicle is staged and runs (`spawned at (-12950,-900,120)`, `9 visual panels attached`, `panel 0 at (-12950,-900,120) visible=1 extent=238`, `settled at Z 119`), and the review capture shows an empty road with only a soft shadow. `Tools/visual_loop.py --verify` passes the frame; `Tools/judge_screenshot.py` returns `verdict=no confidence=1.0`. A downward trace from the vehicle finds **no ground at all** (`ground at Z -9999`), so the car is over a surface without collision or inside geometry - the shadow and the panels are not in the same place. Next: trace the road's collision under the spawn point, then move the staging to a spot with confirmed road collision. - [ ] Implement enter/exit interaction. - [ ] Build a closed driving route with boundaries. - [ ] Tune basic handling to a drivable state. diff --git a/Tools/ue_build_review_map.py b/Tools/ue_build_review_map.py index 91e932f..d65943e 100644 --- a/Tools/ue_build_review_map.py +++ b/Tools/ue_build_review_map.py @@ -289,6 +289,10 @@ try: # Level horizon for the same reason: a block elevation is read by its # verticals, and a pitched camera makes them lean. ("demo-third-person-walk", unreal.Vector(-12940, -980, 560), unreal.Vector(-13336, -980, 500), 55.0), + # The sedan, staged on the carriageway at (-12950, -900). Three-quarter front + # view from the road so both the body and the wheels are visible: a side-on + # or rear view hides the wheel stances that the build is judged on. + ("demo-vehicle", unreal.Vector(-12250, -1600, 420), unreal.Vector(-12950, -900, 120), 50.0), ("demo-spawn-view", unreal.Vector(-13336, -3100, 620), unreal.Vector(-13336, 1300, 620), 48.0), # Street level, from the north sidewalk: the old camera sat at Y -400, # inside the facade body (which spans Y -1457..-200), so it looked at diff --git a/Tools/visual_targets.json b/Tools/visual_targets.json index 422c018..b3e2cdf 100644 --- a/Tools/visual_targets.json +++ b/Tools/visual_targets.json @@ -96,6 +96,16 @@ "Art/reference/hollywood/el-capitan-facade-day-wikimedia-2009-10-27.jpg" ], "expect": "The player body mid-stride in profile: legs apart, arms counter-swinging, walking along the sidewalk" + }, + { + "name": "demo-vehicle", + "shot": "Screenshots/demo/review-demo-vehicle.png", + "size": [ + 1920, + 1080 + ], + "references": [], + "expect": "A red sedan parked on the road seen from the front three-quarter: body, cabin, four wheels visible, sitting on the surface rather than floating or sunk" } ] }