[Bf-blender-cvs] [78faf075e4f] principled-v2: Use correct 0.5px offset for LUTs

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


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

Use correct 0.5px offset for LUTs

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

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 9e3f2d3913e..46ebe1539b4 100644
--- a/intern/cycles/kernel/closure/bsdf_microfacet_util.h
+++ b/intern/cycles/kernel/closure/bsdf_microfacet_util.h
@@ -79,7 +79,7 @@ ccl_device_forceinline float3 microfacet_ggx_sample_vndf(
 }
 
 /* Albedo correction.
- * TODO: Use proper lookup table code for this data. Also use 0.5px offset. */
+ * TODO: Use proper lookup table code for this data. */
 
 ccl_device_forceinline float microfacet_ggx_glass_E(float mu, float rough, float ior)
 {
@@ -88,9 +88,9 @@ ccl_device_forceinline float microfacet_ggx_glass_E(float mu, float rough, float
     ior = 1.0f / ior;
   }
 
-  rough = saturatef(1 - rough) * 16.0f;
-  mu = saturatef(mu) * 16.0f;
-  ior = saturatef(sqrtf(0.5f * (ior - 1.0f))) * 16.0f;
+  rough = saturatef(1 - rough - 1.0f/32.0f) * 16.0f;
+  mu = saturatef(mu - 1.0f/32.0f) * 16.0f;
+  ior = saturatef(sqrtf(0.5f * (ior - 1.0f)) - 1.0f/32.0f) * 16.0f;
 
   int rough_i = min(15, (int)rough);
   int rough_i1 = min(15, rough_i + 1);
@@ -121,9 +121,9 @@ ccl_device_forceinline float microfacet_ggx_dielectric_E(float mu, float rough,
     ior = 1.0f / ior;
   }
 
-  rough = saturatef(1 - rough) * 16.0f;
-  mu = saturatef(mu) * 16.0f;
-  ior = saturatef(sqrtf(0.5f * (ior - 1.0f))) * 16.0f;
+  rough = saturatef(1 - rough - 1.0f/32.0f) * 16.0f;
+  mu = saturatef(mu - 1.0f/32.0f) * 16.0f;
+  ior = saturatef(sqrtf(0.5f * (ior - 1.0f)) - 1.0f/32.0f) * 16.0f;
 
   int rough_i = min(15, (int)rough);
   int rough_i1 = min(15, rough_i + 1);
@@ -147,8 +147,8 @@ ccl_device_forceinline float microfacet_ggx_dielectric_E(float mu, float rough,
 
 ccl_device_forceinline float microfacet_ggx_E(float mu, float rough)
 {
-  rough = saturatef(1 - rough) * 32.0f;
-  mu = saturatef(mu) * 32.0f;
+  rough = saturatef(1 - rough - 1.0f/64.0f) * 32.0f;
+  mu = saturatef(mu - 1.0f/64.0f) * 32.0f;
 
   int rough_i = min(31, (int)rough);
   int rough_i1 = min(31, rough_i + 1);
@@ -165,7 +165,7 @@ ccl_device_forceinline float microfacet_ggx_E(float mu, float rough)
 
 ccl_device_forceinline float microfacet_ggx_E_avg(float rough)
 {
-  rough = saturatef(1 - rough) * 32.0f;
+  rough = saturatef(1 - rough - 1.0f/64.0f) * 32.0f;
   int rough_i = min(31, (int)rough);
   int rough_i1 = min(31, rough_i + 1);
   rough -= rough_i;



More information about the Bf-blender-cvs mailing list