test(vehicle): clamping the velocity to zero does not stop the rise - the transform is written
The decisive clamp: zero linear and angular velocity every frame for two seconds. t=0.25 Z=3220 vZ=0 | t=0.75 Z=3683 vZ=0 | t=1.25 Z=4197 vZ=0 It rises at ~1200 cm/s with velocity pinned to zero, so this is not a force, an impulse, or a bad initial state - all of those the clamp would have removed. Something calls a transform setter on the vehicle every frame. Our own source contains exactly one direct transform write outside the character (the shot actor's camera), so the writer is engine-side: the Chaos vehicle component driving UpdatedComponent from a vehicle state that was never created, or a skeletal-mesh transform update. Also diffed the two maps, since the pawn works in ReviewMap and not in DemoMap: kill_z, gravity, lights and partitioning are identical; DemoMap adds 593 static mesh actors, a height fog and a post-process volume, ReviewMap adds a shot actor and the character. Nothing in either list can write a transform, so the map difference is not in its actors or settings.
This commit is contained in:
1 parent
331e2016be
commit
387a4530de
78 files changed
+111
-76
No files matched your search
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -359,6 +359,17 @@ void AGigLineVehicle::Tick(float DeltaSeconds)
|
||||
}
|
||||
}
|
||||
|
||||
// Kill any injected velocity every frame for the first two seconds. If the pawn still rises, the
|
||||
// writer sets the transform directly; if it settles, the whole thing was one bad initial impulse.
|
||||
if (SettleElapsed < 2.0f)
|
||||
{
|
||||
if (USkeletalMeshComponent* Body = GetMesh())
|
||||
{
|
||||
Body->SetPhysicsLinearVelocity(FVector::ZeroVector);
|
||||
Body->SetPhysicsAngularVelocityInDegrees(FVector::ZeroVector);
|
||||
}
|
||||
}
|
||||
|
||||
// Velocity profile: an impulse shows as a spike at t=0, a force as steady growth.
|
||||
{
|
||||
static float NextSample = 0.0f;
|
||||
|
||||
@@ -63,6 +63,18 @@ DemoMap, 25 m above ground: Z 2496 -> 2664 -> 3068 -> 3434 vZ +1509
|
||||
|
||||
**So the Chaos rig is fine and `DemoMap` is what breaks it** - at any height, anywhere in that map, and not by contact (25 m in the air launches immediately). The next comparison is between the two maps' world settings and level actors: `ReviewMap` was built by `Tools/ue_build_review_map.py`, `DemoMap` by `Tools/ue_build_demo_map.py`, and the difference that matters is in what one stages and the other does not.
|
||||
|
||||
### The transform is written directly, not moved
|
||||
|
||||
Zeroing the body's linear and angular velocity **every frame** for two seconds changes nothing:
|
||||
|
||||
```
|
||||
t=0.25 Z=3220 vZ=0 t=0.75 Z=3683 vZ=0 t=1.25 Z=4197 vZ=0
|
||||
```
|
||||
|
||||
The actor keeps rising at ~1200 cm/s while its velocity is pinned to zero. **Something calls a transform setter on the vehicle every frame** - this is not a force, an impulse or a bad initial state, all of which the clamp would have removed.
|
||||
|
||||
`Game/GigLine/Source/GigLine/*.cpp` contains exactly one direct transform write outside the character (`GigLineShotActor` moves its camera), so the writer is engine-side: the Chaos vehicle component driving `UpdatedComponent` from a vehicle state that was never created, or a skeletal-mesh transform update.
|
||||
|
||||
### Bisect plan for the next pass
|
||||
|
||||
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.
|
||||
@@ -92,6 +104,18 @@ DemoMap, 25 m above ground: Z 2496 -> 2664 -> 3068 -> 3434 vZ +1509
|
||||
|
||||
**So the Chaos rig is fine and `DemoMap` is what breaks it** - at any height, anywhere in that map, and not by contact (25 m in the air launches immediately). The next comparison is between the two maps' world settings and level actors: `ReviewMap` was built by `Tools/ue_build_review_map.py`, `DemoMap` by `Tools/ue_build_demo_map.py`, and the difference that matters is in what one stages and the other does not.
|
||||
|
||||
### The transform is written directly, not moved
|
||||
|
||||
Zeroing the body's linear and angular velocity **every frame** for two seconds changes nothing:
|
||||
|
||||
```
|
||||
t=0.25 Z=3220 vZ=0 t=0.75 Z=3683 vZ=0 t=1.25 Z=4197 vZ=0
|
||||
```
|
||||
|
||||
The actor keeps rising at ~1200 cm/s while its velocity is pinned to zero. **Something calls a transform setter on the vehicle every frame** - this is not a force, an impulse or a bad initial state, all of which the clamp would have removed.
|
||||
|
||||
`Game/GigLine/Source/GigLine/*.cpp` contains exactly one direct transform write outside the character (`GigLineShotActor` moves its camera), so the writer is engine-side: the Chaos vehicle component driving `UpdatedComponent` from a vehicle state that was never created, or a skeletal-mesh transform update.
|
||||
|
||||
### Bisect plan for the next pass
|
||||
|
||||
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.
|
||||
|
||||
Reference in new issue
Block a user