broken_seals/game/addons/mat_maker_gd/nodes/common/dilate.gd

522 lines
9.8 KiB
GDScript

tool
extends Reference
const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
#----------------------
#dilate.mmg
#{
# "connections": [
# {
# "from": "gen_inputs",
# "from_port": 0,
# "to": "buffer",
# "to_port": 0
# },
# {
# "from": "buffer",
# "from_port": 0,
# "to": "dilate_pass_1",
# "to_port": 0
# },
# {
# "from": "dilate_pass_1",
# "from_port": 0,
# "to": "buffer_2",
# "to_port": 0
# },
# {
# "from": "buffer_2",
# "from_port": 0,
# "to": "dilate_pass_4",
# "to_port": 0
# },
# {
# "from": "dilate_pass_3",
# "from_port": 0,
# "to": "buffer_2_3",
# "to_port": 0
# },
# {
# "from": "buffer_2_3",
# "from_port": 0,
# "to": "gen_outputs",
# "to_port": 0
# },
# {
# "from": "buffer_2_2",
# "from_port": 0,
# "to": "dilate_pass_3",
# "to_port": 1
# },
# {
# "from": "dilate_pass_4",
# "from_port": 0,
# "to": "dilate_pass_3",
# "to_port": 0
# },
# {
# "from": "default_color",
# "from_port": 0,
# "to": "buffer_2_2",
# "to_port": 0
# },
# {
# "from": "gen_inputs",
# "from_port": 1,
# "to": "default_color",
# "to_port": 0
# }
# ],
# "label": "Dilate",
# "longdesc": "Dilates the white areas of a mask, using the colors of an optional input",
# "name": "dilate",
# "node_position": {
# "x": 0,
# "y": 0
# },
# "nodes": [
# {
# "name": "buffer",
# "node_position": {
# "x": -473.691315,
# "y": -200.988342
# },
# "parameters": {
# "lod": 0,
# "size": 9
# },
# "type": "buffer"
# },
# {
# "name": "buffer_2",
# "node_position": {
# "x": -255.691315,
# "y": -123.988342
# },
# "parameters": {
# "lod": 0,
# "size": 9
# },
# "type": "buffer"
# },
# {
# "name": "gen_parameters",
# "node_position": {
# "x": -140.306458,
# "y": -377.953613
# },
# "parameters": {
# "param0": 9,
# "param1": 0.1,
# "param2": 0,
# "param3": 0
# },
# "type": "remote",
# "widgets": [
# {
# "label": "",
# "linked_widgets": [
# {
# "node": "buffer",
# "widget": "size"
# },
# {
# "node": "buffer_2",
# "widget": "size"
# },
# {
# "node": "buffer_2_2",
# "widget": "size"
# },
# {
# "node": "dilate_pass_1",
# "widget": "s"
# },
# {
# "node": "dilate_pass_4",
# "widget": "s"
# },
# {
# "node": "buffer_2_3",
# "widget": "size"
# }
# ],
# "longdesc": "The resolution of the input images",
# "name": "param0",
# "shortdesc": "Size",
# "type": "linked_control"
# },
# {
# "label": "",
# "linked_widgets": [
# {
# "node": "dilate_pass_1",
# "widget": "d"
# },
# {
# "node": "dilate_pass_4",
# "widget": "d"
# }
# ],
# "longdesc": "The length of the dilate effect",
# "name": "param1",
# "shortdesc": "Length",
# "type": "linked_control"
# },
# {
# "label": "",
# "linked_widgets": [
# {
# "node": "dilate_pass_3",
# "widget": "amount"
# }
# ],
# "longdesc": "0 to generate a gradient to black while dilating, 1 to fill with input color",
# "name": "param2",
# "shortdesc": "Fill",
# "type": "linked_control"
# },
# {
# "label": "",
# "linked_widgets": [
# {
# "node": "dilate_pass_4",
# "widget": "distance"
# }
# ],
# "name": "param3",
# "shortdesc": "Distance function",
# "type": "linked_control"
# }
# ]
# },
# {
# "name": "gen_inputs",
# "node_position": {
# "x": -872.306458,
# "y": -171.4814
# },
# "parameters": {
#
# },
# "ports": [
# {
# "group_size": 0,
# "longdesc": "The input mask whose white areas will be dilated",
# "name": "mask",
# "shortdesc": "Mask",
# "type": "f"
# },
# {
# "group_size": 0,
# "longdesc": "The optional source for colors",
# "name": "source",
# "shortdesc": "Source",
# "type": "rgb"
# }
# ],
# "type": "ios"
# },
# {
# "name": "gen_outputs",
# "node_position": {
# "x": 254.21106,
# "y": -64.4814
# },
# "parameters": {
#
# },
# "ports": [
# {
# "group_size": 0,
# "longdesc": "Shows the dilated image",
# "name": "out",
# "shortdesc": "Output",
# "type": "rgb"
# }
# ],
# "seed_value": -14401,
# "type": "ios"
# },
# {
# "name": "buffer_2_2",
# "node_position": {
# "x": -255.323547,
# "y": -44.695679
# },
# "parameters": {
# "lod": 0,
# "size": 9
# },
# "type": "buffer"
# },
# {
# "name": "dilate_pass_1",
# "node_position": {
# "x": -252.698792,
# "y": -201.368988
# },
# "parameters": {
# "d": 0.1,
# "s": 9
# },
# "seed_value": 71939,
# "type": "dilate_pass_1"
# },
# {
# "name": "dilate_pass_3",
# "node_position": {
# "x": -31.698792,
# "y": -72.368988
# },
# "parameters": {
# "amount": 0
# },
# "type": "dilate_pass_3"
# },
# {
# "name": "dilate_pass_4",
# "node_position": {
# "x": -31.689392,
# "y": -186.577301
# },
# "parameters": {
# "d": 0.1,
# "distance": 0,
# "s": 9
# },
# "type": "dilate_pass_2"
# },
# {
# "name": "buffer_2_3",
# "node_position": {
# "x": -46.966125,
# "y": -0.711548
# },
# "parameters": {
# "lod": 0,
# "size": 9
# },
# "type": "buffer"
# },
# {
# "name": "default_color",
# "node_position": {
# "x": -469.868713,
# "y": -98.02066
# },
# "parameters": {
# "default": {
# "a": 1,
# "b": 1,
# "g": 1,
# "r": 1,
# "type": "Color"
# }
# },
# "type": "default_color"
# }
# ],
# "parameters": {
# "param0": 9,
# "param1": 0.1,
# "param2": 0,
# "param3": 0
# },
# "shortdesc": "Dilate",
# "type": "graph"
#}
#----------------------
#dilate_pass_1.mmg
#{
# "name": "distance_pass_1",
# "node_position": {
# "x": 0,
# "y": 0
# },
# "parameters": {
# "d": 0.1,
# "s": 9
# },
# "seed_value": 8258,
# "shader_model": {
# "code": "",
# "global": "",
# "inputs": [
# {
# "default": "0.0",
# "function": true,
# "label": "",
# "name": "in",
# "type": "f"
# }
# ],
# "instance": "vec3 $(name)_distance_h(vec2 uv) {\n\tvec2 e = vec2(1.0/$s, 0.0);\n\tint steps = int($s*$d);\n\tfloat rv = 0.0;\n\tvec2 source_uv;\n\tfor (int i = 0; i < steps; ++i) {\n\t\tsource_uv = uv+float(i)*e;\n\t\tif ($in(source_uv) > 0.5) {\n\t\t\trv = 1.0-float(i)*e.x/$d;\n\t\t\tbreak;\n\t\t}\n\t\tsource_uv = uv-float(i)*e;\n\t\tif ($in(source_uv) > 0.5) {\n\t\t\trv = 1.0-float(i)*e.x/$d;\n\t\t\tbreak;\n\t\t}\n\t}\n\treturn vec3(rv, source_uv);\n}\n",
# "name": "Distance pass 1",
# "outputs": [
# {
# "rgb": "$(name)_distance_h($uv)",
# "type": "rgb"
# }
# ],
# "parameters": [
# {
# "default": 9,
# "first": 6,
# "label": "",
# "last": 12,
# "name": "s",
# "type": "size"
# },
# {
# "control": "None",
# "default": 0.5,
# "label": "",
# "max": 1,
# "min": 0,
# "name": "d",
# "step": 0.01,
# "type": "float"
# }
# ]
# },
# "type": "shader"
#}
#----------------------
#dilate_pass_2.mmg
#{
# "name": "dilate_pass_2",
# "node_position": {
# "x": 0,
# "y": 0
# },
# "parameters": {
# "d": 0.25,
# "distance": 0,
# "s": 9
# },
# "seed_value": 44978,
# "shader_model": {
# "code": "",
# "global": "float dilate_distance_euclidian(float x, float y, float d) {\n\treturn 1.0-sqrt((1.0-x)*(1.0-x)+y*y/d/d);\n}\n\nfloat dilate_distance_manhattan(float x, float y, float d) {\n\treturn 1.0-(abs(1.0-x)+abs(y)/d);\n}\n\nfloat dilate_distance_chebyshev(float x, float y, float d) {\n\treturn 1.0-max(abs(1.0-x), abs(y)/d);\n}\n\n",
# "inputs": [
# {
# "default": "vec3(0.0)",
# "function": true,
# "label": "",
# "name": "in",
# "type": "rgb"
# }
# ],
# "instance": "vec3 $(name)_distance_v(vec2 uv) {\n\tvec2 e = vec2(0.0, 1.0/$s);\n\tint steps = int($s*$d);\n\tvec3 p = $in(uv);\n\tfor (int i = 0; i < steps; ++i) {\n\t\tvec2 dx = float(i)*e;\n\t\tvec3 p2 = $in(uv+dx);\n\t\tif (p2.x > p.x) {\n\t\t\tp2.x = dilate_distance_$distance(p2.x, dx.y, $d);\n\t\t\tp = mix(p, p2, step(p.x, p2.x));\n\t\t}\n\t\tp2 = $in(uv-dx);\n\t\tif (p2.x > p.x) {\n\t\t\tp2.x = dilate_distance_$distance(p2.x, dx.y, $d);\n\t\t\tp = mix(p, p2, step(p.x, p2.x));\n\t\t}\n\t}\n\treturn p;\n}\n",
# "name": "Distance pass 2",
# "outputs": [
# {
# "rgb": "$(name)_distance_v($uv)",
# "type": "rgb"
# }
# ],
# "parameters": [
# {
# "default": 9,
# "first": 6,
# "label": "",
# "last": 12,
# "name": "s",
# "type": "size"
# },
# {
# "control": "None",
# "default": 0.5,
# "label": "",
# "max": 1,
# "min": 0,
# "name": "d",
# "step": 0.01,
# "type": "float"
# },
# {
# "default": 2,
# "label": "",
# "name": "distance",
# "type": "enum",
# "values": [
# {
# "name": "Euclidian",
# "value": "euclidian"
# },
# {
# "name": "Manhattan",
# "value": "manhattan"
# },
# {
# "name": "Chebyshev",
# "value": "chebyshev"
# }
# ]
# }
# ]
# },
# "type": "shader"
#}
#----------------------
#dilate_pass_3.mmg
#{
# "name": "distance_pass_3",
# "node_position": {
# "x": 0,
# "y": 0
# },
# "parameters": {
# "amount": 0
# },
# "shader_model": {
# "code": "",
# "global": "",
# "inputs": [
# {
# "default": "vec3(0.0)",
# "label": "",
# "name": "distance",
# "type": "rgb"
# },
# {
# "default": "vec3(1.0)",
# "label": "",
# "name": "source",
# "type": "rgb"
# }
# ],
# "instance": "",
# "name": "Distance pass 3",
# "outputs": [
# {
# "rgb": "$source($distance($uv).yz)*mix($distance($uv).x, 1.0, $amount)",
# "type": "rgb"
# }
# ],
# "parameters": [
# {
# "control": "None",
# "default": 0,
# "label": "",
# "max": 1,
# "min": 0,
# "name": "amount",
# "step": 0.01,
# "type": "float"
# }
# ]
# },
# "type": "shader"
#}