Revisit-Consistent Generative Rendering

Closing the Loop: Training-Free Revisit Consistency for Autoregressive Generative Rendering

Wenchao Ma1,2, Changran Liu1, Haomiao Jiang1, & Sharon X. Huang2

1Roblox  2The Pennsylvania State University

TL;DR

Same depth in, same world out — even after a long detour

Conditioned on depth streamed from a 3D engine, our method re-renders the same structures when the camera comes back, far beyond the KV-cache horizon — with no post-training of the video model. It exploits only the correspondences the engine already provides: camera poses select what to remember, depth reprojection steers where to attend.

Teaser: pairs of first-visit and return frames. Self-Forcing changes the scene on return; our method re-renders the same structures.
Revisit-consistent autoregressive generative rendering. Each pair of rows shows one revisit clip: the generator renders a viewpoint at the first visit and again on return, far beyond its bounded KV-cache horizon. Self-Forcing invents a different appearance; ours re-renders the same structures.
Castle static/videos/teaser_castle.mp4

Castle — Reference · Depth · Self-Forcing · Ours. On return, Self-Forcing drifts; ours re-renders the same structures.

Plaza static/videos/teaser_plaza.mp4

Plaza — Reference · Depth · Self-Forcing · Ours. Untextured blockout geometry, dressed consistently across the loop.

Abstract

Abstract

Recent conditional video generation models have shown promising potential to transform 3D engine renderings, such as depth maps and untextured geometry, into photorealistic videos for gaming and immersive content creation. These applications require long-horizon auto-regressive generation that continuously synthesizes new frames while preserving a persistent 3D world. Auto-regressive generators synthesize video chunk by chunk with a bounded KV cache, so when the camera revisits a location after its context has been evicted, the model often regenerates inconsistent appearance, even though the conditioning renderings (e.g., depth) remain perfectly aligned with the underlying geometry.

We address this revisit inconsistency without any post-training by exploiting correspondences the 3D engine already provides: temporal correspondence retrieves pose-matched historical latent chunks into the KV cache as loop-closure memory, while spatial correspondence from camera pose and depth reprojection biases token-level attention toward geometrically corresponding regions of the retrieved chunks. We demonstrate our method on loop-closure trajectories mined from the TartanAir and TartanGround datasets to mirror complicated real-world application scenarios, where it outperforms existing training-free baselines on revisit consistency without losing overall video quality.

Problem

Bounded memory makes generators forget the world they built

Streaming generators keep memory and per-chunk compute constant with a sliding-window KV cache — which means every chunk is eventually evicted. Under a plain sliding window, the chunk depicting a revisited location is long gone when the camera returns. Adding a fixed attention sink (à la StreamingLLM) preserves the first chunk and stabilizes global appearance, but the first chunk generally is not the revisited view, so it still cannot anchor a loop closure. In both cases the model must repaint the location from scratch and may produce different textures, colors, or structures — even though the conditioning depth and camera trajectory are perfectly consistent, since they originate from the same underlying 3D geometry. We call this failure revisit inconsistency.

Diagram of KV-cache strategies: sliding window forgets the revisited chunk; attention sink keeps only the first chunk; ours retrieves the pose-matched chunk and applies a correspondence-guided attention bias.
KV-cache strategies under camera revisits. (a) Naive sliding-window caching and (b) an attention sink both forget chunks from previously visited viewpoints. (c) Ours retrieves the pose-matched historical chunk as an anchor in the KV cache and applies a spatial correspondence-guided attention bias linking current-frame tokens to corresponding regions of the retrieved frame.
Method

Two inference-time mechanisms on a frozen generator

We build on a depth-conditioned Causal Wan-VACE student distilled with Self-Forcing, and change nothing about its weights. The 3D engine already knows where the camera is and how far every pixel is — we simply hand that knowledge to the cache and to attention.

Method overview: (a) pose-retrieved loop-closure memory reinstates the evicted chunk; (b) each query token is reprojected into the retrieved view via metric depth, and a Gaussian bias at the predicted correspondence is added to the attention logits.
(a) When the current pose (t₂) returns near a previously generated viewpoint (t₁), pose-based retrieval reinstates the evicted chunk into the bounded KV cache. (b) Each query token is reprojected into the retrieved view via metric depth and relative pose, and a Gaussian bias at the predicted correspondence is added to the attention logits — no cached features are warped.
MECHANISM 1 · WHAT THE MODEL CAN SEE

