Commit: 50ea5e3e34394a727e3cceb6203adb48834a9ab7
Author: Pascal Schoen
Date:   Tue Jun 7 10:24:50 2016 +0200
Branches: cycles_disney_brdf
https://developer.blender.org/rB50ea5e3e34394a727e3cceb6203adb48834a9ab7

Disney BSDF is now supporting CUDA

===================================================================

M       intern/cycles/kernel/closure/bsdf_disney_clearcoat.h
M       intern/cycles/kernel/closure/bsdf_disney_diffuse.h
M       intern/cycles/kernel/closure/bsdf_disney_sheen.h
M       intern/cycles/kernel/closure/bsdf_disney_specular.h
M       intern/cycles/kernel/closure/bsdf_util.h
M       intern/cycles/kernel/svm/svm_closure.h

===================================================================

diff --git a/intern/cycles/kernel/closure/bsdf_disney_clearcoat.h 
b/intern/cycles/kernel/closure/bsdf_disney_clearcoat.h
index af141aa..377d219 100644
--- a/intern/cycles/kernel/closure/bsdf_disney_clearcoat.h
+++ b/intern/cycles/kernel/closure/bsdf_disney_clearcoat.h
@@ -39,7 +39,7 @@ CCL_NAMESPACE_BEGIN
 ccl_device int bsdf_disney_clearcoat_setup(ShaderClosure *sc)
 {
        /* clearcoat roughness */
-       sc->custom1 = lerp(0.1f, 0.001f, sc->data1/*clearcoatGloss*/); // 0.1f 
* (1.0f - sc->data1) + 0.001f * sc->data1;
+       sc->custom1 = 0.1f * (1.0f - sc->data1/*clearcoatGloss*/) + 0.001f * 
sc->data1/*clearcoatGloss*/; // lerp(0.1f, 0.001f, 
sc->data1/*clearcoatGloss*/); // 
 
     sc->type = CLOSURE_BSDF_DISNEY_CLEARCOAT_ID;
     return SD_BSDF|SD_BSDF_HAS_EVAL;
@@ -69,9 +69,6 @@ ccl_device float3 bsdf_disney_clearcoat_eval_reflect(const 
ShaderClosure *sc, co
                                * eq. 33: first we calculate D(m) */
                        float cosThetaM = dot(N, m);
                        float cosThetaM2 = cosThetaM * cosThetaM;
-                       float cosThetaM4 = cosThetaM2 * cosThetaM2;
-                       float tanThetaM2 = (1 - cosThetaM2) / cosThetaM2;
-                       //D = alpha2 / (M_PI_F * cosThetaM4 * (alpha2 + 
tanThetaM2) * (alpha2 + tanThetaM2));
                        D = (alpha2 - 1) / (M_PI_F * logf(alpha2) * (1 + 
(alpha2 - 1) * cosThetaM2));
 
                        /* eq. 34: now calculate G1(i,m) and G1(o,m) */
@@ -83,13 +80,10 @@ ccl_device float3 bsdf_disney_clearcoat_eval_reflect(const 
ShaderClosure *sc, co
                        /* eq. 20 */
                        float common = D * 0.25f / cosNO;
 
-                       /*float u = clamp(1.0f - dot(omega_in, m), 0.0f, 1.0f);
-                       float u2 = u * u;
-                       float FH = u2 * u2 * u;*/
                        float FH = schlick_fresnel(dot(omega_in, m));
-                       float3 F = lerp(make_float3(0.04f, 0.04f, 0.04f), 
make_float3(1.0f, 1.0f, 1.0f), FH); // make_float3(0.04f, 0.04f, 0.04f) * (1.0f 
- FH) + make_float3(1.0f, 1.0f, 1.0f) * FH;
+                       float3 F = (0.04f * (1.0f - FH) + 1.0f * FH) * 0.25f * 
sc->data0/*clearcoat*/ * make_float3(1.0f, 1.0f, 1.0f); // 
lerp(make_float3(0.04f, 0.04f, 0.04f), make_float3(1.0f, 1.0f, 1.0f), FH);
 
