Updated 3DSDF nodes with color, and skulls and mmm_donuts examples

This commit is contained in:
RodZill4 2020-02-06 21:51:14 +01:00
parent c53b4e06eb
commit 62e6d57b1e
13 changed files with 289 additions and 433 deletions

View File

@ -204,7 +204,7 @@ func get_shader_code(uv : String, output_index : int, context : MMGenContext) ->
var rv = _get_shader_code(uv, output_index, context)
while rv is GDScriptFunctionState:
rv = yield(rv, "completed")
if rv.has("type"):
if rv.has("type") and mm_io_types.types.has(rv.type):
if mm_io_types.types[rv.type].has("convert"):
for c in mm_io_types.types[rv.type].convert:
if !rv.has(c.type):

View File

@ -0,0 +1,60 @@
{
"name": "mul_detect",
"node_position": {
"x": 0,
"y": 0
},
"parameters": {
"t": 0.01,
"v": 0.5
},
"shader_model": {
"code": "float $(name_uv)_d = ($in($uv)-$v)/$t;",
"global": "",
"inputs": [
{
"default": "1.0",
"label": "",
"name": "mul",
"type": "f"
},
{
"default": "0.0",
"label": "",
"name": "in",
"type": "f"
}
],
"instance": "",
"name": "MulDetect",
"outputs": [
{
"f": "$mul($uv)*clamp(1.0-$(name_uv)_d*$(name_uv)_d, 0.0, 1.0)",
"type": "f"
}
],
"parameters": [
{
"control": "None",
"default": 0.5,
"label": "Value",
"max": 1,
"min": 0,
"name": "v",
"step": 0.01,
"type": "float"
},
{
"control": "None",
"default": 0.1,
"label": "Tolerance",
"max": 1,
"min": 0.01,
"name": "t",
"step": 0.001,
"type": "float"
}
]
},
"type": "shader"
}

View File

