51 lines
1.2 KiB
Plaintext
51 lines
1.2 KiB
Plaintext
shader_type spatial;
|
|
|
|
#include "res://vfx/util.gdshaderinc"
|
|
|
|
UNIVERSAL_SOLID_PARAMS
|
|
uniform sampler2D image: TEXTURE_HINTS;
|
|
uniform float hue_precision = 0.075;
|
|
uniform float saturation_threshold = 0.25;
|
|
uniform float glass_hue = -1.0;
|
|
uniform float chrome_hue = -1.0;
|
|
uniform float glow_hue = -1.0;
|
|
uniform float neon_hue = -1.0;
|
|
uniform float wax_hue = -1.0;
|
|
uniform float gloss_hue = -1.0;
|
|
|
|
void fragment() {
|
|
vec3 rgb = texture(image, UV).rgb;
|
|
ALBEDO = rgb;
|
|
vec3 hsv = rgb2hsv(rgb);
|
|
if (hsv.y >= saturation_threshold) {
|
|
if (abs(hsv.x - glass_hue) <= hue_precision) {
|
|
CLEARCOAT = 1.0;
|
|
CLEARCOAT_ROUGHNESS = 0.05;
|
|
ROUGHNESS = 0.05;
|
|
SPECULAR = 1.0;
|
|
METALLIC = 1.0;
|
|
}
|
|
if (abs(hsv.x - chrome_hue) <= hue_precision) {
|
|
CLEARCOAT = 1.0;
|
|
CLEARCOAT_ROUGHNESS = 0.05;
|
|
ROUGHNESS = 0.05;
|
|
SPECULAR = 1.0;
|
|
METALLIC = 1.0;
|
|
}
|
|
if (abs(hsv.x - glow_hue) <= hue_precision) {
|
|
EMISSION = ALBEDO/4.0;
|
|
}
|
|
if (abs(hsv.x - neon_hue) <= hue_precision) {
|
|
EMISSION = ALBEDO;
|
|
}
|
|
if (abs(hsv.x - wax_hue) <= hue_precision) {
|
|
CLEARCOAT = 0.05;
|
|
CLEARCOAT_ROUGHNESS = 0.95;
|
|
}
|
|
if (abs(hsv.x - gloss_hue) <= hue_precision) {
|
|
CLEARCOAT = 0.25;
|
|
CLEARCOAT_ROUGHNESS = 0.25;
|
|
}
|
|
}
|
|
UNIVERSAL_SOLID_PROCESSING
|
|
} |