diff options
author | Lukas Stockner <lukas.stockner@freenet.de> | 2015-12-29 16:42:49 +0300 |
---|---|---|
committer | Lukas Stockner <lukas.stockner@freenet.de> | 2016-01-02 01:25:37 +0300 |
commit | 5c682a901b2ae9acf656f19e5f9b470d957d71cc (patch) | |
tree | 18ffa9d0ed4164ce601c285c700642a26a3c6eb9 /intern/cycles/kernel/svm/svm_wave.h | |
parent | 1991ee173865ed79a78b50afc3f7a46af472e9dd (diff) |
Cycles: Add Saw option to the wave texture
This commit adds "Bands Saw" and "Rings Saw" to the options for the Wave texture node in Cycles, behaving similar to the Saw option in BI textures.
Requested by @cekuhnen on BA.
Reviewers: dingto, sergey
Subscribers: cekuhnen
Differential Revision: https://developer.blender.org/D1699
Diffstat (limited to 'intern/cycles/kernel/svm/svm_wave.h')
-rw-r--r-- | intern/cycles/kernel/svm/svm_wave.h | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/intern/cycles/kernel/svm/svm_wave.h b/intern/cycles/kernel/svm/svm_wave.h index 6eaddaf301c..6ce69458a03 100644 --- a/intern/cycles/kernel/svm/svm_wave.h +++ b/intern/cycles/kernel/svm/svm_wave.h @@ -18,7 +18,7 @@ CCL_NAMESPACE_BEGIN /* Wave */ -ccl_device_noinline float svm_wave(NodeWaveType type, float3 p, float detail, float distortion, float dscale) +ccl_device_noinline float svm_wave(NodeWaveType type, NodeWaveProfile profile, float3 p, float detail, float distortion, float dscale) { float n; @@ -26,11 +26,18 @@ ccl_device_noinline float svm_wave(NodeWaveType type, float3 p, float detail, fl n = (p.x + p.y + p.z) * 10.0f; else /* NODE_WAVE_RINGS */ n = len(p) * 20.0f; - + if(distortion != 0.0f) n += distortion * noise_turbulence(p*dscale, detail, 0); - return 0.5f + 0.5f * sinf(n); + if(profile == NODE_WAVE_PROFILE_SIN) { + return 0.5f + 0.5f * sinf(n); + } + else { /* NODE_WAVE_PROFILE_SAW */ + n /= M_2PI_F; + n -= (int) n; + return (n < 0.0f)? n + 1.0f: n; + } } ccl_device void svm_node_tex_wave(KernelGlobals *kg, ShaderData *sd, float *stack, uint4 node, int *offset) @@ -49,7 +56,7 @@ ccl_device void svm_node_tex_wave(KernelGlobals *kg, ShaderData *sd, float *stac float distortion = stack_load_float_default(stack, distortion_offset, node2.z); float dscale = stack_load_float_default(stack, dscale_offset, node2.w); - float f = svm_wave((NodeWaveType)type, co*scale, detail, distortion, dscale); + float f = svm_wave((NodeWaveType)type, (NodeWaveProfile)node.w, co*scale, detail, distortion, dscale); if(stack_valid(fac_offset)) stack_store_float(stack, fac_offset, f); if(stack_valid(color_offset)) stack_store_float3(stack, color_offset, make_float3(f, f, f)); |