[Bf-blender-cvs] [2a9b162d945] blender-v2.81-release: Fix T70605: incorrect darken and lighten rgb mix mode

Jacques Lucke noreply at git.blender.org
Tue Oct 15 17:37:04 CEST 2019


Commit: 2a9b162d94576d0182661179cf0500cfbc85236f
Author: Jacques Lucke
Date:   Tue Oct 15 17:31:44 2019 +0200
Branches: blender-v2.81-release
https://developer.blender.org/rB2a9b162d94576d0182661179cf0500cfbc85236f

Fix T70605: incorrect darken and lighten rgb mix mode

Differential Revision: https://developer.blender.org/D6058

Reviewers: brecht, fclem

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

M	intern/cycles/kernel/shaders/node_mix.osl
M	intern/cycles/kernel/svm/svm_color_util.h
M	source/blender/gpu/shaders/material/gpu_shader_material_mix_rgb.glsl

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

diff --git a/intern/cycles/kernel/shaders/node_mix.osl b/intern/cycles/kernel/shaders/node_mix.osl
index 8caea6803ed..9fbd3391ade 100644
--- a/intern/cycles/kernel/shaders/node_mix.osl
+++ b/intern/cycles/kernel/shaders/node_mix.osl
@@ -91,12 +91,12 @@ color node_mix_diff(float t, color col1, color col2)
 
 color node_mix_dark(float t, color col1, color col2)
 {
-  return min(col1, col2) * t + col1 * (1.0 - t);
+  return mix(col1, min(col1, col2), t);
 }
 
 color node_mix_light(float t, color col1, color col2)
 {
-  return max(col1, col2 * t);
+  return mix(col1, max(col1, col2), t);
 }
 
 color node_mix_dodge(float t, color col1, color col2)
diff --git a/intern/cycles/kernel/svm/svm_color_util.h b/intern/cycles/kernel/svm/svm_color_util.h
index 0f571eb7253..1a0fa03305e 100644
--- a/intern/cycles/kernel/svm/svm_color_util.h
+++ b/intern/cycles/kernel/svm/svm_color_util.h
@@ -92,12 +92,12 @@ ccl_device float3 svm_mix_diff(float t, float3 col1, float3 col2)
 
 ccl_device float3 svm_mix_dark(float t, float3 col1, float3 col2)
 {
-  return min(col1, col2) * t + col1 * (1.0f - t);
+  return interp(col1, min(col1, col2), t);
 }
 
 ccl_device float3 svm_mix_light(float t, float3 col1, float3 col2)
 {
-  return max(col1, col2 * t);
+  return interp(col1, max(col1, col2), t);
 }
 
 ccl_device float3 svm_mix_dodge(float t, float3 col1, float3 col2)
diff --git a/source/blender/gpu/shaders/material/gpu_shader_material_mix_rgb.glsl b/source/blender/gpu/shaders/material/gpu_shader_material_mix_rgb.glsl
index abe6081489d..e089aec1d92 100644
--- a/source/blender/gpu/shaders/material/gpu_shader_material_mix_rgb.glsl
+++ b/source/blender/gpu/shaders/material/gpu_shader_material_mix_rgb.glsl
@@ -92,14 +92,14 @@ void mix_diff(float fac, vec4 col1, vec4 col2, out vec4 outcol)
 void mix_dark(float fac, vec4 col1, vec4 col2, out vec4 outcol)
 {
   fac = clamp(fac, 0.0, 1.0);
-  outcol.rgb = min(col1.rgb, col2.rgb * fac);
+  outcol.rgb = mix(col1.rgb, min(col1.rgb, col2.rgb), fac);
   outcol.a = col1.a;
 }
 
 void mix_light(float fac, vec4 col1, vec4 col2, out vec4 outcol)
 {
   fac = clamp(fac, 0.0, 1.0);
-  outcol.rgb = max(col1.rgb, col2.rgb * fac);
+  outcol.rgb = mix(col1.rgb, max(col1.rgb, col2.rgb), fac);
   outcol.a = col1.a;
 }



More information about the Bf-blender-cvs mailing list