Advanced search tips: use spaces to require multiple terms (AND), | for alternatives (OR), wrap phrases in quotes (="a b"), =term for exact match, 'term to include, !term to exclude, ^term to match prefix, !^term to exclude prefix, .ext$ to match suffix, and !.ext$ to exclude suffix.

restir_gi.wgsl

Constants

SPATIAL_REUSE_RADIUS_PIXELS

#
const SPATIAL_REUSE_RADIUS_PIXELS: AbstractFloat = 30.0

CONFIDENCE_WEIGHT_CAP

#
const CONFIDENCE_WEIGHT_CAP: AbstractFloat = 8.0

Structures

NeighborInfo

#
struct NeighborInfo {
reservoir: Reservoir ,
world_position: vec3<f32> ,
world_normal: vec3<f32> ,
diffuse_brdf: vec3<f32> ,
}

ReservoirMergeResult

#
struct ReservoirMergeResult {
merged_reservoir: Reservoir ,
selected_sample_radiance: vec3<f32> ,
}

Functions

initial_and_temporal

#
@compute
Runs custom parallel code on the GPU, not limited to graphics
@workgroup_size(8, 8, 1)
Defines the size of a thread group. One to three numbers: width (x), height (y), and depth (z). Missing values default to 1
fn initial_and_temporal (
@builtin(global_invocation_id)
global_id: vec3<u32>
)

spatial_and_shade

#
@compute
Runs custom parallel code on the GPU, not limited to graphics
@workgroup_size(8, 8, 1)
Defines the size of a thread group. One to three numbers: width (x), height (y), and depth (z). Missing values default to 1
fn spatial_and_shade (
@builtin(global_invocation_id)
global_id: vec3<u32>
)

generate_initial_reservoir

#
fn generate_initial_reservoir (
world_position: vec3<f32>
world_normal: vec3<f32>
) -> Reservoir

load_temporal_reservoir

#
fn load_temporal_reservoir (
pixel_id: vec2<u32>
depth: f32
world_position: vec3<f32>
world_normal: vec3<f32>
) -> NeighborInfo

load_temporal_reservoir_inner

#
fn load_temporal_reservoir_inner (
temporal_pixel_id: vec2<u32>
depth: f32
world_position: vec3<f32>
world_normal: vec3<f32>
) -> NeighborInfo

load_spatial_reservoir

#
fn load_spatial_reservoir (
pixel_id: vec2<u32>
depth: f32
world_position: vec3<f32>
world_normal: vec3<f32>
) -> NeighborInfo

get_neighbor_pixel_id

#
fn get_neighbor_pixel_id (
center_pixel_id: vec2<u32>
search_radius: f32
) -> vec2<u32>

jacobian

#
fn jacobian (
new_world_position: vec3<f32>
original_world_position: vec3<f32>
sample_point_world_position: vec3<f32>
sample_point_world_normal: vec3<f32>
) -> f32

isinf

#
fn isinf ( ) -> bool

empty_reservoir

#
fn empty_reservoir ()

merge_reservoirs

#
fn merge_reservoirs (
canonical_reservoir: Reservoir
canonical_world_position: vec3<f32>
canonical_world_normal: vec3<f32>
canonical_diffuse_brdf: vec3<f32>
other_reservoir: Reservoir
other_world_position: vec3<f32>
other_world_normal: vec3<f32>
other_diffuse_brdf: vec3<f32>
) -> ReservoirMergeResult