Skip to content

Networking: extend snapshot interpolation/reconciliation beyond TransformComponent #462

Closed

Description

@drsnuggles8

Problem

The netcode stack is strong, but SnapshotInterpolator interpolates only TransformComponent (Networking/Replication/SnapshotInterpolator.cpp), and client reconciliation blends only transforms. Animation state, rigidbody velocity, and other replicated component state aren't interpolated/reconciled — causing jitter on rotating / animated / physics-driven networked entities.

Proposed approach

  • Generalize interpolation/reconciliation to a registered set of interpolatable components (transform, velocity, animation state, key gameplay state) via the existing ComponentReplicator path.
  • Per-component interpolation policy (lerp / slerp / step) declared alongside replication.

Acceptance criteria

  • A networked animated / rotating / physics entity moves smoothly on remote clients (no per-snapshot popping).

Refinement of the existing (strong) netcode stack.

Score

capability: 3
craft: 3
stability: 2
decay: 1
effort: 3
confidence: 0.8
learning: 3
fun: 3
kano: performance
blocked_by: []
blocks: []

Rated per issue-scoring · score = confidence × (capability + craft + stability + decay) / effort, derived by the picker.

Activity

  1. drsnuggles8 commented on Jun 30, 2026

    @drsnuggles8
    OwnerAuthor

    @
    Implemented in #483.

    Acceptance criterion met — a networked animated / rotating / physics entity moves smoothly on remote clients (no per-snapshot popping):

    • Interpolation + reconciliation are now generalized to a data-driven ComponentInterpolationRegistry with per-component policies (lerp / slerp / step), built on the existing ComponentReplicator path.
    • Registered set: Transform (translation/scale lerp + rotation slerp), Rigidbody3D (velocity lerp, type/mass step), AnimationState (step). Adding more components later is a single Register() call.
    • The Functional test InterpolatedComponentsSmoothOnRemoteClientTest drives a real physics body (moving + spinning) through the actual EntitySnapshot → SnapshotInterpolator path on a separate client scene and asserts the pose blends smoothly between server snapshots (strictly interior, monotonic, no popping).

    The issue will auto-close when #483 merges.
    @

  2. added a commit that references this issue on Jun 30, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    architectureEngine architecture / cross-cutting designfeatureNew feature or request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions