Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCharlie Jolly <charlie>2021-09-30 21:05:08 +0300
committerCharlie Jolly <mistajolly@gmail.com>2021-09-30 21:24:40 +0300
commitbe70827e6f62763d524f00652f61da6fc86e2714 (patch)
tree72a673c31ac82ea03a18d126bb17d70ad5955690 /source/blender/gpu/shaders/material/gpu_shader_material_float_curve.glsl
parent827e30bd1512f6917307195ccc934b57623f0f8b (diff)
Nodes: Add Float Curve for GN and Shader nodes.
Replacement for float curve in legacy Attribute Curve Map node. Float Curve defaults to [0.0-1.0] range. Reviewed By: JacquesLucke, brecht Differential Revision: https://developer.blender.org/D12683
Diffstat (limited to 'source/blender/gpu/shaders/material/gpu_shader_material_float_curve.glsl')
-rw-r--r--source/blender/gpu/shaders/material/gpu_shader_material_float_curve.glsl33
1 files changed, 33 insertions, 0 deletions
diff --git a/source/blender/gpu/shaders/material/gpu_shader_material_float_curve.glsl b/source/blender/gpu/shaders/material/gpu_shader_material_float_curve.glsl
new file mode 100644
index 00000000000..514409f7fdf
--- /dev/null
+++ b/source/blender/gpu/shaders/material/gpu_shader_material_float_curve.glsl
@@ -0,0 +1,33 @@
+/* ext is vec4(in_x, in_dy, out_x, out_dy). */
+float curve_float_extrapolate(float x, float y, vec4 ext)
+{
+ if (x < 0.0) {
+ return y + x * ext.y;
+ }
+ else if (x > 1.0) {
+ return y + (x - 1.0) * ext.w;
+ }
+ else {
+ return y;
+ }
+}
+
+#define RANGE_RESCALE(x, min, range) ((x - min) * range)
+
+void curve_float(float fac,
+ float vec,
+ sampler1DArray curvemap,
+ float layer,
+ float range,
+ vec4 ext,
+ out float outvec)
+{
+ float xyz_min = ext.x;
+ vec = RANGE_RESCALE(vec, xyz_min, range);
+
+ outvec = texture(curvemap, vec2(vec, layer)).x;
+
+ outvec = curve_float_extrapolate(vec, outvec, ext);
+
+ outvec = mix(vec, outvec, fac);
+}