Builds the sorted render list for root's subtree into out using §43
interpolated render poses at alpha, and returns out.
// per rendered frame, between fixed steps: buildInterpolatedRenderList(scene, poses, time.interpolationAlpha, list);
Identical to buildRenderList in traversal, filtering, sorting, and
pooling; the difference is each item's worldMatrix (and, for a skinned
mesh, its joint palette), which is composed from interpolated local poses
root-first (see composeRenderPoseMatrix) instead of a reference to
the node's resolved world matrix. This is §43's fix for rendering faster than
the simulation steps: at alpha = 0 every item matches the previous captured
pose, at alpha = 1 the current one, and in between position lerps and
rotation slerps. alpha is clamped to [0, 1] by PoseBuffer.
Nodes the buffer does not track — static geometry, anything moved directly by
the application — contribute their live local transform at every alpha, so
a mixed scene needs no bookkeeping: track what the simulation moves, leave
the rest alone.
Because the poses are composed into pooled matrices, this function never
writes scene state (§43: the render transform must not feed back into the
simulation). It also does not need resolveWorldTransforms to have run: it
derives every matrix itself, at O(depth) per item.
layerMask filters exactly as it does for buildRenderList — same
default, same semantics, same development-only §85 check — and interacts with nothing else
here: a filtered node contributes no item, so no render pose is composed for
it either.
Builds the sorted render list for
root's subtree intooutusing §43 interpolated render poses atalpha, and returnsout.Identical to buildRenderList in traversal, filtering, sorting, and pooling; the difference is each item's
worldMatrix(and, for a skinned mesh, its joint palette), which is composed from interpolated local poses root-first (seecomposeRenderPoseMatrix) instead of a reference to the node's resolved world matrix. This is §43's fix for rendering faster than the simulation steps: atalpha = 0every item matches the previous captured pose, atalpha = 1the current one, and in between position lerps and rotation slerps.alphais clamped to[0, 1]byPoseBuffer.Nodes the buffer does not track — static geometry, anything moved directly by the application — contribute their live local transform at every alpha, so a mixed scene needs no bookkeeping: track what the simulation moves, leave the rest alone.
Because the poses are composed into pooled matrices, this function never writes scene state (§43: the render transform must not feed back into the simulation). It also does not need
resolveWorldTransformsto have run: it derives every matrix itself, atO(depth)per item.layerMaskfilters exactly as it does for buildRenderList — same default, same semantics, same development-only §85 check — and interacts with nothing else here: a filtered node contributes no item, so no render pose is composed for it either.