22#define OSL_CLOSURE_STRUCT_BEGIN(Upper, lower) \
23 struct ccl_align(8) Upper##Closure \
26#define OSL_CLOSURE_STRUCT_END(Upper, lower) \
29#define OSL_CLOSURE_STRUCT_MEMBER(Upper, TYPE, type, name, key) type name;
30#define OSL_CLOSURE_STRUCT_ARRAY_MEMBER(Upper, TYPE, type, name, key, size) type name[size];
46 if (layer_albedo !=
nullptr) {
53 const uint32_t path_flag,
60 const bool reflect_caustics_disabled = !
kernel_data.integrator.caustics_reflective;
61 const bool refract_caustics_disabled = !
kernel_data.integrator.caustics_refractive;
64 if (reflect_caustics_disabled && has_reflect && !has_transmit) {
68 if (refract_caustics_disabled && has_transmit && !has_reflect) {
72 if (reflect_caustics_disabled && refract_caustics_disabled) {
84 const uint32_t path_flag,
107 const uint32_t path_flag,
123 bsdf->roughness = closure->roughness;
131 const uint32_t path_flag,
133 const ccl_private OrenNayarDiffuseBSDFClosure *closure,
147 bsdf->roughness = closure->roughness;
157 ccl_private const BurleyDiffuseBSDFClosure *closure,
172 sd->flag |= bsdf_burley_setup(bsdf, closure->roughness);
177 const uint32_t path_flag,
199 const uint32_t path_flag,
215 bsdf->alpha_x = bsdf->alpha_y = 0.0f;
222 const uint32_t path_flag,
238 bsdf->ior = closure->ior;
239 bsdf->alpha_x = bsdf->alpha_y = 0.0f;
246 const uint32_t path_flag,
256 const uint32_t path_flag,
262 sd,
rgb_to_spectrum(weight), path_flag, closure->position, closure->direction);
268 const uint32_t path_flag,
275 const bool has_reflection = !
is_zero(closure->reflection_tint);
276 const bool has_transmission = !
is_zero(closure->transmission_tint);
295 bsdf->alpha_x = closure->alpha_x;
296 bsdf->alpha_y = closure->alpha_y;
297 bsdf->ior = closure->ior;
298 bsdf->T = closure->T;
300 bool preserve_energy =
false;
303 if (closure->distribution ==
make_string(
"beckmann", 14712237670914973463ull)) {
304 if (has_reflection && has_transmission) {
307 else if (has_transmission) {
316 if (has_reflection && has_transmission) {
319 else if (has_transmission) {
326 preserve_energy = (closure->distribution ==
make_string(
"multi_ggx", 16842698693386468366ull));
330 fresnel->transmission_tint =
rgb_to_spectrum(closure->transmission_tint);
331 fresnel->thin_film.thickness = closure->thinfilm_thickness;
332 fresnel->thin_film.ior = closure->thinfilm_ior;
335 if (layer_albedo !=
nullptr) {
336 if (has_reflection && !has_transmission) {
347 const uint32_t path_flag,
369 bsdf->alpha_x = closure->alpha_x;
370 bsdf->alpha_y = closure->alpha_y;
372 bsdf->T = closure->T;
374 bool preserve_energy =
false;
377 if (closure->distribution ==
make_string(
"beckmann", 14712237670914973463ull)) {
383 preserve_energy = (closure->distribution ==
make_string(
"multi_ggx", 16842698693386468366ull));
394 const uint32_t path_flag,
396 const ccl_private GeneralizedSchlickBSDFClosure *closure,
401 const bool has_reflection = !
is_zero(closure->reflection_tint);
402 const bool has_transmission = !
is_zero(closure->transmission_tint);
405 if (has_transmission) {
426 bsdf->alpha_x = closure->alpha_x;
427 bsdf->alpha_y = closure->alpha_y;
428 bsdf->T = closure->T;
430 if (closure->exponent < 0.0f) {
435 bsdf->ior = -closure->exponent;
441 bool preserve_energy =
false;
444 if (closure->distribution ==
make_string(
"beckmann", 14712237670914973463ull)) {
445 if (has_reflection && has_transmission) {
448 else if (has_transmission) {
457 if (has_reflection && has_transmission) {
460 else if (has_transmission) {
467 preserve_energy = (closure->distribution ==
make_string(
"multi_ggx", 16842698693386468366ull));
470 const bool reflective_caustics = (
kernel_data.integrator.caustics_reflective ||
472 const bool refractive_caustics = (
kernel_data.integrator.caustics_refractive ||
475 fresnel->reflection_tint = reflective_caustics ?
rgb_to_spectrum(closure->reflection_tint) :
477 fresnel->transmission_tint = refractive_caustics ?
rgb_to_spectrum(closure->transmission_tint) :
481 fresnel->exponent = closure->exponent;
482 fresnel->thin_film.thickness = closure->thinfilm_thickness;
483 fresnel->thin_film.ior = closure->thinfilm_ior;
486 if (layer_albedo !=
nullptr) {
487 if (has_reflection && !has_transmission) {
500 const uint32_t path_flag,
519 bsdf->alpha_x = closure->alpha_x;
520 bsdf->alpha_y = closure->alpha_y;
521 bsdf->ior = closure->ior;
522 bsdf->T = closure->T;
525 if (closure->distribution ==
make_string(
"beckmann", 14712237670914973463ull)) {
526 if (closure->refract == 1) {
529 else if (closure->refract == 2) {
537 else if (closure->distribution ==
make_string(
"ashikhmin_shirley", 11318482998918370922ull)) {
542 if (closure->refract == 1) {
545 else if (closure->refract == 2) {
552 if (closure->distribution ==
make_string(
"multi_ggx", 16842698693386468366ull)) {
558 if (layer_albedo !=
nullptr) {
559 if (closure->refract == 0) {
573 const uint32_t path_flag,
575 const ccl_private MicrofacetF82TintClosure *closure,
595 bsdf->alpha_x = closure->alpha_x;
596 bsdf->alpha_y = closure->alpha_y;
598 bsdf->T = closure->T;
600 bool preserve_energy =
false;
603 if (closure->distribution ==
make_string(
"beckmann", 14712237670914973463ull)) {
609 preserve_energy = (closure->distribution ==
make_string(
"multi_ggx", 16842698693386468366ull));
614 kg, bsdf, sd, fresnel,
rgb_to_spectrum(closure->f82), preserve_energy);
620 const uint32_t path_flag,
622 const ccl_private MicrofacetMultiGGXGlassClosure *closure,
639 bsdf->alpha_x = closure->alpha_x;
640 bsdf->alpha_y = bsdf->alpha_x;
641 bsdf->ior = closure->ior;
652 const uint32_t path_flag,
654 const ccl_private MicrofacetMultiGGXClosure *closure,
670 bsdf->alpha_x = closure->alpha_x;
671 bsdf->alpha_y = closure->alpha_y;
674 bsdf->T = closure->T;
679 if (layer_albedo !=
nullptr) {
689 const uint32_t path_flag,
705 bsdf->sigma = closure->sigma;
714 const uint32_t path_flag,
732 bsdf->roughness = closure->roughness;
737 sd->flag |= sheen_flag;
739 if (layer_albedo !=
nullptr) {
740 *layer_albedo = bsdf->weight;
748 const uint32_t path_flag,
766 bsdf->roughness = closure->roughness;
771 sd->flag |= sheen_flag;
773 if (layer_albedo !=
nullptr) {
774 *layer_albedo = bsdf->weight * closure->albedo;
781 const uint32_t path_flag,
797 bsdf->size = closure->size;
798 bsdf->smooth = closure->smooth;
805 const uint32_t path_flag,
821 bsdf->size = closure->size;
822 bsdf->smooth = closure->smooth;
855 const ccl_private GenericBackgroundClosure *closure,
873 weight *= closure->emittance;
917 for (
int i = 0;
i < 8;
i++) {
918 bsdf->colors[
i] = closure->colors[
i];
921 sd->flag |= bsdf_diffuse_ramp_setup(bsdf);
938 bsdf->exponent = closure->exponent;
945 for (
int i = 0;
i < 8;
i++) {
946 bsdf->colors[
i] = closure->colors[
i];
949 sd->flag |= bsdf_phong_ramp_setup(bsdf);
954 const uint32_t path_flag,
960 if (closure->method ==
make_string(
"burley", 186330084368958868ull)) {
963 else if (closure->method ==
make_string(
"random_walk", 11360609267673527222ull)) {
966 else if (closure->method ==
make_string(
"random_walk_skin", 3096325052680726300ull)) {
978 bssrdf->radius = closure->radius;
980 bssrdf->albedo = closure->albedo;
983 bssrdf->alpha = closure->roughness;
984 bssrdf->ior = closure->ior;
985 bssrdf->anisotropy = closure->anisotropy;
994 const uint32_t path_flag,
996 const ccl_private SubsurfaceBSSRDFClosure *closure,
1004#if OSL_LIBRARY_VERSION_CODE >= 11401
1005 bssrdf->radius = closure->radius;
1007 bssrdf->radius = closure->transmission_depth * closure->transmission_color;
1010 bssrdf->albedo = closure->albedo;
1015 bssrdf->anisotropy = closure->anisotropy;
1024 const uint32_t path_flag,
1040 bsdf->T = closure->T;
1041 bsdf->roughness1 = closure->roughness1;
1042 bsdf->roughness2 = closure->roughness2;
1043 bsdf->offset = closure->offset;
1051 const uint32_t path_flag,
1053 const ccl_private HairTransmissionClosure *closure,
1067 bsdf->T = closure->T;
1068 bsdf->roughness1 = closure->roughness1;
1069 bsdf->roughness2 = closure->roughness2;
1070 bsdf->offset = closure->offset;
1077 const uint32_t path_flag,
1094 bsdf->sigma = closure->sigma;
1095 bsdf->v = closure->v;
1096 bsdf->s = closure->s;
1097 bsdf->alpha = closure->alpha;
1098 bsdf->eta = closure->eta;
1099 bsdf->m0_roughness = closure->m0_roughness;
1101 sd->flag |= bsdf_hair_chiang_setup(sd, bsdf);
1107 const uint32_t path_flag,
1117 if (closure->r_lobe <= 0.0f && closure->tt_lobe <= 0.0f && closure->trt_lobe <= 0.0f) {
1134 bsdf->sigma = closure->sigma;
1135 bsdf->roughness = closure->roughness;
1136 bsdf->tilt = closure->tilt;
1137 bsdf->eta = closure->eta;
1138 bsdf->aspect_ratio = closure->aspect_ratio;
1140 bsdf->extra = extra;
1141 bsdf->extra->R = closure->r_lobe;
1142 bsdf->extra->TT = closure->tt_lobe;
1143 bsdf->extra->TRT = closure->trt_lobe;
1145 bsdf->extra->pixel_coverage = 1.0f;
1153 const int k1 = k0 + 1;
1154 const float radius =
mix(
1157 bsdf->extra->pixel_coverage = 0.5f * sd->dP / radius;
1160 sd->flag |= bsdf_hair_huang_setup(sd, bsdf, path_flag);
1168 const uint32_t path_flag,
1170 const ccl_private VolumeAbsorptionClosure *closure,
1179 const uint32_t path_flag,
1181 const ccl_private VolumeHenyeyGreensteinClosure *closure,
1193 volume->
g = closure->g;
1201 const uint32_t path_flag,
1203 const ccl_private VolumeFournierForandClosure *closure,
1219 const uint32_t path_flag,
1232 volume->
g = closure->g;
1233 volume->alpha = closure->alpha;
1240 const uint32_t path_flag,
CCL_NAMESPACE_BEGIN ccl_device ccl_private ShaderClosure * closure_alloc(ccl_private ShaderData *sd, const int size, ClosureType type, Spectrum weight)
ccl_device_inline ccl_private ShaderClosure * bsdf_alloc(ccl_private ShaderData *sd, const int size, Spectrum weight)
ccl_device ccl_private void * closure_alloc_extra(ccl_private ShaderData *sd, const int size)
ccl_device_inline Spectrum bsdf_albedo(KernelGlobals kg, const ccl_private ShaderData *sd, const ccl_private ShaderClosure *sc, const bool reflection, const bool transmission)
CCL_NAMESPACE_BEGIN ccl_device int bsdf_ashikhmin_shirley_setup(ccl_private MicrofacetBsdf *bsdf)
ccl_device int bsdf_ashikhmin_velvet_setup(ccl_private VelvetBsdf *bsdf)
ccl_device int bsdf_translucent_setup(ccl_private DiffuseBsdf *bsdf)
ccl_device int bsdf_diffuse_setup(ccl_private DiffuseBsdf *bsdf)
ccl_device int bsdf_hair_reflection_setup(ccl_private HairBsdf *bsdf)
ccl_device int bsdf_hair_transmission_setup(ccl_private HairBsdf *bsdf)
ccl_device void bsdf_microfacet_setup_fresnel_f82_tint(KernelGlobals kg, ccl_private MicrofacetBsdf *bsdf, const ccl_private ShaderData *sd, ccl_private FresnelF82Tint *fresnel, const Spectrum f82_tint, const bool preserve_energy)
ccl_device int bsdf_microfacet_beckmann_glass_setup(ccl_private MicrofacetBsdf *bsdf)
ccl_device int bsdf_microfacet_beckmann_setup(ccl_private MicrofacetBsdf *bsdf)
ccl_device void bsdf_microfacet_setup_fresnel_constant(KernelGlobals kg, ccl_private MicrofacetBsdf *bsdf, const ccl_private ShaderData *sd, const Spectrum color)
ccl_device void bsdf_microfacet_setup_fresnel_generalized_schlick(KernelGlobals kg, ccl_private MicrofacetBsdf *bsdf, const ccl_private ShaderData *sd, ccl_private FresnelGeneralizedSchlick *fresnel, const bool preserve_energy)
ccl_device void bsdf_microfacet_setup_fresnel_conductor(KernelGlobals kg, ccl_private MicrofacetBsdf *bsdf, const ccl_private ShaderData *sd, ccl_private FresnelConductor *fresnel, const bool preserve_energy)
ccl_device void bsdf_microfacet_setup_fresnel_dielectric_tint(KernelGlobals kg, ccl_private MicrofacetBsdf *bsdf, const ccl_private ShaderData *sd, ccl_private FresnelDielectricTint *fresnel, const bool preserve_energy)
ccl_device int bsdf_microfacet_beckmann_refraction_setup(ccl_private MicrofacetBsdf *bsdf)
ccl_device int bsdf_microfacet_ggx_glass_setup(ccl_private MicrofacetBsdf *bsdf)
ccl_device int bsdf_microfacet_ggx_setup(ccl_private MicrofacetBsdf *bsdf)
ccl_device int bsdf_microfacet_ggx_refraction_setup(ccl_private MicrofacetBsdf *bsdf)
ccl_device int bsdf_oren_nayar_setup(const ccl_private ShaderData *sd, ccl_private OrenNayarBsdf *bsdf, const Spectrum color)
ccl_device void bsdf_ray_portal_setup(ccl_private ShaderData *sd, const Spectrum weight, const uint32_t path_flag, const float3 position, float3 direction)
ccl_device int bsdf_sheen_setup(KernelGlobals kg, const ccl_private ShaderData *sd, ccl_private SheenBsdf *bsdf)
ccl_device int bsdf_diffuse_toon_setup(ccl_private ToonBsdf *bsdf)
ccl_device int bsdf_glossy_toon_setup(ccl_private ToonBsdf *bsdf)
CCL_NAMESPACE_BEGIN ccl_device void bsdf_transparent_setup(ccl_private ShaderData *sd, const Spectrum weight, const uint32_t path_flag)
ccl_device float3 maybe_ensure_valid_specular_reflection(ccl_private ShaderData *sd, const float3 N)
ccl_device float ior_from_F0(const float f0)
ccl_device_inline ccl_private Bssrdf * bssrdf_alloc(ccl_private ShaderData *sd, Spectrum weight)
ccl_device int bssrdf_setup(ccl_private ShaderData *sd, ccl_private Bssrdf *bssrdf, const int path_flag, ClosureType type)
SIMD_FORCE_INLINE const btScalar & w() const
Return the w value.
ccl_device void osl_closure_sheen_bsdf_setup(KernelGlobals kg, ccl_private ShaderData *sd, const uint32_t path_flag, const float3 weight, const ccl_private SheenBSDFClosure *closure, float3 *layer_albedo)
ccl_device void osl_closure_refraction_setup(KernelGlobals kg, ccl_private ShaderData *sd, const uint32_t path_flag, const float3 weight, const ccl_private RefractionClosure *closure, float3 *layer_albedo)
ccl_device void osl_closure_diffuse_toon_setup(KernelGlobals kg, ccl_private ShaderData *sd, const uint32_t path_flag, const float3 weight, const ccl_private DiffuseToonClosure *closure, float3 *layer_albedo)
ccl_device void osl_closure_emission_setup(KernelGlobals kg, ccl_private ShaderData *sd, uint32_t, float3 weight, const ccl_private GenericEmissiveClosure *closure, float3 *layer_albedo)
ccl_device void osl_closure_subsurface_bssrdf_setup(KernelGlobals kg, ccl_private ShaderData *sd, const uint32_t path_flag, const float3 weight, const ccl_private SubsurfaceBSSRDFClosure *closure, float3 *layer_albedo)
ccl_device void osl_closure_microfacet_multi_ggx_aniso_setup(KernelGlobals kg, ccl_private ShaderData *sd, const uint32_t path_flag, const float3 weight, const ccl_private MicrofacetMultiGGXClosure *closure, float3 *layer_albedo)
ccl_device void osl_closure_phong_ramp_setup(KernelGlobals kg, ccl_private ShaderData *sd, uint32_t, const float3 weight, const ccl_private PhongRampClosure *closure, float3 *layer_albedo)
ccl_device void osl_closure_oren_nayar_setup(KernelGlobals kg, ccl_private ShaderData *sd, const uint32_t path_flag, const float3 weight, const ccl_private OrenNayarClosure *closure, float3 *layer_albedo)
ccl_device void osl_closure_ashikhmin_velvet_setup(KernelGlobals kg, ccl_private ShaderData *sd, const uint32_t path_flag, const float3 weight, const ccl_private AshikhminVelvetClosure *closure, float3 *layer_albedo)
ccl_device void osl_closure_hair_chiang_setup(KernelGlobals kg, ccl_private ShaderData *sd, const uint32_t path_flag, const float3 weight, const ccl_private ChiangHairClosure *closure, float3 *layer_albedo)
ccl_device void osl_closure_translucent_setup(KernelGlobals kg, ccl_private ShaderData *sd, const uint32_t path_flag, const float3 weight, const ccl_private TranslucentClosure *closure, float3 *layer_albedo)
ccl_device void osl_closure_oren_nayar_diffuse_bsdf_setup(KernelGlobals kg, ccl_private ShaderData *sd, const uint32_t path_flag, const float3 weight, const ccl_private OrenNayarDiffuseBSDFClosure *closure, float3 *layer_albedo)
ccl_device_forceinline bool osl_closure_skip(KernelGlobals kg, const ccl_private ShaderData *sd, const uint32_t path_flag, const int scattering)
ccl_device void osl_closure_ray_portal_bsdf_setup(KernelGlobals kg, ccl_private ShaderData *sd, const uint32_t path_flag, const float3 weight, const ccl_private RayPortalBSDFClosure *closure, float3 *layer_albedo)
ccl_device void osl_closure_dielectric_bsdf_setup(KernelGlobals kg, ccl_private ShaderData *sd, const uint32_t path_flag, const float3 weight, const ccl_private DielectricBSDFClosure *closure, float3 *layer_albedo)
ccl_device void osl_closure_uniform_edf_setup(KernelGlobals kg, ccl_private ShaderData *sd, uint32_t, float3 weight, const ccl_private UniformEDFClosure *closure, float3 *layer_albedo)
ccl_device void osl_closure_burley_diffuse_bsdf_setup(KernelGlobals kg, ccl_private ShaderData *sd, uint32_t path_flag, float3 weight, ccl_private const BurleyDiffuseBSDFClosure *closure, float3 *layer_albedo)
ccl_device void osl_closure_draine_setup(KernelGlobals kg, ccl_private ShaderData *sd, const uint32_t path_flag, const float3 weight, const ccl_private VolumeDraineClosure *closure, float3 *layer_albedo)
ccl_device void osl_closure_holdout_setup(KernelGlobals kg, ccl_private ShaderData *sd, uint32_t, const float3 weight, const ccl_private HoldoutClosure *closure, float3 *layer_albedo)
ccl_device void osl_closure_reflection_setup(KernelGlobals kg, ccl_private ShaderData *sd, const uint32_t path_flag, const float3 weight, const ccl_private ReflectionClosure *closure, float3 *layer_albedo)
ccl_device void osl_closure_hair_huang_setup(KernelGlobals kg, ccl_private ShaderData *sd, const uint32_t path_flag, const float3 weight, const ccl_private HuangHairClosure *closure, float3 *layer_albedo)
ccl_device_forceinline void osl_zero_albedo(float3 *layer_albedo)
ccl_device void osl_closure_henyey_greenstein_setup(KernelGlobals kg, ccl_private ShaderData *sd, const uint32_t path_flag, float3 weight, const ccl_private VolumeHenyeyGreensteinClosure *closure, float3 *layer_albedo)
ccl_device void osl_closure_absorption_setup(KernelGlobals kg, ccl_private ShaderData *sd, const uint32_t path_flag, float3 weight, const ccl_private VolumeAbsorptionClosure *closure, float3 *layer_albedo)
ccl_device void osl_closure_diffuse_ramp_setup(KernelGlobals kg, ccl_private ShaderData *sd, uint32_t, const float3 weight, const ccl_private DiffuseRampClosure *closure, float3 *layer_albedo)
ccl_device void osl_closure_transparent_setup(KernelGlobals kg, ccl_private ShaderData *sd, const uint32_t path_flag, const float3 weight, const ccl_private TransparentClosure *closure, float3 *layer_albedo)
ccl_device void osl_closure_background_setup(KernelGlobals kg, ccl_private ShaderData *sd, uint32_t, const float3 weight, const ccl_private GenericBackgroundClosure *closure, float3 *layer_albedo)
ccl_device void osl_closure_hair_reflection_setup(KernelGlobals kg, ccl_private ShaderData *sd, const uint32_t path_flag, const float3 weight, const ccl_private HairReflectionClosure *closure, float3 *layer_albedo)
ccl_device void osl_closure_glossy_toon_setup(KernelGlobals kg, ccl_private ShaderData *sd, const uint32_t path_flag, const float3 weight, const ccl_private GlossyToonClosure *closure, float3 *layer_albedo)
ccl_device void osl_closure_sheen_setup(KernelGlobals kg, ccl_private ShaderData *sd, const uint32_t path_flag, const float3 weight, const ccl_private SheenClosure *closure, float3 *layer_albedo)
ccl_device void osl_closure_diffuse_setup(KernelGlobals kg, ccl_private ShaderData *sd, const uint32_t path_flag, const float3 weight, const ccl_private DiffuseClosure *closure, float3 *layer_albedo)
ccl_device void osl_closure_conductor_bsdf_setup(KernelGlobals kg, ccl_private ShaderData *sd, const uint32_t path_flag, const float3 weight, const ccl_private ConductorBSDFClosure *closure, float3 *layer_albedo)
ccl_device void osl_closure_microfacet_setup(KernelGlobals kg, ccl_private ShaderData *sd, const uint32_t path_flag, const float3 weight, const ccl_private MicrofacetClosure *closure, float3 *layer_albedo)
ccl_device void osl_closure_rayleigh_setup(KernelGlobals kg, ccl_private ShaderData *sd, const uint32_t path_flag, const float3 weight, const ccl_private VolumeRayleighClosure *closure, float3 *layer_albedo)
ccl_device void osl_closure_microfacet_multi_ggx_glass_setup(KernelGlobals kg, ccl_private ShaderData *sd, const uint32_t path_flag, const float3 weight, const ccl_private MicrofacetMultiGGXGlassClosure *closure, float3 *layer_albedo)
ccl_device void osl_closure_bssrdf_setup(KernelGlobals kg, ccl_private ShaderData *sd, const uint32_t path_flag, const float3 weight, const ccl_private BSSRDFClosure *closure, float3 *layer_albedo)
ccl_device void osl_closure_generalized_schlick_bsdf_setup(KernelGlobals kg, ccl_private ShaderData *sd, const uint32_t path_flag, const float3 weight, const ccl_private GeneralizedSchlickBSDFClosure *closure, float3 *layer_albedo)
ccl_device void osl_closure_hair_transmission_setup(KernelGlobals kg, ccl_private ShaderData *sd, const uint32_t path_flag, const float3 weight, const ccl_private HairTransmissionClosure *closure, float3 *layer_albedo)
ccl_device void osl_closure_microfacet_f82_tint_setup(KernelGlobals kg, ccl_private ShaderData *sd, const uint32_t path_flag, const float3 weight, const ccl_private MicrofacetF82TintClosure *closure, float3 *layer_albedo)
ccl_device void osl_closure_fournier_forand_setup(KernelGlobals kg, ccl_private ShaderData *sd, const uint32_t path_flag, const float3 weight, const ccl_private VolumeFournierForandClosure *closure, float3 *layer_albedo)
#define ccl_device_forceinline
#define kernel_data_fetch(name, index)
#define PRIMITIVE_UNPACK_SEGMENT(type)
const ThreadKernelGlobalsCPU * KernelGlobals
#define CCL_NAMESPACE_END
ccl_device void emission_setup(ccl_private ShaderData *sd, const Spectrum weight)
CCL_NAMESPACE_BEGIN ccl_device void background_setup(ccl_private ShaderData *sd, const Spectrum weight)
CCL_NAMESPACE_BEGIN ccl_device void volume_extinction_setup(ccl_private ShaderData *sd, Spectrum weight)
ccl_device_inline float object_volume_density(KernelGlobals kg, const int object)
ccl_device_inline DeviceString make_string(const char *str, const size_t hash)
@ CLOSURE_BSSRDF_BURLEY_ID
@ CLOSURE_BSSRDF_RANDOM_WALK_ID
@ CLOSURE_BSSRDF_RANDOM_WALK_SKIN_ID
@ SD_IS_VOLUME_SHADER_EVAL
ccl_device_inline Spectrum rgb_to_spectrum(const float3 rgb)
ccl_device_inline bool is_zero(const float2 a)
ccl_device_inline float average(const float2 a)
ccl_device_inline float3 safe_normalize_fallback(const float3 a, const float3 fallback)
ccl_device_inline float3 one_float3()
CCL_NAMESPACE_BEGIN ccl_device_inline float3 zero_float3()
closure color bssrdf(string method, normal N, vector radius, color albedo) BUILTIN
ccl_device int volume_draine_setup(ccl_private DraineVolume *volume)
ccl_device int volume_fournier_forand_setup(ccl_private FournierForandVolume *volume, float B, float IOR)
ccl_device int volume_henyey_greenstein_setup(ccl_private HenyeyGreensteinVolume *volume)
ccl_device int volume_rayleigh_setup(ccl_private RayleighVolume *volume)