-                       float3 out = F * G * common * 0.25f * 
sc->data0/*clearcoat*/;
+                       float3 out = F * G * common;
 
                        /* eq. 2 in distribution of visible normals sampling
                         * pm = Dw = G1o * dot(m, I) * D / dot(N, I); */
@@ -159,9 +153,6 @@ ccl_device int bsdf_disney_clearcoat_sample(const 
ShaderClosure *sc,
                                                float D, G1i;
 
                                                float cosThetaM2 = cosThetaM * 
cosThetaM;
-                                               //float cosThetaM4 = cosThetaM2 
* cosThetaM2;
-                                               //float tanThetaM2 = 
1/(cosThetaM2) - 1;
-                                               //D = alpha2 / (M_PI_F * 
cosThetaM4 * (alpha2 + tanThetaM2) * (alpha2 + tanThetaM2));
                                                D = (alpha2 - 1) / (M_PI_F * 
logf(alpha2) * (1 + (alpha2 - 1) * cosThetaM2));
 
                                                /* eval BRDF*cosNI */
@@ -175,11 +166,8 @@ ccl_device int bsdf_disney_clearcoat_sample(const 
ShaderClosure *sc,
                                                float common = (G1o * D) * 
0.25f / cosNO;
                                                *pdf = common;
 
-                                               /*float u = clamp(1.0f - 
dot(*omega_in, m), 0.0f, 1.0f);
-                                               float u2 = u * u;
-                                               float FH = u2 * u2 * u;*/
                                                float FH = 
schlick_fresnel(dot(*omega_in, m));
-                                               float3 F = 
lerp(make_float3(0.04f, 0.04f, 0.04f), make_float3(1.0f, 1.0f, 1.0f), FH); // 
make_float3(0.04f, 0.04f, 0.04f) * (1.0f - FH) + make_float3(1.0f, 1.0f, 1.0f) 
* FH;
+                                               float3 F = make_float3(0.04f, 
0.04f, 0.04f) * (1.0f - FH) + make_float3(1.0f, 1.0f, 1.0f) * FH; // 
lerp(make_float3(0.04f, 0.04f, 0.04f), make_float3(1.0f, 1.0f, 1.0f), FH);
 
                                                *eval = G1i * common * F * 
0.25f * sc->data0/*clearcoat*/;
                                        }
