diff options
author | Hallam Roberts <MysteryPancake> | 2022-03-21 19:33:24 +0300 |
---|---|---|
committer | Brecht Van Lommel <brecht@blender.org> | 2022-03-21 19:41:17 +0300 |
commit | c7e25a25b06659ed41e9f4ee101a0980135cdb24 (patch) | |
tree | 87b6e263b9384f84011da79070f420d8a8da2afd /intern/cycles/kernel/osl | |
parent | f92e3b39f18a3d3e29873faed98f6279571fbc4f (diff) |
Fix T96132: Cycles RGB/Vector/Float Curve shaders ignore extrapolation setting
Differential Revision: https://developer.blender.org/D14393
Diffstat (limited to 'intern/cycles/kernel/osl')
-rw-r--r-- | intern/cycles/kernel/osl/shaders/node_float_curve.osl | 4 | ||||
-rw-r--r-- | intern/cycles/kernel/osl/shaders/node_rgb_curves.osl | 7 | ||||
-rw-r--r-- | intern/cycles/kernel/osl/shaders/node_vector_curves.osl | 7 |
3 files changed, 11 insertions, 7 deletions
diff --git a/intern/cycles/kernel/osl/shaders/node_float_curve.osl b/intern/cycles/kernel/osl/shaders/node_float_curve.osl index 265a21bd4aa..70de1217877 100644 --- a/intern/cycles/kernel/osl/shaders/node_float_curve.osl +++ b/intern/cycles/kernel/osl/shaders/node_float_curve.osl @@ -7,13 +7,15 @@ shader node_float_curve(float ramp[] = {0.0}, float min_x = 0.0, float max_x = 1.0, + int extrapolate = 1, + float ValueIn = 0.0, float Factor = 0.0, output float ValueOut = 0.0) { float c = (ValueIn - min_x) / (max_x - min_x); - ValueOut = rgb_ramp_lookup(ramp, c, 1, 1); + ValueOut = rgb_ramp_lookup(ramp, c, 1, extrapolate); ValueOut = mix(ValueIn, ValueOut, Factor); } diff --git a/intern/cycles/kernel/osl/shaders/node_rgb_curves.osl b/intern/cycles/kernel/osl/shaders/node_rgb_curves.osl index b73c74801ee..388fdd05b70 100644 --- a/intern/cycles/kernel/osl/shaders/node_rgb_curves.osl +++ b/intern/cycles/kernel/osl/shaders/node_rgb_curves.osl @@ -7,6 +7,7 @@ shader node_rgb_curves(color ramp[] = {0.0}, float min_x = 0.0, float max_x = 1.0, + int extrapolate = 1, color ColorIn = 0.0, float Fac = 0.0, @@ -14,9 +15,9 @@ shader node_rgb_curves(color ramp[] = {0.0}, { color c = (ColorIn - color(min_x, min_x, min_x)) / (max_x - min_x); - color r = rgb_ramp_lookup(ramp, c[0], 1, 1); - color g = rgb_ramp_lookup(ramp, c[1], 1, 1); - color b = rgb_ramp_lookup(ramp, c[2], 1, 1); + color r = rgb_ramp_lookup(ramp, c[0], 1, extrapolate); + color g = rgb_ramp_lookup(ramp, c[1], 1, extrapolate); + color b = rgb_ramp_lookup(ramp, c[2], 1, extrapolate); ColorOut[0] = r[0]; ColorOut[1] = g[1]; diff --git a/intern/cycles/kernel/osl/shaders/node_vector_curves.osl b/intern/cycles/kernel/osl/shaders/node_vector_curves.osl index a3bf1209e6e..3ef720ad6d6 100644 --- a/intern/cycles/kernel/osl/shaders/node_vector_curves.osl +++ b/intern/cycles/kernel/osl/shaders/node_vector_curves.osl @@ -7,6 +7,7 @@ shader node_vector_curves(color ramp[] = {0.0}, float min_x = 0.0, float max_x = 1.0, + int extrapolate = 1, vector VectorIn = vector(0.0, 0.0, 0.0), float Fac = 0.0, @@ -14,9 +15,9 @@ shader node_vector_curves(color ramp[] = {0.0}, { vector c = (VectorIn - vector(min_x, min_x, min_x)) / (max_x - min_x); - color r = rgb_ramp_lookup(ramp, c[0], 1, 1); - color g = rgb_ramp_lookup(ramp, c[0], 1, 1); - color b = rgb_ramp_lookup(ramp, c[0], 1, 1); + color r = rgb_ramp_lookup(ramp, c[0], 1, extrapolate); + color g = rgb_ramp_lookup(ramp, c[0], 1, extrapolate); + color b = rgb_ramp_lookup(ramp, c[0], 1, extrapolate); VectorOut[0] = r[0]; VectorOut[1] = g[1]; |