86 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			86 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| shader_type spatial;
 | |
| 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"
 | |
| 
 | |
| uniform vec4 albedo_color : source_color;
 | |
| uniform sampler2D albedo_texture : source_color;
 | |
| uniform sampler2D normal_texture : source_color;
 | |
| 
 | |
| uniform bool use_normalmap = false;
 | |
| uniform bool uncompressNormalMap = true;
 | |
| uniform bool use_alpha_texture = false;
 | |
| 
 | |
| uniform bool useCustomNormals = true;
 | |
| uniform float alpha_scissor_threshold :  hint_range(0,1);
 | |
| uniform float normal_scale :  hint_range(-5,5) = 1;
 | |
| 
 | |
| uniform vec3 uv1_scale = vec3( 1, 1, 1 );
 | |
| uniform vec3 uv1_offset;
 | |
| 
 | |
| varying vec3 vertexNormal;
 | |
| varying vec3 vertexTangent;
 | |
| varying vec3 vertexBinormal;
 | |
| 
 | |
| uniform float binormalMix:hint_range(0,1);
 | |
| 
 | |
| void vertex()
 | |
| {
 | |
| 	UV = UV * uv1_scale.xy + uv1_offset.xy;
 | |
|   vertexNormal = localToViewDirection( NORMAL, MODELVIEW_NORMAL_MATRIX );
 | |
|   vertexTangent = localToViewDirection( TANGENT, MODELVIEW_NORMAL_MATRIX );
 | |
|   vertexBinormal = cross( vertexNormal, vertexTangent );
 | |
|   //NORMAL = localToViewDirection( NORMAL, MODELVIEW_NORMAL_MATRIX ); 
 | |
| }
 | |
| 
 | |
| void fragment()
 | |
| {
 | |
| 	vec2 base_uv = UV;
 | |
| 	vec4 albedo = texture( albedo_texture, base_uv ) * albedo_color;
 | |
| 	vec4 normal_tex = texture( normal_texture, base_uv );
 | |
|   vec3 RENDER_NORMAL = useCustomNormals ? vertexNormal : NORMAL;
 | |
|   
 | |
|   if ( ! useCustomNormals && ! FRONT_FACING )
 | |
|   {
 | |
|     RENDER_NORMAL = - RENDER_NORMAL;
 | |
|   }
 | |
|   //ALBEDO = mix( vertexNormal, NORMAL, normalMix );
 | |
| 	// 0.5 + -1.0 == -1.0 + 0.5
 | |
| 	//ALBEDO = vec3(1.0 - NORMAL.y, 1.0 - NORMAL.x, - NORMAL.z)* 0.5;
 | |
| 	if ( use_normalmap )
 | |
| 	{
 | |
| 		vec3 normalmap;
 | |
|     
 | |
|     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;
 | |
|                        
 | |
| 
 | |
| 		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;
 | |
| 
 | |
| 	if ( use_alpha_texture )
 | |
| 	{
 | |
| 		ALPHA = albedo.a;
 | |
| 		ALPHA_SCISSOR_THRESHOLD = alpha_scissor_threshold;
 | |
| 	}
 | |
| 
 | |
| }
 |