Skip to content

Instantly share code, notes, and snippets.

@mcleary
Created December 14, 2020 23:21
Show Gist options
  • Save mcleary/2d09bfc9c564b5061f025a4e47215e9d to your computer and use it in GitHub Desktop.
Save mcleary/2d09bfc9c564b5061f025a4e47215e9d to your computer and use it in GitHub Desktop.
Gooch Shading
precision highp float;
uniform float time;
uniform vec2 resolution;
varying vec3 fPosition;
varying vec3 fNormal;
varying vec3 fLight;
void main()
{
vec3 N = normalize(fNormal);
vec3 L = normalize(vec3(0.0, -10.0, 1.0));
vec3 V = normalize(-fPosition);
vec3 cHighlight = vec3(2.0, 2.0, 2.0);
vec3 cSurface = vec3(1.0, 1.0, 1.0);
vec3 cCool = vec3(0.0, 0.0, 0.55) + 0.25 * cSurface;
vec3 cWarm = vec3(0.3, 0.3, 0.0) + 0.25 * cSurface;
float T = (dot(N, L) + 1.0) * 0.5;
vec3 R = reflect(-L, N);
float S = clamp((100.0 * dot(R, V) - 97.0), 0.0, 1.0);
vec3 cGooch = mix(cWarm, cCool, T);
vec3 cShaded = mix(cGooch, cHighlight, S);
gl_FragColor = vec4(cShaded, 1.0);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment