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:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2012-10-10 17:02:20 +0400
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2012-10-10 17:02:20 +0400
commitf0a9b664694dacb0388a8e078d46753dc6a36352 (patch)
tree2abf4e68d65708dd36133f1ed83c2b578d34b859 /intern/cycles/kernel/svm/svm_closure.h
parentb4671d67edef053118ae53b12b2672603a8bf9b6 (diff)
Cycles: Anisotropic BSDF enabled, with tangents now computed from the active UV map.
It's using the Ward BSDF currently, which has some energy loss so might be a bit dark. More/better BSDF options can be implemented later. Patch by Mike Farnsworth, some modifications by me. Currently it's not possible yet to set a custom tangent, that will follow as part of per-bsdf normals patch.
Diffstat (limited to 'intern/cycles/kernel/svm/svm_closure.h')
-rw-r--r--intern/cycles/kernel/svm/svm_closure.h21
1 files changed, 20 insertions, 1 deletions
diff --git a/intern/cycles/kernel/svm/svm_closure.h b/intern/cycles/kernel/svm/svm_closure.h
index 935504026ef..c942d50908c 100644
--- a/intern/cycles/kernel/svm/svm_closure.h
+++ b/intern/cycles/kernel/svm/svm_closure.h
@@ -179,7 +179,7 @@ __device void svm_node_closure_bsdf(KernelGlobals *kg, ShaderData *sd, float *st
float roughness_u = param1;
float roughness_v = param2;
- bsdf_ward_setup(sd, sc, normalize(sd->dPdu), roughness_u, roughness_v);
+ bsdf_ward_setup(sd, sc, normalize(sd->T), roughness_u, roughness_v);
break;
}
#endif
@@ -425,5 +425,24 @@ __device void svm_node_add_closure(ShaderData *sd, float *stack, uint unused,
#endif
}
+#ifdef __DPDU__
+__device_inline void svm_node_closure_store_tangent(ShaderData *sd, float3 tangent)
+{
+ sd->T = normalize(tangent);
+}
+
+__device void svm_node_closure_set_tangent(ShaderData *sd, uint x, uint y, uint z)
+{
+ float3 tangent = make_float3(__int_as_float(x), __int_as_float(y), __int_as_float(z));
+ svm_node_closure_store_tangent(sd, tangent);
+}
+
+__device void svm_node_closure_tangent(ShaderData *sd, float *stack, uint tangent_offset)
+{
+ float3 tangent = stack_load_float3(stack, tangent_offset);
+ svm_node_closure_store_tangent(sd, tangent);
+}
+#endif
+
CCL_NAMESPACE_END