| 
									
										
										
										
											2024-12-01 17:07:41 +00:00
										 |  |  | shader_type spatial; | 
					
						
							| 
									
										
										
										
											2025-05-07 12:18:01 +00:00
										 |  |  | render_mode blend_mix,depth_draw_opaque,cull_disabled, unshaded; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "res://addons/rokojori_action_library/Runtime/Shading/Library/Math.gdshaderinc" | 
					
						
							|  |  |  | #include "res://addons/rokojori_action_library/Runtime/Shading/Library/Transform.gdshaderinc" | 
					
						
							|  |  |  | #include "res://addons/rokojori_action_library/Runtime/Shading/Library/Colors.gdshaderinc" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-01-03 12:09:23 +00:00
										 |  |  | uniform vec4 albedo_color : source_color; | 
					
						
							|  |  |  | uniform sampler2D albedo_texture : source_color; | 
					
						
							| 
									
										
										
										
											2024-12-01 17:07:41 +00:00
										 |  |  | uniform sampler2D normal_texture : source_color; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | uniform bool use_normalmap = false; | 
					
						
							| 
									
										
										
										
											2025-05-07 12:18:01 +00:00
										 |  |  | uniform bool uncompressNormalMap = true; | 
					
						
							| 
									
										
										
										
											2024-12-01 17:07:41 +00:00
										 |  |  | uniform bool use_alpha_texture = false; | 
					
						
							| 
									
										
										
										
											2025-01-03 12:09:23 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-05-07 12:18:01 +00:00
										 |  |  | uniform bool useCustomNormals = true; | 
					
						
							| 
									
										
										
										
											2024-12-01 17:07:41 +00:00
										 |  |  | uniform float alpha_scissor_threshold :  hint_range(0,1); | 
					
						
							| 
									
										
										
										
											2025-05-07 12:18:01 +00:00
										 |  |  | uniform float normal_scale :  hint_range(-5,5) = 1; | 
					
						
							| 
									
										
										
										
											2024-12-01 17:07:41 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-05-07 12:18:01 +00:00
										 |  |  | uniform vec3 uv1_scale = vec3( 1, 1, 1 ); | 
					
						
							| 
									
										
										
										
											2024-12-01 17:07:41 +00:00
										 |  |  | uniform vec3 uv1_offset; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-05-07 12:18:01 +00:00
										 |  |  | varying vec3 vertexNormal; | 
					
						
							|  |  |  | varying vec3 vertexTangent; | 
					
						
							|  |  |  | varying vec3 vertexBinormal; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | uniform float binormalMix:hint_range(0,1); | 
					
						
							| 
									
										
										
										
											2024-12-01 17:07:41 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-01-03 12:09:23 +00:00
										 |  |  | void vertex() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	UV = UV * uv1_scale.xy + uv1_offset.xy; | 
					
						
							| 
									
										
										
										
											2025-05-07 12:18:01 +00:00
										 |  |  |   vertexNormal = localToViewDirection( NORMAL, MODELVIEW_NORMAL_MATRIX ); | 
					
						
							|  |  |  |   vertexTangent = localToViewDirection( TANGENT, MODELVIEW_NORMAL_MATRIX ); | 
					
						
							|  |  |  |   vertexBinormal = cross( vertexNormal, vertexTangent ); | 
					
						
							|  |  |  |   //NORMAL = localToViewDirection( NORMAL, MODELVIEW_NORMAL_MATRIX );  | 
					
						
							| 
									
										
										
										
											2024-12-01 17:07:41 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-01-03 12:09:23 +00:00
										 |  |  | void fragment() | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2024-12-01 17:07:41 +00:00
										 |  |  | 	vec2 base_uv = UV; | 
					
						
							| 
									
										
										
										
											2025-01-03 12:09:23 +00:00
										 |  |  | 	vec4 albedo = texture( albedo_texture, base_uv ) * albedo_color; | 
					
						
							|  |  |  | 	vec4 normal_tex = texture( normal_texture, base_uv ); | 
					
						
							| 
									
										
										
										
											2025-05-07 12:18:01 +00:00
										 |  |  |   vec3 RENDER_NORMAL = useCustomNormals ? vertexNormal : NORMAL; | 
					
						
							|  |  |  |    | 
					
						
							|  |  |  |   if ( ! useCustomNormals && ! FRONT_FACING ) | 
					
						
							|  |  |  |   { | 
					
						
							|  |  |  |     RENDER_NORMAL = - RENDER_NORMAL; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   //ALBEDO = mix( vertexNormal, NORMAL, normalMix ); | 
					
						
							| 
									
										
										
										
											2024-12-01 17:07:41 +00:00
										 |  |  | 	// 0.5 + -1.0 == -1.0 + 0.5 | 
					
						
							|  |  |  | 	//ALBEDO = vec3(1.0 - NORMAL.y, 1.0 - NORMAL.x, - NORMAL.z)* 0.5; | 
					
						
							| 
									
										
										
										
											2025-01-03 12:09:23 +00:00
										 |  |  | 	if ( use_normalmap ) | 
					
						
							| 
									
										
										
										
											2024-12-01 17:07:41 +00:00
										 |  |  | 	{ | 
					
						
							|  |  |  | 		vec3 normalmap; | 
					
						
							| 
									
										
										
										
											2025-05-07 12:18:01 +00:00
										 |  |  |      | 
					
						
							|  |  |  |     if ( uncompressNormalMap ) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       normalmap.xy = normal_tex.xy * 2.0 - 1.0; | 
					
						
							|  |  |  | 		  normalmap.z = sqrt( max( 0.0, 1.0 - dot( normalmap.xy, normalmap.xy ) ) ); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       normalmap = normal_tex.xyz * 2.0 - 1.0; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     vec3 textureNormal = vertexTangent * normalmap.x +  | 
					
						
							|  |  |  |                          vertexBinormal * normalmap.y +  | 
					
						
							|  |  |  |                          vertexNormal * normalmap.z; | 
					
						
							|  |  |  |                         | 
					
						
							| 
									
										
										
										
											2025-01-03 12:09:23 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-05-07 12:18:01 +00:00
										 |  |  | 		RENDER_NORMAL = normalize( mix( RENDER_NORMAL, textureNormal, normal_scale ) ); | 
					
						
							|  |  |  |     //NORMAL = textureNormal; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  |    | 
					
						
							|  |  |  |    | 
					
						
							|  |  |  |   vec3 rn = vec3( RENDER_NORMAL.x, RENDER_NORMAL.y, RENDER_NORMAL.z ) * 0.5 + 0.5; | 
					
						
							|  |  |  | 	ALBEDO = rn; | 
					
						
							| 
									
										
										
										
											2025-01-03 12:09:23 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	if ( use_alpha_texture ) | 
					
						
							| 
									
										
										
										
											2024-12-01 17:07:41 +00:00
										 |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2025-01-03 12:09:23 +00:00
										 |  |  | 		ALPHA = albedo.a; | 
					
						
							| 
									
										
										
										
											2024-12-01 17:07:41 +00:00
										 |  |  | 		ALPHA_SCISSOR_THRESHOLD = alpha_scissor_threshold; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } |