A Non-Photorealistic Lighting Model for Automatic Technical Illustration
Created on 2023-02-28T19:55:27-06:00
Traditional (phong?) shading uses luminance based on cosine of angle between light rays and surface normals.
I = k_d k_a + k_d max(o, l_hat n_hat)
i_hat is unit vector in the direction of the light source and n_hat is the unit surface normal of the point.
Shader immitates traditional artist shading where colors are shifted between warm and cool tones as the light intensity also occurs.
Tone mapping is done by "adding" the blue to yellow gradient to a black to surface color gradient.
This shader uses the "cosine term" to tone map:
I = (\frac{1+i_hat n_hat}{2}) k_cool (\frac{1 + i_hat n_hat}{2}) k_warm
Uses a metal effect called "anisotropic reflection" except the reflection is faked with light bands.
Quinn: more modern shaders like Genshin Impact's foregoes this and uses a matcap texture for metal.
Adding edge lines
- Raise K_a until the dim shading is separate from edge lines, or,
Adding a backlight and doing something with that; didn't copy it here.