From 3c8f21446121bb0de0eb5680da20b8731fd9a3be Mon Sep 17 00:00:00 2001 From: Larry Gritz Date: Wed, 25 Jul 2018 17:55:05 -0700 Subject: [PATCH] Add sign() and log() to vector struct types. (#904) Ass missing `sign` node to MaterialX. Change MaterialX `ln` implementation from log2 to correct log. --- src/shaders/MaterialX/CMakeLists.txt | 3 ++- src/shaders/MaterialX/build_materialX_osl.py | 3 ++- src/shaders/MaterialX/mx_ln.mx | 6 +++--- src/shaders/MaterialX/mx_sign.mx | 17 +++++++++++++++++ src/shaders/color2.h | 11 +++++++++++ src/shaders/color4.h | 11 +++++++++++ src/shaders/vector2.h | 11 +++++++++++ src/shaders/vector4.h | 16 ++++++++++++++++ 8 files changed, 73 insertions(+), 5 deletions(-) create mode 100644 src/shaders/MaterialX/mx_sign.mx diff --git a/src/shaders/MaterialX/CMakeLists.txt b/src/shaders/MaterialX/CMakeLists.txt index e32950232..913cf4fb3 100644 --- a/src/shaders/MaterialX/CMakeLists.txt +++ b/src/shaders/MaterialX/CMakeLists.txt @@ -107,7 +107,8 @@ make_mx_flavors ( mx_image.mx mx_invert.mx mx_ln.mx mx_max.mx mx_min.mx mx_mix.mx mx_modulo.mx mx_noise2d.mx mx_noise3d.mx mx_ramp4.mx mx_ramplr.mx mx_ramptb.mx mx_remap.mx - mx_sin.mx mx_smoothstep.mx mx_splitlr.mx mx_splittb.mx mx_sqrt.mx mx_subtract.mx + mx_sign.mx mx_sin.mx mx_smoothstep.mx mx_splitlr.mx + mx_splittb.mx mx_sqrt.mx mx_subtract.mx mx_switch.mx mx_swizzle_color.mx mx_swizzle_color2.mx mx_swizzle_color4.mx mx_swizzle_vector.mx mx_swizzle_vector2.mx mx_swizzle_vector4.mx mx_tan.mx mx_triplanarprojection.mx diff --git a/src/shaders/MaterialX/build_materialX_osl.py b/src/shaders/MaterialX/build_materialX_osl.py index 6c0d8dfa7..c34063420 100644 --- a/src/shaders/MaterialX/build_materialX_osl.py +++ b/src/shaders/MaterialX/build_materialX_osl.py @@ -283,7 +283,8 @@ 'mx_rotate2d': ['vector2'], 'mx_saturate': ['color', 'color4'], 'mx_scale': ['vector', 'vector2'], - 'mx_sin': ALL_TYPES, + 'mx_sign': ALL_TYPES, + 'mx_sin': ALL_TYPES, 'mx_splitlr': ALL_TYPES, 'mx_splittb': ALL_TYPES, 'mx_sqrt' : ALL_TYPES, diff --git a/src/shaders/MaterialX/mx_ln.mx b/src/shaders/MaterialX/mx_ln.mx index df52a782e..f34584f9f 100644 --- a/src/shaders/MaterialX/mx_ln.mx +++ b/src/shaders/MaterialX/mx_ln.mx @@ -1,7 +1,7 @@ // Open Shading Language : Copyright (c) 2009-2017 Sony Pictures Imageworks Inc., et al. // https://github.com/imageworks/OpenShadingLanguage/blob/master/LICENSE -// -// MaterialX specification (c) 2017 Lucasfilm Ltd. +// +// MaterialX specification (c) 2017 Lucasfilm Ltd. // http://www.materialx.org/ #include "mx_funcs.h" @@ -13,5 +13,5 @@ shader mx_ln_TYPE_SUFFIX output TYPE out = TYPE_DEFAULT_OUT ) { - out = log2(in); + out = log(in); } diff --git a/src/shaders/MaterialX/mx_sign.mx b/src/shaders/MaterialX/mx_sign.mx new file mode 100644 index 000000000..1e79e6261 --- /dev/null +++ b/src/shaders/MaterialX/mx_sign.mx @@ -0,0 +1,17 @@ +// Open Shading Language : Copyright (c) 2009-2017 Sony Pictures Imageworks Inc., et al. +// https://github.com/imageworks/OpenShadingLanguage/blob/master/LICENSE +// +// MaterialX specification (c) 2017 Lucasfilm Ltd. +// http://www.materialx.org/ + +#include "mx_funcs.h" + +shader mx_sign_TYPE_SUFFIX + [[ string help = TYPE_STR" sign(in)" ]] + ( + TYPE in = TYPE_DEFAULT_IN, + output TYPE out = TYPE_DEFAULT_OUT + ) +{ + out = sign(in); +} diff --git a/src/shaders/color2.h b/src/shaders/color2.h index 84c41302d..2312c1045 100644 --- a/src/shaders/color2.h +++ b/src/shaders/color2.h @@ -168,6 +168,11 @@ color2 exp(color2 a) return color2(exp(a.r), exp(a.a)); } +color2 log(color2 a) +{ + return color2(log(a.r), log(a.a)); +} + color2 log2(color2 a) { return color2(log2(a.r), log2(a.a)); @@ -251,6 +256,12 @@ color2 pow(color2 base, float power) return pow(base, color2(power, power)); } +color2 sign(color2 a) +{ + return color2(sign(a.r), + sign(a.a)); +} + color2 sin(color2 a) { return color2(sin(a.r), diff --git a/src/shaders/color4.h b/src/shaders/color4.h index 549123ad6..198a2f55e 100644 --- a/src/shaders/color4.h +++ b/src/shaders/color4.h @@ -166,6 +166,11 @@ color4 exp(color4 a) return color4(exp(a.rgb), exp(a.a)); } +color4 log(color4 a) +{ + return color4(log(a.rgb), log(a.a)); +} + color4 log2(color4 a) { return color4(log2(a.rgb), log2(a.a)); @@ -254,6 +259,12 @@ color4 pow(color4 base, float power) return pow(base, color4(color(power), power)); } +color4 sign(color4 a) +{ + return color4(sign(a.rgb), + sign(a.a)); +} + color4 sin(color4 a) { return color4(sin(a.rgb), diff --git a/src/shaders/vector2.h b/src/shaders/vector2.h index 1a79dcd36..39836b8ed 100644 --- a/src/shaders/vector2.h +++ b/src/shaders/vector2.h @@ -166,6 +166,11 @@ vector2 exp(vector2 a) return vector2 (exp(a.x), exp(a.y)); } +vector2 log(vector2 a) +{ + return vector2 (log(a.x), log(a.y)); +} + vector2 log2(vector2 a) { return vector2 (log2(a.x), log2(a.y)); @@ -268,6 +273,12 @@ vector2 pow (vector2 in, float amount) return pow(in, vector2(amount, amount)); } +vector2 sign(vector2 a) +{ + return vector2(sign(a.x), + sign(a.y)); +} + vector2 sin(vector2 a) { return vector2(sin(a.x), diff --git a/src/shaders/vector4.h b/src/shaders/vector4.h index 66836bd98..31dd8a3a1 100644 --- a/src/shaders/vector4.h +++ b/src/shaders/vector4.h @@ -184,6 +184,14 @@ vector4 exp(vector4 in) exp(in.w)); } +vector4 log(vector4 in) +{ + return vector4 (log(in.x), + log(in.y), + log(in.z), + log(in.w)); +} + vector4 log2(vector4 in) { return vector4 (log2(in.x), @@ -307,6 +315,14 @@ vector4 pow(vector4 in, float amount) pow(in.w, amount)); } +vector4 sign(vector4 a) +{ + return vector4(sign(a.x), + sign(a.y), + sign(a.z), + sign(a.w)); +} + vector4 sin(vector4 a) { return vector4(sin(a.x),