content/hifi-content/caitlyn/dev/Tutorials/mat_shiny.fs
2022-02-13 22:19:19 +01:00

89 lines
2.7 KiB
GLSL

uniform float emit = 0.0;
uniform vec3 hide = vec3(.4);
uniform vec2 threshold = vec2(0.59,0.6);
uniform vec3 diffuse_color = vec3(0.0, 1.0, 0.0);
uniform float diffuse_intensity = 1.0;
uniform float specular_hardness = 346.0;
uniform float specular_intensity = 0.5405405759811401;
uniform vec3 specular_color = vec3(1.0, 0.0, 0.5043444633483887);
uniform bool wade = true;
uniform vec3 cutoff = vec3(0.0);
// HIFI PROCEDURAL_V1
vec4 xxgetProceduralColor() {
vec3 diffuse = diffuse_color * diffuse_intensity;
return vec4(diffuse,1);
}
const vec4 BLUE = vec4(0.0, 0.0, 1.0, 1.0);
const vec4 YELLOW = vec4(1.0, 1.0, 0.0, 1.0);
uniform vec3 iSize = vec3(1.0,2.0,4.0);
uniform float iSpeed = 0.5;
vec4 getNoiseColor() {
float intensity = 0.0;
vec3 position = _position.xyz;
position = normalize(position);
float time = iGlobalTime * iSpeed;
for (int i = 0; i < 4; ++i) {
float modifier = pow(2, i);
vec3 noisePosition = position * iSize * .5 * modifier;
float noise = snoise(vec4(noisePosition, time));
noise /= modifier;
intensity += noise;
}
intensity /= 2.0; intensity += 0.5;
return (intensity * BLUE) + (1.0 - intensity) * YELLOW;
}
float aspect(vec2 v) {
return v.x / v.y;
}
#ifdef asodifjsodi
vec3 aspectCorrectedTexture() {
vec2 uv;
if (abs(_position.y) > 0.4999) {
uv = _position.xz;
} else if (abs(_position.z) > 0.4999) {
uv = _position.xy;
} else {
uv = _position.yz;
}
uv += 0.5;
uv.y = 1.0 - uv.y;
return texture(iChannel0, uv).rgb;
}
#endif
// HIFI PROCEDURAL_V2
float getProceduralColors(inout vec3 diffuse, inout vec3 specular, inout float shininess) {
specular = specular_color * specular_intensity;
diffuse = diffuse_color * diffuse_intensity;
shininess = specular_hardness * ( 128.0 / 510.0 );
//if (length(_position.xyz - iWorldPosition.xyz) > .0) discard;
vec4 noiseColor = getNoiseColor();
//if (hide.w != 0.0 && iChannelResolution[0].x != 0) {
// diffuse = aspectCorrectedTexture();
//}
//if (_normal.z < 0) discard;
if (cutoff.x != 0.0 && _position.x > cutoff.x)
discard;
if (cutoff.y != 0.0 && _position.y > cutoff.y)
discard;
if (cutoff.z != 0.0 && _position.z > cutoff.z)
discard;
if (abs(_position.x) > hide.x && abs(_position.y) > hide.y && abs(_position.z) > hide.z) {
shininess *= (noiseColor.r + noiseColor.g);
diffuse /= noiseColor.g;//3.0;//vec3(0.0);
specular *= noiseColor.rgb;
if (noiseColor.r < threshold.r && noiseColor.b > threshold.g) discard;
//discard;
//return emit == 0.0 ? 1.0 : 0.0;
return wade ? emit : 2000.0;
}
return emit;
}