Blender  V3.3
Macros | Functions
bsdf_microfacet_multi.h File Reference
#include "kernel/sample/lcg.h"
#include "kernel/sample/mapping.h"
#include "kernel/closure/bsdf_microfacet_multi_impl.h"

Go to the source code of this file.

Macros

#define MF_NAME_JOIN(x, y)   x##_##y
 
#define MF_NAME_EVAL(x, y)   MF_NAME_JOIN(x, y)
 
#define MF_FUNCTION_FULL_NAME(prefix)   MF_NAME_EVAL(prefix, MF_PHASE_FUNCTION)
 
#define MF_PHASE_FUNCTION   glass
 
#define MF_MULTI_GLASS
 
#define MF_PHASE_FUNCTION   glossy
 
#define MF_MULTI_GLOSSY
 

Functions

CCL_NAMESPACE_BEGIN ccl_device_forceinline float D_ggx (float3 wm, float alpha)
 
ccl_device_forceinline float D_ggx_aniso (const float3 wm, const float2 alpha)
 
ccl_device_forceinline float2 mf_sampleP22_11 (const float cosI, const float randx, const float randy)
 
ccl_device_forceinline float3 mf_sample_vndf (const float3 wi, const float2 alpha, const float randx, const float randy)
 
ccl_device_forceinline float3 mf_sample_phase_glossy (const float3 wi, ccl_private float3 *weight, const float3 wm)
 
ccl_device_forceinline float3 mf_eval_phase_glossy (const float3 w, const float lambda, const float3 wo, const float2 alpha)
 
ccl_device_forceinline float3 mf_sample_phase_glass (const float3 wi, const float eta, const float3 wm, const float randV, ccl_private bool *outside)
 
ccl_device_forceinline float3 mf_eval_phase_glass (const float3 w, const float lambda, const float3 wo, const bool wo_outside, const float2 alpha, const float eta)
 
ccl_device_forceinline float mf_lambda (const float3 w, const float2 alpha)
 
ccl_device_forceinline float mf_invC1 (const float h)
 
ccl_device_forceinline float mf_C1 (const float h)
 
ccl_device_forceinline float mf_G1 (const float3 w, const float C1, const float lambda)
 
ccl_device_forceinline bool mf_sample_height (const float3 w, ccl_private float *h, ccl_private float *C1, ccl_private float *G1, ccl_private float *lambda, const float U)
 
ccl_device_forceinline float mf_ggx_albedo (float r)
 
ccl_device_inline float mf_ggx_transmission_albedo (float a, float ior)
 
ccl_device_forceinline float mf_ggx_pdf (const float3 wi, const float3 wo, const float alpha)
 
ccl_device_forceinline float mf_ggx_aniso_pdf (const float3 wi, const float3 wo, const float2 alpha)
 
ccl_device_forceinline float mf_glass_pdf (const float3 wi, const float3 wo, const float alpha, const float eta)
 
ccl_device void bsdf_microfacet_multi_ggx_blur (ccl_private ShaderClosure *sc, float roughness)
 
ccl_device int bsdf_microfacet_multi_ggx_common_setup (ccl_private MicrofacetBsdf *bsdf)
 
ccl_device int bsdf_microfacet_multi_ggx_setup (ccl_private MicrofacetBsdf *bsdf)
 
ccl_device int bsdf_microfacet_multi_ggx_fresnel_setup (ccl_private MicrofacetBsdf *bsdf, ccl_private const ShaderData *sd)
 
ccl_device int bsdf_microfacet_multi_ggx_refraction_setup (ccl_private MicrofacetBsdf *bsdf)
 
ccl_device float3 bsdf_microfacet_multi_ggx_eval_transmit (ccl_private const ShaderClosure *sc, const float3 I, const float3 omega_in, ccl_private float *pdf, ccl_private uint *lcg_state)
 
