diff --git a/Game/GigLine/Content/Test/VehicleProbe_c.umap b/Game/GigLine/Content/Test/VehicleProbe_c.umap new file mode 100644 index 0000000..d587372 --- /dev/null +++ b/Game/GigLine/Content/Test/VehicleProbe_c.umap @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7145f86a02e88dba0dc43812abe1f07361ec3d98a752335130fa6d9747fd0fb6 +size 44244 diff --git a/Game/GigLine/Content/Test/VehicleProbe_d.umap b/Game/GigLine/Content/Test/VehicleProbe_d.umap new file mode 100644 index 0000000..baf9310 --- /dev/null +++ b/Game/GigLine/Content/Test/VehicleProbe_d.umap @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8babe4fbba8d059d75cb81bb5999e87f64155ad2aff72219e7f3499e4202d6f0 +size 44546 diff --git a/TODO.md b/TODO.md index 29f2dc6..b8ff70d 100644 --- a/TODO.md +++ b/TODO.md @@ -91,7 +91,23 @@ So `Terrain_DEM` is enough to reproduce it in a map that otherwise works. Two fi That means the ejection is not the convex hull and not the collision channel; the next probe is whether it is the _complex_ triangles (inverted winding pushing bodies out) - test by setting `Terrain_DEM` to **no collision at all** in the probe map and confirming the pawn falls. -### Bisect plan for the next pass +### Where it stands: deferred to its own session + +Three fixes were tried after the terrain bisect and **none changed the behaviour**: + +1. clearing the auto-generated convex hulls from all 76 site/street meshes; +2. setting the terrain component to `QueryOnly`; +3. staging the terrain in the probe map with **collision disabled entirely**. + +The pawn still rises in every case, so the fault is not the terrain's convex hull, not its collision channel, and not even its collision. The player is unaffected throughout - re-checked after each fix, and the character still stands on `Sidewalk_North_07` at 157 cm. + +Deferred rather than guessed. What a fresh session needs: + +- the probe workflow is in place: `Tools/ue_vehicle_probe_map.py` with `GIGLINE_PROBE_ASSET` and `GIGLINE_PROBE_NOCOLLISION`, `Tools/ue_clear_simple_collision.py` for the hull hygiene; +- the vehicle diagnostics are switches: `-probes`, `-profile`, `-novehmover`, plus the always-on velocity clamp, overlap list and velocity profile; +- the next question is _why a map carrying a 279 m static mesh changes a physics body's behaviour when that mesh has no collision at all_, which points at streaming, memory layout or the physics scene's broadphase rather than at collision authoring. + +### Bisect plan (kept for the next session) 1. Spawn the same pawn in `ReviewMap` (flat 160 m floor, no slices, no UCX ground) and repeat the profile. Flies there too -> the asset/component is at fault. Settles there -> something in `DemoMap` (the UCS slabs, the terrain, or the world settings) drives it. 2. In parallel, spawn a stock `AWheeledVehiclePawn` with `SK_Vehicle_Sedan` and default settings in the same spot: if the stock pawn settles, the difference is in `AGigLineVehicle`'s setup (mass override, stability control, our movement subclass). @@ -99,7 +115,7 @@ That means the ejection is not the convex hull and not the collision channel; th ### Tasks -- [ ] Give `SK_Vehicle_Sedan` a physics asset whose single chassis body matches the car's box and is positioned below the shell, then confirm the pawn settles on the road instead of launching. +- [D] Give `SK_Vehicle_Sedan` a physics asset whose single chassis body matches the car's box and is positioned below the shell, then confirm the pawn settles on the road instead of launching. - [ ] Confirm `Wheels.Num()` becomes 4 once the vehicle is created; log it at the settle check. - [ ] Only then re-stage the pawn, re-add enter/exit and the driving route. @@ -148,7 +164,23 @@ So `Terrain_DEM` is enough to reproduce it in a map that otherwise works. Two fi That means the ejection is not the convex hull and not the collision channel; the next probe is whether it is the _complex_ triangles (inverted winding pushing bodies out) - test by setting `Terrain_DEM` to **no collision at all** in the probe map and confirming the pawn falls. -### Bisect plan for the next pass +### Where it stands: deferred to its own session + +Three fixes were tried after the terrain bisect and **none changed the behaviour**: + +1. clearing the auto-generated convex hulls from all 76 site/street meshes; +2. setting the terrain component to `QueryOnly`; +3. staging the terrain in the probe map with **collision disabled entirely**. + +The pawn still rises in every case, so the fault is not the terrain's convex hull, not its collision channel, and not even its collision. The player is unaffected throughout - re-checked after each fix, and the character still stands on `Sidewalk_North_07` at 157 cm. + +Deferred rather than guessed. What a fresh session needs: + +- the probe workflow is in place: `Tools/ue_vehicle_probe_map.py` with `GIGLINE_PROBE_ASSET` and `GIGLINE_PROBE_NOCOLLISION`, `Tools/ue_clear_simple_collision.py` for the hull hygiene; +- the vehicle diagnostics are switches: `-probes`, `-profile`, `-novehmover`, plus the always-on velocity clamp, overlap list and velocity profile; +- the next question is _why a map carrying a 279 m static mesh changes a physics body's behaviour when that mesh has no collision at all_, which points at streaming, memory layout or the physics scene's broadphase rather than at collision authoring. + +### Bisect plan (kept for the next session) 1. Spawn the same pawn in `ReviewMap` (flat 160 m floor, no slices, no UCX ground) and repeat the profile. Flies there too -> the asset/component is at fault. Settles there -> something in `DemoMap` (the UCS slabs, the terrain, or the world settings) drives it. 2. In parallel, spawn a stock `AWheeledVehiclePawn` with `SK_Vehicle_Sedan` and default settings in the same spot: if the stock pawn settles, the difference is in `AGigLineVehicle`'s setup (mass override, stability control, our movement subclass). diff --git a/Tools/ue_vehicle_probe_map.py b/Tools/ue_vehicle_probe_map.py index 1d42f2e..48935b0 100644 --- a/Tools/ue_vehicle_probe_map.py +++ b/Tools/ue_vehicle_probe_map.py @@ -1,6 +1,6 @@ """Add one piece of demo content to ReviewMap and save it as a vehicle probe level. - GIGLINE_PROBE_ASSET=Terrain_DEM /UnrealEditor-Cmd \ + GIGLINE_PROBE_ASSET=Terrain_DEM [GIGLINE_PROBE_NOCOLLISION=1] /UnrealEditor-Cmd \ -run=pythonscript -script=/Tools/ue_vehicle_probe_map.py -nullrhi -unattended -nopause Why: the Chaos pawn falls correctly on ReviewMap's empty floor and is thrown upward everywhere in @@ -69,9 +69,15 @@ def main(): mesh = unreal.EditorAssetLibrary.load_asset(path) actor = unreal.EditorLevelLibrary.spawn_actor_from_class( unreal.StaticMeshActor, unreal.Vector(0.0, 0.0, 0.0)) - actor.get_component_by_class(unreal.StaticMeshComponent).set_static_mesh(mesh) + comp = actor.get_component_by_class(unreal.StaticMeshComponent) + comp.set_static_mesh(mesh) actor.set_actor_label(f"Probe_{wanted}") log(f"staged probe mesh {path} at the origin") + # GIGLINE_PROBE_NOCOLLISION=1 stages the same mesh with no collision at all, which separates + # "this mesh's collision ejects physics bodies" from "this mesh does something else". + if os.environ.get("GIGLINE_PROBE_NOCOLLISION", "").strip() == "1": + comp.set_collision_enabled(unreal.CollisionEnabled.NO_COLLISION) + log("probe mesh collision disabled") else: log("control run: no extra content")