diff options
author | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2012-10-10 17:02:20 +0400 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2012-10-10 17:02:20 +0400 |
commit | f0a9b664694dacb0388a8e078d46753dc6a36352 (patch) | |
tree | 2abf4e68d65708dd36133f1ed83c2b578d34b859 /intern/cycles/kernel/svm/svm_closure.h | |
parent | b4671d67edef053118ae53b12b2672603a8bf9b6 (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.h | 21 |
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 |