[Bf-blender-cvs] [86b8823b177] principled-v2: Fix precomputation lookup for IOR<1

Lukas Stockner noreply at git.blender.org
Sun Jul 24 03:54:25 CEST 2022


Commit: 86b8823b177181d51c2abef8b11bfa78033ef7fb
Author: Lukas Stockner
Date:   Sat Jul 23 19:59:17 2022 +0200
Branches: principled-v2
https://developer.blender.org/rB86b8823b177181d51c2abef8b11bfa78033ef7fb

Fix precomputation lookup for IOR<1

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

M	intern/cycles/kernel/closure/bsdf_microfacet_util.h

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

diff --git a/intern/cycles/kernel/closure/bsdf_microfacet_util.h b/intern/cycles/kernel/closure/bsdf_microfacet_util.h
index e6688e8a82b..a1399bff5fe 100644
--- a/intern/cycles/kernel/closure/bsdf_microfacet_util.h
+++ b/intern/cycles/kernel/closure/bsdf_microfacet_util.h
@@ -88,13 +88,11 @@ ccl_device_forceinline float microfacet_ggx_glass_E(KernelGlobals kg,
                                                     float ior)
 {
   bool inv_table = (ior < 1.0f);
-  if (inv_table) {
-    ior = 1.0f / ior;
-  }
   int offset = inv_table ? kernel_data.tables.ggx_glass_inv_E_offset :
                            kernel_data.tables.ggx_glass_E_offset;
 
-  float x = mu, y = 1 - rough, z = sqrtf(0.5f * (ior - 1.0f));
+  float x = mu, y = 1 - rough;
+  float z = sqrtf(0.5f * ((inv_table? 1.0f / ior : ior) - 1.0f));
   return lookup_table_read_3D(kg, x, y, z, offset, 16, 16, 16);
 }
 
@@ -104,9 +102,6 @@ ccl_device_forceinline float microfacet_ggx_dielectric_E(KernelGlobals kg,
                                                          float ior)
 {
   bool inv_table = (ior < 1.0f);
-  if (inv_table) {
-    ior = 1.0f / ior;
-  }
   int offset = inv_table ? kernel_data.tables.ggx_dielectric_inv_E_offset :
                            kernel_data.tables.ggx_dielectric_E_offset;
 
@@ -114,7 +109,7 @@ ccl_device_forceinline float microfacet_ggx_dielectric_E(KernelGlobals kg,
   float F0 = fresnel_dielectric_cos(1.0f, ior);
   float x = mix(mu, inverse_lerp(1.0f, F0, macro_fresnel), 0.5f);
   float y = 1 - rough;
-  float z = sqrtf(0.5f * (ior - 1.0f));
+  float z = sqrtf(0.5f * ((inv_table? 1.0f / ior : ior) - 1.0f));
 
   return lookup_table_read_3D(kg, x, y, z, offset, 16, 16, 16);
 }



More information about the Bf-blender-cvs mailing list