Commit: 732db8a57f6d4e5d6f44bbad176c15fd55377f0a
Author: Pascal Schoen
Date:   Wed Nov 16 09:22:25 2016 +0100
Branches: cycles_disney_bsdf_transmittance
https://developer.blender.org/rB732db8a57f6d4e5d6f44bbad176c15fd55377f0a

Indication if to use fresnel is now handled via the type of the BSDF.

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

M       intern/cycles/kernel/closure/bsdf.h
M       intern/cycles/kernel/closure/bsdf_microfacet.h
M       intern/cycles/kernel/closure/bsdf_microfacet_multi.h
M       intern/cycles/kernel/svm/svm_types.h

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

diff --git a/intern/cycles/kernel/closure/bsdf.h 
b/intern/cycles/kernel/closure/bsdf.h
index b7c53df..b46f6a7 100644
--- a/intern/cycles/kernel/closure/bsdf.h
+++ b/intern/cycles/kernel/closure/bsdf.h
@@ -88,16 +88,21 @@ ccl_device_forceinline int bsdf_sample(KernelGlobals *kg,
                                eval, omega_in, &domega_in->dx, &domega_in->dy, 
pdf);
                        break;
                case CLOSURE_BSDF_MICROFACET_GGX_ID:
+               case CLOSURE_BSDF_MICROFACET_GGX_FRESNEL_ID:
+               case CLOSURE_BSDF_MICROFACET_GGX_CLEARCOAT_ID:
                case CLOSURE_BSDF_MICROFACET_GGX_ANISO_ID:
+               case CLOSURE_BSDF_MICROFACET_GGX_ANISO_FRESNEL_ID:
                case CLOSURE_BSDF_MICROFACET_GGX_REFRACTION_ID:
                        label = bsdf_microfacet_ggx_sample(kg, sc, 
ccl_fetch(sd, Ng), ccl_fetch(sd, I), ccl_fetch(sd, dI).dx, ccl_fetch(sd, 
dI).dy, randu, randv,
                                eval, omega_in, &domega_in->dx, &domega_in->dy, 
pdf);
                        break;
                case CLOSURE_BSDF_MICROFACET_MULTI_GGX_ID:
+               case CLOSURE_BSDF_MICROFACET_MULTI_GGX_FRESNEL_ID:
                        label = bsdf_microfacet_multi_ggx_sample(kg, sc, 
ccl_fetch(sd, Ng), ccl_fetch(sd, I), ccl_fetch(sd, dI).dx, ccl_fetch(sd, 
dI).dy, randu, randv,
                                eval, omega_in,  &domega_in->dx, 
&domega_in->dy, pdf, &ccl_fetch(sd, lcg_state));
                        break;
                case CLOSURE_BSDF_MICROFACET_MULTI_GGX_GLASS_ID:
+               case CLOSURE_BSDF_MICROFACET_MULTI_GGX_GLASS_FRESNEL_ID:
                        label = bsdf_microfacet_multi_ggx_glass_sample(kg, sc, 
ccl_fetch(sd, Ng), ccl_fetch(sd, I), ccl_fetch(sd, dI).dx, ccl_fetch(sd, 
dI).dy, randu, randv,
                                eval, omega_in,  &domega_in->dx, 
&domega_in->dy, pdf, &ccl_fetch(sd, lcg_state));
                        break;
