76 lines
2.5 KiB
Plaintext
76 lines
2.5 KiB
Plaintext
shader_type spatial;
|
|
render_mode blend_mix, depth_draw_never, cull_back, diffuse_burley, specular_schlick_ggx;
|
|
|
|
#include "res://addons/rokojori_action_library/Runtime/Shading/Library/Transform.gdshaderinc"
|
|
#include "res://addons/rokojori_action_library/Runtime/Shading/Library/Math.gdshaderinc"
|
|
|
|
uniform vec4 albedo : source_color;
|
|
uniform sampler2D albedoTexture: source_color, filter_linear_mipmap, repeat_enable;
|
|
uniform float albedoUV;
|
|
uniform float albedoFadeDistance;
|
|
|
|
uniform sampler2D opacity : filter_linear_mipmap, repeat_enable;
|
|
uniform float opacityVarianceScale = 1.0;
|
|
uniform float opacityScale = 1.0;
|
|
uniform float opacityTreshold = 0.5;
|
|
|
|
uniform float opacityVarianceScale2 = 1.0;
|
|
uniform float opacityScale2 = 1.0;
|
|
uniform float opacityTreshold2 = 0.5;
|
|
uniform float opacity2Amount: hint_range( 0.0, 1.0 ) = 0.5;
|
|
|
|
uniform float roughness : hint_range( 0.0, 1.0 );
|
|
uniform float specular : hint_range( 0.0, 1.0 );
|
|
uniform float metallic : hint_range( 0.0, 1.0 );
|
|
|
|
uniform sampler2D texture_normal : hint_roughness_normal, filter_linear_mipmap, repeat_enable;
|
|
uniform float normal_scale : hint_range(0, 2);
|
|
uniform float normal_uv = 1.0;
|
|
|
|
uniform vec2 mapSize;
|
|
uniform vec2 mapCenter;
|
|
|
|
uniform float fadeOutMax;
|
|
uniform float fadeOutStart;
|
|
|
|
varying vec2 positionUV;
|
|
|
|
void vertex()
|
|
{
|
|
VERTEX += CAMERA_POSITION_WORLD * vec3( 1.0, 0.0, 1.0);
|
|
|
|
positionUV = UV;
|
|
|
|
UV = worldUVfromLocalXZ( VERTEX, mapCenter, mapSize, MODEL_MATRIX );
|
|
}
|
|
|
|
void fragment()
|
|
{
|
|
vec2 uv = UV;
|
|
|
|
float d = length( positionUV - vec2( 0.5, 0.5 ) );
|
|
float fading = 1.0 - clamp01( d / 0.5 );
|
|
float albedoFading = 1.0 - clamp01( d / albedoFadeDistance );
|
|
vec4 sampledAlbedo = texture( albedoTexture, uv * albedoUV );
|
|
ALBEDO = albedo.rgb * mix( vec3( 1, 1, 1 ), sampledAlbedo.rgb, albedoFading );
|
|
|
|
METALLIC = metallic;
|
|
SPECULAR = specular;
|
|
ROUGHNESS = roughness;
|
|
|
|
float sampledOpacity = texture( opacity, uv * opacityVarianceScale ).r;
|
|
sampledOpacity = ( sampledOpacity - opacityTreshold ) * opacityScale + opacityTreshold;
|
|
sampledOpacity = clamp01( sampledOpacity );
|
|
|
|
float sampledOpacity2 = texture( opacity, uv * opacityVarianceScale2 ).r;
|
|
sampledOpacity2 = ( sampledOpacity2 - opacityTreshold2 ) * opacityScale2 + opacityTreshold2;
|
|
sampledOpacity2 = mix( 1, clamp01( sampledOpacity2 ), opacity2Amount );
|
|
|
|
|
|
|
|
NORMAL_MAP = texture( texture_normal, uv * normal_uv ).rgb;
|
|
NORMAL_MAP_DEPTH = normal_scale;
|
|
|
|
ALPHA *= albedo.a * sampledOpacity * sampledOpacity2 * mix( 1, sampledAlbedo.a, albedoFading ) * fading;
|
|
}
|