[Bf-blender-cvs] [34e28c29b66] upstream_cycles_texture_cache: Cycles: added blurrier texture lookups for indirect diffuse paths

Stefan Werner noreply at git.blender.org
Wed Jun 27 14:04:52 CEST 2018


Commit: 34e28c29b66ccb413965c7d21216bdd4c61c819b
Author: Stefan Werner
Date:   Mon Jun 5 18:38:51 2017 +0200
Branches: upstream_cycles_texture_cache
https://developer.blender.org/rB34e28c29b66ccb413965c7d21216bdd4c61c819b

Cycles: added blurrier texture lookups for indirect diffuse paths

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

M	intern/cycles/kernel/kernel_light.h
M	intern/cycles/kernel/svm/svm_image.h

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

diff --git a/intern/cycles/kernel/kernel_light.h b/intern/cycles/kernel/kernel_light.h
index c1233844c59..3c7bef4b8be 100644
--- a/intern/cycles/kernel/kernel_light.h
+++ b/intern/cycles/kernel/kernel_light.h
@@ -792,7 +792,7 @@ ccl_device void lamp_light_dPdudv(KernelGlobals *kg, int lamp, float u, float v,
 	case LIGHT_DISTANT:
 	case LIGHT_SPOT:
 	default:
-		// todo
+		// TODO (Stefan)
 		*dPdu = make_float3(0.0f, 0.0f, 0.0f);
 		*dPdv = make_float3(0.0f, 0.0f, 0.0f);
 		break;
diff --git a/intern/cycles/kernel/svm/svm_image.h b/intern/cycles/kernel/svm/svm_image.h
index e1d97ef8312..888f45f9449 100644
--- a/intern/cycles/kernel/svm/svm_image.h
+++ b/intern/cycles/kernel/svm/svm_image.h
@@ -16,11 +16,13 @@
 
 #ifdef __OIIO__
 #  include "kernel/kernel_oiio_globals.h"
+#  define NEAREST_LOOKUP_PATHS (PATH_RAY_DIFFUSE | PATH_RAY_SHADOW | PATH_RAY_DIFFUSE_ANCESTOR | PATH_RAY_VOLUME_SCATTER | PATH_RAY_GLOSSY)
+#  define BLUR_LOOKUP_PATHS (PATH_RAY_DIFFUSE | PATH_RAY_DIFFUSE_ANCESTOR)
 #endif
 
 CCL_NAMESPACE_BEGIN
 
-ccl_device float4 svm_image_texture(KernelGlobals *kg, int id, float x, float y, differential ds, differential dt, uint srgb, uint use_alpha, bool fast_lookup)
+ccl_device float4 svm_image_texture(KernelGlobals *kg, int id, float x, float y, differential ds, differential dt, uint srgb, uint use_alpha, int path_flag)
 {
 	float4 r;
 #  ifdef __OIIO__
@@ -28,12 +30,12 @@ ccl_device float4 svm_image_texture(KernelGlobals *kg, int id, float x, float y,
 		OIIO::TextureOpt options;
 		options.swrap = options.twrap = kg->oiio->textures[id].extension;
 		options.anisotropic = 8;
-
-		if(fast_lookup) {
+		
+		if(path_flag & NEAREST_LOOKUP_PATHS) {
 			options.interpmode = OIIO::TextureOpt::InterpClosest;
 			options.mipmode = OIIO::TextureOpt::MipModeOneLevel;
-			//if(path_flag & (PATH_RAY_DIFFUSE | PATH_RAY_DIFFUSE_ANCESTOR))
-			//	options.sblur = options.tblur = 1.f/64.f;
+			if(path_flag & BLUR_LOOKUP_PATHS)
+				options.sblur = options.tblur = 1.f/64.f;
 		}
 		else {
 			options.interpmode = kg->oiio->textures[id].interpolation;
@@ -101,8 +103,6 @@ ccl_device void svm_node_tex_image(KernelGlobals *kg, ShaderData *sd, int path_f
 		tex_co = make_float2(co.x, co.y);
 	}
 
-	bool fast_lookup = path_flag & (PATH_RAY_DIFFUSE | PATH_RAY_SHADOW | PATH_RAY_DIFFUSE_ANCESTOR | PATH_RAY_VOLUME_SCATTER | PATH_RAY_GLOSSY);
-
 	differential ds, dt;
 #ifdef __KERNEL_CPU__
 	if(stack_valid(dx_offset) && stack_valid(dy_offset)) {
@@ -136,7 +136,7 @@ ccl_device void svm_node_tex_image(KernelGlobals *kg, ShaderData *sd, int path_f
 		ds = differential_zero();
 		dt = differential_zero();
 	}
-	float4 f = svm_image_texture(kg, id, tex_co.x, tex_co.y, ds, dt, srgb, use_alpha, fast_lookup);
+	float4 f = svm_image_texture(kg, id, tex_co.x, tex_co.y, ds, dt, srgb, use_alpha, path_flag);
 
 	if(stack_valid(out_offset))
 		stack_store_float3(stack, out_offset, make_float3(f.x, f.y, f.z));
@@ -262,7 +262,6 @@ ccl_device void svm_node_tex_environment(KernelGlobals *kg, ShaderData *sd, int
 	float2 uv;
 
 	co = safe_normalize(co);
-	bool fast_lookup = path_flag & (PATH_RAY_DIFFUSE | PATH_RAY_SHADOW | PATH_RAY_DIFFUSE_ANCESTOR | PATH_RAY_VOLUME_SCATTER | PATH_RAY_GLOSSY);
 #ifdef __OIIO__
 	float3 dRdx, dRdy;
 	if(stack_valid(dx_offset) && stack_valid(dy_offset)) {
@@ -279,11 +278,11 @@ ccl_device void svm_node_tex_environment(KernelGlobals *kg, ShaderData *sd, int
 		options.swrap = options.twrap = kg->oiio->textures[id].extension;
 		options.anisotropic = 8;
 
-		if(fast_lookup) {
+		if(path_flag & NEAREST_LOOKUP_PATHS) {
 			options.interpmode = OIIO::TextureOpt::InterpClosest;
 			options.mipmode = OIIO::TextureOpt::MipModeOneLevel;
-	//		if(path_flag & (PATH_RAY_DIFFUSE | PATH_RAY_DIFFUSE_ANCESTOR))
-	//		   options.sblur = options.tblur = 1.f/64.f;
+			if(path_flag & BLUR_LOOKUP_PATHS)
+			   options.sblur = options.tblur = 1.f/64.f;
 		}
 		else {
 			options.interpmode = kg->oiio->textures[id].interpolation;
@@ -305,9 +304,7 @@ ccl_device void svm_node_tex_environment(KernelGlobals *kg, ShaderData *sd, int
 	else
 		uv = direction_to_mirrorball(co);
 
-	bool fast_lookup = path_flag & (PATH_RAY_DIFFUSE | PATH_RAY_SHADOW | PATH_RAY_DIFFUSE_ANCESTOR | PATH_RAY_VOLUME_SCATTER);
-	uint use_alpha = stack_valid(alpha_offset);
-	f = svm_image_texture(kg, id, uv.x, uv.y, differential_zero(), differential_zero(), srgb, use_alpha, fast_lookup);
+	f = svm_image_texture(kg, id, uv.x, uv.y, differential_zero(), differential_zero(), srgb, use_alpha, path_flag);
 #ifdef __OIIO__
 	}
 #endif



More information about the Bf-blender-cvs mailing list