[Bf-blender-cvs] [d04b16bb847] cycles_texture_cache: Cycles: Widened differentials for diffuse and glossy BSDFs for better texture cache performance

Stefan Werner noreply at git.blender.org
Mon Nov 27 20:40:18 CET 2017


Commit: d04b16bb847c5e9aee63941d49046e354531eb19
Author: Stefan Werner
Date:   Tue May 9 21:44:21 2017 +0200
Branches: cycles_texture_cache
https://developer.blender.org/rBd04b16bb847c5e9aee63941d49046e354531eb19

Cycles: Widened differentials for diffuse and glossy BSDFs for better texture cache performance

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

M	intern/cycles/kernel/closure/bsdf_diffuse.h
M	intern/cycles/kernel/closure/bsdf_diffuse_ramp.h
M	intern/cycles/kernel/closure/bsdf_hair.h
M	intern/cycles/kernel/closure/bsdf_microfacet.h
M	intern/cycles/kernel/closure/bsdf_microfacet_multi.h
M	intern/cycles/kernel/closure/bsdf_oren_nayar.h
M	intern/cycles/kernel/closure/bsdf_phong_ramp.h
M	intern/cycles/kernel/closure/bsdf_toon.h

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

diff --git a/intern/cycles/kernel/closure/bsdf_diffuse.h b/intern/cycles/kernel/closure/bsdf_diffuse.h
index ec6f1f20996..98d557dc641 100644
--- a/intern/cycles/kernel/closure/bsdf_diffuse.h
+++ b/intern/cycles/kernel/closure/bsdf_diffuse.h
@@ -82,8 +82,10 @@ ccl_device int bsdf_diffuse_sample(const ShaderClosure *sc, float3 Ng, float3 I,
 		*eval = make_float3(*pdf, *pdf, *pdf);
 #ifdef __RAY_DIFFERENTIALS__
 		// TODO: find a better approximation for the diffuse bounce
-		*domega_in_dx = (2 * dot(N, dIdx)) * N - dIdx;
-		*domega_in_dy = (2 * dot(N, dIdy)) * N - dIdy;
+		*domega_in_dx = (2.0f * dot(N, dIdx)) * N - dIdx;
+		*domega_in_dy = (2.0f * dot(N, dIdy)) * N - dIdy;
+		*domega_in_dx *= 125.0f;
+		*domega_in_dy *= 125.0f;
 #endif
 	}
 	else
