Spatiotemporal reservoir resampling, commonly known as ReSTIR (from "Reservoir-based SpatioTemporal Importance Resampling"), is a collection of computer graphics techniques for reusing samples during rendering. It was developed primarily to allow more realistic lighting in real-time rendering, because relatively few rays can be traced per pixel while maintaining an acceptable frame rate. It can also be used to speed up off-line path tracing.

The first ReSTIR paper, published in 2020, provided algorithms for direct lighting, allowing scenes containing thousands of lights to be rendered in real time on a high-end GPU. Researchers later proposed versions for rendering indirect lighting (and more recently, motion blur and depth of field) and built up a framework of mathematical concepts and notation conventions that help analyze such algorithms.

A major focus of this work is removing or reducing the bias that could be introduced when samples from other pixels or frames are reused—or selectively allowing some bias in order to speed up rendering and reduce variance (visible as "noise" in the image). Versions for path tracing apply transformations called shift mappings to samples, typically reusing parts of paths closer to the light and modifying the portion closer to the camera.

ReSTIR-related papers and talks have been presented every year at the SIGGRAPH conference since 2020.

One of the first games to incorporate ReSTIR into its rendering was Cyberpunk 2077.

Overview and motivation

According to Chris Wyman, one of the co-authors of the original paper, although developers commonly thought that bias was acceptable for real-time rendering, end users (e.g. gamers) are well-aware of the artifacts caused by bias and many have a negative opinion of common sample-reuse techniques such as temporal anti-aliasing (TAA), which may cause "ghosting" when the camera moves, and denoising, which causes blurring and other artifacts.

ReSTIR techniques can reduce or avoid these types of bias by reusing samples of the set of possible paths taken by light to reach the camera, instead of reusing rendered pixel color values (which are typically the average of multiple samples, discarding information such as the direction of the light). While other techniques reuse samples in a generic post-processing step, ReSTIR passes can test for shadowing, and reused samples are converted into pixel color values by rendering code that takes the characteristics of different materials into account (e.g. by implementing BRDFs). However the output of ReSTIR is noisy, and a denoising pass is typically still used.

Stochastic ray tracing techniques such as path tracing need to average multiple samples (produced by tracing individual rays) in order to render a visually acceptable image. When using a simple unbiased renderer based on Monte Carlo integration, halving the deviation of the result (apparent as "noise" in the image) requires multiplying the number of samples by four, meaning that a rapidly increasingly number of samples is needed to improve quality, Standard ways to mitigate this problem include importance sampling (which requires finding improved sampling distributions for specific situations), and quasi-Monte Carlo integration (which usually still requires tracing a large number of rays). ReSTIR offers a solution that multiplies the effective number of samples while tracing a fixed number of additional rays per frame.

Temporal reuse multiplies the effective sample count by the number of frames rendered. Spatial reuse multiplies the effective count by the number of neighboring pixels examined. These two types of reuse can be combined, allowing spatial reuse to be applied recursively, which appears to offer an exponentially increasing effective sample count, however this is quickly limited by the size of the neighborhood used for spatial reuse. Spatial reuse is also potentially less effective near shadow and object edges, especially for objects with fine geometric detail, and temporal reuse is limited by movement of the camera and scene elements.

Variations

Many variations of ReSTIR have been proposed that generalize or improve the original technique (which builds on an earlier method called RIS), specialize it for particular types of illumination or other visual effects, or allow incorporation into rendering algorithms other than standard path tracing. Some published versions are listed below.

Name(s) Paper Applicability Resampled Importance Sampling (RIS) Talbot et al. 2005Importance Resampling for Global Illumination light sampling; BRDF sampling ReSTIR, ReSTIR DI Bitterli et al. 2020Spatiotemporal reservoir resampling for real-time ray tracing with dynamic direct lighting direct illumination ReSTIR GI Ouyang et al. 2021ReSTIR GI: Effective Path Resampling for Real-Time Path Tracing indirect illumination; optimized for diffuse (Lambertian) surfaces ReGIR Boksansky et al. 2021Rendering many lights with grid-based reservoirs light sampling during path tracing (uses 3D grid, not screen space) Volumetric ReSTIR Lin et al. 2021Fast Volume Rendering with Spatiotemporal Reservoir Resampling "participating media" such as clouds and smoke ReSTIR PT, Generalized Resampled Importance Sampling (GRIS) Lin et al. 2022Generalized resampled importance sampling: foundations of ReSTIR general path tracing; reflective (specular) surfaces; some caustics Conditional Resampled Importance Sampling (CRIS), Suffix ReSTIR Kettunen et al. 2023Conditional Resampled Importance Sampling and ReSTIR general path tracing; light reflecting from specular surfaces; fast camera motion ReSTIR FG Kern et al. 2024ReSTIR FG: Real-Time Reservoir Resampled Photon Final Gathering caustics; glass-encased objects; general indirect illumination Area ReSTIR Zhang et al. 2024Area ReSTIR: Resampling for Real-Time Defocus and Antialiasing general path tracing; depth of field (including bokeh) and fine structures such as hair and foliage Reservoir Splatting Liu et al. 2025Reservoir Splatting for Temporal Path Resampling and Motion Blur general path tracing; moving objects and motion blur ReSTIR BDPT Hedstrom et al. 2025ReSTIR BDPT: Bidirectional ReSTIR Path Tracing with Caustics caustics; glass-encased lights; "hard-to-reach" lights ReSTIR PG Zeng et al. 2025ReSTIR PG: Path Guiding with Spatiotemporally Resampled Paths general path tracing (adds path guiding; ReSTIR portion is same as ReSTIR PT)