@@ -199,14 +204,19 @@ float3 bsdf_eval(KernelGlobals *kg,
                                eval = bsdf_transparent_eval_reflect(sc, 
ccl_fetch(sd, I), omega_in, pdf);
                                break;
                        case CLOSURE_BSDF_MICROFACET_GGX_ID:
+                       case CLOSURE_BSDF_MICROFACET_GGX_FRESNEL_ID:
+                       case CLOSURE_BSDF_MICROFACET_GGX_CLEARCOAT_ID:
                        case CLOSURE_BSDF_MICROFACET_GGX_ANISO_ID:
+                       case CLOSURE_BSDF_MICROFACET_GGX_ANISO_FRESNEL_ID:
                        case CLOSURE_BSDF_MICROFACET_GGX_REFRACTION_ID:
                                eval = bsdf_microfacet_ggx_eval_reflect(sc, 
ccl_fetch(sd, I), omega_in, pdf);
                                break;
                        case CLOSURE_BSDF_MICROFACET_MULTI_GGX_ID:
+                       case CLOSURE_BSDF_MICROFACET_MULTI_GGX_FRESNEL_ID:
                                eval = 
bsdf_microfacet_multi_ggx_eval_reflect(sc, ccl_fetch(sd, I), omega_in, pdf, 
&ccl_fetch(sd, lcg_state));
                                break;
                        case CLOSURE_BSDF_MICROFACET_MULTI_GGX_GLASS_ID:
+                       case CLOSURE_BSDF_MICROFACET_MULTI_GGX_GLASS_FRESNEL_ID:
                                eval = 
bsdf_microfacet_multi_ggx_glass_eval_reflect(sc, ccl_fetch(sd, I), omega_in, 
pdf, &ccl_fetch(sd, lcg_state));
                                break;
                        case CLOSURE_BSDF_MICROFACET_BECKMANN_ID:
@@ -274,14 +284,19 @@ float3 bsdf_eval(KernelGlobals *kg,
                                eval = bsdf_transparent_eval_transmit(sc, 
ccl_fetch(sd, I), omega_in, pdf);
                                break;
                        case CLOSURE_BSDF_MICROFACET_GGX_ID:
+                       case CLOSURE_BSDF_MICROFACET_GGX_FRESNEL_ID:
+                       case CLOSURE_BSDF_MICROFACET_GGX_CLEARCOAT_ID:
                        case CLOSURE_BSDF_MICROFACET_GGX_ANISO_ID:
+                       case CLOSURE_BSDF_MICROFACET_GGX_ANISO_FRESNEL_ID:
                        case CLOSURE_BSDF_MICROFACET_GGX_REFRACTION_ID:
                                eval = bsdf_microfacet_ggx_eval_transmit(sc, 
ccl_fetch(sd, I), omega_in, pdf);
                                break;
                        case CLOSURE_BSDF_MICROFACET_MULTI_GGX_ID:
+                       case CLOSURE_BSDF_MICROFACET_MULTI_GGX_FRESNEL_ID:
                                eval = 
bsdf_microfacet_multi_ggx_eval_transmit(sc, ccl_fetch(sd, I), omega_in, pdf, 
&ccl_fetch(sd, lcg_state));
                                break;
                        case CLOSURE_BSDF_MICROFACET_MULTI_GGX_GLASS_ID:
+                       case CLOSURE_BSDF_MICROFACET_MULTI_GGX_GLASS_FRESNEL_ID:
                                eval = 
bsdf_microfacet_multi_ggx_glass_eval_transmit(sc, ccl_fetch(sd, I), omega_in, 
pdf, &ccl_fetch(sd, lcg_state));
                                break;
                        case CLOSURE_BSDF_MICROFACET_BECKMANN_ID:
@@ -336,11 +351,16 @@ ccl_device void bsdf_blur(KernelGlobals *kg, 
ShaderClosure *sc, float roughness)
 #ifdef __SVM__
        switch(sc->type) {
                case CLOSURE_BSDF_MICROFACET_MULTI_GGX_ID:
+               case CLOSURE_BSDF_MICROFACET_MULTI_GGX_FRESNEL_ID:
                case CLOSURE_BSDF_MICROFACET_MULTI_GGX_GLASS_ID:
+               case CLOSURE_BSDF_MICROFACET_MULTI_GGX_GLASS_FRESNEL_ID:
                        bsdf_microfacet_multi_ggx_blur(sc, roughness);
                        break;
                case CLOSURE_BSDF_MICROFACET_GGX_ID:
+               case CLOSURE_BSDF_MICROFACET_GGX_FRESNEL_ID:
+               case CLOSURE_BSDF_MICROFACET_GGX_CLEARCOAT_ID:
                case CLOSURE_BSDF_MICROFACET_GGX_ANISO_ID:
+               case CLOSURE_BSDF_MICROFACET_GGX_ANISO_FRESNEL_ID:
                case CLOSURE_BSDF_MICROFACET_GGX_REFRACTION_ID:
                        bsdf_microfacet_ggx_blur(sc, roughness);
                        break;
@@ -374,10 +394,15 @@ ccl_device bool bsdf_merge(ShaderClosure *a, 
ShaderClosure *b)
                case CLOSURE_BSDF_REFLECTION_ID:
                case CLOSURE_BSDF_REFRACTION_ID:
                case CLOSURE_BSDF_MICROFACET_GGX_ID:
+               case CLOSURE_BSDF_MICROFACET_GGX_FRESNEL_ID:
+               case CLOSURE_BSDF_MICROFACET_GGX_CLEARCOAT_ID:
                case CLOSURE_BSDF_MICROFACET_GGX_ANISO_ID:
+               case CLOSURE_BSDF_MICROFACET_GGX_ANISO_FRESNEL_ID:
                case CLOSURE_BSDF_MICROFACET_GGX_REFRACTION_ID:
                case CLOSURE_BSDF_MICROFACET_MULTI_GGX_ID:
+               case CLOSURE_BSDF_MICROFACET_MULTI_GGX_FRESNEL_ID:
                case CLOSURE_BSDF_MICROFACET_MULTI_GGX_GLASS_ID:
+               case CLOSURE_BSDF_MICROFACET_MULTI_GGX_GLASS_FRESNEL_ID:
                case CLOSURE_BSDF_MICROFACET_BECKMANN_ID:
                case CLOSURE_BSDF_MICROFACET_BECKMANN_ANISO_ID:
                case CLOSURE_BSDF_MICROFACET_BECKMANN_REFRACTION_ID:
diff --git a/intern/cycles/kernel/closure/bsdf_microfacet.h 
b/intern/cycles/kernel/closure/bsdf_microfacet.h
index ea4e4d3..38364bb 100644
--- a/intern/cycles/kernel/closure/bsdf_microfacet.h
+++ b/intern/cycles/kernel/closure/bsdf_microfacet.h
@@ -37,7 +37,6 @@ CCL_NAMESPACE_BEGIN
 
 typedef ccl_addr_space struct MicrofacetExtra {
        float3 color, cspec0;
-       bool use_fresnel, is_disney_clearcoat;
        float clearcoat;
 } MicrofacetExtra;
 
@@ -244,8 +243,11 @@ ccl_device_forceinline float3 microfacet_sample_stretched(
  */
 ccl_device_forceinline float3 reflection_color(const MicrofacetBsdf *bsdf, 
float3 L, float3 H) {
        float3 F = make_float3(1.0f, 1.0f, 1.0f);
+       bool use_fresnel = (bsdf->type == CLOSURE_BSDF_MICROFACET_GGX_FRESNEL_ID
+                          || bsdf->type == 
CLOSURE_BSDF_MICROFACET_GGX_CLEARCOAT_ID
+                          || bsdf->type == 
CLOSURE_BSDF_MICROFACET_GGX_ANISO_FRESNEL_ID);
 
-       if(bsdf->extra && bsdf->extra->use_fresnel) {
+       if(use_fresnel) {
                float F0 = fresnel_dielectric_cos(1.0f, bsdf->ior);
 
                F = interpolate_fresnel_color(L, H, bsdf->ior, F0, 
bsdf->extra->cspec0);
@@ -289,9 +291,6 @@ ccl_device int bsdf_microfacet_ggx_setup(MicrofacetBsdf 
*bsdf)
 
 ccl_device int bsdf_microfacet_ggx_fresnel_setup(MicrofacetBsdf *bsdf)
 {
-       bsdf->extra->use_fresnel = true;
-       bsdf->extra->is_disney_clearcoat = false;
-
        bsdf->extra->cspec0.x = saturate(bsdf->extra->cspec0.x);
        bsdf->extra->cspec0.y = saturate(bsdf->extra->cspec0.y);
        bsdf->extra->cspec0.z = saturate(bsdf->extra->cspec0.z);
@@ -299,16 +298,13 @@ ccl_device int 
bsdf_microfacet_ggx_fresnel_setup(MicrofacetBsdf *bsdf)
        bsdf->alpha_x = saturate(bsdf->alpha_x);
        bsdf->alpha_y = bsdf->alpha_x;
 
-       bsdf->type = CLOSURE_BSDF_MICROFACET_GGX_ID;
+       bsdf->type = CLOSURE_BSDF_MICROFACET_GGX_FRESNEL_ID;
 
        return SD_BSDF|SD_BSDF_HAS_EVAL;
 }
 
 ccl_device int bsdf_microfacet_ggx_clearcoat_setup(MicrofacetBsdf *bsdf)
 {
-       bsdf->extra->use_fresnel = true;
-       bsdf->extra->is_disney_clearcoat = true;
-
        bsdf->extra->cspec0.x = saturate(bsdf->extra->cspec0.x);
        bsdf->extra->cspec0.y = saturate(bsdf->extra->cspec0.y);
        bsdf->extra->cspec0.z = saturate(bsdf->extra->cspec0.z);
@@ -316,7 +312,7 @@ ccl_device int 
bsdf_microfacet_ggx_clearcoat_setup(MicrofacetBsdf *bsdf)
        bsdf->alpha_x = saturate(bsdf->alpha_x);
        bsdf->alpha_y = bsdf->alpha_x;
 
-       bsdf->type = CLOSURE_BSDF_MICROFACET_GGX_ID;
+       bsdf->type = CLOSURE_BSDF_MICROFACET_GGX_CLEARCOAT_ID;
 
        return SD_BSDF|SD_BSDF_HAS_EVAL;
 }
@@ -350,9 +346,6 @@ ccl_device int 
bsdf_microfacet_ggx_aniso_setup(MicrofacetBsdf *bsdf)
 
 ccl_device int bsdf_microfacet_ggx_aniso_fresnel_setup(MicrofacetBsdf *bsdf)
 {
-       bsdf->extra->use_fresnel = true;
-       bsdf->extra->is_disney_clearcoat = false;
-
        bsdf->extra->cspec0.x = saturate(bsdf->extra->cspec0.x);
        bsdf->extra->cspec0.y = saturate(bsdf->extra->cspec0.y);
        bsdf->extra->cspec0.z = saturate(bsdf->extra->cspec0.z);
@@ -360,7 +353,7 @@ ccl_device int 
bsdf_microfacet_ggx_aniso_fresnel_setup(MicrofacetBsdf *bsdf)
        bsdf->alpha_x = saturate(bsdf->alpha_x);
        bsdf->alpha_y = saturate(bsdf->alpha_y);
 
-       bsdf->type = CLOSURE_BSDF_MICROFACET_GGX_ANISO_ID;
+       bsdf->type = CLOSURE_BSDF_MICROFACET_GGX_ANISO_FRESNEL_ID;
 
        return SD_BSDF|SD_BSDF_HAS_EVAL;
 }
@@ -405,6 +398,8 @@ ccl_device float3 bsdf_microfacet_ggx_eval_reflect(const 
ShaderClosure *sc, cons
                float alpha2 = alpha_x * alpha_y;
                float D, G1o, G1i;
 
+               bool is_disney_clearcoat = (bsdf->type == 
CLOSURE_BSDF_MICROFACET_GGX_CLEARCOAT_ID);
+
                if(alpha_x == alpha_y) {
                        /* isotropic
                         * eq. 20: (F*G*D)/(4*in*on)
@@ -414,7 +409,7 @@ ccl_device float3 bsdf_microfacet_ggx_eval_reflect(const 
ShaderClosure *sc, cons
                        float cosThetaM4 = cosThetaM2 * cosThetaM2;
                        float tanThetaM2 = (1 - cosThetaM2) / cosThetaM2;
 
-                       if(bsdf->extra && bsdf->extra->is_disney_clearcoat) {
+                       if(is_disney_clearcoat) {
                                /* use GTR1 for clearcoat */
                                D = D_GTR1(cosThetaM, bsdf->alpha_x);
 
@@ -473,7 +468,7 @@ ccl_device float3 bsdf_microfacet_ggx_eval_reflect(const 
ShaderClosure *sc, cons
                float common = D * 0.25f / cosNO;
 
                float3 F = reflection_color(bsdf, omega_in, m);
-               if(bsdf->extra && bsdf->extra->is_disney_clearcoat) {
+               if(is_disney_clearcoat) {
                        F *= 0.25f * bsdf->extra->clearcoat;
                }
 
@@ -591,8 +586,12 @@ ccl_device int bsdf_microfacet_ggx_sample(KernelGlobals 
*kg, const ShaderClosure
                                                *pdf = 1e6f;
                                                *eval = make_float3(1e6f, 1e6f, 
1e6f);
 
+                                               bool use_fresnel = (bsdf->type 
== CLOSURE_BSDF_MICROFACET_GGX_FRESNEL_ID
+                                                                  || 
bsdf->type == CLOSURE_BSDF_MICROFACET_GGX_CLEARCOAT_ID
+                                                                  || 
bsdf->type == CLOSURE_BSDF_MICROFACET_GGX_ANISO_FRESNEL_ID);
+
                                                /* if fresnel is used, 
calculate the color with reflection_color(...) */
-                                               if(bsdf->extra && 
bsdf->extra->use_fresnel) {
+                                               if(use_fresnel) {
                                                        *pdf = 1.0f;
                                                        *eval = 
reflection_color(bsdf, *omega_in, m);
                                                }
@@ -603,6 

@@ Diff output truncated at 10240 characters. @@

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

Reply via email to