@@ -127,8 +129,10 @@ ccl_device int bsdf_translucent_sample(const ShaderClosure *sc, float3 Ng, float
 		*eval = make_float3(*pdf, *pdf, *pdf);
 #ifdef __RAY_DIFFERENTIALS__
 		// TODO: find a better approximation for the diffuse bounce
-		*domega_in_dx = -((2 * dot(N, dIdx)) * N - dIdx);
-		*domega_in_dy = -((2 * dot(N, dIdy)) * N - dIdy);
+		*domega_in_dx = -((2.0f * dot(N, dIdx)) * N - dIdx);
+		*domega_in_dy = -((2.0f * dot(N, dIdy)) * N - dIdy);
+		*domega_in_dx *= 125.0f;
+		*domega_in_dy *= 125.0f;
 #endif
 	}
 	else {
diff --git a/intern/cycles/kernel/closure/bsdf_diffuse_ramp.h b/intern/cycles/kernel/closure/bsdf_diffuse_ramp.h
index 24f40af46a3..b504ef1f618 100644
--- a/intern/cycles/kernel/closure/bsdf_diffuse_ramp.h
+++ b/intern/cycles/kernel/closure/bsdf_diffuse_ramp.h
@@ -93,8 +93,10 @@ ccl_device int bsdf_diffuse_ramp_sample(const ShaderClosure *sc, float3 Ng, floa
 	if(dot(Ng, *omega_in) > 0.0f) {
 		*eval = bsdf_diffuse_ramp_get_color(bsdf->colors, *pdf * M_PI_F) * M_1_PI_F;
 #ifdef __RAY_DIFFERENTIALS__
-		*domega_in_dx = (2 * dot(N, dIdx)) * N - dIdx;
-		*domega_in_dy = (2 * dot(N, dIdy)) * N - dIdy;
+		*domega_in_dx = (2.0f * dot(N, dIdx)) * N - dIdx;
+		*domega_in_dy = (2.0f * dot(N, dIdy)) * N - dIdy;
+		*domega_in_dx *= 125.0f;
+		*domega_in_dy *= 125.0f;
 #endif
 	}
 	else
diff --git a/intern/cycles/kernel/closure/bsdf_hair.h b/intern/cycles/kernel/closure/bsdf_hair.h
index daaa26dc6ad..8b8a2b34b6f 100644
--- a/intern/cycles/kernel/closure/bsdf_hair.h
+++ b/intern/cycles/kernel/closure/bsdf_hair.h
@@ -205,8 +205,10 @@ ccl_device int bsdf_hair_reflection_sample(const ShaderClosure *sc, float3 Ng, f
 
 	//differentials - TODO: find a better approximation for the reflective bounce
 #ifdef __RAY_DIFFERENTIALS__
-	*domega_in_dx = 2 * dot(locy, dIdx) * locy - dIdx;
-	*domega_in_dy = 2 * dot(locy, dIdy) * locy - dIdy;
+	*domega_in_dx = 2.0f * dot(locy, dIdx) * locy - dIdx;
+	*domega_in_dy = 2.0f * dot(locy, dIdy) * locy - dIdy;
+	*domega_in_dx *= 10.0f;
+	*domega_in_dy *= 10.0f;
 #endif
 
 	*pdf = fabsf(phi_pdf * theta_pdf);
diff --git a/intern/cycles/kernel/closure/bsdf_microfacet.h b/intern/cycles/kernel/closure/bsdf_microfacet.h
index 18b645e0ecb..b661629dafd 100644
--- a/intern/cycles/kernel/closure/bsdf_microfacet.h
+++ b/intern/cycles/kernel/closure/bsdf_microfacet.h
@@ -681,8 +681,10 @@ ccl_device int bsdf_microfacet_ggx_sample(KernelGlobals *kg, const ShaderClosure
 					}
 
 #ifdef __RAY_DIFFERENTIALS__
-					*domega_in_dx = (2 * dot(m, dIdx)) * m - dIdx;
-					*domega_in_dy = (2 * dot(m, dIdy)) * m - dIdy;
+					*domega_in_dx = (2.0f * dot(m, dIdx)) * m - dIdx;
+					*domega_in_dy = (2.0f * dot(m, dIdy)) * m - dIdy;
+					*domega_in_dx *= 10.0f;
+					*domega_in_dy *= 10.0f;
 #endif
 				}
 			}
@@ -711,6 +713,8 @@ ccl_device int bsdf_microfacet_ggx_sample(KernelGlobals *kg, const ShaderClosure
 #ifdef __RAY_DIFFERENTIALS__
 				*domega_in_dx = dTdx;
 				*domega_in_dy = dTdy;
+				*domega_in_dx *= 10.0f;
+				*domega_in_dy *= 10.0f;
 #endif
 
 				if(alpha_x*alpha_y <= 1e-7f || fabsf(m_eta - 1.0f) < 1e-4f) {
@@ -1047,6 +1051,8 @@ ccl_device int bsdf_microfacet_beckmann_sample(KernelGlobals *kg, const ShaderCl
 #ifdef __RAY_DIFFERENTIALS__
 					*domega_in_dx = (2 * dot(m, dIdx)) * m - dIdx;
 					*domega_in_dy = (2 * dot(m, dIdy)) * m - dIdy;
+					*domega_in_dx *= 10;
+					*domega_in_dy *= 10;
 #endif
 				}
 			}
@@ -1075,6 +1081,8 @@ ccl_device int bsdf_microfacet_beckmann_sample(KernelGlobals *kg, const ShaderCl
 #ifdef __RAY_DIFFERENTIALS__
 				*domega_in_dx = dTdx;
 				*domega_in_dy = dTdy;
+				*domega_in_dx *= 10;
+				*domega_in_dy *= 10;
 #endif
 
 				if(alpha_x*alpha_y <= 1e-7f || fabsf(m_eta - 1.0f) < 1e-4f) {
diff --git a/intern/cycles/kernel/closure/bsdf_microfacet_multi.h b/intern/cycles/kernel/closure/bsdf_microfacet_multi.h
index 2f2c35d5d1f..47f995568a2 100644
--- a/intern/cycles/kernel/closure/bsdf_microfacet_multi.h
+++ b/intern/cycles/kernel/closure/bsdf_microfacet_multi.h
@@ -476,8 +476,10 @@ ccl_device int bsdf_microfacet_multi_ggx_sample(KernelGlobals *kg, const ShaderC
 	*omega_in = X*localO.x + Y*localO.y + Z*localO.z;
 
 #ifdef __RAY_DIFFERENTIALS__
-	*domega_in_dx = (2 * dot(Z, dIdx)) * Z - dIdx;
-	*domega_in_dy = (2 * dot(Z, dIdy)) * Z - dIdy;
+	*domega_in_dx = (2.0f * dot(Z, dIdx)) * Z - dIdx;
+	*domega_in_dy = (2.0f * dot(Z, dIdy)) * Z - dIdy;
+	*domega_in_dx *= 10.0f;
+	*domega_in_dy *= 10.0f;
 #endif
 	return LABEL_REFLECT|LABEL_GLOSSY;
 }
diff --git a/intern/cycles/kernel/closure/bsdf_oren_nayar.h b/intern/cycles/kernel/closure/bsdf_oren_nayar.h
index 6b770fc0c16..ca766e68cb0 100644
--- a/intern/cycles/kernel/closure/bsdf_oren_nayar.h
+++ b/intern/cycles/kernel/closure/bsdf_oren_nayar.h
@@ -95,6 +95,8 @@ ccl_device int bsdf_oren_nayar_sample(const ShaderClosure *sc, float3 Ng, float3
 		// TODO: find a better approximation for the bounce
 		*domega_in_dx = (2.0f * dot(bsdf->N, dIdx)) * bsdf->N - dIdx;
 		*domega_in_dy = (2.0f * dot(bsdf->N, dIdy)) * bsdf->N - dIdy;
+		*domega_in_dx *= 125.0f;
+		*domega_in_dy *= 125.0f;
 #endif
 	}
 	else {
diff --git a/intern/cycles/kernel/closure/bsdf_phong_ramp.h b/intern/cycles/kernel/closure/bsdf_phong_ramp.h
index 420f94755ee..8c8d4fdffef 100644
--- a/intern/cycles/kernel/closure/bsdf_phong_ramp.h
+++ b/intern/cycles/kernel/closure/bsdf_phong_ramp.h
@@ -104,8 +104,10 @@ ccl_device int bsdf_phong_ramp_sample(const ShaderClosure *sc, float3 Ng, float3
 		float3 R = (2 * cosNO) * bsdf->N - I;
 
 #ifdef __RAY_DIFFERENTIALS__
-		*domega_in_dx = (2 * dot(bsdf->N, dIdx)) * bsdf->N - dIdx;
-		*domega_in_dy = (2 * dot(bsdf->N, dIdy)) * bsdf->N - dIdy;
+		*domega_in_dx = (2.0f * dot(bsdf->N, dIdx)) * bsdf->N - dIdx;
+		*domega_in_dy = (2.0f * dot(bsdf->N, dIdy)) * bsdf->N - dIdy;
+		*domega_in_dx *= 10.0f;
+		*domega_in_dy *= 10.0f;
 #endif
 		
 		float3 T, B;
diff --git a/intern/cycles/kernel/closure/bsdf_toon.h b/intern/cycles/kernel/closure/bsdf_toon.h
index d8b6d8ddead..aa9e0a3a117 100644
--- a/intern/cycles/kernel/closure/bsdf_toon.h
+++ b/intern/cycles/kernel/closure/bsdf_toon.h
@@ -124,6 +124,8 @@ ccl_device int bsdf_diffuse_toon_sample(const ShaderClosure *sc, float3 Ng, floa
 			// TODO: find a better approximation for the bounce
 			*domega_in_dx = (2.0f * dot(bsdf->N, dIdx)) * bsdf->N - dIdx;
 			*domega_in_dy = (2.0f * dot(bsdf->N, dIdy)) * bsdf->N - dIdy;
+			*domega_in_dx *= 125.0f;
+			*domega_in_dy *= 125.0f;
 #endif
 		}
 		else
@@ -199,8 +201,10 @@ ccl_device int bsdf_glossy_toon_sample(const ShaderClosure *sc, float3 Ng, float
 				*eval = *pdf * bsdf_toon_get_intensity(max_angle, smooth, angle);
 
 #ifdef __RAY_DIFFERENTIALS__
-				*domega_in_dx = (2 * dot(bsdf->N, dIdx)) * bsdf->N - dIdx;
-				*domega_in_dy = (2 * dot(bsdf->N, dIdy)) * bsdf->N - dIdy;
+				*domega_in_dx = (2.0f * dot(bsdf->N, dIdx)) * bsdf->N - dIdx;
+				*domega_in_dy = (2.0f * dot(bsdf->N, dIdy)) * bsdf->N - dIdy;
+				*domega_in_dx *= 10.0f;
+				*domega_in_dy *= 10.0f;
 #endif
 			}
 			else



More information about the Bf-blender-cvs mailing list