Algorithms

Basic algorithm

ReSTIR uses a combination of resampled importance sampling (RIS) and weighted reservoir sampling (WRS) which the authors call streaming RIS. RIS processes samples from an initial probability distribution (e.g. a probability distribution for which a cheap sampling method exists) and generates samples in a new probability distribution (e.g. a sampling distribution that is optimal for rendering but is impractical to draw samples from directly). WRS allows this to be done while storing only a small number of samples in memory, which is especially helpful on a GPU. Information about the samples is stored in a data structure called a reservoir. WRS also allows samples from multiple reservoirs to be combined ("merged") into a single reservoir; this is crucial for sample reuse.

Each pixel has a reservoir, typically containing only a single sample when ReSTIR is used for real-time rendering (some implementations use a larger number, e.g. four samples). The reservoir is typically initialized to a sample drawn using a simple method and is then updated by RIS steps and by reservoir merging, so that the pixel value produced by shading using the sample(s) currently in the reservoir, times the weight for the sample, is always an unbiased estimate of the correct pixel value. If appropriate resampling steps are used, the variance of this estimate (or some function of it, typically the luminance of the RGB color value) decreases with each step.

A possible sequence of steps performed for each frame, suitable for computing unbiased direct illumination (DI) is:

Perform reservoir resampling by drawing multiple light samples and using streaming RIS to choose one, using probabilities based on a target function, e.g. the luminance of the sample's contribution to the pixel. A weight is also computed for the sample. Typically, a single visibility check is performed here, after choosing a sample, setting the weight to 0 if the light is shadowed. Resampling (combined with the visibility check) ensures that the expected value of the weight times the sample brightness is the correct (unbiased) value for the pixel. (temporal reuse) For each pixel, merge the sample(s) from the previous frame into the current reservoir. Multiple importance sampling (MIS) weights are used to avoid bias due to the fact that the samples in the previous frame's reservoirs may have a different target probability distribution if the objects, lights, or camera have moved. (spatial reuse) For each pixel, choose one or more neighboring pixels and merge their samples into the current pixel's reservoir. Multiple importance sampling (MIS) weights are used to avoid bias due to the fact that the samples in each pixel's reservoir have a different target probability distribution. Because computing unbiased MIS weights requires tracing additional rays (along with other work such as evaluating BRDFs), real-time rendering often uses only a single neighboring pixel. Use the sample in each pixel's reservoir, along with its weight, to determine the color of the pixel for the current frame. Alternatively, multiple samples examined during the preceding steps may be averaged and used to shade the pixel instead (decoupled shading and sampling).

For direct lighting, the initial samples used in step 1 are typically drawn by importance sampling from the set of lights in a scene. The algorithm above (from the original ReSTIR paper) draws many lower-quality light samples (e.g. 32) using a fast method, without considering visibility, and chooses one using streaming RIS. Visibility is then tested for the final chosen sample. Considering visibility for each sample drawn would require tracing 32 rays, which would make it much more expensive. The intent is to reduce the number of rays traced, relying on the sample reuse in steps 2 and 3 to make up for the loss of quality caused by rejecting many of the rays due to shadowing. A large part of the initial efforts to optimize ReSTIR (to make it run in real-time on available hardware) went into reducing the cost of randomly sampling the lights. Glossy surfaces may require a larger number of samples, and combining light sampling with BRDF sampling (using MIS) may increase quality.

Step 2 (temporal reuse) is sometimes skipped for off-line rendering, and the output of multiple repetitions of initial sampling and spatial reuse is averaged instead; this helps avoids artifacts due to correlations. Step 3 (spatial reuse) may be repeated multiple times in a single frame.

The neighboring pixels used in step 3 (spatial reuse) are chosen randomly, typically from a circle or square around the pixel, e.g. with a radius of 10–30 pixels. Heuristics may be used to choose neighboring pixels that are more likely to have similar surface and lighting characteristics to the target pixel, provided that these heuristics do not examine the samples in the reservoirs (which would introduce bias).

In some variations, the neighbor samples used in step 3 come from the previous frame (i.e. this step performs spatiotemporal resampling rather than just spatial resampling), which can help improve performance on GPUs.

Unbiased contribution weights