39 lines
1.1 KiB
Text
39 lines
1.1 KiB
Text
shader_type spatial;
|
|
render_mode blend_mix, depth_draw_opaque, cull_back, diffuse_burley, specular_schlick_ggx;
|
|
|
|
uniform sampler2D diffuse_texture;
|
|
uniform sampler2D normal_map: hint_normal;
|
|
uniform float normal_scale : hint_range(-16.0, 16.0);
|
|
uniform sampler2D mask_map;
|
|
uniform sampler2D paint_map;
|
|
|
|
uniform vec3 paint_color_r : source_color;
|
|
uniform vec3 paint_color_g: source_color;
|
|
uniform vec3 paint_color_b: source_color;
|
|
uniform vec3 paint_color_a: source_color;
|
|
|
|
|
|
|
|
void fragment() {
|
|
vec2 uv = UV;
|
|
|
|
vec4 base_color = texture(diffuse_texture, uv);
|
|
vec4 paint = texture(paint_map, uv);
|
|
vec4 masks = texture(mask_map, uv);
|
|
|
|
// Mix base with paint colors by channels
|
|
vec3 paint_result = base_color.rgb;
|
|
paint_result = mix(paint_result, paint_color_r, paint.r);
|
|
paint_result = mix(paint_result, paint_color_g, paint.g);
|
|
paint_result = mix(paint_result, paint_color_b, paint.b);
|
|
paint_result = mix(paint_result, paint_color_a, paint.a);
|
|
|
|
ALBEDO = paint_result;
|
|
|
|
EMISSION = paint_result * masks.b;
|
|
ROUGHNESS = masks.g;
|
|
METALLIC = masks.r;
|
|
|
|
NORMAL_MAP = texture(normal_map, uv).rgb;
|
|
NORMAL_MAP_DEPTH = normal_scale;
|
|
}
|