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

706 lines
15 KiB
GDScript

tool
extends Reference
const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
#----------------------
#mwf_create_map.mmg
#Creates a workflow map using a heightmap and an optional seed map. The workflow map contains height information as well as orientation and a seed for random offset for the material it will be applied to.
# "inputs": [
# {
# "default": "1.0",
# "label": "",
# "longdesc": "The input height map",
# "name": "h",
# "shortdesc": "Height",
# "type": "f"
# },
# {
# "default": "0.0",
# "label": "",
# "longdesc": "The input offset seed map",
# "name": "o",
# "shortdesc": "Offset",
# "type": "f"
# }
# ],
# "outputs": [
# {
# "longdesc": "The generated workflow map, to be connected to a MixMap or an ApplyMap node",
# "rgb": "vec3($height*$h($uv), $angle*0.00277777777+0.5, rand(vec2(float($seed)+$o($uv))))",
# "shortdesc": "Output",
# "type": "rgb"
# }
# ],
# "parameters": [
# {
# "control": "None",
# "default": 1,
# "label": "Height",
# "longdesc": "The maximum height of the workflow map, used as multiplier for the input height map",
# "max": 1,
# "min": 0,
# "name": "height",
# "shortdesc": "Height",
# "step": 0.01,
# "type": "float"
# },
# {
# "control": "None",
# "default": 0,
# "label": "Angle",
# "longdesc": "The angle stored in the workflow map",
# "max": 180,
# "min": -180,
# "name": "angle",
# "shortdesc": "Angle",
# "step": 0.1,
# "type": "float"
# }
# ],
#----------------------
#mwf_mix_maps.mmg
#Mixes up to 4 workflow maps, to be used with the same base material
# "inputs": [
# {
# "default": "vec3(0.0)",
# "label": "",
# "longdesc": "The first workflow map",
# "name": "in1",
# "shortdesc": "Input1",
# "type": "rgb"
# },
# {
# "default": "vec3(0.0)",
# "label": "",
# "longdesc": "The second workflow map",
# "name": "in2",
# "shortdesc": "Input2",
# "type": "rgb"
# },
# {
# "default": "vec3(0.0)",
# "label": "",
# "longdesc": "The third input map",
# "name": "in3",
# "shortdesc": "Input3",
# "type": "rgb"
# },
# {
# "default": "vec3(0.0)",
# "label": "",
# "longdesc": "The fourth input map",
# "name": "in4",
# "shortdesc": "Input4",
# "type": "rgb"
# }
# ],
# "outputs": [
# {
# "longdesc": "Generates a merged workflow map",
# "rgb": "matmap_mix(matmap_mix($in1($uv), $in2($uv)), matmap_mix($in3($uv), $in4($uv)))",
# "shortdesc": "Output",
# "type": "rgb"
# }
# ],
#----------------------
#mwf_map.mmg
#"Applies a workflow map to a base material, and generates height information as well as PBR channels for the result.\nThe height input must be connected to a Create Map or Mix Maps node. The other inputs must be connected to a base material.\nThe outputs must be connected to the Mix or the Output node, or a workflow filter node.
# "code": "float $(name_uv)_angle = 6.28318530718*($map($uv).y-0.5);\nvec2 $(name_uv)_uv = matmap_uv($uv, $(name_uv)_angle, $map($uv).z);\n",
# "inputs": [
# {
# "default": "vec3(1.0, 0.5, 0.0)",
# "label": "Map",
# "longdesc": "The input workflow map",
# "name": "map",
# "shortdesc": "Map",
# "type": "rgb"
# },
# {
# "default": "vec3(0.0)",
# "group_size": 4,
# "label": "Albedo",
# "longdesc": "The Albedo channel of the input base material",
# "name": "mat1",
# "shortdesc": "Albedo",
# "type": "rgb"
# },
# {
# "default": "vec3(0.0)",
# "label": "ORM",
# "longdesc": "The ambient occlusion, roughness and metallic channels of the input material",
# "name": "mat2",
# "shortdesc": "ORM",
# "type": "rgb"
# },
# {
# "default": "vec3(0.0)",
# "label": "Emission",
# "longdesc": "The emission channel of the input material",
# "name": "mat3",
# "shortdesc": "Emission",
# "type": "rgb"
# },
# {
# "default": "vec3(0.5, 0.5, 1.0)",
# "label": "Normal",
# "longdesc": "The normal map of the input material",
# "name": "mat4",
# "shortdesc": "Normal",
# "type": "rgb"
# }
# ],
# "outputs": [
# {
# "f": "$map($uv).x",
# "group_size": 5,
# "longdesc": "The height map of the result",
# "shortdesc": "Height",
# "type": "f"
# },
# {
# "longdesc": "The albedo channel of the result",
# "rgb": "$mat1($(name_uv)_uv)",
# "shortdesc": "Albedo",
# "type": "rgb"
# },
# {
# "longdesc": "The ambient occlusion, roughness and metallic channels of the result",
# "rgb": "$mat2($(name_uv)_uv)",
# "shortdesc": "ORM",
# "type": "rgb"
# },
# {
# "longdesc": "The emission channel of the result",
# "rgb": "$mat3($(name_uv)_uv)",
# "shortdesc": "Emission",
# "type": "rgb"
# },
# {
# "longdesc": "The normal map of the result",
# "rgb": "matmap_rotate_nm($mat4($(name_uv)_uv), -$(name_uv)_angle)",
# "shortdesc": "Normal",
# "type": "rgb"
# }
# ],
#----------------------
#mwf_mix.mmg
#Combines the outputs of 2 mapped base materials (keeping the \"highest\" material).
# "code": "float $(name_uv)_a1 = step($h1($uv), $h2($uv));",
# "inputs": [
# {
# "default": "0.0",
# "group_size": 5,
# "label": "Height 1",
# "longdesc": "The height map of the first input",
# "name": "h1",
# "shortdesc": "Height1",
# "type": "f"
# },
# {
# "default": "vec3(0.0)",
# "label": "Albedo 1",
# "longdesc": "The albedo channel of the first input",
# "name": "c1",
# "shortdesc": "Albedo1",
# "type": "rgb"
# },
# {
# "default": "vec3(0.0)",
# "label": "ORM 1",
# "longdesc": "The ambient occlusion, roughness and metallic channels of the first input",
# "name": "orm1",
# "shortdesc": "ORM1",
# "type": "rgb"
# },
# {
# "default": "vec3(0.0)",
# "label": "Emission 1",
# "longdesc": "The emission channel of the first input",
# "name": "em1",
# "shortdesc": "Emission1",
# "type": "rgb"
# },
# {
# "default": "vec3(0.5, 0.5, 1.0)",
# "label": "Normal 1",
# "longdesc": "The normal map of the first input",
# "name": "nm1",
# "shortdesc": "Normal1",
# "type": "rgb"
# },
# {
# "default": "0.0",
# "group_size": 5,
# "label": "Height 2",
# "longdesc": "The height map of the second input",
# "name": "h2",
# "shortdesc": "Height2",
# "type": "f"
# },
# {
# "default": "vec3(0.0)",
# "label": "Albedo 2",
# "longdesc": "The albedo channel of the second input",
# "name": "c2",
# "shortdesc": "Albedo2",
# "type": "rgb"
# },
# {
# "default": "vec3(0.0)",
# "label": "ORM 2",
# "longdesc": "The ambient occlusion, roughness and metallic channels of the second input",
# "name": "orm2",
# "shortdesc": "ORM2",
# "type": "rgb"
# },
# {
# "default": "vec3(0.0)",
# "label": "Emission 2",
# "longdesc": "The emission channel of the second input",
# "name": "em2",
# "shortdesc": "Emission2",
# "type": "rgb"
# },
# {
# "default": "vec3(0.5, 0.5, 1.0)",
# "label": "Normal 2",
# "longdesc": "The normal map of the second input",
# "name": "nm2",
# "shortdesc": "Normal2",
# "type": "rgb"
# }
# ],
# "outputs": [
# {
# "f": "max($h1($uv), $h2($uv))",
# "group_size": 5,
# "longdesc": "Generates the height of the result",
# "shortdesc": "Height",
# "type": "f"
# },
# {
# "longdesc": "Shows the output albedo channel",
# "rgb": "mix($c1($uv), $c2($uv), $(name_uv)_a1)",
# "shortdesc": "Albedo",
# "type": "rgb"
# },
# {
# "longdesc": "Shows the output ambient occlusion, roughness and metallic channels",
# "rgb": "mix($orm1($uv), $orm2($uv), $(name_uv)_a1)",
# "shortdesc": "ORM",
# "type": "rgb"
# },
# {
# "longdesc": "Shows the output emission channel",
# "rgb": "mix($em1($uv), $em2($uv), $(name_uv)_a1)",
# "shortdesc": "Emission",
# "type": "rgb"
# },
# {
# "longdesc": "Shows the output normal map",
# "rgb": "mix($nm1($uv), $nm2($uv), $(name_uv)_a1)",
# "shortdesc": "Normal",
# "type": "rgb"
# }
# ],
#----------------------
#mwf_output.mmg
#{
# "connections": [
# {
# "from": "colorize_3",
# "from_port": 0,
# "to": "gen_outputs",
# "to_port": 6
# },
# {
# "from": "gen_inputs",
# "from_port": 0,
# "to": "colorize_3",
# "to_port": 0
# },
# {
# "from": "gen_inputs",
# "from_port": 0,
# "to": "occlusion",
# "to_port": 0
# },
# {
# "from": "occlusion",
# "from_port": 0,
# "to": "gen_outputs",
# "to_port": 5
# },
# {
# "from": "gen_inputs",
# "from_port": 2,
# "to": "decompose",
# "to_port": 0
# },
# {
# "from": "decompose",
# "from_port": 1,
# "to": "gen_outputs",
# "to_port": 2
# },
# {
# "from": "decompose",
# "from_port": 2,
# "to": "gen_outputs",
# "to_port": 1
# },
# {
# "from": "blend_2",
# "from_port": 0,
# "to": "gen_outputs",
# "to_port": 4
# },
# {
# "from": "gen_inputs",
# "from_port": 1,
# "to": "gen_outputs",
# "to_port": 0
# },
# {
# "from": "gen_inputs",
# "from_port": 3,
# "to": "gen_outputs",
# "to_port": 3
# },
# {
# "from": "brightness_contrast",
# "from_port": 0,
# "to": "blend_2",
# "to_port": 0
# },
# {
# "from": "gen_inputs",
# "from_port": 4,
# "to": "brightness_contrast",
# "to_port": 0
# },
# {
# "from": "gen_inputs",
# "from_port": 0,
# "to": "normal_map_2",
# "to_port": 0
# },
# {
# "from": "normal_map_2",
# "from_port": 0,
# "to": "blend_2",
# "to_port": 1
# }
# ],
# "label": "Output",
# "longdesc": "Converts a workflow mapped material (from an Apply Map or a Mix node) for a Material node",
# "name": "mwf_output",
# "node_position": {
# "x": 0,
# "y": 0
# },
# "nodes": [
# {
# "name": "colorize_3",
# "node_position": {
# "x": -939.637451,
# "y": 871.842407
# },
# "parameters": {
# "gradient": {
# "interpolation": 1,
# "points": [
# {
# "a": 1,
# "b": 1,
# "g": 1,
# "pos": 0,
# "r": 1
# },
# {
# "a": 1,
# "b": 0,
# "g": 0,
# "pos": 1,
# "r": 0
# }
# ],
# "type": "Gradient"
# }
# },
# "type": "colorize"
# },
# {
# "name": "occlusion",
# "node_position": {
# "x": -994.845825,
# "y": 786.968262
# },
# "parameters": {
# "param0": 10,
# "param2": 1
# },
# "type": "occlusion"
# },
# {
# "name": "decompose",
# "node_position": {
# "x": -924.371338,
# "y": 570.25
# },
# "parameters": {
#
# },
# "type": "decompose"
# },
# {
# "name": "blend_2",
# "node_position": {
# "x": -931.305542,
# "y": 677.328491
# },
# "parameters": {
# "amount": 1,
# "blend_type": 4
# },
# "type": "blend"
# },
# {
# "name": "gen_inputs",
# "node_position": {
# "x": -1626.805542,
# "y": 608.758606
# },
# "parameters": {
#
# },
# "ports": [
# {
# "group_size": 5,
# "name": "Height",
# "type": "f"
# },
# {
# "group_size": 0,
# "name": "Albedo",
# "type": "rgb"
# },
# {
# "group_size": 0,
# "name": "ORM",
# "type": "rgb"
# },
# {
# "group_size": 0,
# "name": "Emission",
# "type": "rgb"
# },
# {
# "group_size": 0,
# "name": "Normal",
# "type": "rgb"
# }
# ],
# "type": "ios"
# },
# {
# "name": "gen_outputs",
# "node_position": {
# "x": -635.305542,
# "y": 597.758606
# },
# "parameters": {
#
# },
# "ports": [
# {
# "group_size": 7,
# "longdesc": "",
# "name": "Albedo",
# "shortdesc": "Albedo",
# "type": "rgb"
# },
# {
# "group_size": 0,
# "longdesc": "",
# "name": "Metallic",
# "shortdesc": "Metallic",
# "type": "f"
# },
# {
# "group_size": 0,
# "longdesc": "",
# "name": "Roughness",
# "shortdesc": "Roughness",
# "type": "f"
# },
# {
# "group_size": 0,
# "longdesc": "",
# "name": "Emission",
# "shortdesc": "Emission",
# "type": "rgb"
# },
# {
# "group_size": 0,
# "longdesc": "",
# "name": "Normal",
# "shortdesc": "Normal",
# "type": "rgb"
# },
# {
# "group_size": 0,
# "longdesc": "",
# "name": "Occlusion",
# "shortdesc": "Occlusion",
# "type": "f"
# },
# {
# "group_size": 0,
# "longdesc": "",
# "name": "Depth",
# "shortdesc": "Depth",
# "type": "f"
# }
# ],
# "type": "ios"
# },
# {
# "name": "gen_parameters",
# "node_position": {
# "x": -1104.881836,
# "y": 425.25
# },
# "parameters": {
# "param0": 1,
# "param2": 1
# },
# "type": "remote",
# "widgets": [
# {
# "label": "Occlusion",
# "linked_widgets": [
# {
# "node": "occlusion",
# "widget": "param2"
# }
# ],
# "longdesc": "The strength of the calculated occlusion effect",
# "name": "param2",
# "shortdesc": "Occlusion",
# "type": "linked_control"
# },
# {
# "label": "Mat Normal",
# "linked_widgets": [
# {
# "node": "blend_2",
# "widget": "amount"
# }
# ],
# "longdesc": "The strength of normals from the base materials (compared to the normal generated from height information))",
# "name": "param0",
# "shortdesc": "MatNormal",
# "type": "linked_control"
# }
# ]
# },
# {
# "name": "brightness_contrast",
# "node_position": {
# "x": -1177.223877,
# "y": 677.062317
# },
# "parameters": {
# "brightness": 0,
# "contrast": 1
# },
# "type": "brightness_contrast"
# },
# {
# "name": "normal_map_2",
# "node_position": {
# "x": -1152.5,
# "y": 544.75
# },
# "parameters": {
# "param0": 10,
# "param1": 1.02,
# "param2": 0,
# "param4": 1
# },
# "type": "normal_map"
# }
# ],
# "parameters": {
# "param0": 1,
# "param2": 1
# },
# "shortdesc": "Output",
# "type": "graph"
#}
#----------------------
#edge_detect.mmg
#----------------------
#edge_detect.mmg
#----------------------
#edge_detect.mmg
#----------------------
#edge_detect.mmg
#----------------------
#edge_detect.mmg
#----------------------
#edge_detect.mmg
#----------------------
#edge_detect.mmg
#----------------------
#edge_detect.mmg
#----------------------
#edge_detect.mmg
#----------------------
#edge_detect.mmg
#vec3 matmap_mix(vec3 in1, vec3 in2) {\n\t
# float is_in1 = step(in2.x, in1.x);\n\t
# //return vec3(max(in1.x, in2.x), in1.yz*is_in1+in2.yz*(1.0-is_in1));\n\t
# return vec3(max(in1.x, in2.x), mix(in2.yz, in1.yz, is_in1));\n
#}
#vec2 matmap_uv(vec2 uv, float angle, float seed) {\n\t
# uv -= vec2(0.5);\n\tvec2 rv;\n\t
# rv.x = uv.x*cos(angle)+uv.y*sin(angle);\n\t
# rv.y = -uv.x*sin(angle)+uv.y*cos(angle);\n\t
# return fract(rv + rand2(vec2(seed)));\n
#}
#vec3 matmap_rotate_nm(vec3 input, float angle) {\n\t
# vec2 uv = input.xy - vec2(0.5);\n\t
# vec2 rv;\n\t
# rv.x = uv.x*cos(angle)+uv.y*sin(angle);\n\t
# rv.y = -uv.x*sin(angle)+uv.y*cos(angle);\n\t
# return vec3(rv + vec2(0.5), input.z);\n
#}