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