feat: add Smooth MinMax node

This commit is contained in:
Kasper Frandsen 2021-12-01 08:33:34 +00:00
parent 797a14f143
commit 45ea2ad5bf
2 changed files with 128 additions and 0 deletions

View File

@ -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"
}

View File

@ -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"