From 60f587e5e504b42422de5a9c5413a0d6e4ddf4d6 Mon Sep 17 00:00:00 2001 From: Rodz Labs Date: Wed, 6 Oct 2021 22:13:59 +0200 Subject: [PATCH] Updated the sdline node (moved profile to an input to optimize generate code) --- addons/material_maker/nodes/sdline2.mmg | 105 ++++++++++++++++++ .../images/node_simple_sdf_shapes_sdline.png | Bin 5915 -> 5456 bytes material_maker/library/base.json | 12 +- 3 files changed, 112 insertions(+), 5 deletions(-) create mode 100644 addons/material_maker/nodes/sdline2.mmg diff --git a/addons/material_maker/nodes/sdline2.mmg b/addons/material_maker/nodes/sdline2.mmg new file mode 100644 index 00000000..23da98c6 --- /dev/null +++ b/addons/material_maker/nodes/sdline2.mmg @@ -0,0 +1,105 @@ +{ + "name": "sdline2", + "node_position": { + "x": 0, + "y": 0 + }, + "parameters": { + "ax": -0.3, + "ay": -0.3, + "bx": 0.3, + "by": 0.3, + "r": 0.1 + }, + "seed": 0, + "seed_locked": false, + "shader_model": { + "code": "vec2 $(name_uv)_sdl = sdLine($uv, vec2($ax+0.5, $ay+0.5), vec2($bx+0.5, $by+0.5));", + "global": "vec2 sdLine(vec2 p, vec2 a, vec2 b) {\n vec2 pa = p-a, ba = b-a;\n float h = clamp(dot(pa,ba)/dot(ba,ba), 0.0, 1.0);\n return vec2(length(pa-ba*h), h);\n}\n", + "inputs": [ + { + "default": "1.0", + "label": "", + "longdesc": "A profile for the shape, generated (for example) by a Tonality node.", + "name": "profile", + "shortdesc": "Profile", + "type": "f" + } + ], + "instance": "", + "longdesc": "A line or a capsule shape described as a signed distance function", + "name": "sdLine", + "outputs": [ + { + "longdesc": "The shape as signed distance function", + "sdf2d": "$(name_uv)_sdl.x-$r*$profile(vec2($(name_uv)_sdl.y, 0.5))", + "shortdesc": "Output", + "type": "sdf2d" + } + ], + "parameters": [ + { + "control": "P1.x", + "default": 0, + "label": "A X", + "longdesc": "The position on the X axis of the first point of the line", + "max": 1, + "min": -1, + "name": "ax", + "shortdesc": "A.x", + "step": 0.01, + "type": "float" + }, + { + "control": "P1.y", + "default": 0, + "label": "A Y", + "longdesc": "The position on the Y axis of the first point of the line", + "max": 1, + "min": -1, + "name": "ay", + "shortdesc": "A.y", + "step": 0.01, + "type": "float" + }, + { + "control": "P2.x", + "default": 1, + "label": "B X", + "longdesc": "The position on the X axis of the second point of the line", + "max": 1, + "min": -1, + "name": "bx", + "shortdesc": "B.x", + "step": 0.01, + "type": "float" + }, + { + "control": "P2.y", + "default": 1, + "label": "B Y", + "longdesc": "The position on the Y axis of the second point of the line", + "max": 1, + "min": -1, + "name": "by", + "shortdesc": "B.y", + "step": 0.01, + "type": "float" + }, + { + "control": "Radius1.r", + "default": 0, + "label": "Width", + "longdesc": "The width of the capsule shape around the line", + "max": 1, + "min": 0, + "name": "r", + "shortdesc": "Width", + "step": 0.01, + "type": "float" + } + ], + "shortdesc": "sdLine" + }, + "type": "shader" +} \ No newline at end of file diff --git a/material_maker/doc/images/node_simple_sdf_shapes_sdline.png b/material_maker/doc/images/node_simple_sdf_shapes_sdline.png index d483c9534f1823ad10414b181b50e6e431a63a7b..f82a8569a691a68a5c8ffd00b54765da87abb992 100644 GIT binary patch literal 5456 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 literal 5915 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