diff --git a/addons/material_maker/nodes/sdboolean.mmg b/addons/material_maker/nodes/sdboolean.mmg index de9e0d993..cf797c268 100644 --- a/addons/material_maker/nodes/sdboolean.mmg +++ b/addons/material_maker/nodes/sdboolean.mmg @@ -1,51 +1,58 @@ { + "generic_size": 1, "name": "sdboolean", "node_position": { "x": 0, "y": 0 }, "parameters": { - "op": 0 + "op1": 0 }, "seed_int": 0, "shader_model": { - "code": "", + "code": [ + "float $(name_uv)_b = $b($uv);", + "", + "#for", + "$(name_uv)_b = $op# $s#($uv), $(name_uv)_b);", + "#end" + ], "global": "", "inputs": [ { "default": "0.0", "label": "", "longdesc": "The first shape, defined as a signed distance function", - "name": "in1", - "shortdesc": "Input1", + "name": "b", + "shortdesc": "Base Shape", "type": "sdf2d" }, { "default": "0.0", "label": "", - "longdesc": "The second shape, defined as a signed distance function", - "name": "in2", - "shortdesc": "Input2", + "longdesc": "The subsequent shape, defined as a signed distance function", + "name": "s#", + "shortdesc": "Shape#", "type": "sdf2d" } ], "instance": "", - "longdesc": "Performs a boolean operation (union, intersection or difference) between two shapes", + "longdesc": "Performs boolean operation(s) (union, intersection or difference) between two or more shapes", "name": "sdBoolean", "outputs": [ { - "longdesc": "The shape generated by the boolean operation", - "sdf2d": "$op $in1($uv), $in2($uv))", + "longdesc": "The shape generated by the boolean operation(s)", + "sdf2d": "$(name_uv)_b", "shortdesc": "Output", "type": "sdf2d" } ], "parameters": [ { - "default": 2, - "label": "", + "default": 0, + "label": "2:", "longdesc": "The operation performed by this node", - "name": "op", + "name": "op#", "shortdesc": "Operation", "type": "enum", "values": [ diff --git a/addons/material_maker/nodes/sdf3d_boolean.mmg b/addons/material_maker/nodes/sdf3d_boolean.mmg index 8954553e5..a5850119a 100644 --- a/addons/material_maker/nodes/sdf3d_boolean.mmg +++ b/addons/material_maker/nodes/sdf3d_boolean.mmg @@ -1,16 +1,22 @@ { + "generic_size": 1, "name": "sdf3d_boolean", "node_position": { "x": 0, "y": 0 }, "parameters": { - "op": 0 + "op1": 0 }, - "seed": 60292, - "seed_locked": true, + "seed_int": 0, "shader_model": { - "code": "", + "code": [ + "vec2 $(name_uv)_b = $b($uv);", + "", + "#for", + "$(name_uv)_b = $op#($s#($uv), $(name_uv)_b);", + "#end" + ], "global": [ "vec2 sdf3dc_union(vec2 a, vec2 b) {", "\treturn vec2(min(a.x, b.x), mix(b.y, a.y, step(a.x, b.x)));", @@ -28,36 +34,36 @@ "default": "vec2(100.0, 0.0)", "label": "", "longdesc": "The first shape, defined as a signed distance function", - "name": "in1", - "shortdesc": "Input1", + "name": "b", + "shortdesc": "Base Shape", "type": "sdf3dc" }, { "default": "vec2(100.0, 0.0)", "label": "", - "longdesc": "The second shape, defined as a signed distance function", - "name": "in2", - "shortdesc": "Input2", + "longdesc": "The subsequent shape, defined as a signed distance function", + "name": "s#", + "shortdesc": "Shape#", "type": "sdf3dc" } ], "instance": "", - "longdesc": "Performs a boolean operation (union, intersection or difference) between two shapes", + "longdesc": "Performs boolean operation(s) (union, intersection or difference) between two or more shapes", "name": "Boolean", "outputs": [ { - "longdesc": "The shape generated by the boolean operation", - "sdf3dc": "$op($in1($uv), $in2($uv))", + "longdesc": "The shape generated by the boolean operation(s)", + "sdf3dc": "$(name_uv)_b", "shortdesc": "Output", "type": "sdf3dc" } ], "parameters": [ { - "default": 2, - "label": "", + "default": 0, + "label": "2:", "longdesc": "The operation performed by this node", - "name": "op", + "name": "op#", "shortdesc": "Operation", "type": "enum", "values": [ diff --git a/addons/material_maker/nodes/sdf3d_smoothboolean.mmg b/addons/material_maker/nodes/sdf3d_smoothboolean.mmg index 9acf021b4..8b33d3d37 100644 --- a/addons/material_maker/nodes/sdf3d_smoothboolean.mmg +++ b/addons/material_maker/nodes/sdf3d_smoothboolean.mmg @@ -1,16 +1,23 @@ { + "generic_size": 1, "name": "sdf3d_smoothboolean", "node_position": { "x": 0, "y": 0 }, "parameters": { - "k": 0.15, - "op": 0 + "k1": 0.15, + "op1": 0 }, "seed_int": 0, "shader_model": { - "code": "", + "code": [ + "vec2 $(name_uv)_b = $b($uv);", + "", + "#for", + "$(name_uv)_b = sdf3d_smooth_$op#($s#($uv), $(name_uv)_b, $k#);", + "#end" + ], "global": [ "vec2 sdf3d_smooth_union(vec2 d1, vec2 d2, float k) {", "\tfloat h = clamp(0.5+0.5*(d2.x-d1.x)/k, 0.0, 1.0);", @@ -33,36 +40,36 @@ "default": "vec2(100.0, 0.0)", "label": "", "longdesc": "The first shape, defined as a signed distance function", - "name": "in1", - "shortdesc": "Input1", + "name": "b", + "shortdesc": "Base Shape", "type": "sdf3dc" }, { "default": "vec2(100.0, 0.0)", "label": "", - "longdesc": "The second shape, defined as a signed distance function", - "name": "in2", - "shortdesc": "Input2", + "longdesc": "The subsequent shape, defined as a signed distance function", + "name": "s#", + "shortdesc": "Shape#", "type": "sdf3dc" } ], "instance": "", - "longdesc": "Performs a smooth boolean operation (union, intersection or difference) between two shapes", + "longdesc": "Performs smooth boolean operation(s) (union, intersection or difference) between two or more shapes", "name": "SmoothBoolean", "outputs": [ { - "longdesc": "The shape generated by the boolean operation", - "sdf3dc": "sdf3d_smooth_$op($in1($uv), $in2($uv), $k)", + "longdesc": "The shape generated by the boolean operation(s)", + "sdf3dc": "$(name_uv)_b", "shortdesc": "Output", "type": "sdf3dc" } ], "parameters": [ { - "default": 2, - "label": "", + "default": 0, + "label": "2:", "longdesc": "The operation performed by this node", - "name": "op", + "name": "op#", "shortdesc": "Operation", "type": "enum", "values": [ @@ -83,11 +90,11 @@ { "control": "None", "default": 0, - "label": "", + "label": "2:", "longdesc": "The smoothness of the boolean operation", "max": 1, "min": 0, - "name": "k", + "name": "k#", "shortdesc": "Smoothness", "step": 0.01, "type": "float" diff --git a/addons/material_maker/nodes/sdsmoothboolean.mmg b/addons/material_maker/nodes/sdsmoothboolean.mmg index 7b7fb0cff..7458ce15a 100644 --- a/addons/material_maker/nodes/sdsmoothboolean.mmg +++ b/addons/material_maker/nodes/sdsmoothboolean.mmg @@ -1,16 +1,23 @@ { + "generic_size": 1, "name": "sdsmoothboolean", "node_position": { "x": 0, "y": 0 }, "parameters": { - "k": 0.15, - "op": 0 + "k1": 0.15, + "op1": 0 }, "seed_int": 0, "shader_model": { - "code": "", + "code": [ + "float $(name_uv)_b = $b($uv);", + "", + "#for", + "$(name_uv)_b = sdSmooth$op#($s#($uv), $(name_uv)_b, $k#);", + "#end" + ], "global": [ "float sdSmoothUnion( float d1, float d2, float k ) {", "\tfloat h = clamp( 0.5 + 0.5*(d2-d1)/k, 0.0, 1.0 );", @@ -30,26 +37,26 @@ "default": "0.0", "label": "", "longdesc": "The first shape, defined as a signed distance function", - "name": "in1", - "shortdesc": "Input1", + "name": "b", + "shortdesc": "Base Shape", "type": "sdf2d" }, { "default": "0.0", "label": "", - "longdesc": "The second shape, defined as a signed distance function", - "name": "in2", - "shortdesc": "Input2", + "longdesc": "The subsequent shape, defined as a signed distance function", + "name": "s#", + "shortdesc": "Shape#", "type": "sdf2d" } ], "instance": "", - "longdesc": "Performs a smooth boolean operation (union, intersection or difference) between two shapes", + "longdesc": "Performs smooth boolean operations (union, intersection or difference) between two or more shapes", "name": "sdSmoothBoolean", "outputs": [ { - "longdesc": "The shape generated by the boolean operation", - "sdf2d": "sdSmooth$op($in1($uv), $in2($uv), $k)", + "longdesc": "The shape generated by the boolean operation(s)", + "sdf2d": "$(name_uv)_b", "shortdesc": "Output", "type": "sdf2d" } @@ -57,10 +64,10 @@ "parameters": [ { "default": 0, - "label": "", + "label": "2:", "longdesc": "The operation performed by this node", - "name": "op", - "shortdesc": "Operation", + "name": "op#", + "shortdesc": "Operation#", "type": "enum", "values": [ { @@ -80,12 +87,12 @@ { "control": "None", "default": 0, - "label": "", + "label": "2:", "longdesc": "The smoothness of the boolean operation", "max": 1, "min": 0, - "name": "k", - "shortdesc": "Smoothness", + "name": "k#", + "shortdesc": "Smoothness#", "step": 0.01, "type": "float" } diff --git a/material_maker/doc/images/node_3d_sdf_operators_boolean.png b/material_maker/doc/images/node_3d_sdf_operators_boolean.png index 2f200f697..bd6268b94 100644 Binary files a/material_maker/doc/images/node_3d_sdf_operators_boolean.png and b/material_maker/doc/images/node_3d_sdf_operators_boolean.png differ diff --git a/material_maker/doc/images/node_3d_sdf_operators_smoothboolean.png b/material_maker/doc/images/node_3d_sdf_operators_smoothboolean.png index a7f495140..e48164cc8 100644 Binary files a/material_maker/doc/images/node_3d_sdf_operators_smoothboolean.png and b/material_maker/doc/images/node_3d_sdf_operators_smoothboolean.png differ diff --git a/material_maker/doc/images/node_simple_sdf_operators_sdboolean.png b/material_maker/doc/images/node_simple_sdf_operators_sdboolean.png index 107447844..6ee8ff350 100644 Binary files a/material_maker/doc/images/node_simple_sdf_operators_sdboolean.png and b/material_maker/doc/images/node_simple_sdf_operators_sdboolean.png differ diff --git a/material_maker/doc/images/node_simple_sdf_operators_sdsmoothboolean.png b/material_maker/doc/images/node_simple_sdf_operators_sdsmoothboolean.png index bedb9386f..941e10a5c 100644 Binary files a/material_maker/doc/images/node_simple_sdf_operators_sdsmoothboolean.png and b/material_maker/doc/images/node_simple_sdf_operators_sdsmoothboolean.png differ diff --git a/material_maker/doc/node_3d_sdf_operators_boolean.rst b/material_maker/doc/node_3d_sdf_operators_boolean.rst index 70e6ed747..5111a1b51 100644 --- a/material_maker/doc/node_3d_sdf_operators_boolean.rst +++ b/material_maker/doc/node_3d_sdf_operators_boolean.rst @@ -11,7 +11,9 @@ boolean node applies them to the output. Inputs :::::: -The **Boolean** node accepts 2 inputs in 3D signed distance function format. +The **Boolean** node accepts two or more inputs in 3D signed distance function format. + +This node is variadic, and more shapes can be added. Outputs ::::::: diff --git a/material_maker/doc/node_3d_sdf_operators_smoothboolean.rst b/material_maker/doc/node_3d_sdf_operators_smoothboolean.rst index 6a56126d1..3533e72a6 100644 --- a/material_maker/doc/node_3d_sdf_operators_smoothboolean.rst +++ b/material_maker/doc/node_3d_sdf_operators_smoothboolean.rst @@ -11,7 +11,9 @@ smooth boolean node applies them to the output. Inputs :::::: -The **SmoothBoolean** node accepts 2 inputs in signed distance function format. +The **SmoothBoolean** node accepts two or more inputs in signed distance function format. + +This node is variadic, and more shapes can be added. Outputs ::::::: diff --git a/material_maker/doc/node_simple_sdf_operators_sdboolean.rst b/material_maker/doc/node_simple_sdf_operators_sdboolean.rst index 668023058..a2eabf866 100644 --- a/material_maker/doc/node_simple_sdf_operators_sdboolean.rst +++ b/material_maker/doc/node_simple_sdf_operators_sdboolean.rst @@ -10,7 +10,9 @@ intersection or difference) of its inputs. Inputs :::::: -The **sdBoolean** node accepts 2 inputs in signed distance function format. +The **sdBoolean** node accepts two or more inputs in signed distance function format. + +This node is variadic, and more shapes can be added. Outputs ::::::: diff --git a/material_maker/doc/node_simple_sdf_operators_sdsmoothboolean.rst b/material_maker/doc/node_simple_sdf_operators_sdsmoothboolean.rst index 692302e84..74da8ad50 100644 --- a/material_maker/doc/node_simple_sdf_operators_sdsmoothboolean.rst +++ b/material_maker/doc/node_simple_sdf_operators_sdsmoothboolean.rst @@ -10,7 +10,9 @@ intersection or difference) of its inputs. Inputs :::::: -The **sdSmoothBoolean** node accepts 2 inputs in signed distance function format. +The **sdSmoothBoolean** node accepts two or more inputs in signed distance function format. + +This node is variadic, and more shapes can be added. Outputs ::::::: diff --git a/material_maker/library/base.json b/material_maker/library/base.json index ffcbb8004..6bdb89bf0 100644 --- a/material_maker/library/base.json +++ b/material_maker/library/base.json @@ -365,13 +365,7 @@ "icon_data": "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", "name": "sdboolean", "parameters": { - "bevel": 0, - "cx": 0, - "cy": 0, - "h": 0.08, - "op": 0, - "r": 0.3, - "w": 0.28 + "op1": 0 }, "tree_item": "Simple/SDF/Operators/sdBoolean", "type": "sdboolean" @@ -381,14 +375,8 @@ "icon_data": "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", "name": "sdsmoothboolean", "parameters": { - "bevel": 0, - "cx": 0, - "cy": 0, - "h": 0.08, - "k": 0.15, - "op": 0, - "r": 0.3, - "w": 0.28 + "k1": 0.15, + "op1": 0 }, "tree_item": "Simple/SDF/Operators/sdSmoothBoolean", "type": "sdsmoothboolean" @@ -706,13 +694,7 @@ "icon_data": "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", "name": "sdf3d_boolean", "parameters": { - "bevel": 0, - "cx": 0, - "cy": 0, - "h": 0.08, - "op": 0, - "r": 0.3, - "w": 0.28 + "op1": 0 }, "tree_item": "3D/SDF/Operators/Boolean", "type": "sdf3d_boolean" @@ -722,14 +704,8 @@ "icon_data": "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", "name": "sdf3d_smoothboolean", "parameters": { - "bevel": 0, - "cx": 0, - "cy": 0, - "h": 0.08, - "k": 0.15, - "op": 0, - "r": 0.3, - "w": 0.28 + "k1": 0.15, + "op1": 0 }, "tree_item": "3D/SDF/Operators/SmoothBoolean", "type": "sdf3d_smoothboolean"