48 lines
1.3 KiB
Plaintext
48 lines
1.3 KiB
Plaintext
|
|
shader_type spatial;
|
|
render_mode blend_mix, depth_draw_opaque, cull_back, unshaded;
|
|
|
|
#include "res://addons/rokojori_action_library/Runtime/Shading/Library/Colors.gdshaderinc"
|
|
|
|
uniform float gammaA = 1.0;
|
|
uniform sampler2D channelTextureA : hint_default_white, filter_linear_mipmap, repeat_enable;
|
|
|
|
uniform float gammaB = 1.0;
|
|
uniform sampler2D channelTextureB : hint_default_white, filter_linear_mipmap, repeat_enable;
|
|
|
|
uniform float gammaC = 1.0;
|
|
uniform sampler2D channelTextureC : hint_default_black, filter_linear_mipmap, repeat_enable;
|
|
|
|
uniform vec3 uv1_scale = vec3( 1, 1, 1 );
|
|
uniform vec3 uv1_offset = vec3( 0, 0, 0 );
|
|
|
|
|
|
void vertex()
|
|
{
|
|
UV = UV * uv1_scale.xy + uv1_offset.xy;
|
|
}
|
|
|
|
|
|
vec4 getColor( vec2 uv, sampler2D channelTexture, int index, float gammaPower )
|
|
{
|
|
vec4 color = texture( channelTexture, uv );
|
|
|
|
vec4 outputColor = index == 0 ? vec4( color.r, 0, 0, 1 ) :
|
|
index == 1 ? vec4( 0, color.g, 0, 1 ) :
|
|
vec4( 0, 0, color.b, 1 );
|
|
|
|
outputColor.rgb = gamma( outputColor.rgb, gammaPower );
|
|
return outputColor;
|
|
}
|
|
|
|
void fragment()
|
|
{
|
|
|
|
vec4 colorA = getColor( UV, channelTextureA, 0, gammaA );
|
|
vec4 colorB = getColor( UV, channelTextureB, 1, gammaB );
|
|
vec4 colorC = getColor( UV, channelTextureC, 2, gammaC );
|
|
|
|
ALBEDO = colorA.rgb + colorB.rgb + colorC.rgb;
|
|
|
|
}
|