Queries (sim-free)
Ask spatial questions without running a simulation: is this inside that zone, are these points touching, what does this ray hit.
Query nodes answer questions about where things are without gravity, mass or a solver stepping every frame. They are fast, they run on ordinary graph geometry, and they suit game-style logic: pickups, kill zones, checkpoints, doors, contact sparks and aiming.
Trigger zones
The Trigger node answers the simplest spatial question: which of these elements are inside that region?
Feed it a set of points as elements and a zone. The zone can be a primitive shape, an Analytic shape, a mesh, a raster or a Distance Field, all converted to a region automatically. Anything inside comes out the inside pin, and every element is tagged with its signed @distance to the zone's surface, so you can fade, scale or colour by proximity.
The zone is evaluated wherever the query points are, so a moving zone costs nothing extra. Animate it or drive it from a Pointer and the test follows.
The radius parameter controls how the test is done. Leave it at 0 for a pure point test, where the element's centre must be inside. Raise it to treat each element as a small sphere, so a point counts as inside the moment its edge touches the zone.
| Parameter | Type | Default | What it does |
|---|---|---|---|
elements | Collection | — | Elements to test against the zone (points; carry @id for enter/exit tracking) |
zone | SDF | — | Zone region (primitive / CSG / mesh / raster — auto-converted to SDF) |
radius | Number | 0 | Inside if signed distance < radius (0 = point test, >0 = sphere) |
track_identity | Boolean | false | Diff the @id column frame-to-frame for enter/exit events (requires @id on elements) |
opacity | Number | 1 | Layer opacity (0 = transparent, 1 = opaque). Editable, wirable, keyframable. |
Enter and exit events
Turn on Track identity and the Trigger remembers what was inside last frame. As long as the elements carry an @id, which points from the Points node and from a particle sim do, three extra streams appear:
entered, crossed in this frame
staying, was inside last frame and still is
exited, left this frame, carrying the element's last-known row so even a despawned object still surfaces here
That is what a pickup firing once on entry needs, or a checkpoint that triggers a sound the moment a runner crosses it.
Contact detection
Collision Detect goes further than a yes/no region test. It reports which points of one piece of geometry are touching the surface of another, with the contact detail.
Feed it a mesh as geometry_a and a surface as geometry_b, again a mesh, Analytic shape, raster or Distance Field, all auto-converted. Any of A's points within the threshold distance of B's surface come out the contacts pin, each carrying @contact_dist, the signed penetration depth where negative means the point is inside B, and @contact_N, the surface normal at the contact, which orients sparks, decals or splashes flat on the surface.
Use it to spawn effects exactly where things touch, snap geometry to a surface, or build a custom contact response, with nothing registered in a solver.
Collision Detect tests points against a surface rather than triangle against triangle. A point counts as touching when it is close enough to B's surface, which is lighter than true mesh intersection and right for most gameplay and effects work. It supports the same Track identity enter and exit streams as the Trigger.
| Parameter | Type | Default | What it does |
|---|---|---|---|
geometry_a | GPU Geometry | — | Mesh whose points are tested for contact with B |
geometry_b | SDF | — | Surface to collide against (mesh / CRC / raster — auto-converted to SDF) |
max_pairs | Number | 10000 | Maximum number of contacts to report |
threshold | Number | 0.100 | Report points whose signed distance to B is below this threshold |
track_identity | Boolean | false | Diff the @id column frame-to-frame for contact enter/exit (requires @id on geometry_a) |
opacity | Number | 1 | Layer opacity (0 = transparent, 1 = opaque). Editable, wirable, keyframable. |
Raycasts and overlaps
Physics Query casts rays and sweeps shapes against the colliders set up in a physics world. It covers aiming, line-of-sight, ground-snapping, and finding what is near a point.
It runs four kinds of query.
Raycast fires a ray from an origin in a direction and returns the first surface it hits.
ShapeCast sweeps a ball or box along a direction instead of an infinitely thin ray, which answers whether a character fits through a gap.
PointQuery finds the closest collider surface to a point.
Overlap finds everything within a radius of a point.
Every query reports whether it hit, the hit point, the hit normal, the distance, which body was hit, an overlap count, and whether the origin started inside a collider. Wire those into expressions or other nodes.
Physics Query tests against the colliders registered in a physics world, the static colliders and bodies you have set up, not arbitrary graph geometry. To query a loose mesh or shape with no solver involved, use Trigger or Collision Detect, which take any geometry directly.
| Parameter | Type | Default | What it does |
|---|---|---|---|
world_id | String | "default" | Physics world identifier |
query_type | String | "Raycast" | Query type: Raycast, ShapeCast, PointQuery, Overlap |
origin_x | Number | 0 | Query origin X |
origin_y | Number | 100 | Query origin Y |
origin_z | Number | 0 | Query origin Z |
direction_x | Number | 0 | Direction X (Raycast/ShapeCast) |
direction_y | Number | -1 | Direction Y (Raycast/ShapeCast) |
direction_z | Number | 0 | Direction Z (Raycast/ShapeCast) |
max_distance | Number | 1000 | Maximum query distance |
query_shape | String | "Ball" | Shape for ShapeCast/Overlap: Ball, Cuboid |
query_radius | Number | 5 | Radius for Ball shape |
query_half_x | Number | 5 | Half-extent X for Cuboid shape |
query_half_y | Number | 5 | Half-extent Y for Cuboid shape |
query_half_z | Number | 5 | Half-extent Z for Cuboid shape |
opacity | Number | 1 | Layer opacity (0 = transparent, 1 = opaque). Editable, wirable, keyframable. |
Choosing between them
Is it inside? Trigger. A boolean region test with proximity distance and enter/exit events.
Are these touching, and where? Collision Detect. Contact points with penetration depth and surface normal.
What does this ray hit? Physics Query. Raycasts, shape sweeps and overlaps against a physics world.
Trigger and Collision Detect need no solver at all, and Physics Query reads a world without stepping it, so all three are cheap to scatter through a graph for interactive behaviour.