From 8a41750ec66c17aa71122720952c500cda88f20d Mon Sep 17 00:00:00 2001 From: Rodolphe Suescun Date: Sun, 16 Aug 2020 10:30:05 +0200 Subject: [PATCH] Added Repeat and CircleRepeat 2D SDF nodes --- .../material_maker/nodes/sdcirclerepeat.mmg | 47 ++++++++++++ addons/material_maker/nodes/sdrepeat.mmg | 68 ++++++++++++++++++ material_maker/library/base.json | 22 ++++++ .../simple_sdf_operators_sdcirclerepeat.png | Bin 0 -> 4283 bytes .../base/simple_sdf_operators_sdrepeat.png | Bin 0 -> 5176 bytes 5 files changed, 137 insertions(+) create mode 100644 addons/material_maker/nodes/sdcirclerepeat.mmg create mode 100644 addons/material_maker/nodes/sdrepeat.mmg create mode 100644 material_maker/library/base/simple_sdf_operators_sdcirclerepeat.png create mode 100644 material_maker/library/base/simple_sdf_operators_sdrepeat.png diff --git a/addons/material_maker/nodes/sdcirclerepeat.mmg b/addons/material_maker/nodes/sdcirclerepeat.mmg new file mode 100644 index 00000000..81d07f8f --- /dev/null +++ b/addons/material_maker/nodes/sdcirclerepeat.mmg @@ -0,0 +1,47 @@ +{ + "name": "sdcirclerepeat", + "node_position": { + "x": 0, + "y": 0 + }, + "parameters": { + "c": 6 + }, + "seed_value": 44955, + "shader_model": { + "code": "", + "global": "vec2 circle_repeat_transform_2d(vec2 p, float count) {\n\tfloat r = 6.28/count;\n\tfloat pa = atan(p.x, p.y);\n\tfloat a = mod(pa+0.5*r, r)-0.5*r;\n\tvec2 rv;\n\tfloat c = cos(a-pa);\n\tfloat s = sin(a-pa);\n\trv.x = p.x*c+p.y*s;\n\trv.y = -p.x*s+p.y*c;\n\treturn rv;\n}\n", + "includes": [ + "" + ], + "inputs": [ + { + "default": "0.0", + "label": "", + "name": "in", + "type": "sdf2d" + } + ], + "instance": "", + "name": "Circle Repeat", + "outputs": [ + { + "sdf2d": "$in(circle_repeat_transform_2d($uv-vec2(0.5), $c)+vec2(0.5))", + "type": "sdf2d" + } + ], + "parameters": [ + { + "control": "None", + "default": 4, + "label": "", + "max": 32, + "min": 1, + "name": "c", + "step": 1, + "type": "float" + } + ] + }, + "type": "shader" +} \ No newline at end of file diff --git a/addons/material_maker/nodes/sdrepeat.mmg b/addons/material_maker/nodes/sdrepeat.mmg new file mode 100644 index 00000000..1ade0a52 --- /dev/null +++ b/addons/material_maker/nodes/sdrepeat.mmg @@ -0,0 +1,68 @@ +{ + "name": "sdrepeat", + "node_position": { + "x": 0, + "y": 0 + }, + "parameters": { + "r": 0.5, + "rx": 3, + "ry": 3 + }, + "shader_model": { + "code": "", + "global": "vec2 repeat_2d(vec2 p, vec2 r, float seed, float randomness) {\n\tp -= vec2(0.5);\n\tfloat a = (rand(floor(mod((p.xy+0.5*r.xy)/r.xy, 1.0/r.xy)+vec2(seed)))-0.5)*6.28*randomness;\n\tp = mod(p+0.5*r,r)-0.5*r;\n\tvec2 rv;\n\tfloat c = cos(a);\n\tfloat s = sin(a);\n\trv.x = p.x*c+p.y*s;\n\trv.y = -p.x*s+p.y*c;\n\treturn rv+vec2(0.5);\n}\n", + "includes": [ + "" + ], + "inputs": [ + { + "default": "0.0", + "label": "", + "name": "in", + "type": "sdf2d" + } + ], + "instance": "", + "name": "Repeat", + "outputs": [ + { + "sdf2d": "$in(repeat_2d($uv, vec2(1.0/$rx, 1.0/$ry), float($seed), $r))", + "type": "sdf2d" + } + ], + "parameters": [ + { + "control": "None", + "default": 4, + "label": "X", + "max": 32, + "min": 1, + "name": "rx", + "step": 1, + "type": "float" + }, + { + "control": "None", + "default": 4, + "label": "Y", + "max": 32, + "min": 1, + "name": "ry", + "step": 1, + "type": "float" + }, + { + "control": "None", + "default": 0.5, + "label": "R", + "max": 1, + "min": 0, + "name": "r", + "step": 0.01, + "type": "float" + } + ] + }, + "type": "shader" +} \ No newline at end of file diff --git a/material_maker/library/base.json b/material_maker/library/base.json index c65683b2..fe5a565d 100644 --- a/material_maker/library/base.json +++ b/material_maker/library/base.json @@ -383,6 +383,28 @@ "tree_item": "Simple/SDF/Operators/sdMorph", "type": "sdmorph" }, + { + "collapsed": true, + "icon": "simple_sdf_operators_sdrepeat", + "name": "sdrepeat", + "parameters": { + "r": 0.5, + "rx": 3, + "ry": 3 + }, + "tree_item": "Simple/SDF/Operators/sdRepeat", + "type": "sdrepeat" + }, + { + "collapsed": true, + "icon": "simple_sdf_operators_sdcirclerepeat", + "name": "sdcirclerepeat", + "parameters": { + "c": 6 + }, + "tree_item": "Simple/SDF/Operators/sdCircleRepeat", + "type": "sdcirclerepeat" + }, { "collapsed": false, "tree_item": "Simple/SDF/Transforms" diff --git a/material_maker/library/base/simple_sdf_operators_sdcirclerepeat.png b/material_maker/library/base/simple_sdf_operators_sdcirclerepeat.png new file mode 100644 index 0000000000000000000000000000000000000000..c0fd6b3d2bd3f5f42b0a4d7967d36e2196c0c7ba GIT binary patch literal 4283 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 literal 0 HcmV?d00001 diff --git a/material_maker/library/base/simple_sdf_operators_sdrepeat.png b/material_maker/library/base/simple_sdf_operators_sdrepeat.png new file mode 100644 index 0000000000000000000000000000000000000000..fdc5914ca16ce10132d73210c05e04e204db92df GIT binary patch literal 5176 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
Ot|b=AtRUbuA~{;%;c?(<1ZeEbBw1 zORZZNhrW)^yT%~NA7=pMhI)Ej0E?A4bJElAcxx*1Tv)}9fx|xVv;fBA2Yna|OwmdbpC(_V%`{#{v?1hP};t5&Oa8V}$q<6F=3{$n^B|(dp^ZBq8Gm($dDzY#pFG ztLFDam|y;yXn;w>`W`%dnDT37_;;q<7{GRQK&YhFE?GvyjvVYZ*%z$=J!>=<1w|+W znECqqmwx+Z+TGo4T4@uxfT)J#$ruEIq)-KVjO+%!zO_W*NWck>{rSTQFGY+sz4)r5 z`m)&lhP^m3BST0X5Y)oxuvf$bM+qT`=Yx_Xh87m(6|L8%fG=UW%s^*aYok-iVSG3S zNvhD>D(kd>MC$+t6DN*g&f=S}t_%6Dy**z>m|#+9U?#2`2Rn6RZBLS&JYxn2$tKlq z>XC;EaVz1(&APP%%e5lk)6>k|C;v(QpZ!mAOHe;5TfM#fJ>6rBi=Do6d|MGF(bK3 z#L874zC>5lsVK?zru8Ft8#K$I?t{ixE!AFGxu_8T-cXH}DVMVGLF<)^QrK?mG0h6uDW6nAM@>cAF2d z-A_|~si>)u0YRpR-MMq3qLyfYPukkthOu(w?t=31c2gQ+q>xb8(6Ac_hp_J%* z4{fysWKg@vfQE*~{!_Oo*l9(sHuNfJYnA3aZ#qh|8&fLI2Z?DzX zL?t){C;#YJhnPM0GmaLBo&SOu;GwW zH@N(>{!~Z=2Ez~v^${>0NbmLr`_pbaGW{r%SpJ^i8=^KxnyB5g_KZJ{(CeQMot>SP z?0GLk_WZ?*juo%TpS#~SiRIbpfG~Nacfsw;3YECYUE}*6N zdDmANNSeVe=7akaDk95xDkV0IkzsrD?p;w!i^2vOv#2m9P^qcTZJR&%Zo@B(5g{WB zOJZVTXO&&0mbX#Rx}=W?X)hlHQfV1?j?@qcKBlQRDiJq23E;eh2C6x z16Z42Qdqbq?X$y0+ID7}(!}j3ugLn^71n_t*Ke|gRUZXaz*a{a)K7A6m9-I}H{<(= zZP|ez3ear2^8wZq(>VnmN=+kjnP>?K;mu~O@Kt3ucDk7_&*7EoF@5;*A9#TUPtH$4r8Q&~uCA_9cRX-iA z4cH@Vn3dj}RR|71?3iD+jkR6OIxHF0dpv*83o?n`n6h}po0vYz#w%_y)1(23OaABbesjaPLWMbOGs;L}KMWNSugEVS@v~?k^teJoA`Mm^vQq{7uL=+dn`(t|$kRd3~3~QpZa)8fjmL zer%P2?!>?jbTIVk^McD$WjeZuW2CcP7k;b!AXEL<8io9MSSQR94VD^Y2Yv+-sH