第 4 课:Random Detalization
实现
uniform sampler2D iChannel0;
uniform float iTime;
varying vec3 vNormal;
varying vec2 vUv;
const vec3 lightDir = normalize(vec3(-1.0, 1.0, 1.0));
float random(vec2 point) {
float d = dot(point, vec2(12.34, 56.78));
float r = fract(sin(d) * 1234.5678);
return r;
}
void main() {
vec3 fragColor = texture2D(iChannel0, vUv).rgb;
vec3 fragNormal = normalize(vNormal);
float quantizationStep = 0.1;
float randomValue = random(floor(vUv/quantizationStep)*quantizationStep);
float progress = cos(iTime) * 0.6 + 0.5;
float visible = randomValue > progress ? 0.0 : 1.0;
float ambient = 0.5;
float diffuse = dot(fragNormal, lightDir);
gl_FragColor = vec4((ambient + diffuse) * fragColor * visible, 1.0);
}