ccl_device float3 bsdf_microfacet_multi_ggx_eval_reflect (ccl_private const ShaderClosure *sc, const float3 I, const float3 omega_in, ccl_private float *pdf, ccl_private uint *lcg_state)
 
ccl_device int bsdf_microfacet_multi_ggx_sample (KernelGlobals kg, ccl_private const ShaderClosure *sc, float3 Ng, float3 I, float3 dIdx, float3 dIdy, float randu, float randv, ccl_private float3 *eval, ccl_private float3 *omega_in, ccl_private float3 *domega_in_dx, ccl_private float3 *domega_in_dy, ccl_private float *pdf, ccl_private uint *lcg_state)
 
ccl_device int bsdf_microfacet_multi_ggx_glass_setup (ccl_private MicrofacetBsdf *bsdf)
 
ccl_device int bsdf_microfacet_multi_ggx_glass_fresnel_setup (ccl_private MicrofacetBsdf *bsdf, ccl_private const ShaderData *sd)
 
ccl_device float3 bsdf_microfacet_multi_ggx_glass_eval_transmit (ccl_private const ShaderClosure *sc, const float3 I, const float3 omega_in, ccl_private float *pdf, ccl_private uint *lcg_state)
 
ccl_device float3 bsdf_microfacet_multi_ggx_glass_eval_reflect (ccl_private const ShaderClosure *sc, const float3 I, const float3 omega_in, ccl_private float *pdf, ccl_private uint *lcg_state)
 
ccl_device int bsdf_microfacet_multi_ggx_glass_sample (KernelGlobals kg, ccl_private const ShaderClosure *sc, float3 Ng, float3 I, float3 dIdx, float3 dIdy, float randu, float randv, ccl_private float3 *eval, ccl_private float3 *omega_in, ccl_private float3 *domega_in_dx, ccl_private float3 *domega_in_dy, ccl_private float *pdf, ccl_private uint *lcg_state)
 

Macro Definition Documentation

◆ MF_FUNCTION_FULL_NAME

#define MF_FUNCTION_FULL_NAME (   prefix)    MF_NAME_EVAL(prefix, MF_PHASE_FUNCTION)

Definition at line 354 of file bsdf_microfacet_multi.h.

◆ MF_MULTI_GLASS

#define MF_MULTI_GLASS

Definition at line 357 of file bsdf_microfacet_multi.h.

◆ MF_MULTI_GLOSSY

#define MF_MULTI_GLOSSY

Definition at line 361 of file bsdf_microfacet_multi.h.

◆ MF_NAME_EVAL

#define MF_NAME_EVAL (   x,
  y 
)    MF_NAME_JOIN(x, y)

Definition at line 353 of file bsdf_microfacet_multi.h.

◆ MF_NAME_JOIN

#define MF_NAME_JOIN (   x,
  y 
)    x##_##y

Definition at line 352 of file bsdf_microfacet_multi.h.

◆ MF_PHASE_FUNCTION [1/2]

#define MF_PHASE_FUNCTION   glass

Definition at line 360 of file bsdf_microfacet_multi.h.

◆ MF_PHASE_FUNCTION [2/2]

#define MF_PHASE_FUNCTION   glossy

Definition at line 360 of file bsdf_microfacet_multi.h.

Function Documentation

◆ bsdf_microfacet_multi_ggx_blur()

ccl_device void bsdf_microfacet_multi_ggx_blur ( ccl_private ShaderClosure sc,
float  roughness 
)

Definition at line 364 of file bsdf_microfacet_multi.h.

References MicrofacetBsdf::alpha_x, ccl_private, fmaxf, and usdtokens::roughness().

Referenced by bsdf_blur().

◆ bsdf_microfacet_multi_ggx_common_setup()

ccl_device int bsdf_microfacet_multi_ggx_common_setup ( ccl_private MicrofacetBsdf bsdf)

◆ bsdf_microfacet_multi_ggx_eval_reflect()

