[Bf-blender-cvs] [56b865347f9] principled-v2: Clamp LUT results to 0..1 range

Lukas Stockner noreply at git.blender.org
Mon Jul 4 23:56:15 CEST 2022


Commit: 56b865347f9c49876a5288e8b29b4831d474432c
Author: Lukas Stockner
Date:   Mon Jul 4 23:31:48 2022 +0200
Branches: principled-v2
https://developer.blender.org/rB56b865347f9c49876a5288e8b29b4831d474432c

Clamp LUT results to 0..1 range

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

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

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

diff --git a/intern/cycles/kernel/closure/bsdf_microfacet_util.h b/intern/cycles/kernel/closure/bsdf_microfacet_util.h
index 4915807d275..9e3f2d3913e 100644
--- a/intern/cycles/kernel/closure/bsdf_microfacet_util.h
+++ b/intern/cycles/kernel/closure/bsdf_microfacet_util.h
@@ -109,7 +109,7 @@ ccl_device_forceinline float microfacet_ggx_glass_E(float mu, float rough, float
   float c = lerp(table[ior_i1][rough_i][mu_i], table[ior_i1][rough_i][mu_i1], mu);
   float d = lerp(table[ior_i1][rough_i1][mu_i], table[ior_i1][rough_i1][mu_i1], mu);
 
-  return lerp(lerp(a, b, rough), lerp(c, d, rough), ior);
+  return saturatef(lerp(lerp(a, b, rough), lerp(c, d, rough), ior));
 }
 
 ccl_device_forceinline float microfacet_ggx_dielectric_E(float mu, float rough, float ior)
@@ -142,7 +142,7 @@ ccl_device_forceinline float microfacet_ggx_dielectric_E(float mu, float rough,
   float c = lerp(table[ior_i1][rough_i][mu_i], table[ior_i1][rough_i][mu_i1], mu);
   float d = lerp(table[ior_i1][rough_i1][mu_i], table[ior_i1][rough_i1][mu_i1], mu);
 
-  return lerp(lerp(a, b, rough), lerp(c, d, rough), ior);
+  return saturatef(lerp(lerp(a, b, rough), lerp(c, d, rough), ior));
 }
 
 ccl_device_forceinline float microfacet_ggx_E(float mu, float rough)
@@ -160,7 +160,7 @@ ccl_device_forceinline float microfacet_ggx_E(float mu, float rough)
 
   float a = lerp(table_ggx_E[rough_i][mu_i], table_ggx_E[rough_i][mu_i1], mu);
   float b = lerp(table_ggx_E[rough_i1][mu_i], table_ggx_E[rough_i1][mu_i1], mu);
-  return lerp(a, b, rough);
+  return saturatef(lerp(a, b, rough));
 }
 
 ccl_device_forceinline float microfacet_ggx_E_avg(float rough)
@@ -169,7 +169,7 @@ ccl_device_forceinline float microfacet_ggx_E_avg(float rough)
   int rough_i = min(31, (int)rough);
   int rough_i1 = min(31, rough_i + 1);
   rough -= rough_i;
-  return lerp(table_ggx_E_avg[rough_i], table_ggx_E_avg[rough_i1], rough);
+  return saturatef(lerp(table_ggx_E_avg[rough_i], table_ggx_E_avg[rough_i1], rough));
 }
 
 ccl_device_inline float3 metallic_Fss(float3 F0, float3 F90, float falloff)
diff --git a/intern/cycles/kernel/closure/bsdf_principled_sheen.h b/intern/cycles/kernel/closure/bsdf_principled_sheen.h
index 09a82553296..250f591f650 100644
--- a/intern/cycles/kernel/closure/bsdf_principled_sheen.h
+++ b/intern/cycles/kernel/closure/bsdf_principled_sheen.h
@@ -118,7 +118,7 @@ ccl_device_forceinline float sheen_v2_E(float mu, float rough)
 
   float a = lerp(table_sheen_E[rough_i][mu_i], table_sheen_E[rough_i][mu_i1], mu);
   float b = lerp(table_sheen_E[rough_i1][mu_i], table_sheen_E[rough_i1][mu_i1], mu);
-  return lerp(a, b, rough);
+  return saturatef(lerp(a, b, rough));
 }
 
 ccl_device int bsdf_principled_sheen_setup(ccl_private const ShaderData *sd,



More information about the Bf-blender-cvs mailing list