[Bf-blender-cvs] [eef5b506d5c] master: EEVEE: Color Ramp Ease Optimisation

Charlie Jolly noreply at git.blender.org
Wed Feb 19 02:28:17 CET 2020


Commit: eef5b506d5ce5086ab7e91cb243f2d387e60d9c4
Author: Charlie Jolly
Date:   Wed Feb 19 02:03:43 2020 +0100
Branches: master
https://developer.blender.org/rBeef5b506d5ce5086ab7e91cb243f2d387e60d9c4

EEVEE: Color Ramp Ease Optimisation

This patch provides an optimisation for Ease (Smoothstep) setting in the color ramp node.
This optimisation exists already for Constant and Linear modes.

Reviewed By: fclem

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

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

M	source/blender/gpu/shaders/material/gpu_shader_material_color_ramp.glsl
M	source/blender/nodes/shader/nodes/node_shader_valToRgb.c

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

diff --git a/source/blender/gpu/shaders/material/gpu_shader_material_color_ramp.glsl b/source/blender/gpu/shaders/material/gpu_shader_material_color_ramp.glsl
index 9fe45f91f45..17240da4050 100644
--- a/source/blender/gpu/shaders/material/gpu_shader_material_color_ramp.glsl
+++ b/source/blender/gpu/shaders/material/gpu_shader_material_color_ramp.glsl
@@ -13,6 +13,15 @@ void valtorgb_opti_linear(
   outalpha = outcol.a;
 }
 
+void valtorgb_opti_ease(
+    float fac, vec2 mulbias, vec4 color1, vec4 color2, out vec4 outcol, out float outalpha)
+{
+  fac = clamp(fac * mulbias.x + mulbias.y, 0.0, 1.0);
+  fac = fac * fac * (3.0 - 2.0 * fac);
+  outcol = mix(color1, color2, fac);
+  outalpha = outcol.a;
+}
+
 void valtorgb(float fac, sampler1DArray colormap, float layer, out vec4 outcol, out float outalpha)
 {
   outcol = texture(colormap, vec2(fac, layer));
diff --git a/source/blender/nodes/shader/nodes/node_shader_valToRgb.c b/source/blender/nodes/shader/nodes/node_shader_valToRgb.c
index 6d2611626c2..37b2516713c 100644
--- a/source/blender/nodes/shader/nodes/node_shader_valToRgb.c
+++ b/source/blender/nodes/shader/nodes/node_shader_valToRgb.c
@@ -94,6 +94,17 @@ static int gpu_shader_valtorgb(GPUMaterial *mat,
                               GPU_uniform(&mul_bias[1]),
                               GPU_uniform(&coba->data[0].r),
                               GPU_uniform(&coba->data[1].r));
+      case COLBAND_INTERP_EASE:
+        mul_bias[0] = 1.0f / (coba->data[1].pos - coba->data[0].pos);
+        mul_bias[1] = -mul_bias[0] * coba->data[0].pos;
+        return GPU_stack_link(mat,
+                              node,
+                              "valtorgb_opti_ease",
+                              in,
+                              out,
+                              GPU_uniform(mul_bias),
+                              GPU_uniform(&coba->data[0].r),
+                              GPU_uniform(&coba->data[1].r));
       default:
         break;
     }



More information about the Bf-blender-cvs mailing list