Blender V4.3
volume_rayleigh.h
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2011-2024 Blender Foundation
2 *
3 * SPDX-License-Identifier: Apache-2.0 */
4
5#pragma once
6
8
10
11/* RAYLEIGH CLOSURE */
12
16static_assert(sizeof(ShaderVolumeClosure) >= sizeof(RayleighVolume),
17 "RayleighVolume is too large!");
18
24
26 float3 wo,
27 ccl_private float *pdf)
28{
29 /* note that wi points towards the viewer */
30 float cos_theta = dot(-sd->wi, wo);
32
33 return make_spectrum(*pdf);
34}
35
37 float2 rand,
40 ccl_private float *pdf)
41{
42 /* note that wi points towards the viewer and so is used negated */
43 *wo = phase_rayleigh_sample(-sd->wi, rand, pdf);
44 *eval = make_spectrum(*pdf); /* perfect importance sampling */
45
47}
48
ccl_device_inline float cos_theta(const float3 w)
additional_info("compositor_sum_squared_difference_float_shared") .push_constant(Type output_img float dot(value.rgb, luminance_coefficients)") .define("LOAD(value)"
#define ccl_device
#define ccl_private
#define CCL_NAMESPACE_END
@ CLOSURE_VOLUME_RAYLEIGH_ID
@ SD_SCATTER
struct ShaderVolumeClosure ShaderVolumeClosure
ShaderData
@ LABEL_VOLUME_SCATTER
#define make_spectrum(f)
SPECTRUM_DATA_TYPE Spectrum
ccl_device int volume_rayleigh_sample(ccl_private const ShaderData *sd, float2 rand, ccl_private Spectrum *eval, ccl_private float3 *wo, ccl_private float *pdf)
ccl_device int volume_rayleigh_setup(ccl_private RayleighVolume *volume)
ccl_device Spectrum volume_rayleigh_eval(ccl_private const ShaderData *sd, float3 wo, ccl_private float *pdf)
CCL_NAMESPACE_BEGIN struct RayleighVolume RayleighVolume
ccl_device float phase_rayleigh(float cos_theta)
Definition volume_util.h:54
ccl_device float3 phase_rayleigh_sample(float3 D, float2 rand, ccl_private float *pdf)
Definition volume_util.h:59