From 45ea2ad5bf0e61320fa3d655cd8390bb15c81dd6 Mon Sep 17 00:00:00 2001 From: Kasper Frandsen Date: Wed, 1 Dec 2021 08:33:34 +0000 Subject: [PATCH] feat: add Smooth MinMax node --- addons/material_maker/nodes/smooth_minmax.mmg | 113 ++++++++++++++++++ material_maker/library/base.json | 15 +++ 2 files changed, 128 insertions(+) create mode 100644 addons/material_maker/nodes/smooth_minmax.mmg diff --git a/addons/material_maker/nodes/smooth_minmax.mmg b/addons/material_maker/nodes/smooth_minmax.mmg new file mode 100644 index 00000000..dd0bfc91 --- /dev/null +++ b/addons/material_maker/nodes/smooth_minmax.mmg @@ -0,0 +1,113 @@ +{ + "name": "smooth_minmax", + "node_position": { + "x": 0, + "y": 0 + }, + "parameters": { + "clamp": false, + "default_in1": 0, + "default_in2": 0, + "k": 0, + "op": 0 + }, + "seed": 0, + "seed_locked": false, + "shader_model": { + "code": "float $(name_uv)_clamp_false = $op($in1($uv), $in2($uv), $k);\nfloat $(name_uv)_clamp_true = clamp($(name_uv)_clamp_false, 0.0, 1.0);", + "global": "float smin(float d1, float d2, float k) {\n\tfloat h = clamp( 0.5 - 0.5*(d2-d1)/k, 0.0, 1.0 );\n\treturn mix( d2, d1, h ) + k*h*(1.0-h); \n}\n\nfloat smax(float d1, float d2, float k) {\n float h = clamp( 0.5 + 0.5*(d2-d1)/k, 0.0, 1.0 );\n return mix( d2, d1, h ) - k*h*(1.0-h);\n}", + "inputs": [ + { + "default": "$default_in1", + "label": "2:A", + "longdesc": "The A operand", + "name": "in1", + "shortdesc": "A", + "type": "f" + }, + { + "default": "$default_in2", + "label": "B", + "longdesc": "The B operand", + "name": "in2", + "shortdesc": "B", + "type": "f" + } + ], + "instance": "", + "name": "Smooth MinMax", + "outputs": [ + { + "f": "$(name_uv)_clamp_$clamp", + "longdesc": "Shows a greyscale image of the result", + "shortdesc": "Output", + "type": "f" + } + ], + "parameters": [ + { + "default": 1, + "label": "", + "longdesc": "The operation to be performed", + "name": "op", + "shortdesc": "Operation", + "type": "enum", + "values": [ + { + "name": "Min", + "value": "smin" + }, + { + "name": "Max", + "value": "smax" + } + ] + }, + { + "control": "None", + "default": 0, + "label": "", + "longdesc": "The default value for A, used if the corresponding input is not connected", + "max": 1, + "min": 0, + "name": "default_in1", + "shortdesc": "A", + "step": 0.01, + "type": "float" + }, + { + "control": "None", + "default": 0, + "label": "", + "longdesc": "The default value for B, used if the corresponding input is not connected", + "max": 1, + "min": 0, + "name": "default_in2", + "shortdesc": "B", + "step": 0.01, + "type": "float" + }, + { + "control": "None", + "default": 0, + "label": "", + "longdesc": "The smoothness of the operation", + "max": 1, + "min": 0, + "name": "k", + "shortdesc": "Smoothness", + "step": 0.01, + "type": "float" + }, + { + "default": false, + "label": "Clamp result", + "longdesc": "The result is clamped to [0, 1] if this option is checked", + "name": "clamp", + "shortdesc": "Clamp", + "type": "boolean" + } + ] + }, + "type": "shader" +} \ No newline at end of file diff --git a/material_maker/library/base.json b/material_maker/library/base.json index cdaaadc7..3c454e29 100644 --- a/material_maker/library/base.json +++ b/material_maker/library/base.json @@ -6325,6 +6325,21 @@ "seed_locked": false, "tree_item": "Filter/Colormap", "type": "colormap" + }, + { + "icon_data": "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", + "name": "smooth_minmax", + "parameters": { + "clamp": false, + "default_in1": 0, + "default_in2": 0, + "k": 0, + "op": 0 + }, + "seed": 0, + "seed_locked": false, + "tree_item": "Filter/Math/Smooth MinMax", + "type": "smooth_minmax" } ], "name": "Base library"