[gd_resource type="ShaderMaterial" load_steps=11 format=2] [ext_resource path="res://Assets/green_felt_ambientOcclusion.png" type="Texture" id=1] [ext_resource path="res://Assets/green_felt_basecolor.png" type="Texture" id=2] [ext_resource path="res://Assets/green_felt_normal.png" type="Texture" id=3] [sub_resource type="VisualShaderNodeTexture" id=1] output_port_for_preview = 0 texture = ExtResource( 2 ) texture_type = 1 [sub_resource type="VisualShaderNodeVectorOp" id=2] output_port_for_preview = 0 default_input_values = [ 0, Vector3( 0, 0, 0 ), 1, Vector3( 0.15, 0.15, 0.15 ) ] operator = 2 [sub_resource type="VisualShaderNodeTexture" id=3] texture = ExtResource( 3 ) texture_type = 2 [sub_resource type="VisualShaderNodeTexture" id=4] texture = ExtResource( 1 ) [sub_resource type="VisualShaderNodeVectorDecompose" id=5] [sub_resource type="VisualShaderNodeColorOp" id=6] default_input_values = [ 0, Vector3( 0, 0, 0 ), 1, Vector3( 0, 0.1, 0 ) ] operator = 7 [sub_resource type="VisualShader" id=7] code = "shader_type spatial; render_mode specular_schlick_ggx; uniform sampler2D tex_frg_2 : hint_albedo; uniform sampler2D tex_frg_7; uniform sampler2D tex_frg_6 : hint_normal; void vertex() { // Output:0 } void fragment() { // Texture:2 vec4 tex_frg_2_read = texture(tex_frg_2, UV.xy); vec3 n_out2p0 = tex_frg_2_read.rgb; float n_out2p1 = tex_frg_2_read.a; // VectorOp:4 vec3 n_in4p1 = vec3(0.15000, 0.15000, 0.15000); vec3 n_out4p0 = n_out2p0 * n_in4p1; // ColorOp:9 vec3 n_in9p1 = vec3(0.00000, 0.10000, 0.00000); vec3 n_out9p0; { float base = n_out4p0.x; float blend = n_in9p1.x; if (base < 0.5) { n_out9p0.x = (base * (blend + 0.5)); } else { n_out9p0.x = (1.0 - (1.0 - base) * (1.0 - (blend - 0.5))); } } { float base = n_out4p0.y; float blend = n_in9p1.y; if (base < 0.5) { n_out9p0.y = (base * (blend + 0.5)); } else { n_out9p0.y = (1.0 - (1.0 - base) * (1.0 - (blend - 0.5))); } } { float base = n_out4p0.z; float blend = n_in9p1.z; if (base < 0.5) { n_out9p0.z = (base * (blend + 0.5)); } else { n_out9p0.z = (1.0 - (1.0 - base) * (1.0 - (blend - 0.5))); } } // Texture:7 vec4 tex_frg_7_read = texture(tex_frg_7, UV.xy); vec3 n_out7p0 = tex_frg_7_read.rgb; float n_out7p1 = tex_frg_7_read.a; // VectorDecompose:8 float n_out8p0 = n_out7p0.x; float n_out8p1 = n_out7p0.y; float n_out8p2 = n_out7p0.z; // Texture:6 vec4 tex_frg_6_read = texture(tex_frg_6, UV.xy); vec3 n_out6p0 = tex_frg_6_read.rgb; float n_out6p1 = tex_frg_6_read.a; // Output:0 ALBEDO = n_out9p0; ROUGHNESS = n_out8p0; AO = n_out8p0; NORMALMAP = n_out6p0; } void light() { // Output:0 } " graph_offset = Vector2( 349.961, 139.535 ) nodes/fragment/0/position = Vector2( 1420, 300 ) nodes/fragment/2/node = SubResource( 1 ) nodes/fragment/2/position = Vector2( 600, 80 ) nodes/fragment/4/node = SubResource( 2 ) nodes/fragment/4/position = Vector2( 940, 240 ) nodes/fragment/6/node = SubResource( 3 ) nodes/fragment/6/position = Vector2( 600, 420 ) nodes/fragment/7/node = SubResource( 4 ) nodes/fragment/7/position = Vector2( 620, 660 ) nodes/fragment/8/node = SubResource( 5 ) nodes/fragment/8/position = Vector2( 880, 720 ) nodes/fragment/9/node = SubResource( 6 ) nodes/fragment/9/position = Vector2( 1200, 280 ) nodes/fragment/connections = PoolIntArray( 2, 0, 4, 0, 7, 0, 8, 0, 6, 0, 0, 8, 8, 0, 0, 6, 8, 0, 0, 3, 4, 0, 9, 0, 9, 0, 0, 0 ) [resource] shader = SubResource( 7 )