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.

sampling.wgsl

Import path

Constants

NULL_LIGHT_ID

#
const NULL_LIGHT_ID: u32 = 0xFFFFFFFFu

Structures

LightSample

#
struct LightSample {
light_id: u32 ,
seed: u32 ,
}

ResolvedLightSample

#
struct ResolvedLightSample {
world_position: vec4<f32> ,
world_normal: vec3<f32> ,
radiance: vec3<f32> ,
inverse_pdf: f32 ,
}

LightContribution

#
struct LightContribution {
radiance: vec3<f32> ,
inverse_pdf: f32 ,
brdf_rays_can_hit: bool ,
}

LightContributionNoPdf

#
struct LightContributionNoPdf {
radiance: vec3<f32> ,
}

GenerateRandomLightSampleResult

#
struct GenerateRandomLightSampleResult {
light_sample: LightSample ,
resolved_light_sample: ResolvedLightSample ,
}

Functions

power_heuristic

#
fn power_heuristic ( ) -> f32

balance_heuristic

#
fn balance_heuristic ( ) -> f32

sample_ggx_vndf

#

https://gpuopen.com/download/Bounded_VNDF_Sampling_for_Smith-GGX_Reflections.pdf (Listing 1) Result is invalid when output.z <= 0.0, and must be discarded

fn sample_ggx_vndf (
wi_tangent: vec3<f32>
roughness: f32
) -> vec3<f32>

ggx_vndf_sample_invalid

#
fn ggx_vndf_sample_invalid (
ray_tangent: vec3<f32>
) -> bool

ggx_vndf_pdf

#
fn ggx_vndf_pdf (
wi_tangent: vec3<f32>
wo_tangent: vec3<f32>
roughness: f32
) -> f32

isnan

#
fn isnan ( ) -> bool

sample_random_light

#
fn sample_random_light (
ray_origin: vec3<f32>
origin_world_normal: vec3<f32>
) -> LightContribution

random_emissive_light_pdf

#
fn random_emissive_light_pdf ( ) -> f32

generate_random_light_sample

#
fn generate_random_light_sample ( ) -> GenerateRandomLightSampleResult

resolve_light_sample

#
fn resolve_light_sample (
light_sample: LightSample
light_source: LightSource
) -> ResolvedLightSample

calculate_resolved_light_contribution

#
fn calculate_resolved_light_contribution (
resolved_light_sample: ResolvedLightSample
ray_origin: vec3<f32>
origin_world_normal: vec3<f32>
) -> LightContribution

resolve_and_calculate_light_contribution

#
fn resolve_and_calculate_light_contribution (
light_sample: LightSample
ray_origin: vec3<f32>
origin_world_normal: vec3<f32>
) -> LightContributionNoPdf

trace_light_visibility

#
fn trace_light_visibility (
ray_origin: vec3<f32>
light_sample_world_position: vec4<f32>
) -> f32

trace_point_visibility

#
fn trace_point_visibility (
ray_origin: vec3<f32>
) -> f32

triangle_barycentrics

#
fn triangle_barycentrics (
seed: u32
) -> vec3<f32>