17 const bool wo_outside,
30 if (wi.z * wo.z < 0.0f) {
48 if (wi.z < 1e-5f || (wo.z < 1e-5f && wo_outside) || (wo.z > -1e-5f && !wo_outside))
54 float shadowing_lambda =
mf_lambda(wo_outside ? wo : -wo, alpha);
63 eval *= -lambda_r / (shadowing_lambda - lambda_r);
65 eval *= -lambda_r *
beta(-lambda_r, shadowing_lambda + 1.0f);
67 const float G2 = 1.0f / (1.0f - (lambda_r + 1.0f) + shadowing_lambda);
68 float val = G2 * 0.25f / wi.z;
69 if (alpha.
x == alpha.
y)
100 if (
order == 0 && use_fresnel) {
108 eval = throughput * phase *
109 mf_G1(wo_outside ? wo : -wo,
110 mf_C1((outside == wo_outside) ? hr : -hr),
117 #ifdef MF_MULTI_GLASS
125 eval += throughput * phase *
126 mf_G1(wo_outside ? wo : -wo,
127 mf_C1((outside == wo_outside) ? hr : -hr),
130 if (
order + 1 < 10) {
132 #ifdef MF_MULTI_GLASS
143 if (use_fresnel && !next_outside) {
146 else if (use_fresnel &&
order > 0) {
150 if (use_fresnel &&
order > 0) {
162 G1_r =
mf_G1(wr, C1_r, lambda_r);
167 eval *=
fabsf(wi.z / wo.z);
203 *wo = outside ? wr : -wr;
212 if (!use_fresnel &&
order > 0)
216 #ifdef MF_MULTI_GLASS
235 throughput = t_color;
237 throughput *= t_color;
245 throughput = t_color;
247 throughput *= t_color;
254 G1_r =
mf_G1(wr, C1_r, lambda_r);
260 #undef MF_MULTI_GLASS
261 #undef MF_MULTI_GLOSSY
262 #undef MF_PHASE_FUNCTION
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint order
Group Output data from inside of a node group A color picker Mix two input colors RGB to Convert a color s luminance to a grayscale value Generate a normal vector and a dot product Bright Control the brightness and contrast of the input color Vector Map an input vectors to used to fine tune the interpolation of the input Camera Retrieve information about the camera and how it relates to the current shading point s position Clamp a value between a minimum and a maximum Vector Perform vector math operation Invert a color
ccl_device_forceinline float3 mf_eval_phase_glossy(const float3 w, const float lambda, const float3 wo, const float2 alpha)
ccl_device_forceinline float D_ggx_aniso(const float3 wm, const float2 alpha)
ccl_device_forceinline float mf_C1(const float h)
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 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_lambda(const float3 w, const float2 alpha)
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)
#define MF_FUNCTION_FULL_NAME(prefix)
CCL_NAMESPACE_BEGIN ccl_device_forceinline float D_ggx(float3 wm, float alpha)
ccl_device_forceinline float3 mf_sample_vndf(const float3 wi, const float2 alpha, const float randx, const float randy)
ccl_device_forceinline float mf_G1(const float3 w, const float C1, const float lambda)
ccl_device_forceinline float3 mf_sample_phase_glossy(const float3 wi, ccl_private float3 *weight, const float3 wm)
ccl_device_forceinline float3 MF_FUNCTION_FULL_NAME() mf_sample(float3 wi, ccl_private float3 *wo, const float3 color, const float alpha_x, const float alpha_y, ccl_private uint *lcg_state, const float eta, bool use_fresnel, const float3 cspec0)
ccl_device_forceinline float3 MF_FUNCTION_FULL_NAME() mf_eval(float3 wi, float3 wo, const bool wo_outside, const float3 color, const float alpha_x, const float alpha_y, ccl_private uint *lcg_state, const float eta, bool use_fresnel, const float3 cspec0)
ccl_device float fresnel_dielectric_cos(float cosi, float eta)
ccl_device_forceinline float3 interpolate_fresnel_color(float3 L, float3 H, float ior, float F0, float3 cspec0)
#define ccl_device_forceinline
ccl_device float lcg_step_float(T rng)
vec_base< T, Size > normalize(const vec_base< T, Size > &v)
ccl_device_inline float beta(float x, float y)