Pose-retrieved loop-closure memory

The clean-cache budget is split into a persistent anchor (first chunk), one retrieved slot, and a recent window. Evicted latents and their poses are kept outside the attention cache, so any historical chunk stays retrievable. At each step we reinstate the admissible candidate closest in pose to the current chunk — gated by a normalized return distance, a viewing-direction agreement, and a minimum temporal gap, so long-range memory is injected only at genuine revisits. If no candidate qualifies, the slot simply extends the recent window.

MECHANISM 2 · WHERE THE MODEL LOOKS

Geometric correspondence as an attention prior

Reinstating a chunk restores access to the earlier appearance, but attention must still match tokens across a large viewpoint change. Since the correspondence is known, we lift each query token to 3D with its metric depth, reproject it into the retrieved view, and add a Gaussian suppression bias to the retrieved-key logits around the predicted match — after an occlusion-aware visibility test. The bias narrows where the model looks; the learned attention still decides what to copy.

Logits only

Cached keys, values, and latents are never warped or blended — resampling under imperfect poses would inject blur straight into the content path.

Retrieved keys only

The bias touches only the pose-retrieved chunk's key columns in the main branch; the recent window, anchor, and control branch keep ordinary attention.

Exact fallback

Queries with an undefined, off-grid, or occluded correspondence receive a zero bias and reduce exactly to standard attention.

Results · Comparisons

Video comparisons

All methods share the same Causal Wan-VACE base model, depth control, prompts, random seeds, and KV-cache size. For each scene we pair the annotated qualitative figure (first visit / return; red boxes mark the same region) with its full rollout video beside it. Both share the same columns — Reference · Depth · Self-Forcing · Deep Forcing · Infinity-RoPE · MemRoPE · Ours. Watch the return: baselines regenerate altered structures, ours re-renders what was there.

Fantasy: first visit / return across all methods; red boxes mark the same region.
Rolloutstatic/videos/cmp_fantasy.mp4
RetroOffice: first visit / return across all methods; red boxes mark the same region.
Rolloutstatic/videos/cmp_retrooffice.mp4
ModularNeighborhood: first visit / return across all methods; red boxes mark the same region.
Rolloutstatic/videos/cmp_modularneighborhood.mp4
AbandonedFactory: first visit / return across all methods; red boxes mark the same region.
Rolloutstatic/videos/cmp_abandonedfactory.mp4
SoulCity: first visit / return across all methods; red boxes mark the same region.
Rolloutstatic/videos/cmp_soulcity.mp4
Rome: first visit / return across all methods; red boxes mark the same region.
Rolloutstatic/videos/cmp_rome.mp4
Application

Plugged into a live game engine

We integrate the approach with an in-house game engine that streams exactly the annotations our setup assumes — camera poses and metric depth — directly to the generator. On loop-closure camera paths, the generator must dress a castle with complex architecture and a scene of untextured geometric primitives in plausible appearance. Baselines regenerate altered structures on return (e.g., an added dome); ours re-renders the same structures at both visits.

Game-engine integration: on loop-closure paths, baselines alter structures on return while our method re-renders the same structures.
Integration with an in-house game engine on loop-closure paths (first visit / return). On return, baselines alter structures; ours re-renders the same structures.
Live engine — castle static/videos/game_engine_castle.mp4

Castle: engine-streamed depth & camera poses along a loop-closure path. Columns: Reference · Depth · Self-Forcing · Deep Forcing · Infinity-RoPE · MemRoPE · Ours.

Live engine — untextured primitives static/videos/game_engine_primitives.mp4

Untextured primitives: the generator invents appearance for bare geometry — and keeps its invention on return.

Citation

BibTeX

@article{ma2026closing,
  title   = {Closing the Loop: Training-Free Revisit Consistency for
             Autoregressive Generative Rendering},
  author  = {Ma, Wenchao and Liu, Changran and Jiang, Haomiao and Huang, Sharon X.},
  journal = {arXiv preprint arXiv:XXXX.XXXXX},
  year    = {2026}
}