public sealed class PickingRendererWhich object each pixel belongs to, drawn into a target and read back.
No guide page documents this yet — the page shows what the code says about itself.
Remarks
A render stage, not a raycast. Raycasting works for a box and stops working for a skinned mesh, an instanced forest, an alpha-cut leaf, a mesh the GPU deformed and anything drawn by a shader that moved its vertices. Drawing the ids with the same vertex path as the picture means what you click is what you see, by construction, for every kind of geometry there will ever be. Stride's editor picks the same way for the same reason.
Two passes, and they have to be two. A copy cannot be recorded inside a render pass, so the ids are drawn in a graphics pass and the one pixel under the pointer is copied in a transfer pass that reads what the first one wrote. The graph derives the order and the barrier from that read, which is the point of declaring it.
The drawing half is a RenderPassRenderer this owns rather than a pass this declares. Building the draw pass by hand would need CompositorFrame.Context, which is internal to Vixen.Rendering — and rightly so, since a draw context is the renderer's own plumbing. Composition is the seam SceneRenderer.BuildChild exists for, and it means the picking pass gets every fix the ordinary pass node gets.
⚠ Nothing is drawn on a frame nobody clicked. The pass is skipped when there is no request, so a viewport sitting still costs nothing — and because the render graph culls passes whose output nobody reads, forgetting to skip it would have been merely wasteful rather than wrong.
Fields and properties (8)
public required RenderView ViewThe view to draw from.
public required RenderStage StageThe stage that writes ids.
public required PickingBuffer BufferWhere the answers are collected.
public string IdTargetWhat the frame calls the id target.
public string DepthTargetWhat the frame calls the depth buffer the ids are tested against.
public ViewConstants? ConstantsThe per-view block to bind before drawing.
public RenderResourceAsset IdResourceThe texture declaration a compositor has to carry for IdTarget.
public RenderResourceAsset DepthResourceThe depth declaration a compositor has to carry for DepthTarget.
Methods (3)
protected override void Collect(GraphicsCompositor compositor)Declares the views and stages this node needs, before anything is culled.
protected override void Build(GraphicsCompositor compositor, CompositorFrame frame)Declares this node's render-graph passes.
public override string ToString()Returns a string that represents the current object.