@ -8,7 +8,7 @@
},
"shader_model": {
"code": "float $(name_uv)_d = raymarch_$name($uv);\n",
"code": "vec2 $(name_uv)_d = raymarch_$name($uv);\n",
"global": "",
"inputs": [
{
@ -16,19 +16,23 @@
"function": true,
"label": "",
"name": "sdf",
"type": "sdf3d"
"type": "sdf3dc"
}
],
"instance": "float input_$name(vec3 p) {\n\tif (p.z > 0.0) {\n\t\treturn $sdf(p);\n\t} else {\n\t\treturn p.z;\n\t}\n}\n\nfloat raymarch_$name(vec2 uv) {\n\tvec3 ro = vec3(uv-vec2(0.5), 1.0);\n\tvec3 rd = vec3(0.0, 0.0, -1.0);\n\tfloat dO=0.;\n \n for (int i=0; i < 25; i++) {\n \tvec3 p = ro + rd*dO;\n float dS = input_$name(p);\n dO += dS;\n if (dO > 1.0 || dS < 0.0001) break;\n }\n \n return dO;\n}\n\nvec3 normal_$name(vec3 p) {\n\tfloat d = input_$name(p);\n float e = .001;\n \n vec3 n = d - vec3(\n input_$name(p-vec3(e, 0.0, 0.0)),\n input_$name(p-vec3(0.0, e, 0.0)),\n input_$name(p-vec3(0.0, 0.0, e)));\n \n return vec3(-1.0, -1.0, -1.0)*normalize(n);\n}\n\n",
"instance": "vec2 raymarch_$name(vec2 uv) {\n\tvec3 ro = vec3(uv-vec2(0.5), 1.0);\n\tvec3 rd = vec3(0.0, 0.0, -1.0);\n\tfloat dO = 0.0;\n\tfloat c = 0.0;\n for (int i=0; i < 100; i++) {\n \tvec3 p = ro + rd*dO;\n vec2 dS = $sdf(p);\n dO += dS.x;\n\n if (dO >= 1.0) {\n\t\t\tbreak;\n\t\t} else if (dS.x < 0.0001) {\n\t\t\tc = dS.y;\n\t\t\tbreak;\n\t\t}\n }\n \n return vec2(dO, c);\n}\n\nvec3 normal_$name(vec3 p) {\n\tif (p.z <= 0.0) {\n\t\treturn vec3(0.0, 0.0, 1.0);\n\t}\n\n\tfloat d = $sdf(p).x;\n float e = .001;\n \n vec3 n = d - vec3(\n $sdf(p-vec3(e, 0.0, 0.0)).x,\n $sdf(p-vec3(0.0, e, 0.0)).x,\n $sdf(p-vec3(0.0, 0.0, e)).x);\n \n return vec3(-1.0, -1.0, -1.0)*normalize(n);\n}\n\n",
"name": "Raymarching",
"outputs": [
{
"f": "1.0-$(name_uv)_d",
"f": "1.0-$(name_uv)_d.x",
"type": "f"
},
{
"rgb": "vec3(0.5)+0.5*normal_$name(vec3($uv-vec2(0.5), 1.0-$(name_uv)_d))",
"rgb": "vec3(0.5)+0.5*normal_$name(vec3($uv-vec2(0.5), 1.0-$(name_uv)_d.x))",
"type": "rgb"
},
{
"f": "$(name_uv)_d.y",
"type": "f"
}
],
"parameters": [

View File

@ -15,47 +15,47 @@
},
"shader_model": {
"code": "",
"global": "",
"global": "vec2 sdf3dc_union(vec2 a, vec2 b) {\n\treturn vec2(min(a.x, b.x), mix(b.y, a.y, step(a.x, b.x)));\n}\nvec2 sdf3dc_sub(vec2 a, vec2 b) {\n\treturn vec2(max(a.x, -b.x), a.y);\n}\nvec2 sdf3dc_inter(vec2 a, vec2 b) {\n\treturn vec2(max(a.x, b.x), mix(a.y, b.y, step(a.x, b.x)));\n}\n",
"inputs": [
{
"default": "0.0",
"default": "vec2(0.0)",
"label": "",
"name": "in1",
"type": "sdf3d"
"type": "sdf3dc"
},
{
"default": "0.0",
"default": "vec2(0.0)",
"label": "",
"name": "in2",
"type": "sdf3d"
"type": "sdf3dc"
}
],
"instance": "",
"name": "Boolean",
"outputs": [
{
"sdf3d": "$op $in1($uv), $in2($uv))",
"type": "sdf3d"
"sdf3dc": "$op($in1($uv), $in2($uv))",
"type": "sdf3dc"
}
],
"parameters": [
{
"default": 1,
"default": 2,
"label": "",
"name": "op",
"type": "enum",
"values": [
{
"name": "Union",
"value": "min("
"value": "sdf3dc_union"
},
{
"name": "Subtraction",
"value": "max(-"
"value": "sdf3dc_sub"
},
{
"name": "Intersection",
"value": "max("
"value": "sdf3dc_inter"
}
]
}

View File

@ -6,7 +6,7 @@
},
"parameters": {
"a": 0,
"c": 4,
"c": 5,
"r": 0.24,
"rx": 4,
"ry": 4,
@ -20,22 +20,23 @@
"global": "vec3 circle_repeat_transform(vec3 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\tvec3 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\trv.z = p.z;\n\treturn rv;\n}\n",
"inputs": [
{
"default": "0.0",
"default": "vec2(0.0)",
"label": "",
"name": "in",
"type": "sdf3d"
"type": "sdf3dc"
}
],
"instance": "",
"name": "Circle Repeat",
"outputs": [
{
"sdf3d": "$in(circle_repeat_transform($uv, $c))",
"type": "sdf3d"
"sdf3dc": "$in(circle_repeat_transform($uv, $c))",
"type": "sdf3dc"
}
],
"parameters": [
{
"control": "None",
"default": 4,
"label": "",
"max": 32,

View File

@ -6,9 +6,9 @@
},
"parameters": {
"a": 0,
"r": 0.24,
"rx": 4,
"ry": 4,
"r": 0.3,
"rx": 3,
"ry": 3,
"s": 0.3,
"x": 0.35,
"y": 0,
@ -19,22 +19,23 @@
"global": "vec3 repeat(vec3 p, vec3 r, float seed, float randomness) {\n\tvec3 a = (rand3(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\tvec3 rv;\n\tfloat c;\n\tfloat s;\n\tc = cos(a.x);\n\ts = sin(a.x);\n\trv.x = p.x;\n\trv.y = p.y*c+p.z*s;\n\trv.z = -p.y*s+p.z*c;\n\tc = cos(a.y);\n\ts = sin(a.y);\n\tp.x = rv.x*c+rv.z*s;\n\tp.y = rv.y;\n\tp.z = -rv.x*s+rv.z*c;\n\tc = cos(a.z);\n\ts = sin(a.z);\n\trv.x = p.x*c+p.y*s;\n\trv.y = -p.x*s+p.y*c;\n\trv.z = p.z;\n\treturn rv;\n}\n",
"inputs": [
{
"default": "0.0",
"default": "vec2(0.0)",
"label": "",
"name": "in",
"type": "sdf3d"
"type": "sdf3dc"
}
],
"instance": "",
"name": "Repeat",
"outputs": [
{
"sdf3d": "$in(repeat($uv, vec3(1.0/$rx, 1.0/$ry, 0.0), $seed, $r))",
"type": "sdf3d"
"sdf3dc": "$in(repeat($uv, vec3(1.0/$rx, 1.0/$ry, 0.0), $seed, $r))",
"type": "sdf3dc"
}
],
"parameters": [
{
"control": "None",
"default": 4,
"label": "X",
"max": 32,
@ -44,6 +45,7 @@
"type": "float"
},
{
"control": "None",
"default": 4,
"label": "Y",
"max": 32,
@ -53,6 +55,7 @@
"type": "float"
},
{
"control": "None",
"default": 0.5,
"label": "R",
"max": 1,

View File

@ -18,22 +18,23 @@
"global": "vec3 rotate3d(vec3 p, vec3 a) {\n\tvec3 rv;\n\tfloat c;\n\tfloat s;\n\tc = cos(a.x);\n\ts = sin(a.x);\n\trv.x = p.x;\n\trv.y = p.y*c+p.z*s;\n\trv.z = -p.y*s+p.z*c;\n\tc = cos(a.y);\n\ts = sin(a.y);\n\tp.x = rv.x*c+rv.z*s;\n\tp.y = rv.y;\n\tp.z = -rv.x*s+rv.z*c;\n\tc = cos(a.z);\n\ts = sin(a.z);\n\trv.x = p.x*c+p.y*s;\n\trv.y = -p.x*s+p.y*c;\n\trv.z = p.z;\n\treturn rv;\n}\n",
"inputs": [
{
"default": "0.0",
"default": "vec2(0.0)",
"label": "",
"name": "in",
"type": "sdf3d"
"type": "sdf3dc"
}
],
"instance": "",
"name": "Rotate",
"outputs": [
{
"sdf3d": "$in(rotate3d($uv, -vec3($ax, $ay, $az)*0.01745329251))",
"type": "sdf3d"
"sdf3dc": "$in(rotate3d($uv, -vec3($ax, $ay, $az)*0.01745329251))",
"type": "sdf3dc"
}
],
"parameters": [
{
"control": "None",
"default": 0,
"label": "X",
"max": 180,
@ -43,6 +44,7 @@
"type": "float"
},
{
"control": "None",
"default": 0,
"label": "Y",
"max": 180,
@ -52,6 +54,7 @@
"type": "float"
},
{
"control": "None",
"default": 0,
"label": "Z",
"max": 180,

View File

@ -11,30 +11,31 @@
"h": 0.08,
"k": 0.15,
"op": 0,
"r": 0.05,
"r": 0.1,
"w": 0.28
},
"shader_model": {
"code": "",
"code": "vec2 $(name_uv)_v = $in($uv);",
"global": "",
"inputs": [
{
"default": "0.0",
"default": "vec2(0.0)",
"label": "",
"name": "in",
"type": "sdf3d"
"type": "sdf3dc"
}
],
"instance": "",
"name": "Rounded",
"outputs": [
{
"sdf3d": "$in($uv)-$r",
"type": "sdf3d"
"sdf3dc": "vec2($(name_uv)_v.x-$r, $(name_uv)_v.y)",
"type": "sdf3dc"
}
],
"parameters": [
{
"control": "None",
"default": 0,
"label": "",
"max": 1,

View File

@ -12,22 +12,22 @@
"z": 0
},
"shader_model": {
"code": "",
"code": "vec2 $(name_uv)_in = $in(($uv)/$s);",
"global": "",
"inputs": [
{
"default": "0.0",
"default": "vec2(0.0)",
"label": "",
"name": "in",
"type": "sdf3d"
"type": "sdf3dc"
}
],
"instance": "",
"name": "Scale",
"outputs": [
{
"sdf3d": "$in(($uv)/$s)*$s",
"type": "sdf3d"
"sdf3dc": "vec2($(name_uv)_in.x*$s, $(name_uv)_in.y)",
"type": "sdf3dc"
}
],
"parameters": [

View File

@ -10,57 +10,58 @@
"cy": 0,
"h": 0.08,
"k": 0.1,
"op": 0,
"op": 2,
"r": 0.3,
"w": 0.28
},
"shader_model": {
"code": "",
"global": "float sdf3SmoothUnion(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}\n\nfloat sdf3SmoothSubtraction( 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}\n\nfloat sdf3SmoothIntersection( 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}\n",
"global": "vec2 sdf3d_smooth_union(vec2 d1, vec2 d2, float k) {\n float h = clamp(0.5+0.5*(d2.x-d1.x)/k, 0.0, 1.0);\n return vec2(mix(d2.x, d1.x, h)-k*h*(1.0-h), mix(d2.y, d1.y, step(d1.x, d2.x)));\n}\n\nvec2 sdf3d_smooth_subtraction(vec2 d1, vec2 d2, float k ) {\n float h = clamp(0.5-0.5*(d2.x+d1.x)/k, 0.0, 1.0);\n return vec2(mix(d2.x, -d1.x, h )+k*h*(1.0-h), d2.y);\n}\n\nvec2 sdf3d_smooth_intersection(vec2 d1, vec2 d2, float k ) {\n float h = clamp(0.5-0.5*(d2.x-d1.x)/k, 0.0, 1.0);\n return vec2(mix(d2.x, d1.x, h)+k*h*(1.0-h), mix(d1.y, d2.y, step(d1.x, d2.x)));\n}\n",
"inputs": [
{
"default": "0.0",
"default": "vec2(0.0)",
"label": "",
"name": "in1",
"type": "sdf3d"
"type": "sdf3dc"
},
{
"default": "0.0",
"default": "vec2(0.0)",
"label": "",
"name": "in2",
"type": "sdf3d"
"type": "sdf3dc"
}
],
"instance": "",
"name": "sdSmoothBoolean",
"name": "SmoothBoolean",
"outputs": [
{
"sdf3d": "sdf3Smooth$op($in1($uv), $in2($uv), $k)",
"type": "sdf3d"
"sdf3dc": "sdf3d_smooth_$op($in1($uv), $in2($uv), $k)",
"type": "sdf3dc"
}
],
"parameters": [
{
"default": 0,
"default": 2,
"label": "",
"name": "op",
"type": "enum",
"values": [
{
"name": "Union",
"value": "Union"
"value": "union"
},
{
"name": "Subtraction",
"value": "Subtraction"
"value": "subtraction"
},
{
"name": "Intersection",
"value": "Intersection"
"value": "intersection"
}
]
},
{
"control": "None",
"default": 0,
"label": "",
"max": 1,

View File

@ -14,18 +14,18 @@
"global": "",
"inputs": [
{
"default": "0.0",
"default": "vec2(0.0)",
"label": "",
"name": "in",
"type": "sdf3d"
"type": "sdf3dc"
}
],
"instance": "",
"name": "Translate",
"outputs": [
{
"sdf3d": "$in($uv-vec3($x, $y, $z))",
"type": "sdf3d"
"sdf3dc": "$in($uv-vec3($x, $y, $z))",
"type": "sdf3dc"
}
],
"parameters": [

View File

@ -48,60 +48,6 @@
"to": "raymarching",
"to_port": 0
},
{
"from": "raymarching",
"from_port": 0,
"to": "10053_2",
"to_port": 0
},
{
"from": "raymarching",
"from_port": 2,
"to": "10053_2",
"to_port": 1
},
{
"from": "raymarching",
"from_port": 0,
"to": "10053_2_2",
"to_port": 0
},
{
"from": "raymarching",
"from_port": 2,
"to": "10053_2_2",
"to_port": 1
},
{
"from": "raymarching",
"from_port": 0,
"to": "10053",
"to_port": 0
},
{
"from": "raymarching",
"from_port": 2,
"to": "10053",
"to_port": 1
},
{
"from": "10053",
"from_port": 0,
"to": "mwf_create_map",
"to_port": 0
},
{
"from": "10053_2_2",
"from_port": 0,
"to": "mwf_create_map_3",
"to_port": 0
},
{
"from": "10053_2",
"from_port": 0,
"to": "mwf_create_map_2",
"to_port": 0
},
{
"from": "mwf_create_map",
"from_port": 0,
@ -396,17 +342,65 @@
"to": "colorize",
"to_port": 0
},
{
"from": "perlin_2",
"from_port": 0,
"to": "10053_2_2_2",
"to_port": 1
},
{
"from": "mwf_output",
"from_port": 6,
"to": "Material",
"to_port": 6
},
{
"from": "raymarching",
"from_port": 0,
"to": "mul_detect",
"to_port": 0
},
{
"from": "raymarching",
"from_port": 2,
"to": "mul_detect",
"to_port": 1
},
{
"from": "mul_detect",
"from_port": 0,
"to": "mwf_create_map",
"to_port": 0
},
{
"from": "mul_detect_2",
"from_port": 0,
"to": "mwf_create_map_3",
"to_port": 0
},
{
"from": "raymarching",
"from_port": 0,
"to": "mul_detect_2",
"to_port": 0
},
{
"from": "raymarching",
"from_port": 2,
"to": "mul_detect_2",
"to_port": 1
},
{
"from": "raymarching",
"from_port": 0,
"to": "mul_detect_2_2",
"to_port": 0
},
{
"from": "mul_detect_2_2",
"from_port": 0,
"to": "mwf_create_map_2",
"to_port": 0
},
{
"from": "raymarching",
"from_port": 2,
"to": "mul_detect_2_2",
"to_port": 1
}
],
"label": "Graph",
@ -419,8 +413,8 @@
{
"name": "Material",
"node_position": {
"x": 1730.920044,
"y": -7.312012
"x": 1596.135986,
"y": -86.800011
},
"parameters": {
"albedo_color": {
@ -444,8 +438,8 @@
{
"name": "raymarching",
"node_position": {
"x": -87.107498,
"y": 153.625015
"x": -93.107498,
"y": 112.625015
},
"parameters": {
@ -568,8 +562,8 @@
"label": "Donut",
"name": "graph",
"node_position": {
"x": -685.679138,
"y": -17.270287
"x": -664.759155,
"y": -18.094296
},
"nodes": [
{
@ -1126,8 +1120,8 @@
{
"name": "sdf3d_repeat",
"node_position": {
"x": -508.122192,
"y": -14.881775
"x": -482.202179,
"y": -14.881774
},
"parameters": {
"a": 0,
@ -1196,8 +1190,8 @@
{
"name": "sdf3d_scale_2",
"node_position": {
"x": -690.122192,
"y": 57.118225
"x": -670.842224,
"y": 66.030228
},
"parameters": {
"a": 0,
@ -1243,12 +1237,12 @@
{
"name": "sdf3d_repeat_2",
"node_position": {
"x": -506.122192,
"x": -480.202179,
"y": 110.618225
},
"parameters": {
"a": 0,
"r": 0.33,
"r": 0.21,
"rx": 3,
"ry": 3,
"s": 0.3,
@ -1313,13 +1307,13 @@
{
"name": "sdf3d_translate_3_2_2",
"node_position": {
"x": -505.872192,
"x": -479.952209,
"y": 213.034912
},
"parameters": {
"x": 0.14,
"y": 0.11,
"z": 0.1
"z": 0.2
},
"shader_model": {
"code": "",
@ -1378,8 +1372,8 @@
{
"name": "sdf3d_boolean",
"node_position": {
"x": -270.800781,
"y": 120.820618
"x": -252.248795,
"y": 76.092621
},
"parameters": {
"bevel": 0,
@ -1443,8 +1437,8 @@
{
"name": "sdf3d_translate_3_2_2_2",
"node_position": {
"x": -281.800781,
"y": 194.820618
"x": -278.344788,
"y": 149.892624
},
"parameters": {
"x": 0,
@ -1515,171 +1509,24 @@
},
"name": "comment",
"node_position": {
"x": -718.245239,
"y": -47.346039
"x": -681.957275,
"y": -50.802036
},
"parameters": {
"size": 4
},
"size": {
"x": 790,
"y": 394.999969
"x": 757.167969,
"y": 382.903992
},
"text": "\n",
"title": "Render donuts with color indexes",
"type": "comment"
},
{
"name": "10053",
"node_position": {
"x": 117.221985,
"y": -12.346039
},
"parameters": {
"v": 0.31
},
"shader_model": {
"code": "",
"global": "",
"inputs": [
{
"default": "1.0",
"label": "Label",
"name": "mul",
"type": "f"
},
{
"default": "0.0",
"label": "",
"name": "in",
"type": "f"
}
],
"instance": "",
"name": "MulDetect",
"outputs": [
{
"f": "$mul($uv)*(1.0-10.0*($in($uv)-$v)*($in($uv)-$v))",
"type": "f"
}
],
"parameters": [
{
"control": "None",
"default": 0.5,
"label": "",
"max": 1,
"min": 0,
"name": "v",
"step": 0.01,
"type": "float"
}
]
},
"type": "shader"
},
{
"name": "10053_2",
"node_position": {
"x": 121.462341,
"y": 395.472137
},
"parameters": {
"v": 0.08
},
"shader_model": {
"code": "",
"global": "",
"inputs": [
{
"default": "1.0",
"label": "Label",
"name": "mul",
"type": "f"
},
{
"default": "0.0",
"label": "",
"name": "in",
"type": "f"
}
],
"instance": "",
"name": "MulDetect",
"outputs": [
{
"f": "$mul($uv)*(1.0-10.0*($in($uv)-$v)*($in($uv)-$v))",
"type": "f"
}
],
"parameters": [
{
"control": "None",
"default": 0.5,
"label": "",
"max": 1,
"min": 0,
"name": "v",
"step": 0.01,
"type": "float"
}
]
},
"type": "shader"
},
{
"name": "10053_2_2",
"node_position": {
"x": 113.786713,
"y": 170.138794
},
"parameters": {
"v": 0.87
},
"shader_model": {
"code": "",
"global": "",
"inputs": [
{
"default": "1.0",
"label": "Label",
"name": "mul",
"type": "f"
},
{
"default": "0.0",
"label": "",
"name": "in",
"type": "f"
}
],
"instance": "",
"name": "MulDetect",
"outputs": [
{
"f": "$mul($uv)*clamp((1.0-10.0*($in($uv)-$v)*($in($uv)-$v)), 0.0, 1.0)",
"type": "f"
}
],
"parameters": [
{
"control": "None",
"default": 0.5,
"label": "",
"max": 1,
"min": 0,
"name": "v",
"step": 0.01,
"type": "float"
}
]
},
"type": "shader"
},
{
"name": "mwf_create_map",
"node_position": {
"x": 358.843994,
"x": 360.571991,
"y": -128.630447
},
"parameters": {
@ -1765,8 +1612,8 @@
{
"name": "mwf_mix",
"node_position": {
"x": 864.268921,
"y": 189.119568
"x": 853.900879,
"y": 164.927567
},
"parameters": {
@ -1776,8 +1623,8 @@
{
"name": "mwf_mix_2",
"node_position": {
"x": 1141.761108,
"y": -8.130447
"x": 1083.009155,
"y": -87.618446
},
"parameters": {
@ -1874,8 +1721,8 @@
"label": "Output",
"name": "mwf_output",
"node_position": {
"x": 1405.761108,
"y": -1.630447
"x": 1307.265137,
"y": -74.206451
},
"nodes": [
{
@ -2470,8 +2317,8 @@
{
"name": "mwf_mix_3",
"node_position": {
"x": 857.856567,
"y": -274.880432
"x": 845.760559,
"y": -242.048431
},
"parameters": {
@ -2526,8 +2373,8 @@
{
"name": "perlin",
"node_position": {
"x": 358.92984,
"y": 508.119568
"x": 363.92984,
"y": 499.119568
},
"parameters": {
"iterations": 8,
@ -2571,21 +2418,21 @@
"color": {
"a": 1,
"b": 0,
"g": 0.5,
"r": 1,
"g": 1,
"r": 0.9375,
"type": "Color"
},
"name": "comment_2",
"node_position": {
"x": 97.468719,
"y": -49.148132
"x": 82.468719,
"y": -50.148132
},
"parameters": {
"size": 4
},
"size": {
"x": 242,
"y": 533
"x": 255.271576,
"y": 432.232056
},
"text": "",
"title": "Separate colors",
@ -2618,100 +2465,62 @@
{
"color": {
"a": 1,
"b": 0,
"g": 0.6875,
"r": 1,
"b": 1,
"g": 0,
"r": 0.96875,
"type": "Color"
},
"name": "comment_2_2_2",
"node_position": {
"x": 838.947449,
"y": -317.398193
"x": 828.579407,
"y": -289.750183
},
"parameters": {
"size": 4
},
"size": {
"x": 837,
"y": 783
"x": 743.688171,
"y": 725.975952
},
"text": "",
"title": "Mix the result and generate output",
"type": "comment"
},
{
"name": "10053_2_2_2",
"name": "mul_detect",
"node_position": {
"x": -158.775818,
"y": -271.032806
"x": 90.234436,
"y": -13.032837
},
"parameters": {
"t": 0.009,
"v": 0.47
"t": 0.01,
"v": 0.31
},
"shader_model": {
"code": "float $(name_uv)_d = ($in($uv)-$v)/$t;",
"global": "",
"inputs": [
{
"default": "1.0",
"label": "",
"name": "mul",
"type": "f"
"type": "mul_detect"
},
{
"default": "0.0",
"label": "",
"name": "in",
"type": "f"
}
],
"instance": "",
"name": "MulDetect",
"outputs": [
{
"f": "$mul($uv)*clamp(1.0-$(name_uv)_d*$(name_uv)_d, 0.0, 1.0)",
"type": "f"
}
],
"parameters": [
{
"control": "None",
"default": 0.5,
"label": "Value",
"max": 1,
"min": 0,
"name": "v",
"step": 0.01,
"type": "float"
},
{
"control": "None",
"default": 0.1,
"label": "Tolerance",
"max": 1,
"min": 0.01,
"name": "t",
"step": 0.001,
"type": "float"
}
]
},
"type": "shader"
},
{
"name": "perlin_2",
"name": "mul_detect_2",
"node_position": {
"x": -463.275513,
"y": -249.782776
"x": 94.964081,
"y": 132.26152
},
"parameters": {
"iterations": 3,
"persistence": 0.5,
"scale_x": 4,
"scale_y": 4
"t": 0.01,
"v": 0.87
},
"type": "perlin"
"type": "mul_detect"
},
{
"name": "mul_detect_2_2",
"node_position": {
"x": 90.964081,
"y": 288.261536
},
"parameters": {
"t": 0.01,
"v": 0.08
},
"type": "mul_detect"
}
],
"parameters": {

View File

@ -138,12 +138,6 @@
"to": "sdf3d_boolean_2_2_2",
"to_port": 1
},
{
"from": "sdf3d_boolean_2_2_2",
"from_port": 0,
"to": "_3_2",
"to_port": 0
},
{
"from": "blend_2",
"from_port": 0,
@ -156,12 +150,6 @@
"to": "normal_map",
"to_port": 0
},
{
"from": "_3_2",
"from_port": 1,
"to": "blend_2",
"to_port": 0
},
{
"from": "normal_map",
"from_port": 0,
@ -180,12 +168,6 @@
"to": "sdf3d_scale",
"to_port": 0
},
{
"from": "_3_2",
"from_port": 0,
"to": "buffer",
"to_port": 0
},
{
"from": "buffer",
"from_port": 0,
@ -233,6 +215,24 @@
"from_port": 0,
"to": "blend",
"to_port": 2
},
{
"from": "sdf3d_boolean_2_2_2",
"from_port": 0,
"to": "raymarching",
"to_port": 0
},
{
"from": "raymarching",
"from_port": 0,
"to": "buffer",
"to_port": 0
},
{
"from": "raymarching",
"from_port": 1,
"to": "blend_2",
"to_port": 0
}
],
"label": "Graph",
@ -311,45 +311,6 @@
},
"type": "colorize"
},
{
"name": "_3_2",
"node_position": {
"x": -378.336426,
"y": 1476.947388
},
"parameters": {
},
"shader_model": {
"code": "float $(name_uv)_d = raymarch_$name($uv);\n",
"global": "",
"inputs": [
{
"default": "0.0",
"function": true,
"label": "",
"name": "sdf",
"type": "sdf3d"
}
],
"instance": "float input_$name(vec3 p) {\n\treturn min($sdf(p), p.z);\n}\n\nfloat raymarch_$name(vec2 uv) {\n\tvec3 ro = vec3(uv-vec2(0.5), 1.0);\n\tvec3 rd = vec3(0.0, 0.0, -1.0);\n\tfloat dO=0.;\n \n for (int i=0; i < 50; i++) {\n \tvec3 p = ro + rd*dO;\n float dS = input_$name(p);\n dO += dS;\n if (dO > 0.001 && dS < 0.0001) break;\n }\n \n return dO;\n}\n\nvec3 normal_$name(vec3 p) {\n\tfloat d = input_$name(p);\n float e = .001;\n \n vec3 n = d - vec3(\n input_$name(p-vec3(e, 0.0, 0.0)),\n input_$name(p-vec3(0.0, e, 0.0)),\n input_$name(p-vec3(0.0, 0.0, e)));\n \n return vec3(-1.0, -1.0, -1.0)*normalize(n);\n}\n\n",
"name": "Raymarching",
"outputs": [
{
"f": "1.0-$(name_uv)_d",
"type": "f"
},
{
"rgb": "vec3(0.5)+0.5*normal_$name(vec3($uv-vec2(0.5), 1.0-$(name_uv)_d))",
"type": "rgb"
}
],
"parameters": [
]
},
"type": "shader"
},
{
"name": "colorize_2",
"node_position": {
@ -1108,6 +1069,8 @@
"param0": 11,
"param1": 1.02,
"param2": 0,
"param3": 0,
"param4": 1,
"size": 4
},
"type": "normal_map"
@ -2007,6 +1970,17 @@
"blend_type": 3
},
"type": "blend"
},
{
"name": "raymarching",
"node_position": {
"x": -371.992065,
"y": 1466.176514
},
"parameters": {
},
"type": "raymarching"
}
],
"parameters": {