¿Qué es el sombreado de rampa o la iluminación y cómo funciona? ¿Es diferente al sombreado de toon o es el mismo concepto? ¿Cómo se calcula la especularidad de manera diferente para el sombreado de rampa versus blinn-phong o lambert?
En el sombreado tradicional de Blinn / Phong, calcula el término difuso para un píxel midiendo el coseno del ángulo entre lo normal en la superficie y la dirección de la luz. Entonces, en este caso, un sombreador simple se vería así:
float DiffuseCoeff(in float3 pos, in float3 normal, in float3 lightPos) {
float3 lightDir = lightPos - pos;
lightDir.normalize();
return max(0.0, Dot(lightDir, normal));
}
En el sombreado en rampa, la idea es modular el coeficiente difuso mediante una textura de búsqueda 1D. Dependiendo de lo que pones en esta textura, puedes generar diferentes efectos. Por lo tanto, nuestra función de sombreador para calcular el coeficiente difuso se convierte en:
texture1D rampTex;
float DiffuseCoeff(in float3 pos, in float3 normal, in float3 lightPos) {
float3 lightDir = lightPos - pos;
lightDir.normalize();
// Map value from [-1, 1] to [0, 1]
float rampCoord = Dot(lightDir, normal) * 0.5 + 0.5;
return tex1D(rampTex, rampCoord);
}
Por ejemplo, si quisiéramos implementar un sombreador de celdas, lo que podríamos hacer es generar una textura de rampa que emule una función de paso:
Puede usar la misma idea para generar diferentes efectos para la iluminación especular también. El sombreado "Rampa" en realidad solo se refiere a la idea de modular un valor de sombreado por una textura.
EDITAR : Team Fortress 2 utiliza un sombreador de rampa en su renderizado. Puede consultar los detalles en este documento:
http://www.valvesoftware.com/publications/2007/NPAR07_IllustrativeRenderingInTeamFortress2.pdf
Consulte la Sección 5, en la subsección titulada "Función de deformación difusa"