diff --git a/intern/cycles/kernel/closure/bsdf_disney_diffuse.h 
b/intern/cycles/kernel/closure/bsdf_disney_diffuse.h
index 87cb3d3..5bfecc2 100644
--- a/intern/cycles/kernel/closure/bsdf_disney_diffuse.h
+++ b/intern/cycles/kernel/closure/bsdf_disney_diffuse.h
@@ -52,7 +52,7 @@ ccl_device float3 calculate_disney_diffuse_brdf(const 
ShaderClosure *sc,
 
        float FL = schlick_fresnel(NdotL), FV = schlick_fresnel(NdotV);
     const float Fd90 = 0.5f + 2.0f * LdotH*LdotH * sc->data0/*roughness*/;
-    float Fd = lerp(1.0f, Fd90, FL) * lerp(1.0f, Fd90, FV);
+       float Fd = (1.0f * (1.0f - FL) + Fd90 * FL) * (1.0f * (1.0f - FV) + 
Fd90 * FV); //lerp(1.0f, Fd90, FL) * lerp(1.0f, Fd90, FV);
 
        float3 value = M_1_PI_F * Fd * sc->color0/*baseColor*/;
 
diff --git a/intern/cycles/kernel/closure/bsdf_disney_sheen.h 
b/intern/cycles/kernel/closure/bsdf_disney_sheen.h
index c386254..2806ecf 100644
--- a/intern/cycles/kernel/closure/bsdf_disney_sheen.h
+++ b/intern/cycles/kernel/closure/bsdf_disney_sheen.h
@@ -63,12 +63,12 @@ ccl_device float3 calculate_disney_sheen_brdf(const 
ShaderClosure *sc,
 
 ccl_device int bsdf_disney_sheen_setup(ShaderClosure *sc)
 {
-       float m_cdlum = 0.3f * sc->color0[0] + 0.6f * sc->color0[1] + 0.1f * 
sc->color0[2]; // luminance approx.
+       float m_cdlum = 0.3f * sc->color0.x + 0.6f * sc->color0.y + 0.1f * 
sc->color0.z; // luminance approx.
 
        float3 m_ctint = m_cdlum > 0.0f ? sc->color0 / m_cdlum : 
make_float3(1.0f, 1.0f, 1.0f); // normalize lum. to isolate hue+sat
 
        /* csheen0 */
-       sc->custom_color0 = lerp(make_float3(1.0f, 1.0f, 1.0f), m_ctint, 
sc->data1/*sheenTint*/);
+       sc->custom_color0 = make_float3(1.0f, 1.0f, 1.0f) * (1.0f - 
sc->data1/*sheenTint*/) + m_ctint * sc->data1/*sheenTint*/; // 
lerp(make_float3(1.0f, 1.0f, 1.0f), m_ctint, sc->data1/*sheenTint*/);
 
        sc->type = CLOSURE_BSDF_DISNEY_SHEEN_ID;
        return SD_BSDF|SD_BSDF_HAS_EVAL;
diff --git a/intern/cycles/kernel/closure/bsdf_disney_specular.h 
b/intern/cycles/kernel/closure/bsdf_disney_specular.h
index cc9a420..cbcfc41 100644
--- a/intern/cycles/kernel/closure/bsdf_disney_specular.h
+++ b/intern/cycles/kernel/closure/bsdf_disney_specular.h
@@ -38,12 +38,12 @@ CCL_NAMESPACE_BEGIN
 
 ccl_device int bsdf_disney_specular_setup(ShaderClosure *sc)
 {
-       float m_cdlum = 0.3f * sc->color0[0] + 0.6f * sc->color0[1] + 0.1f * 
sc->color0[2]; // luminance approx.
+       float m_cdlum = 0.3f * sc->color0.x + 0.6f * sc->color0.y + 0.1f * 
sc->color0.z; // luminance approx.
 
        float3 m_ctint = m_cdlum > 0.0f ? sc->color0/*baseColor*/ / m_cdlum : 
make_float3(1.0f, 1.0f, 1.0f); // normalize lum. to isolate hue+sat
 
-       float3 tmp_col = lerp(make_float3(1.0f, 1.0f, 1.0f), m_ctint, 
sc->data2/*specularTint*/); // make_float3(1.0f, 1.0f, 1.0f) * (1.0f - 
sc->data2) + m_ctint * sc->data2;
-       sc->custom_color0/*cspec0*/ = lerp(sc->data1/*specular*/ * 0.08f * 
tmp_col, sc->color0/*baseColor*/, sc->data0/*metallic*/); // (sc->data1 * 0.08f 
* tmp_col) * (1.0f - sc->data0) + sc->color0 * sc->data0;
+       float3 tmp_col = make_float3(1.0f, 1.0f, 1.0f) * (1.0f - 
sc->data2/*specularTint*/) + m_ctint * sc->data2/*specularTint*/; // 
lerp(make_float3(1.0f, 1.0f, 1.0f), m_ctint, sc->data2/*specularTint*/);
+       sc->custom_color0/*cspec0*/ = (sc->data1/*specular*/ * 0.08f * tmp_col) 
* (1.0f - sc->data0/*metallic*/) + sc->color0/*baseColor*/ * 
sc->data0/*metallic*/; // lerp(sc->data1/*specular*/ * 0.08f * tmp_col, 
sc->color0/*baseColor*/, sc->data0/*metallic*/);
 
        float aspect = safe_sqrtf(1.0f - sc->data4/*anisotropic*/ * 0.9f);
        float r2 = sqr(sc->data3/*roughness*/);
@@ -136,12 +136,8 @@ ccl_device float3 bsdf_disney_specular_eval_reflect(const 
ShaderClosure *sc, con
                /* eq. 20 */
                float common = D * 0.25f / cosNO;
 
-               /*float u = clamp(1.0f - dot(omega_in, m), 0.0f, 1.0f);
-               float u2 = u * u;
-               float FH = u2 * u2 * u;*/
         float FH = schlick_fresnel(dot(omega_in, m));
-               float3 F = lerp(sc->custom_color0, make_float3(1.0f, 1.0f, 
1.0f), FH); // sc->custom_color0 * (1.0f - FH) + make_float3(1.0f, 1.0f, 1.0f) 
* FH;
-               //printf("%f, %f\n\r", dot(omega_in, m), FH);
+               float3 F = sc->custom_color0 * (1.0f - FH) + make_float3(1.0f, 
1.0f, 1.0f) * FH; // lerp(sc->custom_color0, make_float3(1.0f, 1.0f, 1.0f), FH);
 
                float3 out = F * G * common;
 
@@ -256,11 +252,8 @@ ccl_device int bsdf_disney_specular_sample(const 
ShaderClosure *sc,
                     float common = (G1o * D) * 0.25f / cosNO;
                     *pdf = common;
 
-                                       /*float u = clamp(1.0f - dot(*omega_in, 
m), 0.0f, 1.0f);
-                                       float u2 = u * u;
-                                       float FH = u2 * u2 * u;*/
                                        float FH = 
schlick_fresnel(dot(*omega_in, m));
-                                       float3 F = lerp(sc->custom_color0, 
make_float3(1.0f, 1.0f, 1.0f), FH); // sc->custom_color0 * (1.0f - FH) + 
make_float3(1.0f, 1.0f, 1.0f) * FH;
+                                       float3 F = sc->custom_color0 * (1.0f - 
FH) + make_float3(1.0f, 1.0f, 1.0f) * FH; // lerp(sc->custom_color0, 
make_float3(1.0f, 1.0f, 1.0f), FH);
 
                     *eval = G1i * common * F;
                 }
diff --git a/intern/cycles/kernel/closure/bsdf_util.h 
b/intern/cycles/kernel/closure/bsdf_util.h
index 9c6b555..f99e0c3 100644
--- a/intern/cycles/kernel/closure/bsdf_util.h
+++ b/intern/cycles/kernel/closure/bsdf_util.h
@@ -130,7 +130,6 @@ ccl_device float schlick_fresnel(float u)
 {
        float m = clamp(1.0f - u, 0.0f, 1.0f);
        float m2 = m * m;
-       //printf("%f, %f, %f, %f\n\r", u, m, m2, m2 * m2 * m);
        return m2 * m2 * m; // pow(m, 5)
 }
 
diff --git a/intern/cycles/kernel/svm/svm_closure.h 
b/intern/cycles/kernel/svm/svm_closure.h
index ac282a1..8e31eaa 100644
--- a/intern/cycles/kernel/svm/svm_closure.h
+++ b/intern/cycles/kernel/svm/svm_closure.h
@@ -168,7 +168,9 @@ ccl_device void svm_node_closure_bsdf(KernelGlobals *kg, 
ShaderData *sd, float *
 
                        // calculate weights of the diffuse and specular part
                        float diffuse_weight = (1.0f - clamp(metallic, 0.0f, 
1.0f)) * (1.0f - clamp(transparency, 0.0f, 1.0f)); // lerp(1.0f - 
clamp(metallic, 0.0f, 1.0f), 0.0f, lerp(clamp(transparency, 0.0f, 1.0f), 0.0f, 
clamp(metallic, 0.0f, 1.0f)));
-                       float specular_weight = lerp(1.0f, fresnel, 
lerp(clamp(transparency, 0.0f, 1.0f), 0.0f, clamp(metallic, 0.0f, 1.0f)));
+                       
+                       float transp = clamp(transparency, 0.0f, 1.0f) * (1.0f 
- clamp(metallic, 0.0f, 1.0f)); // lerp(clamp(transparency, 0.0f, 1.0f), 0.0f, 
clamp(metallic, 0.0f, 1.0f));
+                       float specular_weight = 1.0f * (1.0f - transp) + 
fresnel * transp; // lerp(1.0f, fresnel, transp);
                        if (specular == 0.0f && metallic == 0.0f) {
                                specular_weight = 1.0f - transparency;
                        }

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to