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;
|
|
}
|
|
|
|
}
|