ccl_device float3 bsdf_microfacet_multi_ggx_eval_reflect ( ccl_private const ShaderClosure sc,
const float3  I,
const float3  omega_in,
ccl_private float pdf,
ccl_private uint lcg_state 
)

◆ bsdf_microfacet_multi_ggx_eval_transmit()

ccl_device float3 bsdf_microfacet_multi_ggx_eval_transmit ( ccl_private const ShaderClosure sc,
const float3  I,
const float3  omega_in,
ccl_private float pdf,
ccl_private uint lcg_state 
)

Definition at line 418 of file bsdf_microfacet_multi.h.

References make_float3.

Referenced by bsdf_eval().

◆ bsdf_microfacet_multi_ggx_fresnel_setup()

ccl_device int bsdf_microfacet_multi_ggx_fresnel_setup ( ccl_private MicrofacetBsdf bsdf,
ccl_private const ShaderData sd 
)

◆ bsdf_microfacet_multi_ggx_glass_eval_reflect()

ccl_device float3 bsdf_microfacet_multi_ggx_glass_eval_reflect ( ccl_private const ShaderClosure sc,
const float3  I,
const float3  omega_in,
ccl_private float pdf,
ccl_private uint lcg_state 
)

◆ bsdf_microfacet_multi_ggx_glass_eval_transmit()

ccl_device float3 bsdf_microfacet_multi_ggx_glass_eval_transmit ( ccl_private const ShaderClosure sc,
const float3  I,
const float3  omega_in,
ccl_private float pdf,
ccl_private uint lcg_state 
)

Definition at line 592 of file bsdf_microfacet_multi.h.

References ccl_private, blender::math::dot(), I, make_float3, make_orthonormals(), mf_glass_pdf(), X, Y, and Z.

Referenced by bsdf_eval().

◆ bsdf_microfacet_multi_ggx_glass_fresnel_setup()

ccl_device int bsdf_microfacet_multi_ggx_glass_fresnel_setup ( ccl_private MicrofacetBsdf bsdf,
ccl_private const ShaderData sd 
)

◆ bsdf_microfacet_multi_ggx_glass_sample()

ccl_device int bsdf_microfacet_multi_ggx_glass_sample ( KernelGlobals  kg,
ccl_private const ShaderClosure sc,
float3  Ng,
float3  I,
float3  dIdx,
float3  dIdy,
float  randu,
float  randv,
ccl_private float3 eval,
ccl_private float3 omega_in,
ccl_private float3 domega_in_dx,
ccl_private float3 domega_in_dy,
ccl_private float pdf,
ccl_private uint lcg_state 
)

◆ bsdf_microfacet_multi_ggx_glass_setup()

ccl_device int bsdf_microfacet_multi_ggx_glass_setup ( ccl_private MicrofacetBsdf bsdf)

◆ bsdf_microfacet_multi_ggx_refraction_setup()

ccl_device int bsdf_microfacet_multi_ggx_refraction_setup ( ccl_private MicrofacetBsdf bsdf)

◆ bsdf_microfacet_multi_ggx_sample()

ccl_device int bsdf_microfacet_multi_ggx_sample ( KernelGlobals  kg,
ccl_private const ShaderClosure sc,
float3  Ng,
float3  I,
float3  dIdx,
float3  dIdy,
float  randu,
float  randv,
ccl_private float3 eval,
ccl_private float3 omega_in,
ccl_private float3 domega_in_dx,
ccl_private float3 domega_in_dy,
ccl_private float pdf,
ccl_private uint lcg_state 
)

◆ bsdf_microfacet_multi_ggx_setup()

ccl_device int bsdf_microfacet_multi_ggx_setup ( ccl_private MicrofacetBsdf bsdf)

◆ D_ggx()

◆ D_ggx_aniso()

ccl_device_forceinline float D_ggx_aniso ( const float3  wm,
const float2  alpha 
)

◆ mf_C1()

ccl_device_forceinline float mf_C1 ( const float  h)

