[Bf-blender-cvs] [3235b657cd4] cycles_path_guiding: Cycles-X: clamping bsdf weights to be >= 0 and changing default value of eta to 1.0

Sebastian Herholz noreply at git.blender.org
Fri Jun 24 13:09:15 CEST 2022


Commit: 3235b657cd48945f8ace33e8d3eb21f916f7ef6d
Author: Sebastian Herholz
Date:   Thu Jun 23 20:24:15 2022 +0200
Branches: cycles_path_guiding
https://developer.blender.org/rB3235b657cd48945f8ace33e8d3eb21f916f7ef6d

Cycles-X: clamping bsdf weights to be >= 0 and changing default value of eta to 1.0

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

M	intern/cycles/kernel/osl/closures.cpp
M	intern/cycles/kernel/svm/closure.h

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

diff --git a/intern/cycles/kernel/osl/closures.cpp b/intern/cycles/kernel/osl/closures.cpp
index 7c6b48154e4..6d0c2c9c609 100644
--- a/intern/cycles/kernel/osl/closures.cpp
+++ b/intern/cycles/kernel/osl/closures.cpp
@@ -713,7 +713,7 @@ class MicrofacetMultiGGXClosure : public MicrofacetMultiClosure {
       return;
     }
 
-    bsdf->ior = 0.0f;
+    bsdf->ior = 1.0f;
     bsdf->T = make_float3(0.0f, 0.0f, 0.0f);
     bsdf->alpha_y = bsdf->alpha_x;
     sd->flag |= bsdf_microfacet_multi_ggx_setup(bsdf);
@@ -743,7 +743,7 @@ class MicrofacetMultiGGXAnisoClosure : public MicrofacetMultiClosure {
       return;
     }
 
-    bsdf->ior = 0.0f;
+    bsdf->ior = 1.0f;
     sd->flag |= bsdf_microfacet_multi_ggx_setup(bsdf);
   }
 };
diff --git a/intern/cycles/kernel/svm/closure.h b/intern/cycles/kernel/svm/closure.h
index 305bd404d27..be828c76665 100644
--- a/intern/cycles/kernel/svm/closure.h
+++ b/intern/cycles/kernel/svm/closure.h
@@ -24,7 +24,7 @@ ccl_device void svm_node_glass_setup(ccl_private ShaderData *sd,
     else {
       bsdf->alpha_y = 0.0f;
       bsdf->alpha_x = 0.0f;
-      bsdf->ior = 0.0f;
+      bsdf->ior = eta;
       sd->flag |= bsdf_reflection_setup(bsdf);
     }
   }
@@ -541,7 +541,8 @@ ccl_device_noinline int svm_node_closure_bsdf(KernelGlobals kg,
       float roughness = sqr(param1);
 
       bsdf->N = N;
-      bsdf->ior = 0.0f;
+      // TODO (sherholz): this should be set to the correct eta 
+      bsdf->ior = 1.0f;
       bsdf->extra = NULL;
 
       if (data_node.y == SVM_STACK_INVALID) {
@@ -1197,6 +1198,10 @@ ccl_device void svm_node_closure_weight(ccl_private ShaderData *sd,
                                         uint weight_offset)
 {
   float3 weight = stack_load_float3(stack, weight_offset);
+  weight.x = max(0.f, weight.x);
+  weight.y = max(0.f, weight.y);
+  weight.z = max(0.f, weight.z);
+  assert(weight.x >= 0.f && weight.y >= 0.f && weight.z >= 0.f);
   svm_node_closure_store_weight(sd, weight);
 }



More information about the Bf-blender-cvs mailing list