diff options
-rw-r--r-- | intern/cycles/kernel/shaders/node_hsv.osl | 5 | ||||
-rw-r--r-- | intern/cycles/kernel/svm/svm_hsv.h | 5 | ||||
-rw-r--r-- | intern/cycles/render/nodes.cpp | 2 | ||||
-rw-r--r-- | source/blender/gpu/shaders/gpu_shader_material.glsl | 4 | ||||
-rw-r--r-- | source/blender/nodes/shader/nodes/node_shader_hueSatVal.c | 5 |
5 files changed, 9 insertions, 12 deletions
diff --git a/intern/cycles/kernel/shaders/node_hsv.osl b/intern/cycles/kernel/shaders/node_hsv.osl index 8d9e50fed6b..9d7b7cde23a 100644 --- a/intern/cycles/kernel/shaders/node_hsv.osl +++ b/intern/cycles/kernel/shaders/node_hsv.osl @@ -28,9 +28,8 @@ shader node_hsv( color Color = rgb_to_hsv(ColorIn); // remember: fmod doesn't work for negative numbers - Color[0] += Hue + 0.5; - Color[0] = fmod(Color[0], 1.0); - Color[1] *= Saturation; + Color[0] = fmod(Color[0] + Hue + 0.5, 1.0); + Color[1] *= clamp(Saturation, 0.0, 1.0); Color[2] *= Value; Color = hsv_to_rgb(Color); diff --git a/intern/cycles/kernel/svm/svm_hsv.h b/intern/cycles/kernel/svm/svm_hsv.h index 41538d1138d..e69a4ee9154 100644 --- a/intern/cycles/kernel/svm/svm_hsv.h +++ b/intern/cycles/kernel/svm/svm_hsv.h @@ -37,9 +37,8 @@ ccl_device void svm_node_hsv(KernelGlobals *kg, ShaderData *sd, float *stack, ui color = rgb_to_hsv(color); /* remember: fmod doesn't work for negative numbers here */ - color.x += hue + 0.5f; - color.x = fmodf(color.x, 1.0f); - color.y *= sat; + color.x = fmodf(color.x + hue + 0.5f, 1.0f); + color.y *= saturate(sat); color.z *= val; color = hsv_to_rgb(color); diff --git a/intern/cycles/render/nodes.cpp b/intern/cycles/render/nodes.cpp index 727cbe243ac..b70bad810de 100644 --- a/intern/cycles/render/nodes.cpp +++ b/intern/cycles/render/nodes.cpp @@ -3530,7 +3530,7 @@ void TextureCoordinateNode::compile(OSLCompiler& compiler) if(compiler.output_type() == SHADER_TYPE_VOLUME) compiler.parameter("is_volume", true); compiler.parameter(this, "use_transform"); - Transform ob_itfm = transform_transposed_inverse(ob_tfm); + Transform ob_itfm = transform_inverse(ob_tfm); compiler.parameter("object_itfm", ob_itfm); compiler.parameter(this, "from_dupli"); diff --git a/source/blender/gpu/shaders/gpu_shader_material.glsl b/source/blender/gpu/shaders/gpu_shader_material.glsl index 13b98080feb..d5bb157867b 100644 --- a/source/blender/gpu/shaders/gpu_shader_material.glsl +++ b/source/blender/gpu/shaders/gpu_shader_material.glsl @@ -856,8 +856,8 @@ void hue_sat(float hue, float sat, float value, float fac, vec4 col, out vec4 ou rgb_to_hsv(col, hsv); - hsv[0] = fract(hsv[0] + (hue - 0.5)); - hsv[1] = clamp(hsv[1] * sat, 0.0, 1.0); + hsv[0] = fract(hsv[0] + hue + 0.5); + hsv[1] = hsv[1] * clamp(sat, 0.0, 1.0); hsv[2] = hsv[2] * value; hsv_to_rgb(hsv, outcol); diff --git a/source/blender/nodes/shader/nodes/node_shader_hueSatVal.c b/source/blender/nodes/shader/nodes/node_shader_hueSatVal.c index f30872cc328..af802e988bb 100644 --- a/source/blender/nodes/shader/nodes/node_shader_hueSatVal.c +++ b/source/blender/nodes/shader/nodes/node_shader_hueSatVal.c @@ -45,9 +45,8 @@ static void do_hue_sat_fac(bNode *UNUSED(node), float *out, float hue, float sat float col[3], hsv[3], mfac = 1.0f - fac; rgb_to_hsv(in[0], in[1], in[2], hsv, hsv + 1, hsv + 2); - hsv[0] += (hue - 0.5f); - if (hsv[0] > 1.0f) hsv[0] -= 1.0f; else if (hsv[0] < 0.0f) hsv[0] += 1.0f; - hsv[1] *= sat; + hsv[0] = fmodf(hsv[0] + hue + 0.5f, 1.0f); + hsv[1] *= clamp_f(sat, 0.0f, 1.0f); hsv[2] *= val; hsv_to_rgb(hsv[0], hsv[1], hsv[2], col, col + 1, col + 2); |