Definition at line 213 of file bsdf_microfacet_multi.h.

References saturatef().

Referenced by mf_eval().

◆ mf_eval_phase_glass()

ccl_device_forceinline float3 mf_eval_phase_glass ( const float3  w,
const float  lambda,
const float3  wo,
const bool  wo_outside,
const float2  alpha,
const float  eta 
)

◆ mf_eval_phase_glossy()

ccl_device_forceinline float3 mf_eval_phase_glossy ( const float3  w,
const float  lambda,
const float3  wo,
const float2  alpha 
)

◆ mf_G1()

ccl_device_forceinline float mf_G1 ( const float3  w,
const float  C1,
const float  lambda 
)

Definition at line 219 of file bsdf_microfacet_multi.h.

References powf, and w().

Referenced by mf_eval(), mf_sample(), and mf_sample_height().

◆ mf_ggx_albedo()

ccl_device_forceinline float mf_ggx_albedo ( float  r)

Definition at line 265 of file bsdf_microfacet_multi.h.

References expf, r, and saturatef().

Referenced by mf_ggx_aniso_pdf(), mf_ggx_pdf(), and mf_glass_pdf().

◆ mf_ggx_aniso_pdf()

ccl_device_forceinline float mf_ggx_aniso_pdf ( const float3  wi,
const float3  wo,
const float2  alpha 
)

◆ mf_ggx_pdf()

ccl_device_forceinline float mf_ggx_pdf ( const float3  wi,
const float3  wo,
const float  alpha 
)

◆ mf_ggx_transmission_albedo()

ccl_device_inline float mf_ggx_transmission_albedo ( float  a,
float  ior 
)

Definition at line 277 of file bsdf_microfacet_multi.h.

References Freestyle::a, blender::math::clamp(), expf, usdtokens::ior(), and saturatef().

Referenced by mf_glass_pdf().

◆ mf_glass_pdf()

ccl_device_forceinline float mf_glass_pdf ( const float3  wi,
const float3  wo,
const float  alpha,
const float  eta 
)

◆ mf_invC1()

ccl_device_forceinline float mf_invC1 ( const float  h)

Definition at line 208 of file bsdf_microfacet_multi.h.

References saturatef().

Referenced by mf_sample_height().

◆ mf_lambda()

ccl_device_forceinline float mf_lambda ( const float3  w,
const float2  alpha 
)

◆ mf_sample_height()

ccl_device_forceinline bool mf_sample_height ( const float3  w,
ccl_private float h,
ccl_private float C1,
ccl_private float G1,
ccl_private float lambda,
const float  U 
)

Definition at line 230 of file bsdf_microfacet_multi.h.

References fabsf, mf_G1(), mf_invC1(), powf, U, and w().

Referenced by mf_eval(), and mf_sample().

◆ mf_sample_phase_glass()

ccl_device_forceinline float3 mf_sample_phase_glass ( const float3  wi,
const float  eta,
const float3  wm,
const float  randV,
ccl_private bool outside 
)

◆ mf_sample_phase_glossy()

ccl_device_forceinline float3 mf_sample_phase_glossy ( const float3  wi,
ccl_private float3 weight,
const float3  wm 
)

Definition at line 97 of file bsdf_microfacet_multi.h.

References blender::math::dot().

Referenced by mf_eval(), and mf_sample().

◆ mf_sample_vndf()

ccl_device_forceinline float3 mf_sample_vndf ( const float3  wi,
const float2  alpha,
const float  randx,
const float  randy 
)

◆ mf_sampleP22_11()

ccl_device_forceinline float2 mf_sampleP22_11 ( const float  cosI,
const float  randx,
const float  randy 
)

Definition at line 36 of file bsdf_microfacet_multi.h.

References A, cosf, D(), fabsf, M_2PI_F, make_float2, max, r, safe_sqrtf(), sinf, sqrtf, and z.

Referenced by mf_sample_vndf().