跳到主要内容
← Noise

Noise

Random Detalization

shader-learning 自学第 4 课:Random Detalization

实时渲染 · 网格 GLSL

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