O que é sombreamento ou iluminação de rampa?

14

O que é sombreamento ou iluminação da rampa e como funciona? É diferente do toon shading ou é o mesmo conceito? Como a especularidade é calculada de maneira diferente para sombreamento na rampa versus blinn-phong ou lambert?

StampyTurtle
fonte

Respostas:

21

No sombreamento tradicional de Blinn / Phong, você calcula o termo difuso para um pixel medindo o cosseno do ângulo entre o normal na superfície e a direção da luz. Portanto, nesse caso, um simples sombreador se pareceria com isso:

float DiffuseCoeff(in float3 pos, in float3 normal, in float3 lightPos) {
    float3 lightDir = lightPos - pos;
    lightDir.normalize();

    return max(0.0, Dot(lightDir, normal));
}

No sombreamento em rampa, a idéia é modular o coeficiente difuso por uma textura de pesquisa 1D. Dependendo do que você coloca nessa textura, você pode gerar efeitos diferentes. Portanto, nossa função de sombreador para calcular o coeficiente difuso se torna:

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 exemplo, se quisermos implementar um sombreador de célula, o que poderíamos fazer é gerar uma textura de rampa que emula uma função de etapa:

insira a descrição da imagem aqui

Você pode usar a mesma idéia para gerar efeitos diferentes também para a iluminação especular. O sombreamento "rampa" realmente se refere apenas à idéia de modular um valor de sombreamento por uma textura.

EDIT : Team Fortress 2 usa um shader de rampa em sua renderização. Você pode conferir os detalhes neste documento:

http://www.valvesoftware.com/publications/2007/NPAR07_IllustrativeRenderingInTeamFortress2.pdf

Consulte a Seção 5, na subseção "Função de distorção difusa"

Mokosha
fonte
1
Ótima resposta! A explicação da diferença de iluminação entre iluminação difusa e rampa é exatamente o que eu estava procurando. Também aprecio o comentário sobre qual é o conceito de sombreamento na rampa em geral. Como um extra à parte, você poderia postar uma imagem de exemplo de um jogo que use esse conceito?
StampyTurtle
@Stampyturtle Atualizei minha resposta com um exemplo.
Mokosha