OverviewFilesCommitsIssuesDocsReleasesPeers

hyper-tps / materials / infected_rock_bb.json

4800 lines · json ref:
{
  "version": 1,
  "name": "Graph",
  "blend_mode": "OPAQUE",
  "cull_mode": "BACK",
  "nodes": [
    {
      "id": 1,
      "type": "GROUP_GRAPH",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        1340.0,
        140.0
      ],
      "properties": {},
      "expression": "// Subgraph: Mockup\nout0 = in0;\nout1 = vec4(0.5, 0.5, 0.5, 1.0);\nout2 = vec4(0.5, 0.5, 0.5, 1.0);\nout3 = vec4(0.5, 0.5, 0.5, 1.0);\nout4 = vec4(0.5, 0.5, 0.5, 1.0);",
      "expression_inputs": [
        {
          "name": "in0",
          "type": 5
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        },
        {
          "name": "out1",
          "type": 5
        },
        {
          "name": "out2",
          "type": 5
        },
        {
          "name": "out3",
          "type": 5
        },
        {
          "name": "out4",
          "type": 5
        }
      ]
    },
    {
      "id": 2,
      "type": "TILER",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -6280.0,
        1180.0
      ],
      "properties": {},
      "expression": "vec3 o2_instance_uv = vec3(0.0);\nvec4 o2_rch = tiler_o2(UV, vec2(12.000000, 12.000000), int(2.000000), o2_instance_uv, vec2(float(36441482.363450)));\nout0 = o2_rch.a;\nout1 = o2_rch.rgb;\nout2 = o2_instance_uv;",
      "expression_inputs": [
        {
          "name": "p_in",
          "type": 0
        },
        {
          "name": "mask",
          "type": 0
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 0
        },
        {
          "name": "out1",
          "type": 4
        },
        {
          "name": "out2",
          "type": 4
        }
      ]
    },
    {
      "id": 3,
      "type": "SPHERE",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -6500.0,
        1180.0
      ],
      "properties": {},
      "expression": "out0 = sphere(UV, vec2(0.500000, 0.500000), 0.500000);",
      "expression_inputs": [],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 0
        }
      ]
    },
    {
      "id": 4,
      "type": "FBM3",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -6700.0,
        1320.0
      ],
      "properties": {},
      "expression": "out0 = old_fbm_2d_perlin(UV, vec2(4.000000, 4.000000), int(0.000000), int(4.000000), 0.500000, 0.000000, 9004590.843450);",
      "expression_inputs": [
        {
          "name": "offset_in",
          "type": 0
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 0
        }
      ]
    },
    {
      "id": 5,
      "type": "TONES_STEP",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -6480.0,
        1320.0
      ],
      "properties": {},
      "expression": "vec3 o5_false = clamp((vec4(0.5 ,0.5, 0.5, 1.0).rgb-vec3(0.530000))/max(0.0001, 0.000000)+vec3(0.5), vec3(0.0), vec3(1.0));\nvec3 o5_true = vec3(1.0)-o5_false;\nout0 = vec4(o5_false, vec4(0.5 ,0.5, 0.5, 1.0).a);",
      "expression_inputs": [
        {
          "name": "p_in",
          "type": 5
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 6,
      "type": "UNIFORM_GREYSCALE",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -5400.0,
        120.0
      ],
      "properties": {},
      "expression": "out0 = 0.750000;",
      "expression_inputs": [],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 0
        }
      ]
    },
    {
      "id": 7,
      "type": "BLEND2",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -2700.0,
        120.0
      ],
      "properties": {},
      "expression": "vec4 o7_b = vec4(UV.x, 1.0, 1.0, 1.0);\nvec4 o7_l;\nfloat o7_a;\no7_l = vec4(1.0, UV.y, 1.0, 1.0);\no7_a = 0.500000*1.0;\no7_b = vec4(blend_normal(UV, o7_l.rgb, o7_b.rgb, o7_a*o7_l.a), min(1.0, o7_b.a+o7_a*o7_l.a));\n\nout0 = o7_b;",
      "expression_inputs": [
        {
          "name": "p_b",
          "type": 5
        },
        {
          "name": "p_l",
          "type": 5
        },
        {
          "name": "p_a",
          "type": 0
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 8,
      "type": "GROUP_GRAPH",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -5720.0,
        1180.0
      ],
      "properties": {},
      "expression": "// Subgraph: Gaussian Blur HQ\nout0 = in0;",
      "expression_inputs": [
        {
          "name": "in0",
          "type": 5
        },
        {
          "name": "in1",
          "type": 5
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 9,
      "type": "QUANTIZE",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -5360.0,
        1180.0
      ],
      "properties": {},
      "expression": "out0 = vec4(floor(vec4(2.0*vec3(length(UV-vec2(0.5))), 1.0).rgb*7.000000)/7.000000, vec4(2.0*vec3(length(UV-vec2(0.5))), 1.0).a);",
      "expression_inputs": [
        {
          "name": "p_in",
          "type": 5
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 10,
      "type": "GROUP_GRAPH",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -5160.0,
        1180.0
      ],
      "properties": {},
      "expression": "// Subgraph: Gaussian Blur HQ\nout0 = in0;",
      "expression_inputs": [
        {
          "name": "in0",
          "type": 5
        },
        {
          "name": "in1",
          "type": 5
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 11,
      "type": "BLEND2",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -4480.0,
        1180.0
      ],
      "properties": {},
      "expression": "vec4 o11_b = vec4(UV.x, 1.0, 1.0, 1.0);\nvec4 o11_l;\nfloat o11_a;\no11_l = vec4(1.0, UV.y, 1.0, 1.0);\no11_a = 0.500000*1.0;\no11_b = vec4(blend_normal(UV, o11_l.rgb, o11_b.rgb, o11_a*o11_l.a), min(1.0, o11_b.a+o11_a*o11_l.a));\n\nout0 = o11_b;",
      "expression_inputs": [
        {
          "name": "p_b",
          "type": 5
        },
        {
          "name": "p_l",
          "type": 5
        },
        {
          "name": "p_a",
          "type": 0
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 12,
      "type": "MATH",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -4720.0,
        1340.0
      ],
      "properties": {},
      "expression": "float o12_clamp_false = 0.000000+0.000000;\nfloat o12_clamp_true = clamp(o12_clamp_false, 0.0, 1.0);\n\nout0 = o12_clamp_true;",
      "expression_inputs": [
        {
          "name": "in1",
          "type": 0
        },
        {
          "name": "in2",
          "type": 0
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 0
        }
      ]
    },
    {
      "id": 13,
      "type": "GROUP_GRAPH",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -4760.0,
        1180.0
      ],
      "properties": {},
      "expression": "// Subgraph: Bilateral Filter\nout0 = in0;",
      "expression_inputs": [
        {
          "name": "in0",
          "type": 5
        },
        {
          "name": "in1",
          "type": 5
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 14,
      "type": "GROUP_SMOOTH_CURVATURE",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -5160.0,
        1040.0
      ],
      "properties": {},
      "expression": "// Subgraph: smooth_curvature\nout0 = in0;",
      "expression_inputs": [
        {
          "name": "in0",
          "type": 5
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 15,
      "type": "TONES_STEP",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -4940.0,
        1040.0
      ],
      "properties": {},
      "expression": "vec3 o15_false = clamp((vec4(0.5 ,0.5, 0.5, 1.0).rgb-vec3(0.500000))/max(0.0001, 0.040000)+vec3(0.5), vec3(0.0), vec3(1.0));\nvec3 o15_true = vec3(1.0)-o15_false;\nout0 = vec4(o15_false, vec4(0.5 ,0.5, 0.5, 1.0).a);",
      "expression_inputs": [
        {
          "name": "p_in",
          "type": 5
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 16,
      "type": "GROUP_HBAO",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        1340.0,
        360.0
      ],
      "properties": {},
      "expression": "// Subgraph: hbao\nout0 = in0;",
      "expression_inputs": [
        {
          "name": "in0",
          "type": 5
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 17,
      "type": "GROUP_GRAPH",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -5720.0,
        1000.0
      ],
      "properties": {},
      "expression": "// Subgraph: Gaussian Blur HQ\nout0 = in0;",
      "expression_inputs": [
        {
          "name": "in0",
          "type": 5
        },
        {
          "name": "in1",
          "type": 5
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 18,
      "type": "TONES_STEP",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -5500.0,
        800.0
      ],
      "properties": {},
      "expression": "vec3 o18_false = clamp((vec4(0.5 ,0.5, 0.5, 1.0).rgb-vec3(0.050000))/max(0.0001, 0.030000)+vec3(0.5), vec3(0.0), vec3(1.0));\nvec3 o18_true = vec3(1.0)-o18_false;\nout0 = vec4(o18_true, vec4(0.5 ,0.5, 0.5, 1.0).a);",
      "expression_inputs": [
        {
          "name": "p_in",
          "type": 5
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 19,
      "type": "BLEND2",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -3160.0,
        120.0
      ],
      "properties": {},
      "expression": "vec4 o19_b = vec4(UV.x, 1.0, 1.0, 1.0);\nvec4 o19_l;\nfloat o19_a;\no19_l = vec4(1.0, UV.y, 1.0, 1.0);\no19_a = 0.500000*1.0;\no19_b = vec4(blend_normal(UV, o19_l.rgb, o19_b.rgb, o19_a*o19_l.a), min(1.0, o19_b.a+o19_a*o19_l.a));\n\nout0 = o19_b;",
      "expression_inputs": [
        {
          "name": "p_b",
          "type": 5
        },
        {
          "name": "p_l",
          "type": 5
        },
        {
          "name": "p_a",
          "type": 0
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 20,
      "type": "GROUP_CRYSTAL",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -5500.0,
        700.0
      ],
      "properties": {},
      "expression": "// Subgraph: crystal\nout0 = vec4(0.5, 0.5, 0.5, 1.0);",
      "expression_inputs": [
        {
          "name": "in0",
          "type": 5
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 21,
      "type": "WARP",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -5300.0,
        740.0
      ],
      "properties": {},
      "expression": "vec2 o21_slope = o21_slope(UV, 0.100000);\nvec2 o21_warp = o21_slope;\nout0 = vec4(sin(UV.x*20.0)*0.5+0.5, sin(UV.y*20.0)*0.5+0.5, 0, 1);",
      "expression_inputs": [
        {
          "name": "p_in",
          "type": 5
        },
        {
          "name": "p_d",
          "type": 0
        },
        {
          "name": "strength_map",
          "type": 0
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 22,
      "type": "UNIFORM",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -100.0,
        -1640.0
      ],
      "properties": {},
      "expression": "out0 = vec4(0.295654, 0.314493, 0.437500, 1.000000);",
      "expression_inputs": [],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 23,
      "type": "GROUP_SMOOTH_CURVATURE",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -480.0,
        -40.0
      ],
      "properties": {},
      "expression": "// Subgraph: smooth_curvature\nout0 = in0;",
      "expression_inputs": [
        {
          "name": "in0",
          "type": 5
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 24,
      "type": "GROUP_GRAPH",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -220.0,
        -40.0
      ],
      "properties": {},
      "expression": "// Subgraph: SmoothCurvatureSplit\nout0 = in0;\nout1 = vec4(0.5, 0.5, 0.5, 1.0);",
      "expression_inputs": [
        {
          "name": "in0",
          "type": 5
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        },
        {
          "name": "out1",
          "type": 5
        }
      ]
    },
    {
      "id": 25,
      "type": "BLEND2",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        680.0,
        -1500.0
      ],
      "properties": {},
      "expression": "vec4 o25_b = vec4(UV.x, 1.0, 1.0, 1.0);\nvec4 o25_l;\nfloat o25_a;\no25_l = vec4(1.0, UV.y, 1.0, 1.0);\no25_a = 0.500000*1.0;\no25_b = vec4(blend_normal(UV, o25_l.rgb, o25_b.rgb, o25_a*o25_l.a), min(1.0, o25_b.a+o25_a*o25_l.a));\n\nout0 = o25_b;",
      "expression_inputs": [
        {
          "name": "p_b",
          "type": 5
        },
        {
          "name": "p_l",
          "type": 5
        },
        {
          "name": "p_a",
          "type": 0
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 26,
      "type": "COLORIZE",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -5120.0,
        740.0
      ],
      "properties": {},
      "expression": "out0 = o26_gradient_gradient_fct(UV.x);",
      "expression_inputs": [
        {
          "name": "input",
          "type": 0
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 27,
      "type": "BLEND2",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        1840.0,
        -1480.0
      ],
      "properties": {},
      "expression": "vec4 o27_b = vec4(UV.x, 1.0, 1.0, 1.0);\nvec4 o27_l;\nfloat o27_a;\no27_l = vec4(1.0, UV.y, 1.0, 1.0);\no27_a = 0.500000*1.0;\no27_b = vec4(blend_dodge(UV, o27_l.rgb, o27_b.rgb, o27_a*o27_l.a), min(1.0, o27_b.a+o27_a*o27_l.a));\no27_l = vec4(1.0, UV.y, 1.0, 1.0);\no27_a = 0.370000*1.0;\no27_b = vec4(blend_burn(UV, o27_l.rgb, o27_b.rgb, o27_a*o27_l.a), min(1.0, o27_b.a+o27_a*o27_l.a));\n\nout0 = o27_b;",
      "expression_inputs": [
        {
          "name": "p_b",
          "type": 5
        },
        {
          "name": "p_l0",
          "type": 5
        },
        {
          "name": "p_l1",
          "type": 5
        },
        {
          "name": "p_a0",
          "type": 0
        },
        {
          "name": "p_a1",
          "type": 0
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 28,
      "type": "COLORIZE",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -520.0,
        -1400.0
      ],
      "properties": {},
      "expression": "out0 = o28_gradient_gradient_fct(UV.x);",
      "expression_inputs": [
        {
          "name": "input",
          "type": 0
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 29,
      "type": "MATH",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -4740.0,
        720.0
      ],
      "properties": {},
      "expression": "float o29_clamp_false = (1.0-step(0.010000,0.000000));\nfloat o29_clamp_true = clamp(o29_clamp_false, 0.0, 1.0);\n\nout0 = o29_clamp_false;",
      "expression_inputs": [
        {
          "name": "in1",
          "type": 0
        },
        {
          "name": "in2",
          "type": 0
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 0
        }
      ]
    },
    {
      "id": 30,
      "type": "TRANSFORM2",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -5860.0,
        -620.0
      ],
      "properties": {},
      "expression": "out0 = vec4(UV, 0.0, 1.0);",
      "expression_inputs": [
        {
          "name": "p_i",
          "type": 5
        },
        {
          "name": "p_tx",
          "type": 0
        },
        {
          "name": "p_ty",
          "type": 0
        },
        {
          "name": "p_r",
          "type": 0
        },
        {
          "name": "p_sx",
          "type": 0
        },
        {
          "name": "p_sy",
          "type": 0
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 31,
      "type": "WARP",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -5640.0,
        -520.0
      ],
      "properties": {},
      "expression": "vec2 o31_slope = o31_slope(UV, 0.100000);\nvec2 o31_warp = o31_slope;\nout0 = vec4(sin(UV.x*20.0)*0.5+0.5, sin(UV.y*20.0)*0.5+0.5, 0, 1);",
      "expression_inputs": [
        {
          "name": "p_in",
          "type": 5
        },
        {
          "name": "p_d",
          "type": 0
        },
        {
          "name": "strength_map",
          "type": 0
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 32,
      "type": "BLEND2",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -5420.0,
        -500.0
      ],
      "properties": {},
      "expression": "vec4 o32_b = vec4(UV.x, 1.0, 1.0, 1.0);\nvec4 o32_l;\nfloat o32_a;\no32_l = vec4(1.0, UV.y, 1.0, 1.0);\no32_a = 0.500000*1.0;\no32_b = vec4(blend_normal(UV, o32_l.rgb, o32_b.rgb, o32_a*o32_l.a), min(1.0, o32_b.a+o32_a*o32_l.a));\n\nout0 = o32_b;",
      "expression_inputs": [
        {
          "name": "p_b",
          "type": 5
        },
        {
          "name": "p_l",
          "type": 5
        },
        {
          "name": "p_a",
          "type": 0
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 33,
      "type": "GRADIENT",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -5620.0,
        -380.0
      ],
      "properties": {},
      "expression": "float o33_r = 0.5+(cos((-90.000000)*0.01745329251)*(UV.x-0.5)+sin((-90.000000)*0.01745329251)*(UV.y-0.5))/(cos(abs(mod((-90.000000), 90.0)-45.0)*0.01745329251)*1.41421356237);\nout0 = o33_gradient_gradient_fct(false ? 2.0*(0.5-abs(fract(o33_r*1.000000)-0.5)) : fract(o33_r*1.000000));",
      "expression_inputs": [],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 34,
      "type": "SHAPE",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -6020.0,
        -620.0
      ],
      "properties": {},
      "expression": "out0 = shape_polygon(UV, 10.000000+1.0e-5, 0.940000*1.0, 0.610000*1.0);",
      "expression_inputs": [
        {
          "name": "radius_map",
          "type": 0
        },
        {
          "name": "edge_map",
          "type": 0
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 0
        }
      ]
    },
    {
      "id": 35,
      "type": "GROUP_CRYSTAL",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -5800.0,
        -360.0
      ],
      "properties": {},
      "expression": "// Subgraph: crystal\nout0 = vec4(0.5, 0.5, 0.5, 1.0);",
      "expression_inputs": [
        {
          "name": "in0",
          "type": 5
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 36,
      "type": "TILER",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -5180.0,
        -500.0
      ],
      "properties": {},
      "expression": "vec3 o36_instance_uv = vec3(0.0);\nvec4 o36_rch = tiler_o36(UV, vec2(12.000000, 12.000000), int(4.000000), o36_instance_uv, vec2(float(26399828.603450)));\nout0 = o36_rch.a;\nout1 = o36_rch.rgb;\nout2 = o36_instance_uv;",
      "expression_inputs": [
        {
          "name": "p_in",
          "type": 0
        },
        {
          "name": "mask",
          "type": 0
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 0
        },
        {
          "name": "out1",
          "type": 4
        },
        {
          "name": "out2",
          "type": 4
        }
      ]
    },
    {
      "id": 37,
      "type": "BLEND2",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -4280.0,
        120.0
      ],
      "properties": {},
      "expression": "vec4 o37_b = vec4(UV.x, 1.0, 1.0, 1.0);\nvec4 o37_l;\nfloat o37_a;\no37_l = vec4(1.0, UV.y, 1.0, 1.0);\no37_a = 0.500000*1.0;\no37_b = vec4(blend_normal(UV, o37_l.rgb, o37_b.rgb, o37_a*o37_l.a), min(1.0, o37_b.a+o37_a*o37_l.a));\n\nout0 = o37_b;",
      "expression_inputs": [
        {
          "name": "p_b",
          "type": 5
        },
        {
          "name": "p_l",
          "type": 5
        },
        {
          "name": "p_a",
          "type": 0
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 38,
      "type": "GROUP_GRAPH",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -3520.0,
        120.0
      ],
      "properties": {},
      "expression": "// Subgraph: Gaussian Blur HQ\nout0 = in0;",
      "expression_inputs": [
        {
          "name": "in0",
          "type": 5
        },
        {
          "name": "in1",
          "type": 5
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 39,
      "type": "GROUP_CRYSTAL",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -5140.0,
        -600.0
      ],
      "properties": {},
      "expression": "// Subgraph: crystal\nout0 = vec4(0.5, 0.5, 0.5, 1.0);",
      "expression_inputs": [
        {
          "name": "in0",
          "type": 5
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 40,
      "type": "WARP",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -4920.0,
        -520.0
      ],
      "properties": {},
      "expression": "vec2 o40_slope = o40_slope(UV, 0.100000);\nvec2 o40_warp = o40_slope;\nout0 = vec4(sin(UV.x*20.0)*0.5+0.5, sin(UV.y*20.0)*0.5+0.5, 0, 1);",
      "expression_inputs": [
        {
          "name": "p_in",
          "type": 5
        },
        {
          "name": "p_d",
          "type": 0
        },
        {
          "name": "strength_map",
          "type": 0
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 41,
      "type": "BUFFER",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -1020.0,
        120.0
      ],
      "properties": {},
      "expression": "// Buffer pass-through\nout0 = in0;",
      "expression_inputs": [
        {
          "name": "in0",
          "type": 5
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 42,
      "type": "TILER",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -2480.0,
        -420.0
      ],
      "properties": {},
      "expression": "vec3 o42_instance_uv = vec3(0.0);\nvec4 o42_rch = tiler_o42(UV, vec2(8.000000, 8.000000), int(2.000000), o42_instance_uv, vec2(float(0.123450)));\nout0 = o42_rch.a;\nout1 = o42_rch.rgb;\nout2 = o42_instance_uv;",
      "expression_inputs": [
        {
          "name": "p_in",
          "type": 0
        },
        {
          "name": "mask",
          "type": 0
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 0
        },
        {
          "name": "out1",
          "type": 4
        },
        {
          "name": "out2",
          "type": 4
        }
      ]
    },
    {
      "id": 43,
      "type": "SPHERE",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -2680.0,
        -420.0
      ],
      "properties": {},
      "expression": "out0 = sphere(UV, vec2(0.500000, 0.500000), 0.500000);",
      "expression_inputs": [],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 0
        }
      ]
    },
    {
      "id": 44,
      "type": "BLEND2",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -1960.0,
        120.0
      ],
      "properties": {},
      "expression": "vec4 o44_b = vec4(UV.x, 1.0, 1.0, 1.0);\nvec4 o44_l;\nfloat o44_a;\no44_l = vec4(1.0, UV.y, 1.0, 1.0);\no44_a = 0.500000*1.0;\no44_b = vec4(blend_normal(UV, o44_l.rgb, o44_b.rgb, o44_a*o44_l.a), min(1.0, o44_b.a+o44_a*o44_l.a));\n\nout0 = o44_b;",
      "expression_inputs": [
        {
          "name": "p_b",
          "type": 5
        },
        {
          "name": "p_l",
          "type": 5
        },
        {
          "name": "p_a",
          "type": 0
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 45,
      "type": "INVERT",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -2640.0,
        -280.0
      ],
      "properties": {},
      "expression": "out0 = vec4(vec3(1.0)-vec4(1.0, 1.0, 1.0, 1.0).rgb, vec4(1.0, 1.0, 1.0, 1.0).a);",
      "expression_inputs": [
        {
          "name": "p_in",
          "type": 5
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 46,
      "type": "SPHERE",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -2240.0,
        1980.0
      ],
      "properties": {},
      "expression": "out0 = sphere(UV, vec2(0.500000, 0.500000), 0.500000);",
      "expression_inputs": [],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 0
        }
      ]
    },
    {
      "id": 47,
      "type": "TONES_STEP",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -2520.0,
        1800.0
      ],
      "properties": {},
      "expression": "vec3 o47_false = clamp((vec4(0.5 ,0.5, 0.5, 1.0).rgb-vec3(0.490000))/max(0.0001, 0.000000)+vec3(0.5), vec3(0.0), vec3(1.0));\nvec3 o47_true = vec3(1.0)-o47_false;\nout0 = vec4(o47_false, vec4(0.5 ,0.5, 0.5, 1.0).a);",
      "expression_inputs": [
        {
          "name": "p_in",
          "type": 5
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 48,
      "type": "TILER",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -2040.0,
        1900.0
      ],
      "properties": {},
      "expression": "vec3 o48_instance_uv = vec3(0.0);\nvec4 o48_rch = tiler_o48(UV, vec2(12.000000, 12.000000), int(2.000000), o48_instance_uv, vec2(float(36441482.383450)));\nout0 = o48_rch.a;\nout1 = o48_rch.rgb;\nout2 = o48_instance_uv;",
      "expression_inputs": [
        {
          "name": "p_in",
          "type": 0
        },
        {
          "name": "mask",
          "type": 0
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 0
        },
        {
          "name": "out1",
          "type": 4
        },
        {
          "name": "out2",
          "type": 4
        }
      ]
    },
    {
      "id": 49,
      "type": "GROUP_GRAPH",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -1440.0,
        120.0
      ],
      "properties": {},
      "expression": "// Subgraph: Lighten\nout0 = in0;\nout1 = in1;",
      "expression_inputs": [
        {
          "name": "in0",
          "type": 5
        },
        {
          "name": "in1",
          "type": 5
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        },
        {
          "name": "out1",
          "type": 5
        }
      ]
    },
    {
      "id": 50,
      "type": "BLEND2",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -2300.0,
        1820.0
      ],
      "properties": {},
      "expression": "vec4 o50_b = vec4(UV.x, 1.0, 1.0, 1.0);\nvec4 o50_l;\nfloat o50_a;\no50_l = vec4(1.0, UV.y, 1.0, 1.0);\no50_a = 0.500000*1.0;\no50_b = vec4(blend_normal(UV, o50_l.rgb, o50_b.rgb, o50_a*o50_l.a), min(1.0, o50_b.a+o50_a*o50_l.a));\n\nout0 = o50_b;",
      "expression_inputs": [
        {
          "name": "p_b",
          "type": 5
        },
        {
          "name": "p_l",
          "type": 5
        },
        {
          "name": "p_a",
          "type": 0
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 51,
      "type": "BLEND2",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        1280.0,
        -1500.0
      ],
      "properties": {},
      "expression": "vec4 o51_b = vec4(UV.x, 1.0, 1.0, 1.0);\nvec4 o51_l;\nfloat o51_a;\no51_l = vec4(1.0, UV.y, 1.0, 1.0);\no51_a = 0.500000*1.0;\no51_b = vec4(blend_normal(UV, o51_l.rgb, o51_b.rgb, o51_a*o51_l.a), min(1.0, o51_b.a+o51_a*o51_l.a));\n\nout0 = o51_b;",
      "expression_inputs": [
        {
          "name": "p_b",
          "type": 5
        },
        {
          "name": "p_l",
          "type": 5
        },
        {
          "name": "p_a",
          "type": 0
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 52,
      "type": "CUSTOM_UV",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -1600.0,
        1980.0
      ],
      "properties": {},
      "expression": "vec3 o52_map = vec3(1.0);\nfloat o52_rnd =  float(0.123450)+o52_map.z;\n\nout0 = vec4(1.0), 0.000000*0.01745329251, 0.000000, vec2(o52_map.z, float(0.123450)))), false ? o52_rnd : 0.0);",
      "expression_inputs": [
        {
          "name": "p_in",
          "type": 5
        },
        {
          "name": "map",
          "type": 4
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 53,
      "type": "COLORIZE",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        860.0,
        -1360.0
      ],
      "properties": {},
      "expression": "out0 = o53_gradient_gradient_fct(UV.x);",
      "expression_inputs": [
        {
          "name": "input",
          "type": 0
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 54,
      "type": "INVERT",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -340.0,
        -1960.0
      ],
      "properties": {},
      "expression": "out0 = vec4(vec3(1.0)-vec4(1.0, 1.0, 1.0, 1.0).rgb, vec4(1.0, 1.0, 1.0, 1.0).a);",
      "expression_inputs": [
        {
          "name": "p_in",
          "type": 5
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 55,
      "type": "VARIATIONS_GREYSCALE",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -540.0,
        -2020.0
      ],
      "properties": {},
      "expression": "out0 = 1.0;\nout1 = 1.0;\nout2 = 1.0;\nout3 = 1.0;\nout4 = 1.0;",
      "expression_inputs": [
        {
          "name": "p_in",
          "type": 0
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 0
        },
        {
          "name": "out1",
          "type": 0
        },
        {
          "name": "out2",
          "type": 0
        },
        {
          "name": "out3",
          "type": 0
        },
        {
          "name": "out4",
          "type": 0
        }
      ]
    },
    {
      "id": 56,
      "type": "BLEND2",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -980.0,
        -2020.0
      ],
      "properties": {},
      "expression": "vec4 o56_b = vec4(UV.x, 1.0, 1.0, 1.0);\nvec4 o56_l;\nfloat o56_a;\no56_l = vec4(1.0, UV.y, 1.0, 1.0);\no56_a = 0.500000*1.0;\no56_b = vec4(blend_normal(UV, o56_l.rgb, o56_b.rgb, o56_a*o56_l.a), min(1.0, o56_b.a+o56_a*o56_l.a));\n\nout0 = o56_b;",
      "expression_inputs": [
        {
          "name": "p_b",
          "type": 5
        },
        {
          "name": "p_l",
          "type": 5
        },
        {
          "name": "p_a",
          "type": 0
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 57,
      "type": "TONES_STEP",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -720.0,
        -2020.0
      ],
      "properties": {},
      "expression": "vec3 o57_false = clamp((vec4(0.5 ,0.5, 0.5, 1.0).rgb-vec3(0.360000))/max(0.0001, 0.130000)+vec3(0.5), vec3(0.0), vec3(1.0));\nvec3 o57_true = vec3(1.0)-o57_false;\nout0 = vec4(o57_false, vec4(0.5 ,0.5, 0.5, 1.0).a);",
      "expression_inputs": [
        {
          "name": "p_in",
          "type": 5
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 58,
      "type": "GROUP_DIRT",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -1180.0,
        -2040.0
      ],
      "properties": {},
      "expression": "// Subgraph: dirt\nout0 = vec4(0.5, 0.5, 0.5, 1.0);",
      "expression_inputs": [
        {
          "name": "in0",
          "type": 5
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 59,
      "type": "FBM3",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -1240.0,
        -1900.0
      ],
      "properties": {},
      "expression": "out0 = old_fbm_2d_perlin(UV, vec2(6.000000, 6.000000), int(0.000000), int(2.000000), 0.500000, 0.000000, 12838328.443450);",
      "expression_inputs": [
        {
          "name": "offset_in",
          "type": 0
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 0
        }
      ]
    },
    {
      "id": 60,
      "type": "GROUP_ANISOTROPIC_KUWAHARA",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -500.0,
        -1820.0
      ],
      "properties": {},
      "expression": "// Subgraph: anisotropic_kuwahara\nout0 = in0;",
      "expression_inputs": [
        {
          "name": "in0",
          "type": 5
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 61,
      "type": "BUFFER",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -720.0,
        -1820.0
      ],
      "properties": {},
      "expression": "// Buffer pass-through\nout0 = in0;",
      "expression_inputs": [
        {
          "name": "in0",
          "type": 5
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 62,
      "type": "GROUP_GRAPH",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -940.0,
        -1820.0
      ],
      "properties": {},
      "expression": "// Subgraph: Plain Grunge\nout0 = vec4(0.5, 0.5, 0.5, 1.0);\nout1 = vec4(0.5, 0.5, 0.5, 1.0);",
      "expression_inputs": [
        {
          "name": "in0",
          "type": 5
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        },
        {
          "name": "out1",
          "type": 5
        }
      ]
    },
    {
      "id": 63,
      "type": "BLEND2",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -180.0,
        -1840.0
      ],
      "properties": {},
      "expression": "vec4 o63_b = vec4(UV.x, 1.0, 1.0, 1.0);\nvec4 o63_l;\nfloat o63_a;\no63_l = vec4(1.0, UV.y, 1.0, 1.0);\no63_a = 0.760000*1.0;\no63_b = vec4(blend_screen(UV, o63_l.rgb, o63_b.rgb, o63_a*o63_l.a), min(1.0, o63_b.a+o63_a*o63_l.a));\no63_l = vec4(1.0, UV.y, 1.0, 1.0);\no63_a = 0.710000*1.0;\no63_b = vec4(blend_multiply(UV, o63_l.rgb, o63_b.rgb, o63_a*o63_l.a), min(1.0, o63_b.a+o63_a*o63_l.a));\n\nout0 = o63_b;",
      "expression_inputs": [
        {
          "name": "p_b",
          "type": 5
        },
        {
          "name": "p_l0",
          "type": 5
        },
        {
          "name": "p_l1",
          "type": 5
        },
        {
          "name": "p_a0",
          "type": 0
        },
        {
          "name": "p_a1",
          "type": 0
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 64,
      "type": "ALTER_HSV",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        160.0,
        -1660.0
      ],
      "properties": {},
      "expression": "vec4 o64_rbga = vec4(UV.x, UV.y, 0.0, 1.0);\nvec3 o64_hsv = rgb_to_hsv(o64_rbga.rgb);\no64_hsv.x = fract(o64_hsv.x+0.150000*1.000000*(0.5-0.5));\no64_hsv.y = clamp(o64_hsv.y+0.050000*1.000000*(0.5-0.5), 0.0, 1.0);\no64_hsv.z = clamp(o64_hsv.z+0.090000*1.000000*(0.5-0.5), 0.0, 1.0);\n\t\nout0 = vec4(hsv_to_rgb(o64_hsv), o64_rbga.a);",
      "expression_inputs": [
        {
          "name": "p_in",
          "type": 5
        },
        {
          "name": "hmap",
          "type": 0
        },
        {
          "name": "vmap",
          "type": 0
        },
        {
          "name": "smap",
          "type": 0
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 65,
      "type": "GROUP_GRAPH",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -220.0,
        -160.0
      ],
      "properties": {},
      "expression": "// Subgraph: SmoothCurvatureSplit\nout0 = in0;\nout1 = vec4(0.5, 0.5, 0.5, 1.0);",
      "expression_inputs": [
        {
          "name": "in0",
          "type": 5
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        },
        {
          "name": "out1",
          "type": 5
        }
      ]
    },
    {
      "id": 66,
      "type": "BLEND2",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        400.0,
        -1600.0
      ],
      "properties": {},
      "expression": "vec4 o66_b = vec4(UV.x, 1.0, 1.0, 1.0);\nvec4 o66_l;\nfloat o66_a;\no66_l = vec4(1.0, UV.y, 1.0, 1.0);\no66_a = 0.500000*1.0;\no66_b = vec4(blend_normal(UV, o66_l.rgb, o66_b.rgb, o66_a*o66_l.a), min(1.0, o66_b.a+o66_a*o66_l.a));\n\nout0 = o66_b;",
      "expression_inputs": [
        {
          "name": "p_b",
          "type": 5
        },
        {
          "name": "p_l",
          "type": 5
        },
        {
          "name": "p_a",
          "type": 0
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 67,
      "type": "GROUP_SMOOTH_CURVATURE",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -480.0,
        -160.0
      ],
      "properties": {},
      "expression": "// Subgraph: smooth_curvature\nout0 = in0;",
      "expression_inputs": [
        {
          "name": "in0",
          "type": 5
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 68,
      "type": "UNIFORM_GREYSCALE",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        1200.0,
        -940.0
      ],
      "properties": {},
      "expression": "out0 = 0.870000;",
      "expression_inputs": [],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 0
        }
      ]
    },
    {
      "id": 69,
      "type": "UNIFORM_GREYSCALE",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        820.0,
        -880.0
      ],
      "properties": {},
      "expression": "out0 = 0.700000;",
      "expression_inputs": [],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 0
        }
      ]
    },
    {
      "id": 70,
      "type": "UNIFORM_GREYSCALE",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        1080.0,
        -660.0
      ],
      "properties": {},
      "expression": "out0 = 0.160000;",
      "expression_inputs": [],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 0
        }
      ]
    },
    {
      "id": 71,
      "type": "BLEND2",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        1380.0,
        -720.0
      ],
      "properties": {},
      "expression": "vec4 o71_b = vec4(UV.x, 1.0, 1.0, 1.0);\nvec4 o71_l;\nfloat o71_a;\no71_l = vec4(1.0, UV.y, 1.0, 1.0);\no71_a = 1.000000*1.0;\no71_b = vec4(blend_normal(UV, o71_l.rgb, o71_b.rgb, o71_a*o71_l.a), min(1.0, o71_b.a+o71_a*o71_l.a));\no71_l = vec4(1.0, UV.y, 1.0, 1.0);\no71_a = 1.000000*1.0;\no71_b = vec4(blend_normal(UV, o71_l.rgb, o71_b.rgb, o71_a*o71_l.a), min(1.0, o71_b.a+o71_a*o71_l.a));\no71_l = vec4(1.0, UV.y, 1.0, 1.0);\no71_a = 0.320000*1.0;\no71_b = vec4(blend_overlay(UV, o71_l.rgb, o71_b.rgb, o71_a*o71_l.a), min(1.0, o71_b.a+o71_a*o71_l.a));\no71_l = vec4(1.0, UV.y, 1.0, 1.0);\no71_a = 0.230000*1.0;\no71_b = vec4(blend_overlay(UV, o71_l.rgb, o71_b.rgb, o71_a*o71_l.a), min(1.0, o71_b.a+o71_a*o71_l.a));\n\nout0 = o71_b;",
      "expression_inputs": [
        {
          "name": "p_b",
          "type": 5
        },
        {
          "name": "p_l0",
          "type": 5
        },
        {
          "name": "p_l1",
          "type": 5
        },
        {
          "name": "p_l2",
          "type": 5
        },
        {
          "name": "p_l3",
          "type": 5
        },
        {
          "name": "p_a0",
          "type": 0
        },
        {
          "name": "p_a1",
          "type": 0
        },
        {
          "name": "p_a2",
          "type": 0
        },
        {
          "name": "p_a3",
          "type": 0
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 72,
      "type": "GROUP_GRAPH",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        300.0,
        -500.0
      ],
      "properties": {},
      "expression": "// Subgraph: Plain Grunge\nout0 = vec4(0.5, 0.5, 0.5, 1.0);\nout1 = vec4(0.5, 0.5, 0.5, 1.0);",
      "expression_inputs": [
        {
          "name": "in0",
          "type": 5
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        },
        {
          "name": "out1",
          "type": 5
        }
      ]
    },
    {
      "id": 73,
      "type": "BUFFER",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        520.0,
        -500.0
      ],
      "properties": {},
      "expression": "// Buffer pass-through\nout0 = in0;",
      "expression_inputs": [
        {
          "name": "in0",
          "type": 5
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 74,
      "type": "GROUP_ANISOTROPIC_KUWAHARA",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        740.0,
        -500.0
      ],
      "properties": {},
      "expression": "// Subgraph: anisotropic_kuwahara\nout0 = in0;",
      "expression_inputs": [
        {
          "name": "in0",
          "type": 5
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 75,
      "type": "FBM3",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        0.0,
        -580.0
      ],
      "properties": {},
      "expression": "out0 = old_fbm_2d_perlin(UV, vec2(6.000000, 6.000000), int(0.000000), int(2.000000), 0.500000, 0.000000, 10546592.123450);",
      "expression_inputs": [
        {
          "name": "offset_in",
          "type": 0
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 0
        }
      ]
    },
    {
      "id": 76,
      "type": "GROUP_DIRT",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        60.0,
        -720.0
      ],
      "properties": {},
      "expression": "// Subgraph: dirt\nout0 = vec4(0.5, 0.5, 0.5, 1.0);",
      "expression_inputs": [
        {
          "name": "in0",
          "type": 5
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 77,
      "type": "BLEND2",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        260.0,
        -700.0
      ],
      "properties": {},
      "expression": "vec4 o77_b = vec4(UV.x, 1.0, 1.0, 1.0);\nvec4 o77_l;\nfloat o77_a;\no77_l = vec4(1.0, UV.y, 1.0, 1.0);\no77_a = 0.500000*1.0;\no77_b = vec4(blend_normal(UV, o77_l.rgb, o77_b.rgb, o77_a*o77_l.a), min(1.0, o77_b.a+o77_a*o77_l.a));\n\nout0 = o77_b;",
      "expression_inputs": [
        {
          "name": "p_b",
          "type": 5
        },
        {
          "name": "p_l",
          "type": 5
        },
        {
          "name": "p_a",
          "type": 0
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 78,
      "type": "VARIATIONS_GREYSCALE",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        700.0,
        -700.0
      ],
      "properties": {},
      "expression": "out0 = 1.0;\nout1 = 1.0;\nout2 = 1.0;\nout3 = 1.0;\nout4 = 1.0;",
      "expression_inputs": [
        {
          "name": "p_in",
          "type": 0
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 0
        },
        {
          "name": "out1",
          "type": 0
        },
        {
          "name": "out2",
          "type": 0
        },
        {
          "name": "out3",
          "type": 0
        },
        {
          "name": "out4",
          "type": 0
        }
      ]
    },
    {
      "id": 79,
      "type": "TONES_STEP",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        520.0,
        -700.0
      ],
      "properties": {},
      "expression": "vec3 o79_false = clamp((vec4(0.5 ,0.5, 0.5, 1.0).rgb-vec3(0.360000))/max(0.0001, 0.130000)+vec3(0.5), vec3(0.0), vec3(1.0));\nvec3 o79_true = vec3(1.0)-o79_false;\nout0 = vec4(o79_false, vec4(0.5 ,0.5, 0.5, 1.0).a);",
      "expression_inputs": [
        {
          "name": "p_in",
          "type": 5
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 80,
      "type": "INVERT",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        900.0,
        -640.0
      ],
      "properties": {},
      "expression": "out0 = vec4(vec3(1.0)-vec4(1.0, 1.0, 1.0, 1.0).rgb, vec4(1.0, 1.0, 1.0, 1.0).a);",
      "expression_inputs": [
        {
          "name": "p_in",
          "type": 5
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 81,
      "type": "BLEND2",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        1060.0,
        -520.0
      ],
      "properties": {},
      "expression": "vec4 o81_b = vec4(UV.x, 1.0, 1.0, 1.0);\nvec4 o81_l;\nfloat o81_a;\no81_l = vec4(1.0, UV.y, 1.0, 1.0);\no81_a = 0.760000*1.0;\no81_b = vec4(blend_screen(UV, o81_l.rgb, o81_b.rgb, o81_a*o81_l.a), min(1.0, o81_b.a+o81_a*o81_l.a));\no81_l = vec4(1.0, UV.y, 1.0, 1.0);\no81_a = 0.710000*1.0;\no81_b = vec4(blend_multiply(UV, o81_l.rgb, o81_b.rgb, o81_a*o81_l.a), min(1.0, o81_b.a+o81_a*o81_l.a));\n\nout0 = o81_b;",
      "expression_inputs": [
        {
          "name": "p_b",
          "type": 5
        },
        {
          "name": "p_l0",
          "type": 5
        },
        {
          "name": "p_l1",
          "type": 5
        },
        {
          "name": "p_a0",
          "type": 0
        },
        {
          "name": "p_a1",
          "type": 0
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 82,
      "type": "BLEND2",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        1540.0,
        -60.0
      ],
      "properties": {},
      "expression": "vec4 o82_b = vec4(UV.x, 1.0, 1.0, 1.0);\nvec4 o82_l;\nfloat o82_a;\no82_l = vec4(1.0, UV.y, 1.0, 1.0);\no82_a = 0.500000*1.0;\no82_b = vec4(blend_normal(UV, o82_l.rgb, o82_b.rgb, o82_a*o82_l.a), min(1.0, o82_b.a+o82_a*o82_l.a));\n\nout0 = o82_b;",
      "expression_inputs": [
        {
          "name": "p_b",
          "type": 5
        },
        {
          "name": "p_l",
          "type": 5
        },
        {
          "name": "p_a",
          "type": 0
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 83,
      "type": "TRANSFORM2",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -4700.0,
        -760.0
      ],
      "properties": {},
      "expression": "out0 = vec4(UV, 0.0, 1.0);",
      "expression_inputs": [
        {
          "name": "p_i",
          "type": 5
        },
        {
          "name": "p_tx",
          "type": 0
        },
        {
          "name": "p_ty",
          "type": 0
        },
        {
          "name": "p_r",
          "type": 0
        },
        {
          "name": "p_sx",
          "type": 0
        },
        {
          "name": "p_sy",
          "type": 0
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 84,
      "type": "BLEND2",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -4000.0,
        120.0
      ],
      "properties": {},
      "expression": "vec4 o84_b = vec4(UV.x, 1.0, 1.0, 1.0);\nvec4 o84_l;\nfloat o84_a;\no84_l = vec4(1.0, UV.y, 1.0, 1.0);\no84_a = 0.500000*1.0;\no84_b = vec4(blend_normal(UV, o84_l.rgb, o84_b.rgb, o84_a*o84_l.a), min(1.0, o84_b.a+o84_a*o84_l.a));\n\nout0 = o84_b;",
      "expression_inputs": [
        {
          "name": "p_b",
          "type": 5
        },
        {
          "name": "p_l",
          "type": 5
        },
        {
          "name": "p_a",
          "type": 0
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 85,
      "type": "SHARPEN",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        1840.0,
        -700.0
      ],
      "properties": {},
      "expression": "out0 = o85_fct(UV);",
      "expression_inputs": [
        {
          "name": "p_in",
          "type": 4
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 4
        }
      ]
    },
    {
      "id": 86,
      "type": "BUFFER",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        1640.0,
        -700.0
      ],
      "properties": {},
      "expression": "// Buffer pass-through\nout0 = in0;",
      "expression_inputs": [
        {
          "name": "in0",
          "type": 5
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 87,
      "type": "FBM3",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -5360.0,
        1400.0
      ],
      "properties": {},
      "expression": "out0 = old_fbm_2d_perlin(UV, vec2(8.000000, 8.000000), int(0.000000), int(3.000000), 0.500000, 0.000000, 23827530.363450);",
      "expression_inputs": [
        {
          "name": "offset_in",
          "type": 0
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 0
        }
      ]
    },
    {
      "id": 88,
      "type": "GROUP_MULTI_WARP",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -5080.0,
        1340.0
      ],
      "properties": {},
      "expression": "// Subgraph: multi_warp\nout0 = in0;",
      "expression_inputs": [
        {
          "name": "in0",
          "type": 5
        },
        {
          "name": "in1",
          "type": 5
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 89,
      "type": "GROUP_GRAPH",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -3980.0,
        960.0
      ],
      "properties": {},
      "expression": "// Subgraph: SmoothCurvatureSplit\nout0 = in0;\nout1 = vec4(0.5, 0.5, 0.5, 1.0);",
      "expression_inputs": [
        {
          "name": "in0",
          "type": 5
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        },
        {
          "name": "out1",
          "type": 5
        }
      ]
    },
    {
      "id": 90,
      "type": "BLEND2",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -3680.0,
        1060.0
      ],
      "properties": {},
      "expression": "vec4 o90_b = vec4(UV.x, 1.0, 1.0, 1.0);\nvec4 o90_l;\nfloat o90_a;\no90_l = vec4(1.0, UV.y, 1.0, 1.0);\no90_a = 0.500000*1.0;\no90_b = vec4(blend_normal(UV, o90_l.rgb, o90_b.rgb, o90_a*o90_l.a), min(1.0, o90_b.a+o90_a*o90_l.a));\n\nout0 = o90_b;",
      "expression_inputs": [
        {
          "name": "p_b",
          "type": 5
        },
        {
          "name": "p_l",
          "type": 5
        },
        {
          "name": "p_a",
          "type": 0
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 91,
      "type": "GROUP_SMOOTH_CURVATURE",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -4200.0,
        960.0
      ],
      "properties": {},
      "expression": "// Subgraph: smooth_curvature\nout0 = in0;",
      "expression_inputs": [
        {
          "name": "in0",
          "type": 5
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 92,
      "type": "FBM3",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -4100.0,
        1140.0
      ],
      "properties": {},
      "expression": "out0 = old_fbm_2d_perlin(UV, vec2(8.000000, 8.000000), int(0.000000), int(3.000000), 0.500000, 0.000000, 0.123450);",
      "expression_inputs": [
        {
          "name": "offset_in",
          "type": 0
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 0
        }
      ]
    },
    {
      "id": 93,
      "type": "TONES_STEP",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -3880.0,
        1140.0
      ],
      "properties": {},
      "expression": "vec3 o93_false = clamp((vec4(0.5 ,0.5, 0.5, 1.0).rgb-vec3(0.500000))/max(0.0001, 0.100000)+vec3(0.5), vec3(0.0), vec3(1.0));\nvec3 o93_true = vec3(1.0)-o93_false;\nout0 = vec4(o93_false, vec4(0.5 ,0.5, 0.5, 1.0).a);",
      "expression_inputs": [
        {
          "name": "p_in",
          "type": 5
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 94,
      "type": "BLEND2",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        980.0,
        -1500.0
      ],
      "properties": {},
      "expression": "vec4 o94_b = vec4(UV.x, 1.0, 1.0, 1.0);\nvec4 o94_l;\nfloat o94_a;\no94_l = vec4(1.0, UV.y, 1.0, 1.0);\no94_a = 0.500000*1.0;\no94_b = vec4(blend_normal(UV, o94_l.rgb, o94_b.rgb, o94_a*o94_l.a), min(1.0, o94_b.a+o94_a*o94_l.a));\n\nout0 = o94_b;",
      "expression_inputs": [
        {
          "name": "p_b",
          "type": 5
        },
        {
          "name": "p_l",
          "type": 5
        },
        {
          "name": "p_a",
          "type": 0
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 95,
      "type": "COLORIZE",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        720.0,
        -1200.0
      ],
      "properties": {},
      "expression": "out0 = o95_gradient_gradient_fct(UV.x);",
      "expression_inputs": [
        {
          "name": "input",
          "type": 0
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 96,
      "type": "INVERT",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        1680.0,
        -1300.0
      ],
      "properties": {},
      "expression": "out0 = vec4(vec3(1.0)-vec4(1.0, 1.0, 1.0, 1.0).rgb, vec4(1.0, 1.0, 1.0, 1.0).a);",
      "expression_inputs": [
        {
          "name": "p_in",
          "type": 5
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 97,
      "type": "FBM3",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -6300.0,
        940.0
      ],
      "properties": {},
      "expression": "out0 = old_fbm_2d_perlin(UV, vec2(16.000000, 16.000000), int(0.000000), int(1.000000), 0.500000, 0.000000, 0.123450);",
      "expression_inputs": [
        {
          "name": "offset_in",
          "type": 0
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 0
        }
      ]
    },
    {
      "id": 98,
      "type": "WARP",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -6000.0,
        1200.0
      ],
      "properties": {},
      "expression": "vec2 o98_slope = o98_slope(UV, 0.100000);\nvec2 o98_warp = o98_slope;\nout0 = vec4(sin(UV.x*20.0)*0.5+0.5, sin(UV.y*20.0)*0.5+0.5, 0, 1);",
      "expression_inputs": [
        {
          "name": "p_in",
          "type": 5
        },
        {
          "name": "p_d",
          "type": 0
        },
        {
          "name": "strength_map",
          "type": 0
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 99,
      "type": "FBM3",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -5120.0,
        1540.0
      ],
      "properties": {},
      "expression": "out0 = old_fbm_2d_perlin(UV, vec2(8.000000, 8.000000), int(0.000000), int(3.000000), 0.500000, 0.000000, 23827530.363450);",
      "expression_inputs": [
        {
          "name": "offset_in",
          "type": 0
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 0
        }
      ]
    },
    {
      "id": 100,
      "type": "REMAP",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -4880.0,
        1540.0
      ],
      "properties": {},
      "expression": "float o100_x = 0.0*((-0.150000)-(-0.020000));\nout0 = (-0.020000)+o100_x-mod(o100_x, max(0.000000, 0.00000001));",
      "expression_inputs": [
        {
          "name": "p_in",
          "type": 0
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 0
        }
      ]
    },
    {
      "id": 101,
      "type": "TILER",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -3620.0,
        1440.0
      ],
      "properties": {},
      "expression": "vec3 o101_instance_uv = vec3(0.0);\nvec4 o101_rch = tiler_o101(UV, vec2(20.000000, 20.000000), int(2.000000), o101_instance_uv, vec2(float(9962693.243450)));\nout0 = o101_rch.a;\nout1 = o101_rch.rgb;\nout2 = o101_instance_uv;",
      "expression_inputs": [
        {
          "name": "p_in",
          "type": 0
        },
        {
          "name": "mask",
          "type": 0
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 0
        },
        {
          "name": "out1",
          "type": 4
        },
        {
          "name": "out2",
          "type": 4
        }
      ]
    },
    {
      "id": 102,
      "type": "TONES_STEP",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -4260.0,
        1620.0
      ],
      "properties": {},
      "expression": "vec3 o102_false = clamp((vec4(0.5 ,0.5, 0.5, 1.0).rgb-vec3(0.950000))/max(0.0001, 0.000000)+vec3(0.5), vec3(0.0), vec3(1.0));\nvec3 o102_true = vec3(1.0)-o102_false;\nout0 = vec4(o102_true, vec4(0.5 ,0.5, 0.5, 1.0).a);",
      "expression_inputs": [
        {
          "name": "p_in",
          "type": 5
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 103,
      "type": "SPHERE",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -3920.0,
        1600.0
      ],
      "properties": {},
      "expression": "out0 = sphere(UV, vec2(0.500000, 0.500000), 0.500000);",
      "expression_inputs": [],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 0
        }
      ]
    },
    {
      "id": 104,
      "type": "BLEND2",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -3420.0,
        1080.0
      ],
      "properties": {},
      "expression": "vec4 o104_b = vec4(UV.x, 1.0, 1.0, 1.0);\nvec4 o104_l;\nfloat o104_a;\no104_l = vec4(1.0, UV.y, 1.0, 1.0);\no104_a = 0.500000*1.0;\no104_b = vec4(blend_normal(UV, o104_l.rgb, o104_b.rgb, o104_a*o104_l.a), min(1.0, o104_b.a+o104_a*o104_l.a));\n\nout0 = o104_b;",
      "expression_inputs": [
        {
          "name": "p_b",
          "type": 5
        },
        {
          "name": "p_l",
          "type": 5
        },
        {
          "name": "p_a",
          "type": 0
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 105,
      "type": "BLEND2",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -3960.0,
        1440.0
      ],
      "properties": {},
      "expression": "vec4 o105_b = vec4(UV.x, 1.0, 1.0, 1.0);\nvec4 o105_l;\nfloat o105_a;\no105_l = vec4(1.0, UV.y, 1.0, 1.0);\no105_a = 0.500000*1.0;\no105_b = vec4(blend_normal(UV, o105_l.rgb, o105_b.rgb, o105_a*o105_l.a), min(1.0, o105_b.a+o105_a*o105_l.a));\n\nout0 = o105_b;",
      "expression_inputs": [
        {
          "name": "p_b",
          "type": 5
        },
        {
          "name": "p_l",
          "type": 5
        },
        {
          "name": "p_a",
          "type": 0
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 106,
      "type": "MATH",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -4260.0,
        1440.0
      ],
      "properties": {},
      "expression": "float o106_clamp_false = 0.000000+0.050000;\nfloat o106_clamp_true = clamp(o106_clamp_false, 0.0, 1.0);\n\nout0 = o106_clamp_true;",
      "expression_inputs": [
        {
          "name": "in1",
          "type": 0
        },
        {
          "name": "in2",
          "type": 0
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 0
        }
      ]
    },
    {
      "id": 107,
      "type": "FBM2",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -800.0,
        1520.0
      ],
      "properties": {},
      "expression": "out0 = old_fbm_2d_perlin(UV, vec2(2.000000, 2.000000), int(0.000000), int(2.000000), 0.500000, 0.000000, 18860313.723450);",
      "expression_inputs": [
        {
          "name": "offset_in",
          "type": 0
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 0
        }
      ]
    },
    {
      "id": 108,
      "type": "GROUP_NORMAL_MAP2",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -540.0,
        1520.0
      ],
      "properties": {},
      "expression": "// Subgraph: normal_map2\nout0 = in0;",
      "expression_inputs": [
        {
          "name": "in0",
          "type": 5
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 109,
      "type": "SHADER",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -460.0,
        1440.0
      ],
      "properties": {},
      "expression": "out0 = rot2Dnm(0.0, 90.000000);",
      "expression_inputs": [
        {
          "name": "p_in",
          "type": 5
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 110,
      "type": "FBM2",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -1260.0,
        1440.0
      ],
      "properties": {},
      "expression": "out0 = old_fbm_2d_perlin(UV, vec2(3.000000, 3.000000), int(0.000000), int(3.000000), 0.500000, 0.000000, 31919142.523450);",
      "expression_inputs": [
        {
          "name": "offset_in",
          "type": 0
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 0
        }
      ]
    },
    {
      "id": 111,
      "type": "FBM2",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -1340.0,
        1180.0
      ],
      "properties": {},
      "expression": "out0 = old_fbm_2d_perlin(UV, vec2(5.000000, 5.000000), int(0.000000), int(5.000000), 0.500000, 0.000000, 20966927.483450);",
      "expression_inputs": [
        {
          "name": "offset_in",
          "type": 0
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 0
        }
      ]
    },
    {
      "id": 112,
      "type": "GROUP_NORMAL_MAP2",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -1020.0,
        1460.0
      ],
      "properties": {},
      "expression": "// Subgraph: normal_map2\nout0 = in0;",
      "expression_inputs": [
        {
          "name": "in0",
          "type": 5
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 113,
      "type": "SHADER",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -940.0,
        1360.0
      ],
      "properties": {},
      "expression": "out0 = rot2Dnm(0.0, 90.000000);",
      "expression_inputs": [
        {
          "name": "p_in",
          "type": 5
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 114,
      "type": "COLORIZE",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        480.0,
        1240.0
      ],
      "properties": {},
      "expression": "out0 = o114_gradient_gradient_fct(UV.x);",
      "expression_inputs": [
        {
          "name": "input",
          "type": 0
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 115,
      "type": "SHADER",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -840.0,
        1180.0
      ],
      "properties": {},
      "expression": "out0 = o115_func(UV, 4.000000, 0.230000);",
      "expression_inputs": [
        {
          "name": "p_in",
          "type": 5
        },
        {
          "name": "p_nm",
          "type": 5
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 116,
      "type": "SHADER",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -440.0,
        1240.0
      ],
      "properties": {},
      "expression": "out0 = o116_func(UV, 3.000000, 0.894000);",
      "expression_inputs": [
        {
          "name": "p_in",
          "type": 5
        },
        {
          "name": "p_nm",
          "type": 5
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 117,
      "type": "GROUP_DENOISER",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -120.0,
        1220.0
      ],
      "properties": {},
      "expression": "// Subgraph: denoiser\nout0 = in0;",
      "expression_inputs": [
        {
          "name": "in0",
          "type": 5
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 118,
      "type": "SHADER",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        180.0,
        1240.0
      ],
      "properties": {},
      "expression": "out0 = o118_func(UV, 3.000000, 0.072000);",
      "expression_inputs": [
        {
          "name": "p_in",
          "type": 5
        },
        {
          "name": "p_nm",
          "type": 5
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 119,
      "type": "SHADER",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        80.0,
        1500.0
      ],
      "properties": {},
      "expression": "out0 = rot2Dnm(0.0, 111.900000);",
      "expression_inputs": [
        {
          "name": "p_in",
          "type": 5
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 120,
      "type": "GROUP_NORMAL_MAP2",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -100.0,
        1600.0
      ],
      "properties": {},
      "expression": "// Subgraph: normal_map2\nout0 = in0;",
      "expression_inputs": [
        {
          "name": "in0",
          "type": 5
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 121,
      "type": "GROUP_GRAPH",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -380.0,
        1780.0
      ],
      "properties": {},
      "expression": "// Subgraph: Gaussian Blur HQ\nout0 = in0;",
      "expression_inputs": [
        {
          "name": "in0",
          "type": 5
        },
        {
          "name": "in1",
          "type": 5
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 122,
      "type": "GROUP_AUTO_TONES",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -1760.0,
        1860.0
      ],
      "properties": {},
      "expression": "// Subgraph: auto_tones\nout0 = in0;",
      "expression_inputs": [
        {
          "name": "in0",
          "type": 5
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 123,
      "type": "BLEND2",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        1540.0,
        -1500.0
      ],
      "properties": {},
      "expression": "vec4 o123_b = vec4(UV.x, 1.0, 1.0, 1.0);\nvec4 o123_l;\nfloat o123_a;\no123_l = vec4(1.0, UV.y, 1.0, 1.0);\no123_a = 0.500000*1.0;\no123_b = vec4(blend_normal(UV, o123_l.rgb, o123_b.rgb, o123_a*o123_l.a), min(1.0, o123_b.a+o123_a*o123_l.a));\n\nout0 = o123_b;",
      "expression_inputs": [
        {
          "name": "p_b",
          "type": 5
        },
        {
          "name": "p_l",
          "type": 5
        },
        {
          "name": "p_a",
          "type": 0
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 124,
      "type": "BUFFER",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -280.0,
        460.0
      ],
      "properties": {},
      "expression": "// Buffer pass-through\nout0 = in0;",
      "expression_inputs": [
        {
          "name": "in0",
          "type": 5
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 125,
      "type": "BLEND2",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        1080.0,
        -840.0
      ],
      "properties": {},
      "expression": "vec4 o125_b = vec4(UV.x, 1.0, 1.0, 1.0);\nvec4 o125_l;\nfloat o125_a;\no125_l = vec4(1.0, UV.y, 1.0, 1.0);\no125_a = 0.500000*1.0;\no125_b = vec4(blend_normal(UV, o125_l.rgb, o125_b.rgb, o125_a*o125_l.a), min(1.0, o125_b.a+o125_a*o125_l.a));\n\nout0 = o125_b;",
      "expression_inputs": [
        {
          "name": "p_b",
          "type": 5
        },
        {
          "name": "p_l",
          "type": 5
        },
        {
          "name": "p_a",
          "type": 0
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 126,
      "type": "INVERT",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -3120.0,
        1080.0
      ],
      "properties": {},
      "expression": "out0 = vec4(vec3(1.0)-vec4(1.0, 1.0, 1.0, 1.0).rgb, vec4(1.0, 1.0, 1.0, 1.0).a);",
      "expression_inputs": [
        {
          "name": "p_in",
          "type": 5
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 127,
      "type": "COLORIZE",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        1160.0,
        -340.0
      ],
      "properties": {},
      "expression": "out0 = o127_gradient_gradient_fct(UV.x);",
      "expression_inputs": [
        {
          "name": "input",
          "type": 0
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 128,
      "type": "BRIGHTNESS_CONTRAST",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -200.0,
        80.0
      ],
      "properties": {},
      "expression": "out0 = vec4(clamp(vec4(0.5 ,0.5, 0.5, 1.0).rgb*1.790000+vec3(0.000000)+0.5-1.790000*0.5, vec3(0.0), vec3(1.0)), vec4(0.5 ,0.5, 0.5, 1.0).a);",
      "expression_inputs": [
        {
          "name": "p_in",
          "type": 5
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 129,
      "type": "INVERT",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        60.0,
        80.0
      ],
      "properties": {},
      "expression": "out0 = vec4(vec3(1.0)-vec4(1.0, 1.0, 1.0, 1.0).rgb, vec4(1.0, 1.0, 1.0, 1.0).a);",
      "expression_inputs": [
        {
          "name": "p_in",
          "type": 5
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 130,
      "type": "GROUP_GRAPH",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -4320.0,
        720.0
      ],
      "properties": {},
      "expression": "// Subgraph: Gaussian Blur HQ\nout0 = in0;",
      "expression_inputs": [
        {
          "name": "in0",
          "type": 5
        },
        {
          "name": "in1",
          "type": 5
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 131,
      "type": "COLORIZE",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -520.0,
        -1300.0
      ],
      "properties": {},
      "expression": "out0 = o131_gradient_gradient_fct(UV.x);",
      "expression_inputs": [
        {
          "name": "input",
          "type": 0
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 132,
      "type": "BLEND2",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -320.0,
        -1400.0
      ],
      "properties": {},
      "expression": "vec4 o132_b = vec4(UV.x, 1.0, 1.0, 1.0);\nvec4 o132_l;\nfloat o132_a;\no132_l = vec4(1.0, UV.y, 1.0, 1.0);\no132_a = 0.500000*1.0;\no132_b = vec4(blend_normal(UV, o132_l.rgb, o132_b.rgb, o132_a*o132_l.a), min(1.0, o132_b.a+o132_a*o132_l.a));\n\nout0 = o132_b;",
      "expression_inputs": [
        {
          "name": "p_b",
          "type": 5
        },
        {
          "name": "p_l",
          "type": 5
        },
        {
          "name": "p_a",
          "type": 0
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 133,
      "type": "MATH",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -4080.0,
        720.0
      ],
      "properties": {},
      "expression": "float o133_clamp_false = pow(0.000000,2.000000);\nfloat o133_clamp_true = clamp(o133_clamp_false, 0.0, 1.0);\n\nout0 = o133_clamp_true;",
      "expression_inputs": [
        {
          "name": "in1",
          "type": 0
        },
        {
          "name": "in2",
          "type": 0
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 0
        }
      ]
    },
    {
      "id": 134,
      "type": "ADJUST_HSV",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -80.0,
        -1400.0
      ],
      "properties": {},
      "expression": "vec4 o134_rbga = vec4(UV.x, UV.y, 0.0, 1.0);\nvec3 o134_hsv = rgb_to_hsv(o134_rbga.rgb);\no134_hsv.x += (-0.007816);\no134_hsv.y = clamp(o134_hsv.y*1.000000, 0.0, 1.0);\no134_hsv.z = clamp(o134_hsv.z*1.000000, 0.0, 1.0);\n\t\nout0 = vec4(hsv_to_rgb(o134_hsv), o134_rbga.a);",
      "expression_inputs": [
        {
          "name": "p_in",
          "type": 5
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 135,
      "type": "BLEND2",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        220.0,
        -1400.0
      ],
      "properties": {},
      "expression": "vec4 o135_b = vec4(UV.x, 1.0, 1.0, 1.0);\nvec4 o135_l;\nfloat o135_a;\no135_l = vec4(1.0, UV.y, 1.0, 1.0);\no135_a = 0.500000*1.0;\no135_b = vec4(blend_normal(UV, o135_l.rgb, o135_b.rgb, o135_a*o135_l.a), min(1.0, o135_b.a+o135_a*o135_l.a));\n\nout0 = o135_b;",
      "expression_inputs": [
        {
          "name": "p_b",
          "type": 5
        },
        {
          "name": "p_l",
          "type": 5
        },
        {
          "name": "p_a",
          "type": 0
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 136,
      "type": "GROUP_GRAPH",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -280.0,
        -1120.0
      ],
      "properties": {},
      "expression": "// Subgraph: Gaussian Blur HQ\nout0 = in0;",
      "expression_inputs": [
        {
          "name": "in0",
          "type": 5
        },
        {
          "name": "in1",
          "type": 5
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 137,
      "type": "GROUP_AUTO_TONES",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -40.0,
        -1120.0
      ],
      "properties": {},
      "expression": "// Subgraph: auto_tones\nout0 = in0;",
      "expression_inputs": [
        {
          "name": "in0",
          "type": 5
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 138,
      "type": "UNIFORM",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -60.2273597717285,
        -1212.27893066406
      ],
      "properties": {},
      "expression": "out0 = vec4(0.154129, 0.270299, 0.433594, 1.000000);",
      "expression_inputs": [],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 139,
      "type": "BUFFER",
      "godot_class": "VisualShaderNodeExpression",
      "position": [
        -1720.0,
        120.0
      ],
      "properties": {},
      "expression": "// Buffer pass-through\nout0 = in0;",
      "expression_inputs": [
        {
          "name": "in0",
          "type": 5
        }
      ],
      "expression_outputs": [
        {
          "name": "out0",
          "type": 5
        }
      ]
    },
    {
      "id": 140,
      "type": "MM_GLOBALS",
      "godot_class": "VisualShaderNodeGlobalExpression",
      "position": [
        -1000,
        -500
      ],
      "properties": {},
      "expression": "float rand(vec2 x) {\n    return fract(cos(mod(dot(x, vec2(13.9898, 8.141)), 3.14)) * 43758.5453);\n}\nvec2 rand2(vec2 x) {\n    return fract(cos(mod(vec2(dot(x, vec2(13.9898, 8.141)),\n        dot(x, vec2(3.4562, 17.398))), vec2(3.14))) * 43758.5453);\n}\nvec3 rand3(vec2 x) {\n    return fract(cos(mod(vec3(dot(x, vec2(13.9898, 8.141)),\n        dot(x, vec2(3.4562, 17.398)),\n        dot(x, vec2(13.254, 8.976))), vec3(3.14))) * 43758.5453);\n}\n\n\nvec2 get_from_tileset(float count, float seed, vec2 uv) {\n\treturn clamp((uv+floor(rand2(vec2(seed))*count))/count, vec2(0.0), vec2(1.0));\n}\n\nvec2 old_custom_uv_transform(vec2 uv, vec2 cst_scale, float rnd_rotate, float rnd_scale, vec2 seed) {\n\tseed = rand2(seed);\n\tuv -= vec2(0.5);\n\tfloat angle = (seed.x * 2.0 - 1.0) * rnd_rotate;\n\tfloat ca = cos(angle);\n\tfloat sa = sin(angle);\n\tuv = vec2(ca*uv.x+sa*uv.y, -sa*uv.x+ca*uv.y);\n\tuv *= (seed.y-0.5)*2.0*rnd_scale+1.0;\n\tuv /= cst_scale;\n\tuv += vec2(0.5);\n\treturn uv;\n}\n\n\nvec4 tiler_o2(vec2 uv, vec2 tile, int overlap, inout vec3 instance_uv, vec2 _seed) {\n\tfloat c = 0.0;\n\tvec3 rc = vec3(0.0);\n\tvec3 rc1;\n\tfor (int dx = -overlap; dx <= overlap; ++dx) {\n\t\tfor (int dy = -overlap; dy <= overlap; ++dy) {\n\t\t\tvec2 pos = uv*tile+vec2(float(dx), float(dy)); pos = fract((floor(mod(pos, tile))+vec2(0.5))/tile)-vec2(0.5);\n\t\t\tvec2 seed = rand2(pos+_seed);\n\t\t\trc1 = rand3(seed);\n\t\t\tvec2 tile_index = floor(uv * tile) + vec2(float(dx), float(dy));\n\t\t\tpos += vec2((0.000000/tile.x)*mod(mod(tile_index.y, tile.y), 2.0), 0.0)+1.000000*seed/tile;\n\t\t\tfloat mask = 1.0;\n\t\t\tif (mask > 0.01) {\n\t\t\t\tvec2 pv = fract(uv - pos)-vec2(0.5);\n\t\t\t\tseed = rand2(seed);\n\t\t\t\tfloat angle = (seed.x * 2.0 - 1.0) * 179.100000 * 0.01745329251;\n\t\t\t\tfloat ca = cos(angle);\n\t\t\t\tfloat sa = sin(angle);\n\t\t\t\tpv = vec2(ca*pv.x+sa*pv.y, -sa*pv.x+ca*pv.y);\n\t\t\t\tpv *= (seed.y-0.5)*2.0*0.560000+1.0;\n\t\t\t\tpv /= vec2(0.080000, 0.080000);\n\t\t\t\tpv += vec2(0.5);\n\t\t\t\tseed = rand2(seed);\n\t\t\t\tvec2 clamped_pv = clamp(pv, vec2(0.0), vec2(1.0));\n\t\t\t\tif (pv.x != clamped_pv.x || pv.y != clamped_pv.y) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tvec2 full_uv = pv;\n\t\t\t\tpv = get_from_tileset( 1.0, seed.x, pv);\n\t\t\t\tfloat c1 = 0.0*mask*(1.0-1.000000*seed.x);\n\t\t\t\tc = max(c, c1);\n\t\t\t\trc = mix(rc, rc1, step(c, c1));\n\t\t\t\tinstance_uv = mix(instance_uv, vec3(full_uv, seed.x), step(c, c1));\n\t\t\t}\n\t\t}\n\t}\n\treturn vec4(rc, c);\n}\n\nfloat sphere(vec2 uv, vec2 c, float r) {\n\tuv -= c;\n\tuv /= r;\n\treturn 2.0*r*sqrt(max(0.0, 1.0-dot(uv, uv)));\n}\n\n\nfloat old_value_noise_2d(vec2 coord, vec2 size, float offset, float seed) {\n\tvec2 o = floor(coord)+rand2(vec2(seed, 1.0-seed))+size;\n\tvec2 f = fract(coord);\n\tfloat p00 = rand(mod(o, size));\n\tfloat p01 = rand(mod(o + vec2(0.0, 1.0), size));\n\tfloat p10 = rand(mod(o + vec2(1.0, 0.0), size));\n\tfloat p11 = rand(mod(o + vec2(1.0, 1.0), size));\n\tp00 = sin(p00 * 6.28318530718 + offset * 6.28318530718) / 2.0 + 0.5;\n\tp01 = sin(p01 * 6.28318530718 + offset * 6.28318530718) / 2.0 + 0.5;\n\tp10 = sin(p10 * 6.28318530718 + offset * 6.28318530718) / 2.0 + 0.5;\n\tp11 = sin(p11 * 6.28318530718 + offset * 6.28318530718) / 2.0 + 0.5;\n\tvec2 t =  f * f * f * (f * (f * 6.0 - 15.0) + 10.0);\n\treturn mix(mix(p00, p10, t.x), mix(p01, p11, t.x), t.y);\n}\n\nfloat old_fbm_2d_value(vec2 coord, vec2 size, int folds, int octaves, float persistence, float offset, float seed) {\n\tfloat normalize_factor = 0.0;\n\tfloat value = 0.0;\n\tfloat scale = 1.0;\n\tfor (int i = 0; i < octaves; i++) {\n\t\tfloat noise = old_value_noise_2d(coord*size, size, offset, seed+float(i));\n\t\tfor (int f = 0; f < folds; ++f) {\n\t\t\tnoise = abs(2.0*noise-1.0);\n\t\t}\n\t\tvalue += noise * scale;\n\t\tnormalize_factor += scale;\n\t\tsize *= 2.0;\n\t\tscale *= persistence;\n\t}\n\treturn value / normalize_factor;\n}\n\nfloat old_perlin_noise_2d(vec2 coord, vec2 size, float offset, float seed) {\n\tvec2 o = floor(coord)+rand2(vec2(seed, 1.0-seed))+size;\n\tvec2 f = fract(coord);\n\tfloat a00 = rand(mod(o, size)) * 6.28318530718 + offset * 6.28318530718;\n\tfloat a01 = rand(mod(o + vec2(0.0, 1.0), size)) * 6.28318530718 + offset * 6.28318530718;\n\tfloat a10 = rand(mod(o + vec2(1.0, 0.0), size)) * 6.28318530718 + offset * 6.28318530718;\n\tfloat a11 = rand(mod(o + vec2(1.0, 1.0), size)) * 6.28318530718 + offset * 6.28318530718;\n\tvec2 v00 = vec2(cos(a00), sin(a00));\n\tvec2 v01 = vec2(cos(a01), sin(a01));\n\tvec2 v10 = vec2(cos(a10), sin(a10));\n\tvec2 v11 = vec2(cos(a11), sin(a11));\n\tfloat p00 = dot(v00, f);\n\tfloat p01 = dot(v01, f - vec2(0.0, 1.0));\n\tfloat p10 = dot(v10, f - vec2(1.0, 0.0));\n\tfloat p11 = dot(v11, f - vec2(1.0, 1.0));\n\tvec2 t =  f * f * f * (f * (f * 6.0 - 15.0) + 10.0);\n\treturn 0.5 + mix(mix(p00, p10, t.x), mix(p01, p11, t.x), t.y);\n}\n\nfloat old_fbm_2d_perlin(vec2 coord, vec2 size, int folds, int octaves, float persistence, float offset, float seed) {\n\tfloat normalize_factor = 0.0;\n\tfloat value = 0.0;\n\tfloat scale = 1.0;\n\tfor (int i = 0; i < octaves; i++) {\n\t\tfloat noise = old_perlin_noise_2d(coord*size, size, offset, seed+float(i));\n\t\tfor (int f = 0; f < folds; ++f) {\n\t\t\tnoise = abs(2.0*noise-1.0);\n\t\t}\n\t\tvalue += noise * scale;\n\t\tnormalize_factor += scale;\n\t\tsize *= 2.0;\n\t\tscale *= persistence;\n\t}\n\treturn value / normalize_factor;\n}\n\nfloat old_perlinabs_noise_2d(vec2 coord, vec2 size, float offset, float seed) {\n\treturn abs(2.0*old_perlin_noise_2d(coord, size, offset, seed)-1.0);\n}\n\nfloat old_fbm_2d_perlinabs(vec2 coord, vec2 size, int folds, int octaves, float persistence, float offset, float seed) {\n\tfloat normalize_factor = 0.0;\n\tfloat value = 0.0;\n\tfloat scale = 1.0;\n\tfor (int i = 0; i < octaves; i++) {\n\t\tfloat noise = old_perlinabs_noise_2d(coord*size, size, offset, seed+float(i));\n\t\tfor (int f = 0; f < folds; ++f) {\n\t\t\tnoise = abs(2.0*noise-1.0);\n\t\t}\n\t\tvalue += noise * scale;\n\t\tnormalize_factor += scale;\n\t\tsize *= 2.0;\n\t\tscale *= persistence;\n\t}\n\treturn value / normalize_factor;\n}\n\nfloat old_fbm_2d_mod289(float x) {\n\treturn x - floor(x * (1.0 / 289.0)) * 289.0;\n}\n\nfloat old_fbm_2d_permute(float x) {\n\treturn old_fbm_2d_mod289(((x * 34.0) + 1.0) * x);\n}\n\nvec2 old_fbm_2d_rgrad2(vec2 p, float rot, float seed) {\n\tfloat u = old_fbm_2d_permute(old_fbm_2d_permute(p.x) + p.y) * 0.0243902439 + rot; // Rotate by shift\n\tu = fract(u+seed) * 6.28318530718; // 2*pi\n\treturn vec2(cos(u), sin(u));\n}\n\nfloat old_simplex_noise_2d(vec2 coord, vec2 size, float offset, float seed) {\n\tcoord *= 2.0; // needed for it to tile\n\tcoord += rand2(vec2(seed, 1.0-seed)) + size;\n\tsize *= 2.0; // needed for it to tile\n\tcoord.y += 0.001;\n\tvec2 uv = vec2(coord.x + coord.y*0.5, coord.y);\n\tvec2 i0 = floor(uv);\n\tvec2 f0 = fract(uv);\n\tvec2 i1 = (f0.x > f0.y) ? vec2(1.0, 0.0) : vec2(0.0, 1.0);\n\tvec2 p0 = vec2(i0.x - i0.y * 0.5, i0.y);\n\tvec2 p1 = vec2(p0.x + i1.x - i1.y * 0.5, p0.y + i1.y);\n\tvec2 p2 = vec2(p0.x + 0.5, p0.y + 1.0);\n\ti1 = i0 + i1;\n\tvec2 i2 = i0 + vec2(1.0, 1.0);\n\tvec2 d0 = coord - p0;\n\tvec2 d1 = coord - p1;\n\tvec2 d2 = coord - p2;\n\tvec3 xw = mod(vec3(p0.x, p1.x, p2.x), size.x);\n\tvec3 yw = mod(vec3(p0.y, p1.y, p2.y), size.y);\n\tvec3 iuw = xw + 0.5 * yw;\n\tvec3 ivw = yw;\n\tvec2 g0 = old_fbm_2d_rgrad2(vec2(iuw.x, ivw.x), offset, seed);\n\tvec2 g1 = old_fbm_2d_rgrad2(vec2(iuw.y, ivw.y), offset, seed);\n\tvec2 g2 = old_fbm_2d_rgrad2(vec2(iuw.z, ivw.z), offset, seed);\n\tvec3 w = vec3(dot(g0, d0), dot(g1, d1), dot(g2, d2));\n\tvec3 t = 0.8 - vec3(dot(d0, d0), dot(d1, d1), dot(d2, d2));\n\tt = max(t, vec3(0.0));\n\tvec3 t2 = t * t;\n\tvec3 t4 = t2 * t2;\n\tfloat n = dot(t4, w);\n\treturn 0.5 + 5.5 * n;\n}\n\nfloat old_fbm_2d_simplex(vec2 coord, vec2 size, int folds, int octaves, float persistence, float offset, float seed) {\n\tfloat normalize_factor = 0.0;\n\tfloat value = 0.0;\n\tfloat scale = 1.0;\n\tfor (int i = 0; i < octaves; i++) {\n\t\tfloat noise = old_simplex_noise_2d(coord*size, size, offset, seed+float(i));\n\t\tfor (int f = 0; f < folds; ++f) {\n\t\t\tnoise = abs(2.0*noise-1.0);\n\t\t}\n\t\tvalue += noise * scale;\n\t\tnormalize_factor += scale;\n\t\tsize *= 2.0;\n\t\tscale *= persistence;\n\t}\n\treturn value / normalize_factor;\n}\n\nfloat old_cellular_noise_2d(vec2 coord, vec2 size, float offset, float seed) {\n\tvec2 o = floor(coord)+rand2(vec2(seed, 1.0-seed))+size;\n\tvec2 f = fract(coord);\n\tfloat min_dist = 2.0;\n\tfor(float x = -1.0; x <= 1.0; x++) {\n\t\tfor(float y = -1.0; y <= 1.0; y++) {\n\t\t\tvec2 neighbor = vec2(float(x),float(y));\n\t\t\tvec2 node = rand2(mod(o + vec2(x, y), size)) + vec2(x, y);\n\t\t\tnode =  0.5 + 0.25 * sin(offset * 6.28318530718 + 6.28318530718 * node);\n\t\t\tvec2 diff = neighbor + node - f;\n\t\t\tfloat dist = length(diff);\n\t\t\tmin_dist = min(min_dist, dist);\n\t\t}\n\t}\n\treturn min_dist;\n}\n\nfloat old_fbm_2d_cellular(vec2 coord, vec2 size, int folds, int octaves, float persistence, float offset, float seed) {\n\tfloat normalize_factor = 0.0;\n\tfloat value = 0.0;\n\tfloat scale = 1.0;\n\tfor (int i = 0; i < octaves; i++) {\n\t\tfloat noise = old_cellular_noise_2d(coord*size, size, offset, seed+float(i));\n\t\tfor (int f = 0; f < folds; ++f) {\n\t\t\tnoise = abs(2.0*noise-1.0);\n\t\t}\n\t\tvalue += noise * scale;\n\t\tnormalize_factor += scale;\n\t\tsize *= 2.0;\n\t\tscale *= persistence;\n\t}\n\treturn value / normalize_factor;\n}\n\nfloat old_cellular2_noise_2d(vec2 coord, vec2 size, float offset, float seed) {\n\tvec2 o = floor(coord)+rand2(vec2(seed, 1.0-seed))+size;\n\tvec2 f = fract(coord);\n\tfloat min_dist1 = 2.0;\n\tfloat min_dist2 = 2.0;\n\tfor(float x = -1.0; x <= 1.0; x++) {\n\t\tfor(float y = -1.0; y <= 1.0; y++) {\n\t\t\tvec2 neighbor = vec2(float(x),float(y));\n\t\t\tvec2 node = rand2(mod(o + vec2(x, y), size)) + vec2(x, y);\n\t\t\tnode = 0.5 + 0.25 * sin(offset * 6.28318530718 + 6.28318530718*node);\n\t\t\tvec2 diff = neighbor + node - f;\n\t\t\tfloat dist = length(diff);\n\t\t\tif (min_dist1 > dist) {\n\t\t\t\tmin_dist2 = min_dist1;\n\t\t\t\tmin_dist1 = dist;\n\t\t\t} else if (min_dist2 > dist) {\n\t\t\t\tmin_dist2 = dist;\n\t\t\t}\n\t\t}\n\t}\n\treturn min_dist2-min_dist1;\n}\n\nfloat old_fbm_2d_cellular2(vec2 coord, vec2 size, int folds, int octaves, float persistence, float offset, float seed) {\n\tfloat normalize_factor = 0.0;\n\tfloat value = 0.0;\n\tfloat scale = 1.0;\n\tfor (int i = 0; i < octaves; i++) {\n\t\tfloat noise = old_cellular2_noise_2d(coord*size, size, offset, seed+float(i));\n\t\tfor (int f = 0; f < folds; ++f) {\n\t\t\tnoise = abs(2.0*noise-1.0);\n\t\t}\n\t\tvalue += noise * scale;\n\t\tnormalize_factor += scale;\n\t\tsize *= 2.0;\n\t\tscale *= persistence;\n\t}\n\treturn value / normalize_factor;\n}\n\nfloat old_cellular3_noise_2d(vec2 coord, vec2 size, float offset, float seed) {\n\tvec2 o = floor(coord)+rand2(vec2(seed, 1.0-seed))+size;\n\tvec2 f = fract(coord);\n\tfloat min_dist = 2.0;\n\tfor(float x = -1.0; x <= 1.0; x++) {\n\t\tfor(float y = -1.0; y <= 1.0; y++) {\n\t\t\tvec2 neighbor = vec2(float(x),float(y));\n\t\t\tvec2 node = rand2(mod(o + vec2(x, y), size)) + vec2(x, y);\n\t\t\tnode = 0.5 + 0.25 * sin(offset * 6.28318530718 + 6.28318530718*node);\n\t\t\tvec2 diff = neighbor + node - f;\n\t\t\tfloat dist = abs((diff).x) + abs((diff).y);\n\t\t\tmin_dist = min(min_dist, dist);\n\t\t}\n\t}\n\treturn min_dist;\n}\n\nfloat old_fbm_2d_cellular3(vec2 coord, vec2 size, int folds, int octaves, float persistence, float offset, float seed) {\n\tfloat normalize_factor = 0.0;\n\tfloat value = 0.0;\n\tfloat scale = 1.0;\n\tfor (int i = 0; i < octaves; i++) {\n\t\tfloat noise = old_cellular3_noise_2d(coord*size, size, offset, seed+float(i));\n\t\tfor (int f = 0; f < folds; ++f) {\n\t\t\tnoise = abs(2.0*noise-1.0);\n\t\t}\n\t\tvalue += noise * scale;\n\t\tnormalize_factor += scale;\n\t\tsize *= 2.0;\n\t\tscale *= persistence;\n\t}\n\treturn value / normalize_factor;\n}\n\nfloat old_cellular4_noise_2d(vec2 coord, vec2 size, float offset, float seed) {\n\tvec2 o = floor(coord)+rand2(vec2(seed, 1.0-seed))+size;\n\tvec2 f = fract(coord);\n\tfloat min_dist1 = 2.0;\n\tfloat min_dist2 = 2.0;\n\tfor(float x = -1.0; x <= 1.0; x++) {\n\t\tfor(float y = -1.0; y <= 1.0; y++) {\n\t\t\tvec2 neighbor = vec2(float(x),float(y));\n\t\t\tvec2 node = rand2(mod(o + vec2(x, y), size)) + vec2(x, y);\n\t\t\tnode = 0.5 + 0.25 * sin(offset * 6.28318530718 + 6.28318530718*node);\n\t\t\tvec2 diff = neighbor + node - f;\n\t\t\tfloat dist = abs((diff).x) + abs((diff).y);\n\t\t\tif (min_dist1 > dist) {\n\t\t\t\tmin_dist2 = min_dist1;\n\t\t\t\tmin_dist1 = dist;\n\t\t\t} else if (min_dist2 > dist) {\n\t\t\t\tmin_dist2 = dist;\n\t\t\t}\n\t\t}\n\t}\n\treturn min_dist2-min_dist1;\n}\n\nfloat old_fbm_2d_cellular4(vec2 coord, vec2 size, int folds, int octaves, float persistence, float offset, float seed) {\n\tfloat normalize_factor = 0.0;\n\tfloat value = 0.0;\n\tfloat scale = 1.0;\n\tfor (int i = 0; i < octaves; i++) {\n\t\tfloat noise = old_cellular4_noise_2d(coord*size, size, offset, seed+float(i));\n\t\tfor (int f = 0; f < folds; ++f) {\n\t\t\tnoise = abs(2.0*noise-1.0);\n\t\t}\n\t\tvalue += noise * scale;\n\t\tnormalize_factor += scale;\n\t\tsize *= 2.0;\n\t\tscale *= persistence;\n\t}\n\treturn value / normalize_factor;\n}\n\nfloat old_cellular5_noise_2d(vec2 coord, vec2 size, float offset, float seed) {\n\tvec2 o = floor(coord)+rand2(vec2(seed, 1.0-seed))+size;\n\tvec2 f = fract(coord);\n\tfloat min_dist = 2.0;\n\tfor(float x = -1.0; x <= 1.0; x++) {\n\t\tfor(float y = -1.0; y <= 1.0; y++) {\n\t\t\tvec2 neighbor = vec2(float(x),float(y));\n\t\t\tvec2 node = rand2(mod(o + vec2(x, y), size)) + vec2(x, y);\n\t\t\tnode = 0.5 + 0.5 * sin(offset * 6.28318530718 + 6.28318530718*node);\n\t\t\tvec2 diff = neighbor + node - f;\n\t\t\tfloat dist = max(abs((diff).x), abs((diff).y));\n\t\t\tmin_dist = min(min_dist, dist);\n\t\t}\n\t}\n\treturn min_dist;\n}\n\nfloat old_fbm_2d_cellular5(vec2 coord, vec2 size, int folds, int octaves, float persistence, float offset, float seed) {\n\tfloat normalize_factor = 0.0;\n\tfloat value = 0.0;\n\tfloat scale = 1.0;\n\tfor (int i = 0; i < octaves; i++) {\n\t\tfloat noise = old_cellular5_noise_2d(coord*size, size, offset, seed+float(i));\n\t\tfor (int f = 0; f < folds; ++f) {\n\t\t\tnoise = abs(2.0*noise-1.0);\n\t\t}\n\t\tvalue += noise * scale;\n\t\tnormalize_factor += scale;\n\t\tsize *= 2.0;\n\t\tscale *= persistence;\n\t}\n\treturn value / normalize_factor;\n}\n\nfloat old_cellular6_noise_2d(vec2 coord, vec2 size, float offset, float seed) {\n\tvec2 o = floor(coord)+rand2(vec2(seed, 1.0-seed))+size;\n\tvec2 f = fract(coord);\n\tfloat min_dist1 = 2.0;\n\tfloat min_dist2 = 2.0;\n\tfor(float x = -1.0; x <= 1.0; x++) {\n\t\tfor(float y = -1.0; y <= 1.0; y++) {\n\t\t\tvec2 neighbor = vec2(float(x),float(y));\n\t\t\tvec2 node = rand2(mod(o + vec2(x, y), size)) + vec2(x, y);\n\t\t\tnode = 0.5 + 0.25 * sin(offset * 6.28318530718 + 6.28318530718*node);\n\t\t\tvec2 diff = neighbor + node - f;\n\t\t\tfloat dist = max(abs((diff).x), abs((diff).y));\n\t\t\tif (min_dist1 > dist) {\n\t\t\t\tmin_dist2 = min_dist1;\n\t\t\t\tmin_dist1 = dist;\n\t\t\t} else if (min_dist2 > dist) {\n\t\t\t\tmin_dist2 = dist;\n\t\t\t}\n\t\t}\n\t}\n\treturn min_dist2-min_dist1;\n}\n\nfloat old_fbm_2d_cellular6(vec2 coord, vec2 size, int folds, int octaves, float persistence, float offset, float seed) {\n\tfloat normalize_factor = 0.0;\n\tfloat value = 0.0;\n\tfloat scale = 1.0;\n\tfor (int i = 0; i < octaves; i++) {\n\t\tfloat noise = old_cellular6_noise_2d(coord*size, size, offset, seed+float(i));\n\t\tfor (int f = 0; f < folds; ++f) {\n\t\t\tnoise = abs(2.0*noise-1.0);\n\t\t}\n\t\tvalue += noise * scale;\n\t\tnormalize_factor += scale;\n\t\tsize *= 2.0;\n\t\tscale *= persistence;\n\t}\n\treturn value / normalize_factor;\n}\n\n// MIT License Inigo Quilez - https://www.shadertoy.com/view/Xd23Dh\nfloat old_voronoise_noise_2d( vec2 coord, vec2 size, float offset, float seed) {\n\tvec2 i = floor(coord) + rand2(vec2(seed, 1.0-seed)) + size;\n\tvec2 f = fract(coord);\n\t\n\tvec2 a = vec2(0.0);\n\t\n\tfor( int y=-2; y<=2; y++ ) {\n\t\tfor( int x=-2; x<=2; x++ ) {\n\t\t\tvec2  g = vec2( float(x), float(y) );\n\t\t\tvec3  o = rand3( mod(i + g, size) + vec2(seed) );\n\t\t\to.xy += 0.25 * sin(offset * 6.28318530718 + 6.28318530718*o.xy);\n\t\t\tvec2  d = g - f + o.xy;\n\t\t\tfloat w = pow( 1.0-smoothstep(0.0, 1.414, length(d)), 1.0 );\n\t\t\ta += vec2(o.z*w,w);\n\t\t}\n\t}\n\t\n\treturn a.x/a.y;\n}\n\nfloat old_fbm_2d_voronoise(vec2 coord, vec2 size, int folds, int octaves, float persistence, float offset, float seed) {\n\tfloat normalize_factor = 0.0;\n\tfloat value = 0.0;\n\tfloat scale = 1.0;\n\tfor (int i = 0; i < octaves; i++) {\n\t\tfloat noise = old_voronoise_noise_2d(coord*size, size, offset, seed+float(i));\n\t\tfor (int f = 0; f < folds; ++f) {\n\t\t\tnoise = abs(2.0*noise-1.0);\n\t\t}\n\t\tvalue += noise * scale;\n\t\tnormalize_factor += scale;\n\t\tsize *= 2.0;\n\t\tscale *= persistence;\n\t}\n\treturn value / normalize_factor;\n}\n\n\nvec3 blend_normal(vec2 uv, vec3 c1, vec3 c2, float opacity) {\n\treturn opacity*c1 + (1.0-opacity)*c2;\n}\n\nvec3 blend_dissolve(vec2 uv, vec3 c1, vec3 c2, float opacity) {\n\tif (rand(uv) < opacity) {\n\t\treturn c1;\n\t} else {\n\t\treturn c2;\n\t}\n}\n\nvec3 blend_multiply(vec2 uv, vec3 c1, vec3 c2, float opacity) {\n\treturn opacity*c1*c2 + (1.0-opacity)*c2;\n}\n\nvec3 blend_screen(vec2 uv, vec3 c1, vec3 c2, float opacity) {\n\treturn opacity*(1.0-(1.0-c1)*(1.0-c2)) + (1.0-opacity)*c2;\n}\n\nfloat blend_overlay_f(float c1, float c2) {\n\treturn (c1 < 0.5) ? (2.0*c1*c2) : (1.0-2.0*(1.0-c1)*(1.0-c2));\n}\n\nvec3 blend_overlay(vec2 uv, vec3 c1, vec3 c2, float opacity) {\n\treturn opacity*vec3(blend_overlay_f(c1.x, c2.x), blend_overlay_f(c1.y, c2.y), blend_overlay_f(c1.z, c2.z)) + (1.0-opacity)*c2;\n}\n\nvec3 blend_hard_light(vec2 uv, vec3 c1, vec3 c2, float opacity) {\n\treturn opacity*0.5*(c1*c2+blend_overlay(uv, c1, c2, 1.0)) + (1.0-opacity)*c2;\n}\n\nfloat blend_soft_light_f(float c1, float c2) {\n\treturn (c2 < 0.5) ? (2.0*c1*c2+c1*c1*(1.0-2.0*c2)) : 2.0*c1*(1.0-c2)+sqrt(c1)*(2.0*c2-1.0);\n}\n\nvec3 blend_soft_light(vec2 uv, vec3 c1, vec3 c2, float opacity) {\n\treturn opacity*vec3(blend_soft_light_f(c1.x, c2.x), blend_soft_light_f(c1.y, c2.y), blend_soft_light_f(c1.z, c2.z)) + (1.0-opacity)*c2;\n}\n\nfloat blend_burn_f(float c1, float c2) {\n\treturn (c1==0.0)?c1:max((1.0-((1.0-c2)/c1)),0.0);\n}\n\nvec3 blend_burn(vec2 uv, vec3 c1, vec3 c2, float opacity) {\n\treturn opacity*vec3(blend_burn_f(c1.x, c2.x), blend_burn_f(c1.y, c2.y), blend_burn_f(c1.z, c2.z)) + (1.0-opacity)*c2;\n}\n\nfloat blend_dodge_f(float c1, float c2) {\n\treturn (c1==1.0)?c1:min(c2/(1.0-c1),1.0);\n}\n\nvec3 blend_dodge(vec2 uv, vec3 c1, vec3 c2, float opacity) {\n\treturn opacity*vec3(blend_dodge_f(c1.x, c2.x), blend_dodge_f(c1.y, c2.y), blend_dodge_f(c1.z, c2.z)) + (1.0-opacity)*c2;\n}\n\nvec3 blend_lighten(vec2 uv, vec3 c1, vec3 c2, float opacity) {\n\treturn opacity*max(c1, c2) + (1.0-opacity)*c2;\n}\n\nvec3 blend_darken(vec2 uv, vec3 c1, vec3 c2, float opacity) {\n\treturn opacity*min(c1, c2) + (1.0-opacity)*c2;\n}\n\nvec3 blend_difference(vec2 uv, vec3 c1, vec3 c2, float opacity) {\n\treturn opacity*clamp(c2-c1, vec3(0.0), vec3(1.0)) + (1.0-opacity)*c2;\n}\n\nvec3 blend_additive(vec2 uv, vec3 c1, vec3 c2, float oppacity) {\n\treturn c2 + c1 * oppacity;\n}\n\nvec3 blend_addsub(vec2 uv, vec3 c1, vec3 c2, float oppacity) {\n\treturn c2 + (c1 - .5) * 2.0 * oppacity;\n}\n\nvec3 rgb_to_hsv(vec3 c) {\n\tvec4 K = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0);\n\tvec4 p = c.g < c.b ? vec4(c.bg, K.wz) : vec4(c.gb, K.xy);\n\tvec4 q = c.r < p.x ? vec4(p.xyw, c.r) : vec4(c.r, p.yzx);\n\n\tfloat d = q.x - min(q.w, q.y);\n\tfloat e = 1.0e-10;\n\treturn vec3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x);\n}\n\nvec3 hsv_to_rgb(vec3 c) {\n\tvec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);\n\tvec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www);\n\treturn c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y);\n}\n\n\nfloat blend_linear_light_f(float c1, float c2) {\n\treturn (c1 + 2.0 * c2) - 1.0;\n}\n\nvec3 blend_linear_light(vec2 uv, vec3 c1, vec3 c2, float opacity) {\nreturn opacity*vec3(blend_linear_light_f(c1.x, c2.x), blend_linear_light_f(c1.y, c2.y), blend_linear_light_f(c1.z, c2.z)) + (1.0-opacity)*c2;\n}\n\nfloat blend_vivid_light_f(float c1, float c2) {\n\treturn (c1 < 0.5) ? 1.0 - (1.0 - c2) / (2.0 * c1) : c2 / (2.0 * (1.0 - c1));\n}\n\nvec3 blend_vivid_light(vec2 uv, vec3 c1, vec3 c2, float opacity) {\n\treturn opacity*vec3(blend_vivid_light_f(c1.x, c2.x), blend_vivid_light_f(c1.y, c2.y), blend_vivid_light_f(c1.z, c2.z)) + (1.0-opacity)*c2;\n}\n\nfloat blend_pin_light_f( float c1, float c2) {\n\treturn (2.0 * c1 - 1.0 > c2) ? 2.0 * c1 - 1.0 : ((c1 < 0.5 * c2) ? 2.0 * c1 : c2);\n}\n\nvec3 blend_pin_light(vec2 uv, vec3 c1, vec3 c2, float opacity) {\n\treturn opacity*vec3(blend_pin_light_f(c1.x, c2.x), blend_pin_light_f(c1.y, c2.y), blend_pin_light_f(c1.z, c2.z)) + (1.0-opacity)*c2;\n}\n\nfloat blend_hard_mix_f(float c1, float c2) {\n\treturn floor(c1 + c2);\n}\n\nvec3 blend_hard_mix(vec2 uv, vec3 c1, vec3 c2, float opacity) {\n\t\treturn opacity*vec3(blend_hard_mix_f(c1.x, c2.x), blend_hard_mix_f(c1.y, c2.y), blend_hard_mix_f(c1.z, c2.z)) + (1.0-opacity)*c2;\n}\n\nfloat blend_exclusion_f(float c1, float c2) {\n\treturn c1 + c2 - 2.0 * c1 * c2;\n}\n\nvec3 blend_exclusion(vec2 uv, vec3 c1, vec3 c2, float opacity) {\n\treturn opacity*vec3(blend_exclusion_f(c1.x, c2.x), blend_exclusion_f(c1.y, c2.y), blend_exclusion_f(c1.z, c2.z)) + (1.0-opacity)*c2;\n}\n\nvec3 blend_hue(vec2 uv, vec3 c1, vec3 c2, float opacity) {\n\tvec3 outcol = c2;\n\n\tvec3 hsv, hsv2, tmp;\n\thsv2 = rgb_to_hsv(c1);\n\n\tif (hsv2.y != 0.0) {\n\t\thsv = rgb_to_hsv(outcol);\n\t\thsv.x = hsv2.x;\n\t\ttmp = hsv_to_rgb(hsv);\n\t\toutcol = mix(outcol, tmp, opacity);\n\t}\n\treturn outcol;\n}\n\nvec3 blend_saturation(vec2 uv, vec3 c1, vec3 c2, float opacity) {\n\tfloat facm = 1.0 - opacity;\n\n\tvec3 outcol = c2;\n\tvec3 hsv, hsv2;\n\n\thsv = rgb_to_hsv(outcol);\n\n\tif (hsv.y != 0.0) {\n\t\thsv2 = rgb_to_hsv(c1);\n\n\t\thsv.y = facm * hsv.y + opacity * hsv2.y;\n\t\toutcol = hsv_to_rgb(hsv);\n\t}\n\treturn outcol;\n}\n\nvec3 blend_color(vec2 uv, vec3 c1, vec3 c2, float opacity) {\n\tfloat facm = 1.0 - opacity;\n\n\tvec3 outcol = c2;\n\n\tvec3 hsv, hsv2, tmp;\n\thsv2 = rgb_to_hsv(c1);\n\n\tif (hsv2.y != 0.0) {\n\t\thsv = rgb_to_hsv(outcol);\n\t\thsv.x = hsv2.x;\n\t\thsv.y = hsv2.y;\n\t\ttmp = hsv_to_rgb(hsv);\n\n\t\toutcol = mix(outcol, tmp, opacity);\n\t}\n\treturn outcol;\n}\n\nvec3 blend_value(vec2 uv, vec3 c1, vec3 c2, float opacity) {\n\tfloat facm = 1.0 - opacity;\n\n\tvec3 hsv, hsv2;\n\thsv = rgb_to_hsv(c2);\n\thsv2 = rgb_to_hsv(c1);\n\n\thsv.z = facm * hsv.z + opacity * hsv2.z;\n\treturn hsv_to_rgb(hsv);\n}\n\nfloat pingpong(float a, float b)\n{\n  return (b != 0.0) ? abs(fract((a - b) / (b * 2.0)) * b * 2.0 - b) : 0.0;\n}\n\nvec2 o21_slope(vec2 uv, float epsilon) {\n\treturn vec2(0.0-0.0, 0.0-0.0);\n}\n\nvec4 o26_gradient_gradient_fct(float x) {\n  if (x < 0.000000000) {\n    return vec4(0.000000000, 0.000000000, 0.000000000, 1.000000000);\n  } else if (x < 0.302719325) {\n    return mix(vec4(0.000000000, 0.000000000, 0.000000000, 1.000000000), vec4(0.613281250, 0.613281250, 0.613281250, 1.000000000), (x - 0.000000000) / (0.302719325 - 0.000000000));\n  } else if (x < 1.000000000) {\n    return mix(vec4(0.613281250, 0.613281250, 0.613281250, 1.000000000), vec4(1.000000000, 1.000000000, 1.000000000, 1.000000000), (x - 0.302719325) / (1.000000000 - 0.302719325));\n  }\n  return vec4(1.000000000, 1.000000000, 1.000000000, 1.000000000);\n}\n\n\nvec4 o28_gradient_gradient_fct(float x) {\n  if (x < 0.000000000) {\n    return vec4(0.309326172, 0.222656250, 0.500000000, 1.000000000);\n  } else if (x < 0.826773866) {\n    return mix(vec4(0.309326172, 0.222656250, 0.500000000, 1.000000000), vec4(0.409725666, 0.319152832, 0.492187500, 1.000000000), (x - 0.000000000) / (0.826773866 - 0.000000000));\n  }\n  return vec4(0.409725666, 0.319152832, 0.492187500, 1.000000000);\n}\n\n\nvec2 transform2_clamp(vec2 uv) {\n\treturn clamp(uv, vec2(0.0), vec2(1.0));\n}\n\nvec2 transform2(vec2 uv, vec2 translate, float rotate, vec2 scale) {\n \tvec2 rv;\n\tuv -= translate;\n\tuv -= vec2(0.5);\n\trv.x = cos(rotate)*uv.x + sin(rotate)*uv.y;\n\trv.y = -sin(rotate)*uv.x + cos(rotate)*uv.y;\n\trv /= scale;\n\trv += vec2(0.5);\n\treturn rv;\t\n}\n\nvec2 o31_slope(vec2 uv, float epsilon) {\n\treturn vec2(0.0-0.0, 0.0-0.0);\n}\n\nvec4 o33_gradient_gradient_fct(float x) {\n  if (x < 0.130474854) {\n    return vec4(0.000000000, 0.000000000, 0.000000000, 1.000000000);\n  } else if (x < 1.000000000) {\n    return mix(vec4(0.000000000, 0.000000000, 0.000000000, 1.000000000), vec4(1.000000000, 1.000000000, 1.000000000, 1.000000000), (x - 0.130474854) / (1.000000000 - 0.130474854));\n  }\n  return vec4(1.000000000, 1.000000000, 1.000000000, 1.000000000);\n}\n\n\nfloat shape_circle(vec2 uv, float sides, float size, float edge) {\n\tuv = 2.0*uv-1.0;\n\tedge = max(edge, 1.0e-8);\n\tfloat distance = length(uv);\n\treturn clamp((1.0-distance/size)/edge, 0.0, 1.0);\n}\n\nfloat shape_polygon(vec2 uv, float sides, float size, float edge) {\n\tuv = 2.0*uv-1.0;\n\tedge = max(edge, 1.0e-8);\n\tfloat angle = atan(uv.x, uv.y)+3.14159265359;\n\tfloat slice = 6.28318530718/sides;\n\treturn clamp((1.0-(cos(floor(0.5+angle/slice)*slice-angle)*length(uv))/size)/edge, 0.0, 1.0);\n}\n\nfloat shape_star(vec2 uv, float sides, float size, float edge) {\n\tuv = 2.0*uv-1.0;\n\tedge = max(edge, 1.0e-8);\n\tfloat angle = atan(uv.x, uv.y);\n\tfloat slice = 6.28318530718/sides;\n\treturn clamp((1.0-(cos(floor(angle*sides/6.28318530718-0.5+2.0*step(fract(angle*sides/6.28318530718), 0.5))*slice-angle)*length(uv))/size)/edge, 0.0, 1.0);\n}\n\nfloat shape_curved_star(vec2 uv, float sides, float size, float edge) {\n\tuv = 2.0*uv-1.0;\n\tedge = max(edge, 1.0e-8);\n\tfloat angle = 2.0*(atan(uv.x, uv.y)+3.14159265359);\n\tfloat slice = 6.28318530718/sides;\n\treturn clamp((1.0-cos(floor(0.5+0.5*angle/slice)*2.0*slice-angle)*length(uv)/size)/edge, 0.0, 1.0);\n}\n\nfloat shape_rays(vec2 uv, float sides, float size, float edge) {\n\tuv = 2.0*uv-1.0;\n\tedge = 0.5*max(edge, 1.0e-8)*size;\n\tfloat slice = 6.28318530718/sides;\n\tfloat angle = mod(atan(uv.x, uv.y)+3.14159265359, slice)/slice;\n\treturn clamp(min((size-angle)/edge, angle/edge), 0.0, 1.0);\n}\n\n\n\nvec4 tiler_o36(vec2 uv, vec2 tile, int overlap, inout vec3 instance_uv, vec2 _seed) {\n\tfloat c = 0.0;\n\tvec3 rc = vec3(0.0);\n\tvec3 rc1;\n\tfor (int dx = -overlap; dx <= overlap; ++dx) {\n\t\tfor (int dy = -overlap; dy <= overlap; ++dy) {\n\t\t\tvec2 pos = uv*tile+vec2(float(dx), float(dy)); pos = fract((floor(mod(pos, tile))+vec2(0.5))/tile)-vec2(0.5);\n\t\t\tvec2 seed = rand2(pos+_seed);\n\t\t\trc1 = rand3(seed);\n\t\t\tvec2 tile_index = floor(uv * tile) + vec2(float(dx), float(dy));\n\t\t\tpos += vec2((0.000000/tile.x)*mod(mod(tile_index.y, tile.y), 2.0), 0.0)+1.000000*seed/tile;\n\t\t\tfloat mask = 1.0;\n\t\t\tif (mask > 0.01) {\n\t\t\t\tvec2 pv = fract(uv - pos)-vec2(0.5);\n\t\t\t\tseed = rand2(seed);\n\t\t\t\tfloat angle = (seed.x * 2.0 - 1.0) * 118.100000 * 0.01745329251;\n\t\t\t\tfloat ca = cos(angle);\n\t\t\t\tfloat sa = sin(angle);\n\t\t\t\tpv = vec2(ca*pv.x+sa*pv.y, -sa*pv.x+ca*pv.y);\n\t\t\t\tpv *= (seed.y-0.5)*2.0*0.510000+1.0;\n\t\t\t\tpv /= vec2(0.390000, 0.390000);\n\t\t\t\tpv += vec2(0.5);\n\t\t\t\tseed = rand2(seed);\n\t\t\t\tvec2 clamped_pv = clamp(pv, vec2(0.0), vec2(1.0));\n\t\t\t\tif (pv.x != clamped_pv.x || pv.y != clamped_pv.y) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tvec2 full_uv = pv;\n\t\t\t\tpv = get_from_tileset( 1.0, seed.x, pv);\n\t\t\t\tfloat c1 = 0.0*mask*(1.0-1.000000*seed.x);\n\t\t\t\tc = max(c, c1);\n\t\t\t\trc = mix(rc, rc1, step(c, c1));\n\t\t\t\tinstance_uv = mix(instance_uv, vec3(full_uv, seed.x), step(c, c1));\n\t\t\t}\n\t\t}\n\t}\n\treturn vec4(rc, c);\n}\n\nvec2 o40_slope(vec2 uv, float epsilon) {\n\treturn vec2(0.0-0.0, 0.0-0.0);\n}\n\nvec4 tiler_o42(vec2 uv, vec2 tile, int overlap, inout vec3 instance_uv, vec2 _seed) {\n\tfloat c = 0.0;\n\tvec3 rc = vec3(0.0);\n\tvec3 rc1;\n\tfor (int dx = -overlap; dx <= overlap; ++dx) {\n\t\tfor (int dy = -overlap; dy <= overlap; ++dy) {\n\t\t\tvec2 pos = uv*tile+vec2(float(dx), float(dy)); pos = fract((floor(mod(pos, tile))+vec2(0.5))/tile)-vec2(0.5);\n\t\t\tvec2 seed = rand2(pos+_seed);\n\t\t\trc1 = rand3(seed);\n\t\t\tvec2 tile_index = floor(uv * tile) + vec2(float(dx), float(dy));\n\t\t\tpos += vec2((0.000000/tile.x)*mod(mod(tile_index.y, tile.y), 2.0), 0.0)+1.000000*seed/tile;\n\t\t\tfloat mask = 1.0;\n\t\t\tif (mask > 0.01) {\n\t\t\t\tvec2 pv = fract(uv - pos)-vec2(0.5);\n\t\t\t\tseed = rand2(seed);\n\t\t\t\tfloat angle = (seed.x * 2.0 - 1.0) * 45.000000 * 0.01745329251;\n\t\t\t\tfloat ca = cos(angle);\n\t\t\t\tfloat sa = sin(angle);\n\t\t\t\tpv = vec2(ca*pv.x+sa*pv.y, -sa*pv.x+ca*pv.y);\n\t\t\t\tpv *= (seed.y-0.5)*2.0*0.520000+1.0;\n\t\t\t\tpv /= vec2(0.007000, 0.006000);\n\t\t\t\tpv += vec2(0.5);\n\t\t\t\tseed = rand2(seed);\n\t\t\t\tvec2 clamped_pv = clamp(pv, vec2(0.0), vec2(1.0));\n\t\t\t\tif (pv.x != clamped_pv.x || pv.y != clamped_pv.y) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tvec2 full_uv = pv;\n\t\t\t\tpv = get_from_tileset( 1.0, seed.x, pv);\n\t\t\t\tfloat c1 = 0.0*mask*(1.0-1.000000*seed.x);\n\t\t\t\tc = max(c, c1);\n\t\t\t\trc = mix(rc, rc1, step(c, c1));\n\t\t\t\tinstance_uv = mix(instance_uv, vec3(full_uv, seed.x), step(c, c1));\n\t\t\t}\n\t\t}\n\t}\n\treturn vec4(rc, c);\n}\n\nvec4 tiler_o48(vec2 uv, vec2 tile, int overlap, inout vec3 instance_uv, vec2 _seed) {\n\tfloat c = 0.0;\n\tvec3 rc = vec3(0.0);\n\tvec3 rc1;\n\tfor (int dx = -overlap; dx <= overlap; ++dx) {\n\t\tfor (int dy = -overlap; dy <= overlap; ++dy) {\n\t\t\tvec2 pos = uv*tile+vec2(float(dx), float(dy)); pos = fract((floor(mod(pos, tile))+vec2(0.5))/tile)-vec2(0.5);\n\t\t\tvec2 seed = rand2(pos+_seed);\n\t\t\trc1 = rand3(seed);\n\t\t\tvec2 tile_index = floor(uv * tile) + vec2(float(dx), float(dy));\n\t\t\tpos += vec2((0.000000/tile.x)*mod(mod(tile_index.y, tile.y), 2.0), 0.0)+1.000000*seed/tile;\n\t\t\tfloat mask = 1.0;\n\t\t\tif (mask > 0.01) {\n\t\t\t\tvec2 pv = fract(uv - pos)-vec2(0.5);\n\t\t\t\tseed = rand2(seed);\n\t\t\t\tfloat angle = (seed.x * 2.0 - 1.0) * 179.100000 * 0.01745329251;\n\t\t\t\tfloat ca = cos(angle);\n\t\t\t\tfloat sa = sin(angle);\n\t\t\t\tpv = vec2(ca*pv.x+sa*pv.y, -sa*pv.x+ca*pv.y);\n\t\t\t\tpv *= (seed.y-0.5)*2.0*0.250000+1.0;\n\t\t\t\tpv /= vec2(0.060000, 0.060000);\n\t\t\t\tpv += vec2(0.5);\n\t\t\t\tseed = rand2(seed);\n\t\t\t\tvec2 clamped_pv = clamp(pv, vec2(0.0), vec2(1.0));\n\t\t\t\tif (pv.x != clamped_pv.x || pv.y != clamped_pv.y) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tvec2 full_uv = pv;\n\t\t\t\tpv = get_from_tileset( 1.0, seed.x, pv);\n\t\t\t\tfloat c1 = 0.0*mask*(1.0-0.000000*seed.x);\n\t\t\t\tc = max(c, c1);\n\t\t\t\trc = mix(rc, rc1, step(c, c1));\n\t\t\t\tinstance_uv = mix(instance_uv, vec3(full_uv, seed.x), step(c, c1));\n\t\t\t}\n\t\t}\n\t}\n\treturn vec4(rc, c);\n}\n\nvec4 o53_gradient_gradient_fct(float x) {\n  if (x < 0.477490569) {\n    return vec4(0.566558838, 0.646175146, 0.917968750, 1.000000000);\n  } else if (x < 0.890109964) {\n    return mix(vec4(0.566558838, 0.646175146, 0.917968750, 1.000000000), vec4(0.237335205, 0.328392029, 0.601562500, 1.000000000), (x - 0.477490569) / (0.890109964 - 0.477490569));\n  }\n  return vec4(0.237335205, 0.328392029, 0.601562500, 1.000000000);\n}\n\n\nvec3 o85_fct(vec2 uv) {\n\tvec2 e = vec2(1.0/2048.0, 0.0);\n\tvec3 rv = 5.0*vec3(0.0);\n\trv -= vec3(0.0);\n\trv -= vec3(0.0);\n\trv -= vec3(0.0);\n\trv -= vec3(0.0);\n\treturn rv;\n}\n\nvec4 o95_gradient_gradient_fct(float x) {\n  if (x < 0.000000000) {\n    return vec4(0.000000000, 0.000000000, 0.000000000, 1.000000000);\n  } else if (x < 0.606387622) {\n    return mix(vec4(0.000000000, 0.000000000, 0.000000000, 1.000000000), vec4(0.664062500, 0.352783203, 0.564355850, 1.000000000), (x - 0.000000000) / (0.606387622 - 0.000000000));\n  }\n  return vec4(0.664062500, 0.352783203, 0.564355850, 1.000000000);\n}\n\n\nvec2 o98_slope(vec2 uv, float epsilon) {\n\treturn vec2(0.0-0.0, 0.0-0.0);\n}\n\nvec4 tiler_o101(vec2 uv, vec2 tile, int overlap, inout vec3 instance_uv, vec2 _seed) {\n\tfloat c = 0.0;\n\tvec3 rc = vec3(0.0);\n\tvec3 rc1;\n\tfor (int dx = -overlap; dx <= overlap; ++dx) {\n\t\tfor (int dy = -overlap; dy <= overlap; ++dy) {\n\t\t\tvec2 pos = uv*tile+vec2(float(dx), float(dy)); pos = fract((floor(mod(pos, tile))+vec2(0.5))/tile)-vec2(0.5);\n\t\t\tvec2 seed = rand2(pos+_seed);\n\t\t\trc1 = rand3(seed);\n\t\t\tvec2 tile_index = floor(uv * tile) + vec2(float(dx), float(dy));\n\t\t\tpos += vec2((0.000000/tile.x)*mod(mod(tile_index.y, tile.y), 2.0), 0.0)+1.000000*seed/tile;\n\t\t\tfloat mask = 1.0;\n\t\t\tif (mask > 0.01) {\n\t\t\t\tvec2 pv = fract(uv - pos)-vec2(0.5);\n\t\t\t\tseed = rand2(seed);\n\t\t\t\tfloat angle = (seed.x * 2.0 - 1.0) * 45.000000 * 0.01745329251;\n\t\t\t\tfloat ca = cos(angle);\n\t\t\t\tfloat sa = sin(angle);\n\t\t\t\tpv = vec2(ca*pv.x+sa*pv.y, -sa*pv.x+ca*pv.y);\n\t\t\t\tpv *= (seed.y-0.5)*2.0*0.350000+1.0;\n\t\t\t\tpv /= vec2(0.020000, 0.020000);\n\t\t\t\tpv += vec2(0.5);\n\t\t\t\tseed = rand2(seed);\n\t\t\t\tvec2 clamped_pv = clamp(pv, vec2(0.0), vec2(1.0));\n\t\t\t\tif (pv.x != clamped_pv.x || pv.y != clamped_pv.y) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tvec2 full_uv = pv;\n\t\t\t\tpv = get_from_tileset( 1.0, seed.x, pv);\n\t\t\t\tfloat c1 = 0.0*mask*(1.0-0.310000*seed.x);\n\t\t\t\tc = max(c, c1);\n\t\t\t\trc = mix(rc, rc1, step(c, c1));\n\t\t\t\tinstance_uv = mix(instance_uv, vec3(full_uv, seed.x), step(c, c1));\n\t\t\t}\n\t\t}\n\t}\n\treturn vec4(rc, c);\n}\n\nvec4 o114_gradient_gradient_fct(float x) {\n  if (x < 0.499287435) {\n    return vec4(0.000000000, 0.000000000, 0.000000000, 1.000000000);\n  } else if (x < 0.725315251) {\n    return mix(vec4(0.000000000, 0.000000000, 0.000000000, 1.000000000), vec4(0.316009998, 0.742187977, 0.582370996, 1.000000000), (x - 0.499287435) / (0.725315251 - 0.499287435));\n  } else if (x < 0.932951993) {\n    return mix(vec4(0.316009998, 0.742187977, 0.582370996, 1.000000000), vec4(0.363281012, 1.000000000, 0.985077024, 1.000000000), (x - 0.725315251) / (0.932951993 - 0.725315251));\n  }\n  return vec4(0.363281012, 1.000000000, 0.985077024, 1.000000000);\n}\n\n\nvec4 o127_gradient_gradient_fct(float x) {\n  if (x < 0.000000000) {\n    return vec4(1.000000000, 1.000000000, 1.000000000, 1.000000000);\n  } else if (x < 1.000000000) {\n    return mix(vec4(1.000000000, 1.000000000, 1.000000000, 1.000000000), vec4(0.433593750, 0.433593750, 0.433593750, 1.000000000), (x - 0.000000000) / (1.000000000 - 0.000000000));\n  }\n  return vec4(0.433593750, 0.433593750, 0.433593750, 1.000000000);\n}\n\n\nvec4 o131_gradient_gradient_fct(float x) {\n  if (x < 0.280668076) {\n    return vec4(0.763210058, 0.754547119, 0.839843750, 1.000000000);\n  } else if (x < 0.717816078) {\n    return mix(vec4(0.763210058, 0.754547119, 0.839843750, 1.000000000), vec4(1.000000000, 1.000000000, 1.000000000, 1.000000000), (x - 0.280668076) / (0.717816078 - 0.280668076));\n  }\n  return vec4(1.000000000, 1.000000000, 1.000000000, 1.000000000);\n}\n",
      "expression_inputs": [],
      "expression_outputs": []
    }
  ],
  "connections": [
    {
      "from_node": 1,
      "from_port": 2,
      "to_node": 0,
      "to_port": 9
    },
    {
      "from_node": 4,
      "from_port": 0,
      "to_node": 5,
      "to_port": 0
    },
    {
      "from_node": 3,
      "from_port": 0,
      "to_node": 2,
      "to_port": 0
    },
    {
      "from_node": 5,
      "from_port": 0,
      "to_node": 2,
      "to_port": 1
    },
    {
      "from_node": 9,
      "from_port": 0,
      "to_node": 10,
      "to_port": 0
    },
    {
      "from_node": 12,
      "from_port": 0,
      "to_node": 11,
      "to_port": 1
    },
    {
      "from_node": 10,
      "from_port": 0,
      "to_node": 13,
      "to_port": 0
    },
    {
      "from_node": 13,
      "from_port": 0,
      "to_node": 11,
      "to_port": 0
    },
    {
      "from_node": 9,
      "from_port": 0,
      "to_node": 14,
      "to_port": 0
    },
    {
      "from_node": 14,
      "from_port": 0,
      "to_node": 15,
      "to_port": 0
    },
    {
      "from_node": 15,
      "from_port": 0,
      "to_node": 13,
      "to_port": 1
    },
    {
      "from_node": 16,
      "from_port": 0,
      "to_node": 0,
      "to_port": 6
    },
    {
      "from_node": 17,
      "from_port": 0,
      "to_node": 18,
      "to_port": 0
    },
    {
      "from_node": 19,
      "from_port": 0,
      "to_node": 7,
      "to_port": 0
    },
    {
      "from_node": 20,
      "from_port": 0,
      "to_node": 21,
      "to_port": 1
    },
    {
      "from_node": 18,
      "from_port": 0,
      "to_node": 21,
      "to_port": 0
    },
    {
      "from_node": 21,
      "from_port": 0,
      "to_node": 26,
      "to_port": 0
    },
    {
      "from_node": 23,
      "from_port": 0,
      "to_node": 24,
      "to_port": 0
    },
    {
      "from_node": 24,
      "from_port": 0,
      "to_node": 27,
      "to_port": 1
    },
    {
      "from_node": 24,
      "from_port": 1,
      "to_node": 27,
      "to_port": 3
    },
    {
      "from_node": 27,
      "from_port": 0,
      "to_node": 0,
      "to_port": 0
    },
    {
      "from_node": 35,
      "from_port": 0,
      "to_node": 31,
      "to_port": 1
    },
    {
      "from_node": 31,
      "from_port": 0,
      "to_node": 32,
      "to_port": 0
    },
    {
      "from_node": 33,
      "from_port": 0,
      "to_node": 32,
      "to_port": 1
    },
    {
      "from_node": 32,
      "from_port": 0,
      "to_node": 36,
      "to_port": 0
    },
    {
      "from_node": 34,
      "from_port": 0,
      "to_node": 30,
      "to_port": 0
    },
    {
      "from_node": 30,
      "from_port": 0,
      "to_node": 31,
      "to_port": 0
    },
    {
      "from_node": 6,
      "from_port": 0,
      "to_node": 37,
      "to_port": 0
    },
    {
      "from_node": 29,
      "from_port": 0,
      "to_node": 38,
      "to_port": 1
    },
    {
      "from_node": 36,
      "from_port": 0,
      "to_node": 40,
      "to_port": 0
    },
    {
      "from_node": 39,
      "from_port": 0,
      "to_node": 40,
      "to_port": 1
    },
    {
      "from_node": 40,
      "from_port": 0,
      "to_node": 37,
      "to_port": 1
    },
    {
      "from_node": 38,
      "from_port": 0,
      "to_node": 19,
      "to_port": 0
    },
    {
      "from_node": 41,
      "from_port": 0,
      "to_node": 23,
      "to_port": 0
    },
    {
      "from_node": 41,
      "from_port": 0,
      "to_node": 28,
      "to_port": 0
    },
    {
      "from_node": 43,
      "from_port": 0,
      "to_node": 42,
      "to_port": 0
    },
    {
      "from_node": 7,
      "from_port": 0,
      "to_node": 44,
      "to_port": 0
    },
    {
      "from_node": 42,
      "from_port": 0,
      "to_node": 44,
      "to_port": 1
    },
    {
      "from_node": 29,
      "from_port": 0,
      "to_node": 45,
      "to_port": 0
    },
    {
      "from_node": 45,
      "from_port": 0,
      "to_node": 42,
      "to_port": 1
    },
    {
      "from_node": 46,
      "from_port": 0,
      "to_node": 48,
      "to_port": 0
    },
    {
      "from_node": 49,
      "from_port": 0,
      "to_node": 41,
      "to_port": 0
    },
    {
      "from_node": 48,
      "from_port": 0,
      "to_node": 49,
      "to_port": 1
    },
    {
      "from_node": 47,
      "from_port": 0,
      "to_node": 50,
      "to_port": 0
    },
    {
      "from_node": 7,
      "from_port": 0,
      "to_node": 50,
      "to_port": 1
    },
    {
      "from_node": 50,
      "from_port": 0,
      "to_node": 48,
      "to_port": 1
    },
    {
      "from_node": 48,
      "from_port": 2,
      "to_node": 52,
      "to_port": 1
    },
    {
      "from_node": 46,
      "from_port": 0,
      "to_node": 52,
      "to_port": 0
    },
    {
      "from_node": 52,
      "from_port": 0,
      "to_node": 53,
      "to_port": 0
    },
    {
      "from_node": 53,
      "from_port": 0,
      "to_node": 51,
      "to_port": 1
    },
    {
      "from_node": 62,
      "from_port": 0,
      "to_node": 61,
      "to_port": 0
    },
    {
      "from_node": 61,
      "from_port": 0,
      "to_node": 60,
      "to_port": 0
    },
    {
      "from_node": 58,
      "from_port": 0,
      "to_node": 56,
      "to_port": 0
    },
    {
      "from_node": 59,
      "from_port": 0,
      "to_node": 56,
      "to_port": 1
    },
    {
      "from_node": 60,
      "from_port": 0,
      "to_node": 63,
      "to_port": 0
    },
    {
      "from_node": 56,
      "from_port": 0,
      "to_node": 57,
      "to_port": 0
    },
    {
      "from_node": 57,
      "from_port": 0,
      "to_node": 55,
      "to_port": 0
    },
    {
      "from_node": 55,
      "from_port": 0,
      "to_node": 63,
      "to_port": 1
    },
    {
      "from_node": 55,
      "from_port": 1,
      "to_node": 54,
      "to_port": 0
    },
    {
      "from_node": 54,
      "from_port": 0,
      "to_node": 63,
      "to_port": 3
    },
    {
      "from_node": 63,
      "from_port": 0,
      "to_node": 64,
      "to_port": 1
    },
    {
      "from_node": 63,
      "from_port": 0,
      "to_node": 64,
      "to_port": 2
    },
    {
      "from_node": 63,
      "from_port": 0,
      "to_node": 64,
      "to_port": 3
    },
    {
      "from_node": 22,
      "from_port": 0,
      "to_node": 64,
      "to_port": 0
    },
    {
      "from_node": 64,
      "from_port": 0,
      "to_node": 66,
      "to_port": 0
    },
    {
      "from_node": 65,
      "from_port": 0,
      "to_node": 66,
      "to_port": 1
    },
    {
      "from_node": 66,
      "from_port": 0,
      "to_node": 25,
      "to_port": 0
    },
    {
      "from_node": 40,
      "from_port": 0,
      "to_node": 67,
      "to_port": 0
    },
    {
      "from_node": 67,
      "from_port": 0,
      "to_node": 65,
      "to_port": 0
    },
    {
      "from_node": 72,
      "from_port": 0,
      "to_node": 73,
      "to_port": 0
    },
    {
      "from_node": 73,
      "from_port": 0,
      "to_node": 74,
      "to_port": 0
    },
    {
      "from_node": 76,
      "from_port": 0,
      "to_node": 77,
      "to_port": 0
    },
    {
      "from_node": 75,
      "from_port": 0,
      "to_node": 77,
      "to_port": 1
    },
    {
      "from_node": 74,
      "from_port": 0,
      "to_node": 81,
      "to_port": 0
    },
    {
      "from_node": 77,
      "from_port": 0,
      "to_node": 79,
      "to_port": 0
    },
    {
      "from_node": 79,
      "from_port": 0,
      "to_node": 78,
      "to_port": 0
    },
    {
      "from_node": 78,
      "from_port": 0,
      "to_node": 81,
      "to_port": 1
    },
    {
      "from_node": 78,
      "from_port": 1,
      "to_node": 80,
      "to_port": 0
    },
    {
      "from_node": 80,
      "from_port": 0,
      "to_node": 81,
      "to_port": 3
    },
    {
      "from_node": 68,
      "from_port": 0,
      "to_node": 71,
      "to_port": 0
    },
    {
      "from_node": 70,
      "from_port": 0,
      "to_node": 71,
      "to_port": 3
    },
    {
      "from_node": 81,
      "from_port": 0,
      "to_node": 71,
      "to_port": 5
    },
    {
      "from_node": 27,
      "from_port": 0,
      "to_node": 82,
      "to_port": 1
    },
    {
      "from_node": 82,
      "from_port": 0,
      "to_node": 0,
      "to_port": 5
    },
    {
      "from_node": 49,
      "from_port": 1,
      "to_node": 51,
      "to_port": 2
    },
    {
      "from_node": 40,
      "from_port": 0,
      "to_node": 83,
      "to_port": 0
    },
    {
      "from_node": 37,
      "from_port": 0,
      "to_node": 84,
      "to_port": 0
    },
    {
      "from_node": 83,
      "from_port": 0,
      "to_node": 84,
      "to_port": 1
    },
    {
      "from_node": 84,
      "from_port": 0,
      "to_node": 38,
      "to_port": 0
    },
    {
      "from_node": 86,
      "from_port": 0,
      "to_node": 85,
      "to_port": 0
    },
    {
      "from_node": 85,
      "from_port": 0,
      "to_node": 0,
      "to_port": 3
    },
    {
      "from_node": 87,
      "from_port": 0,
      "to_node": 88,
      "to_port": 1
    },
    {
      "from_node": 91,
      "from_port": 0,
      "to_node": 89,
      "to_port": 0
    },
    {
      "from_node": 89,
      "from_port": 1,
      "to_node": 90,
      "to_port": 1
    },
    {
      "from_node": 92,
      "from_port": 0,
      "to_node": 93,
      "to_port": 0
    },
    {
      "from_node": 93,
      "from_port": 0,
      "to_node": 90,
      "to_port": 2
    },
    {
      "from_node": 29,
      "from_port": 0,
      "to_node": 25,
      "to_port": 2
    },
    {
      "from_node": 24,
      "from_port": 0,
      "to_node": 95,
      "to_port": 0
    },
    {
      "from_node": 95,
      "from_port": 0,
      "to_node": 94,
      "to_port": 1
    },
    {
      "from_node": 96,
      "from_port": 0,
      "to_node": 27,
      "to_port": 2
    },
    {
      "from_node": 88,
      "from_port": 0,
      "to_node": 12,
      "to_port": 0
    },
    {
      "from_node": 97,
      "from_port": 0,
      "to_node": 98,
      "to_port": 1
    },
    {
      "from_node": 2,
      "from_port": 0,
      "to_node": 98,
      "to_port": 0
    },
    {
      "from_node": 8,
      "from_port": 0,
      "to_node": 9,
      "to_port": 0
    },
    {
      "from_node": 8,
      "from_port": 0,
      "to_node": 88,
      "to_port": 0
    },
    {
      "from_node": 98,
      "from_port": 0,
      "to_node": 17,
      "to_port": 0
    },
    {
      "from_node": 98,
      "from_port": 0,
      "to_node": 8,
      "to_port": 0
    },
    {
      "from_node": 99,
      "from_port": 0,
      "to_node": 100,
      "to_port": 0
    },
    {
      "from_node": 100,
      "from_port": 0,
      "to_node": 12,
      "to_port": 1
    },
    {
      "from_node": 11,
      "from_port": 0,
      "to_node": 91,
      "to_port": 0
    },
    {
      "from_node": 11,
      "from_port": 0,
      "to_node": 90,
      "to_port": 0
    },
    {
      "from_node": 11,
      "from_port": 0,
      "to_node": 47,
      "to_port": 0
    },
    {
      "from_node": 89,
      "from_port": 1,
      "to_node": 102,
      "to_port": 0
    },
    {
      "from_node": 90,
      "from_port": 0,
      "to_node": 104,
      "to_port": 0
    },
    {
      "from_node": 101,
      "from_port": 0,
      "to_node": 104,
      "to_port": 1
    },
    {
      "from_node": 104,
      "from_port": 0,
      "to_node": 7,
      "to_port": 1
    },
    {
      "from_node": 102,
      "from_port": 0,
      "to_node": 105,
      "to_port": 1
    },
    {
      "from_node": 103,
      "from_port": 0,
      "to_node": 101,
      "to_port": 0
    },
    {
      "from_node": 90,
      "from_port": 0,
      "to_node": 106,
      "to_port": 0
    },
    {
      "from_node": 106,
      "from_port": 0,
      "to_node": 105,
      "to_port": 0
    },
    {
      "from_node": 105,
      "from_port": 0,
      "to_node": 101,
      "to_port": 1
    },
    {
      "from_node": 29,
      "from_port": 0,
      "to_node": 7,
      "to_port": 2
    },
    {
      "from_node": 26,
      "from_port": 0,
      "to_node": 19,
      "to_port": 1
    },
    {
      "from_node": 26,
      "from_port": 0,
      "to_node": 29,
      "to_port": 0
    },
    {
      "from_node": 110,
      "from_port": 0,
      "to_node": 112,
      "to_port": 0
    },
    {
      "from_node": 112,
      "from_port": 0,
      "to_node": 113,
      "to_port": 0
    },
    {
      "from_node": 113,
      "from_port": 0,
      "to_node": 115,
      "to_port": 1
    },
    {
      "from_node": 111,
      "from_port": 0,
      "to_node": 115,
      "to_port": 0
    },
    {
      "from_node": 107,
      "from_port": 0,
      "to_node": 108,
      "to_port": 0
    },
    {
      "from_node": 108,
      "from_port": 0,
      "to_node": 109,
      "to_port": 0
    },
    {
      "from_node": 109,
      "from_port": 0,
      "to_node": 116,
      "to_port": 1
    },
    {
      "from_node": 115,
      "from_port": 0,
      "to_node": 116,
      "to_port": 0
    },
    {
      "from_node": 116,
      "from_port": 0,
      "to_node": 117,
      "to_port": 0
    },
    {
      "from_node": 120,
      "from_port": 0,
      "to_node": 119,
      "to_port": 0
    },
    {
      "from_node": 117,
      "from_port": 0,
      "to_node": 118,
      "to_port": 0
    },
    {
      "from_node": 119,
      "from_port": 0,
      "to_node": 118,
      "to_port": 1
    },
    {
      "from_node": 122,
      "from_port": 0,
      "to_node": 121,
      "to_port": 0
    },
    {
      "from_node": 121,
      "from_port": 0,
      "to_node": 120,
      "to_port": 0
    },
    {
      "from_node": 118,
      "from_port": 0,
      "to_node": 114,
      "to_port": 0
    },
    {
      "from_node": 48,
      "from_port": 0,
      "to_node": 122,
      "to_port": 0
    },
    {
      "from_node": 51,
      "from_port": 0,
      "to_node": 123,
      "to_port": 0
    },
    {
      "from_node": 49,
      "from_port": 1,
      "to_node": 123,
      "to_port": 2
    },
    {
      "from_node": 114,
      "from_port": 0,
      "to_node": 123,
      "to_port": 1
    },
    {
      "from_node": 49,
      "from_port": 1,
      "to_node": 124,
      "to_port": 0
    },
    {
      "from_node": 69,
      "from_port": 0,
      "to_node": 125,
      "to_port": 0
    },
    {
      "from_node": 104,
      "from_port": 0,
      "to_node": 126,
      "to_port": 0
    },
    {
      "from_node": 126,
      "from_port": 0,
      "to_node": 125,
      "to_port": 1
    },
    {
      "from_node": 125,
      "from_port": 0,
      "to_node": 71,
      "to_port": 1
    },
    {
      "from_node": 29,
      "from_port": 0,
      "to_node": 71,
      "to_port": 2
    },
    {
      "from_node": 29,
      "from_port": 0,
      "to_node": 127,
      "to_port": 0
    },
    {
      "from_node": 127,
      "from_port": 0,
      "to_node": 71,
      "to_port": 6
    },
    {
      "from_node": 23,
      "from_port": 0,
      "to_node": 128,
      "to_port": 0
    },
    {
      "from_node": 128,
      "from_port": 0,
      "to_node": 129,
      "to_port": 0
    },
    {
      "from_node": 71,
      "from_port": 0,
      "to_node": 86,
      "to_port": 0
    },
    {
      "from_node": 129,
      "from_port": 0,
      "to_node": 71,
      "to_port": 7
    },
    {
      "from_node": 29,
      "from_port": 0,
      "to_node": 130,
      "to_port": 0
    },
    {
      "from_node": 28,
      "from_port": 0,
      "to_node": 132,
      "to_port": 0
    },
    {
      "from_node": 131,
      "from_port": 0,
      "to_node": 132,
      "to_port": 1
    },
    {
      "from_node": 25,
      "from_port": 0,
      "to_node": 94,
      "to_port": 0
    },
    {
      "from_node": 123,
      "from_port": 0,
      "to_node": 27,
      "to_port": 0
    },
    {
      "from_node": 94,
      "from_port": 0,
      "to_node": 51,
      "to_port": 0
    },
    {
      "from_node": 133,
      "from_port": 0,
      "to_node": 131,
      "to_port": 0
    },
    {
      "from_node": 130,
      "from_port": 0,
      "to_node": 133,
      "to_port": 0
    },
    {
      "from_node": 132,
      "from_port": 0,
      "to_node": 134,
      "to_port": 0
    },
    {
      "from_node": 134,
      "from_port": 0,
      "to_node": 135,
      "to_port": 0
    },
    {
      "from_node": 135,
      "from_port": 0,
      "to_node": 25,
      "to_port": 1
    },
    {
      "from_node": 49,
      "from_port": 1,
      "to_node": 136,
      "to_port": 0
    },
    {
      "from_node": 136,
      "from_port": 0,
      "to_node": 137,
      "to_port": 0
    },
    {
      "from_node": 137,
      "from_port": 0,
      "to_node": 135,
      "to_port": 2
    },
    {
      "from_node": 138,
      "from_port": 0,
      "to_node": 135,
      "to_port": 1
    },
    {
      "from_node": 44,
      "from_port": 0,
      "to_node": 139,
      "to_port": 0
    },
    {
      "from_node": 139,
      "from_port": 0,
      "to_node": 49,
      "to_port": 0
    },
    {
      "from_node": 29,
      "from_port": 0,
      "to_node": 94,
      "to_port": 2
    },
    {
      "from_node": 29,
      "from_port": 0,
      "to_node": 96,
      "to_port": 0
    },
    {
      "from_node": 49,
      "from_port": 1,
      "to_node": 82,
      "to_port": 0
    },
    {
      "from_node": 49,
      "from_port": 1,
      "to_node": 71,
      "to_port": 4
    },
    {
      "from_node": 41,
      "from_port": 0,
      "to_node": 1,
      "to_port": 0
    },
    {
      "from_node": 41,
      "from_port": 0,
      "to_node": 16,
      "to_port": 0
    }
  ],
  "output_mapping": {
    "Normal": 9,
    "AO": 6,
    "Base Color": 0,
    "Emission Color": 5,
    "Roughness": 3
  },
  "output_defaults": {
    "0": [
      1.0,
      1.0,
      1.0
    ],
    "2": 0.0,
    "3": 1.0,
    "5": 0.2
  },
  "images": {},
  "node_groups": {}
}