Internal_stateInternal state epoch from the strategy that produced this result. Used by future memoising decorators to invalidate cached results on strategy state changes (renderer attach, context loss, etc.). Callers SHOULD NOT rely on this for application logic.
Echo of PickParams.canvasPos when a canvas pick was used.
True iff the surface ray hit or a snap landed.
GPU-only. Local-space hit point on the picked mesh. null from BVH.
ID of the picked mesh, when the backend exposes one.
ID of the picked SceneObject. From snap when snap is set and the renderer resolved an object id for it; otherwise from the surface ray.
World-space ray direction used for the test. Always populated.
World-space ray origin used for the test. Always populated.
Snap landing. null when snap wasn't requested, GPU was
unavailable, or the snap radius found nothing.
Which backend produced this result.
BVH-only. Index of the hit triangle (offset into geometry indices
÷ 3). -1 when n/a (GPU branch, or ray miss).
GPU-only. UV at the surface hit. null when not requested or not available.
The view this pick was scoped to.
GPU-only. World-space normal at the surface hit. null from BVH.
Best-available world-space hit point. Snap-landed point when
snap is set, otherwise the surface-ray hit. null when
neither was found.
Result of one PickStrategy.pick call. Plain immutable struct — unlike the renderer's transient
PickResult, the picker returns a fresh object per call that callers can keep, serialise, etc.Field semantics:
truewhen either a surface ray hit or a snap landed (or both). It is the single source of truth for "did anything come back".result.worldPosget the most accurate point available without having to branch on snap.Fields that don't apply to the chosen backend are
null(BVH picks setworldNormal: nullfor example — the BVH primitive doesn't compute normals). The strategyUsed field tells you which backend ran, so this isn't ambiguous.