[Bf-blender-cvs] [2925298d96c] upstream_cycles_texture_cache: Cycles: Added dPdu/dPdv to area ligths so we can use filtered textures on them

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


Commit: 2925298d96c652e98324619c7eb81884610d79e9
Author: Stefan Werner
Date:   Thu May 25 19:49:16 2017 +0200
Branches: upstream_cycles_texture_cache
https://developer.blender.org/rB2925298d96c652e98324619c7eb81884610d79e9

Cycles: Added dPdu/dPdv to area ligths so we can use filtered textures on them

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

M	intern/cycles/kernel/kernel_light.h
M	intern/cycles/kernel/kernel_path.h
M	intern/cycles/kernel/kernel_shader.h
M	intern/cycles/kernel/osl/osl_services.cpp

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

diff --git a/intern/cycles/kernel/kernel_light.h b/intern/cycles/kernel/kernel_light.h
index bb182ef1f25..c1233844c59 100644
--- a/intern/cycles/kernel/kernel_light.h
+++ b/intern/cycles/kernel/kernel_light.h
@@ -776,6 +776,29 @@ ccl_device bool lamp_light_eval(KernelGlobals *kg, int lamp, float3 P, float3 D,
 	return true;
 }
 
+ccl_device void lamp_light_dPdudv(KernelGlobals *kg, int lamp, float u, float v, float3 *dPdu, float3 *dPdv )
+{
+	const ccl_global KernelLight *klight = &kernel_tex_fetch(__lights, lamp);
+	LightType type = (LightType)klight->type;
+
+	switch(type)
+	{
+	case LIGHT_AREA: {
+		*dPdu = make_float3(klight->area.axisu[0],	klight->area.axisu[1], klight->area.axisu[2]);
+		*dPdv = make_float3(klight->area.axisv[0],	klight->area.axisv[1], klight->area.axisv[2]);
+ 		break;
+	}
+	case LIGHT_POINT:
+	case LIGHT_DISTANT:
+	case LIGHT_SPOT:
+	default:
+		// todo
+		*dPdu = make_float3(0.0f, 0.0f, 0.0f);
+		*dPdv = make_float3(0.0f, 0.0f, 0.0f);
+		break;
+	}
+}
+
 /* Triangle Light */
 
 /* returns true if the triangle is has motion blur or an instancing transform applied */
diff --git a/intern/cycles/kernel/kernel_path.h b/intern/cycles/kernel/kernel_path.h
index deac1ca932f..48410780fcf 100644
--- a/intern/cycles/kernel/kernel_path.h
+++ b/intern/cycles/kernel/kernel_path.h
@@ -28,8 +28,8 @@
 #include "kernel/bvh/bvh.h"
 
 #include "kernel/kernel_accumulate.h"
-#include "kernel/kernel_shader.h"
 #include "kernel/kernel_light.h"
+#include "kernel/kernel_shader.h"
 #include "kernel/kernel_passes.h"
 
 #if defined(__VOLUME__) || defined(__SUBSURFACE__)
diff --git a/intern/cycles/kernel/kernel_shader.h b/intern/cycles/kernel/kernel_shader.h
index fcd2aaedb2b..aeb67c7ff1a 100644
--- a/intern/cycles/kernel/kernel_shader.h
+++ b/intern/cycles/kernel/kernel_shader.h
@@ -358,6 +358,15 @@ ccl_device_inline void shader_setup_from_sample(KernelGlobals *kg,
 			object_normal_transform_auto(kg, sd, &sd->dNdv);
 		}
 #  endif
+#endif
+	}
+	if(sd->type & PRIMITIVE_LAMP) {
+#ifdef __DPDU__
+		lamp_light_dPdudv(kg, lamp, sd->u, sd->v, &sd->dPdu, &sd->dPdv);
+#endif
+#ifdef __DNDU__
+		sd->dNdu = make_float3(0.0f, 0.0f, 0.0f);
+		sd->dNdv = make_float3(0.0f, 0.0f, 0.0f);
 #endif
 	}
 	else {
diff --git a/intern/cycles/kernel/osl/osl_services.cpp b/intern/cycles/kernel/osl/osl_services.cpp
index 4b7a4cb34b7..979429de3d2 100644
--- a/intern/cycles/kernel/osl/osl_services.cpp
+++ b/intern/cycles/kernel/osl/osl_services.cpp
@@ -53,6 +53,7 @@
 
 #include "kernel/kernel_projection.h"
 #include "kernel/kernel_accumulate.h"
+#include "kernel/kernel_light.h"
 #include "kernel/kernel_shader.h"
 
 #ifdef WITH_PTEX



More information about the Bf-blender-cvs mailing list