[gd_resource type="ShaderMaterial" load_steps=14 format=2] [sub_resource type="VisualShaderNodeInput" id=1] input_name = "modulate_color" [sub_resource type="VisualShaderNodeInput" id=2] input_name = "modulate_alpha" [sub_resource type="VisualShaderNodeScalarOp" id=3] operator = 2 [sub_resource type="VisualShaderNodeExpression" id=4] size = Vector2( 512, 260 ) expression = "vec2 tex_size = vec2(textureSize(mask, 0)); vec2 pix_loc = uv.xy / TEXTURE_PIXEL_SIZE; mask_uv = vec3((pix_loc + offset.xy) / tex_size, 0); outside = mask_uv.x >= 0.0 && mask_uv.x <= 1.0 && mask_uv.y >= 0.0 && mask_uv.y <= 1.0;" [sub_resource type="VisualShaderNodeInput" id=5] input_name = "uv" [sub_resource type="VisualShaderNodeScalarSwitch" id=6] [sub_resource type="VisualShaderNodeVectorOp" id=7] operator = 2 [sub_resource type="VisualShaderNodeTexture" id=8] source = 5 [sub_resource type="VisualShaderNodeInput" id=9] input_name = "texture" [sub_resource type="VisualShaderNodeScalarOp" id=10] operator = 2 [sub_resource type="VisualShaderNodeVec3Uniform" id=11] uniform_name = "offset" [sub_resource type="VisualShaderNodeTextureUniform" id=12] uniform_name = "mask" [sub_resource type="VisualShader" id=13] code = "shader_type canvas_item; uniform vec3 offset; uniform sampler2D mask; void vertex() { // Output:0 } void fragment() { // Input:10 vec3 n_out10p0 = MODULATE.rgb; // Input:3 // Texture:2 vec3 n_out2p0; float n_out2p1; { vec4 TEXTURE_tex_read = texture(TEXTURE, UV.xy); n_out2p0 = TEXTURE_tex_read.rgb; n_out2p1 = TEXTURE_tex_read.a; } // VectorOp:18 vec3 n_out18p0 = n_out10p0 * n_out2p0; // Input:13 float n_out13p0 = MODULATE.a; // VectorUniform:7 vec3 n_out7p0 = offset; // Input:16 vec3 n_out16p0 = vec3(UV, 0.0); // Expression:15 vec3 n_out15p0; bool n_out15p1; n_out15p0 = vec3(0.0, 0.0, 0.0); n_out15p1 = false; { vec2 tex_size = vec2(textureSize(mask, 0)); vec2 pix_loc = n_out16p0.xy / TEXTURE_PIXEL_SIZE; n_out15p0 = vec3((pix_loc + n_out7p0.xy) / tex_size, 0); n_out15p1 = n_out15p0.x >= 0.0 && n_out15p0.x <= 1.0 && n_out15p0.y >= 0.0 && n_out15p0.y <= 1.0; } // TextureUniform:8 vec3 n_out8p0; float n_out8p1; { vec4 n_tex_read = texture(mask, n_out15p0.xy); n_out8p0 = n_tex_read.rgb; n_out8p1 = n_tex_read.a; } // ScalarSwitch:17 float n_in17p2 = 0.00000; float n_out17p0; if(n_out15p1) { n_out17p0 = n_out8p1; } else { n_out17p0 = n_in17p2; } // ScalarOp:6 float n_out6p0 = n_out2p1 * n_out17p0; // ScalarOp:14 float n_out14p0 = n_out13p0 * n_out6p0; // Output:0 COLOR.rgb = n_out18p0; COLOR.a = n_out14p0; } void light() { // Output:0 } " mode = 1 flags/light_only = false nodes/fragment/0/position = Vector2( 840, -100 ) nodes/fragment/2/node = SubResource( 8 ) nodes/fragment/2/position = Vector2( 400, -40 ) nodes/fragment/3/node = SubResource( 9 ) nodes/fragment/3/position = Vector2( 220, -40 ) nodes/fragment/6/node = SubResource( 10 ) nodes/fragment/6/position = Vector2( 640, 60 ) nodes/fragment/7/node = SubResource( 11 ) nodes/fragment/7/position = Vector2( -340, 60 ) nodes/fragment/8/node = SubResource( 12 ) nodes/fragment/8/position = Vector2( 400, 100 ) nodes/fragment/10/node = SubResource( 1 ) nodes/fragment/10/position = Vector2( 320, -200 ) nodes/fragment/13/node = SubResource( 2 ) nodes/fragment/13/position = Vector2( 320, -120 ) nodes/fragment/14/node = SubResource( 3 ) nodes/fragment/14/position = Vector2( 640, -60 ) nodes/fragment/15/node = SubResource( 4 ) nodes/fragment/15/position = Vector2( -140, 40 ) nodes/fragment/15/size = Vector2( 512, 260 ) nodes/fragment/15/input_ports = "0,1,offset;1,1,uv;" nodes/fragment/15/output_ports = "0,1,mask_uv;1,2,outside;" nodes/fragment/15/expression = "vec2 tex_size = vec2(textureSize(mask, 0)); vec2 pix_loc = uv.xy / TEXTURE_PIXEL_SIZE; mask_uv = vec3((pix_loc + offset.xy) / tex_size, 0); outside = mask_uv.x >= 0.0 && mask_uv.x <= 1.0 && mask_uv.y >= 0.0 && mask_uv.y <= 1.0;" nodes/fragment/16/node = SubResource( 5 ) nodes/fragment/16/position = Vector2( -340, 140 ) nodes/fragment/17/node = SubResource( 6 ) nodes/fragment/17/position = Vector2( 620, 180 ) nodes/fragment/18/node = SubResource( 7 ) nodes/fragment/18/position = Vector2( 640, -180 ) nodes/fragment/connections = PoolIntArray( 3, 0, 2, 2, 2, 1, 6, 0, 6, 0, 14, 1, 13, 0, 14, 0, 14, 0, 0, 1, 7, 0, 15, 0, 16, 0, 15, 1, 15, 0, 8, 0, 15, 1, 17, 0, 8, 1, 17, 1, 17, 0, 6, 1, 10, 0, 18, 0, 2, 0, 18, 1, 18, 0, 0, 0 ) [resource] shader = SubResource( 13 ) shader_param/offset = Vector3( 0, 0, 0 )