CURATED WORKFLOW
Open only a portal aperture while retaining backing-wall collision elsewhere
game-or-shared-unknown; contact-modification support unresolved not runtime verifiedWorkflow ID: workflow.aperture-collision-filtering
Snapshot: 3ba1c69afc74a97f-7fcd0798fd6ea455
Prerequisites
- A wall collider and explicit aperture geometry
- Per-body/per-shape filter or contact hook if exposed
- A trace/query policy that can be tested independently of visual clipping
Ordered steps
| # | Action | State/evidence | Symbols |
|---|---|---|---|
| 1 | Resolve exact collision-filter and trace declarations; do not infer them from a similarly named wall component. | metadata-only Declaration and source evidence are retained, but availability is unresolved. | method:Sandbox.PhysicsTraceBuilder:WithCollisionRules(System.String,System.Boolean), method:Sandbox.SceneTrace:IgnoreGameObject(Sandbox.GameObject), method:Sandbox.SceneTrace:WithCollisionRules(System.String,System.Boolean), type:Sandbox.Collision, type:Sandbox.PhysicsTraceBuilder, type:Sandbox.SceneTrace |
| 2 | Test the aperture path and backing-wall path separately with the same body and query settings. | source-demonstrated Source examples/tests can establish conditions only for their demonstrated configuration. | method:Sandbox.PhysicsTraceBuilder:Capsule(Capsule,Vector3,Vector3), method:Sandbox.PhysicsTraceBuilder:Run(), method:Sandbox.SceneTrace:Capsule(Capsule,Vector3,Vector3), method:Sandbox.SceneTrace:Run(), type:Sandbox.Collision |
| 3 | Restore normal filters/contact handling after traversal and assert that global wall disabling was not used as acceptance. | unresolved No indexed declaration proves a game-safe aperture-only contact modification hook. | method:Sandbox.SceneTrace:WithCollisionRules(System.String,System.Boolean), property:Sandbox.Collision:Contact(), property:Sandbox.PhysicsBody:EnableSolidCollisions(), property:Sandbox.PhysicsShape:EnableSolidCollisions() |
Lifecycle and ordering
- Collision/trace queries must run in the physics/update phase that owns the body state.
- A render clip or stencil aperture has no effect on collision by itself.
State ownership
- The portal feature owns the aperture policy; the physics system owns collision resolution.
- Do not let a diagnostic ignore list become a global wall-collision policy.
Resource lifetime
- Temporary query filters and contact suppression must be scoped to the crossing/trace and restored immediately.
- A destination proxy must not silently inherit source filters without evidence.
Known failure modes
- Global wall ignore creates an unprotected gap.
- A broad trace ignore list can remove unrelated geometry.
- No exposed contact hook may exist for a narrow aperture; record an engine request instead of fabricating one.
Evidence and unresolved questions
curated; not a complete workflow graph
- Per-shape contact modification availability in the target build.
- Aperture-aware collision with partial traversal and simultaneous contacts.
Next useful probe: Compare direct collision, trace and contact callbacks for a narrow aperture and adjacent wall; assert unchanged wall collisions outside the aperture.