[Bf-blender-cvs] [1549fea] master: Fix T42888: Separate and Combine HSV distorts the hue value

Sergey Sharybin noreply at git.blender.org
Tue Dec 16 16:46:04 CET 2014


Commit: 1549fea9995c348bc14a9105df5e460644e2b33a
Author: Sergey Sharybin
Date:   Tue Dec 16 16:52:40 2014 +0500
Branches: master
https://developer.blender.org/rB1549fea9995c348bc14a9105df5e460644e2b33a

Fix T42888: Separate and Combine HSV distorts the hue value

These nodes were assuming sRGB input/output which is for sure wrong for the
shader pipeline which works in the linear space.

So now conversion to/from linear space happens in these nodes which makes them
making sence in the shader context but which might change look and feel of
existing scenes.

===================================================================

M	intern/cycles/kernel/shaders/node_combine_hsv.osl
M	intern/cycles/kernel/shaders/node_separate_hsv.osl
M	intern/cycles/kernel/svm/svm_sepcomb_hsv.h

===================================================================

diff --git a/intern/cycles/kernel/shaders/node_combine_hsv.osl b/intern/cycles/kernel/shaders/node_combine_hsv.osl
index 010773a..574bad3 100644
--- a/intern/cycles/kernel/shaders/node_combine_hsv.osl
+++ b/intern/cycles/kernel/shaders/node_combine_hsv.osl
@@ -15,6 +15,7 @@
  */
 
 #include "stdosl.h"
+#include "node_color.h"
 
 shader node_combine_hsv(
 	float H = 0.0,
@@ -22,6 +23,6 @@ shader node_combine_hsv(
 	float V = 0.0,
 	output color Color = 0.8)
 {
-	Color = color("hsv", H, S, V);	
+	Color = color_srgb_to_scene_linear(color("hsv", H, S, V));
 }
 
diff --git a/intern/cycles/kernel/shaders/node_separate_hsv.osl b/intern/cycles/kernel/shaders/node_separate_hsv.osl
index 94fc5de..8bfb04a 100644
--- a/intern/cycles/kernel/shaders/node_separate_hsv.osl
+++ b/intern/cycles/kernel/shaders/node_separate_hsv.osl
@@ -23,7 +23,7 @@ shader node_separate_hsv(
 	output float S = 0.0,
 	output float V = 0.0)
 {
-	color col = rgb_to_hsv(Color);
+	color col = rgb_to_hsv(color_scene_linear_to_srgb(Color));
 	
 	H = col[0];
 	S = col[1];
diff --git a/intern/cycles/kernel/svm/svm_sepcomb_hsv.h b/intern/cycles/kernel/svm/svm_sepcomb_hsv.h
index 111d5d4..abf75b6 100644
--- a/intern/cycles/kernel/svm/svm_sepcomb_hsv.h
+++ b/intern/cycles/kernel/svm/svm_sepcomb_hsv.h
@@ -26,7 +26,8 @@ ccl_device void svm_node_combine_hsv(KernelGlobals *kg, ShaderData *sd, float *s
 	float value = stack_load_float(stack, value_in);
 	
 	/* Combine, and convert back to RGB */
-	float3 color = hsv_to_rgb(make_float3(hue, saturation, value));
+	float3 color = color_srgb_to_scene_linear(
+	        hsv_to_rgb(make_float3(hue, saturation, value)));
 
 	if (stack_valid(color_out))
 		stack_store_float3(stack, color_out, color);
@@ -40,7 +41,7 @@ ccl_device void svm_node_separate_hsv(KernelGlobals *kg, ShaderData *sd, float *
 	float3 color = stack_load_float3(stack, color_in);
 	
 	/* Convert to HSV */
-	color = rgb_to_hsv(color);
+	color = rgb_to_hsv(color_scene_linear_to_srgb(color));
 
 	if (stack_valid(hue_out))
 		stack_store_float(stack, hue_out, color.x);




More information about the Bf-blender-cvs mailing list