Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLukas Stockner <lukas.stockner@freenet.de>2016-10-29 19:54:42 +0300
committerLukas Stockner <lukas.stockner@freenet.de>2016-10-29 20:24:08 +0300
commit1272ee455e7aeed3f6acb0b8a8366af5ad6aec99 (patch)
tree1ea02f9f80aea75403d78e898a6d2449d6331036 /intern/cycles/kernel/kernel_shader.h
parentd3b0977a354d91c363d7128f3e0ef2c5eea977e7 (diff)
Cycles: Implement texture coordinates for Point, Spot and Area Lamps
When using the Normal output of the Texture Coordinate node on Point and Spot lamps, the coordinates now depend on the rotation of the lamp. On Area lamps, the Parametric output of the Geometry node now returns UV coordinates on the area lamp. Credit for the Area lamp part goes to Stefan Werner (from D1995).
Diffstat (limited to 'intern/cycles/kernel/kernel_shader.h')
-rw-r--r--intern/cycles/kernel/kernel_shader.h21
1 files changed, 16 insertions, 5 deletions
diff --git a/intern/cycles/kernel/kernel_shader.h b/intern/cycles/kernel/kernel_shader.h
index 3e098c922dc..6480975a84d 100644
--- a/intern/cycles/kernel/kernel_shader.h
+++ b/intern/cycles/kernel/kernel_shader.h
@@ -242,7 +242,8 @@ ccl_device_inline void shader_setup_from_sample(KernelGlobals *kg,
int shader, int object, int prim,
float u, float v, float t,
float time,
- bool object_space)
+ bool object_space,
+ int lamp)
{
/* vectors */
ccl_fetch(sd, P) = P;
@@ -250,7 +251,12 @@ ccl_device_inline void shader_setup_from_sample(KernelGlobals *kg,
ccl_fetch(sd, Ng) = Ng;
ccl_fetch(sd, I) = I;
ccl_fetch(sd, shader) = shader;
- ccl_fetch(sd, type) = (prim == PRIM_NONE)? PRIMITIVE_NONE: PRIMITIVE_TRIANGLE;
+ if(prim != PRIM_NONE)
+ ccl_fetch(sd, type) = PRIMITIVE_TRIANGLE;
+ else if(lamp != LAMP_NONE)
+ ccl_fetch(sd, type) = PRIMITIVE_LAMP;
+ else
+ ccl_fetch(sd, type) = PRIMITIVE_NONE;
/* primitive */
#ifdef __INSTANCING__
@@ -270,11 +276,15 @@ ccl_device_inline void shader_setup_from_sample(KernelGlobals *kg,
#ifdef __OBJECT_MOTION__
shader_setup_object_transforms(kg, sd, time);
+#else
+ }
+ else if(lamp != LAMP_NONE) {
+ ccl_fetch(sd, ob_tfm) = lamp_fetch_transform(kg, lamp, false);
+ ccl_fetch(sd, ob_itfm) = lamp_fetch_transform(kg, lamp, true);
}
+#ifdef __OBJECT_MOTION__
ccl_fetch(sd, time) = time;
-#else
- }
#endif
/* transform into world space */
@@ -357,7 +367,8 @@ ccl_device void shader_setup_from_displace(KernelGlobals *kg, ShaderData *sd,
P, Ng, I,
shader, object, prim,
u, v, 0.0f, 0.5f,
- !(kernel_tex_fetch(__object_flag, object) & SD_TRANSFORM_APPLIED));
+ !(kernel_tex_fetch(__object_flag, object) & SD_TRANSFORM_APPLIED),
+ LAMP_NONE);
}
/* ShaderData setup from ray into background */