Che cos'è l'ombra o l'illuminazione della rampa?


14

Che cos'è l'ombreggiatura o l'illuminazione della rampa e come funziona? È diverso dall'ombreggiatura di Toon o è lo stesso concetto? In che modo viene calcolata la specularità in modo diverso per l'ombreggiatura della rampa rispetto a blinn-phong o lambert?

Risposte:


21

Nella tradizionale sfumatura Blinn / Phong, si calcola il termine diffuso per un pixel misurando il coseno dell'angolo tra il normale in superficie e la direzione della luce. Quindi, in questo caso, un semplice shader sarebbe simile a questo:

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

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

Nell'ombreggiatura della rampa, l'idea è quella di modulare il coefficiente diffuso mediante una trama di ricerca 1D. A seconda di ciò che metti in questa trama puoi generare effetti diversi. Quindi, la nostra funzione shader per calcolare il coefficiente diffuso diventa:

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

Ad esempio, se volessimo implementare uno shader cellulare, ciò che potremmo fare è generare una trama a rampa che emuli una funzione a gradino:

inserisci qui la descrizione dell'immagine

Puoi usare la stessa idea per generare effetti diversi anche per l'illuminazione speculare. L'ombreggiatura "Rampa" si riferisce in realtà solo all'idea di modulare un valore di ombreggiatura da una trama.

EDIT : Team Fortress 2 utilizza uno shader di rampa per il rendering. Puoi controllare i dettagli in questo documento:

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

Guarda nella sezione 5, la sottosezione intitolata "Funzione di deformazione diffusa"


1
Bella risposta! La spiegazione della differenza per l'illuminazione tra illuminazione diffusa e rampa è esattamente quello che stavo cercando. Apprezzo anche il commento su quale sia il concetto di shading di rampa in generale. Inoltre, potresti pubblicare un'immagine di esempio da un gioco che utilizza questo concetto?
StampyTurtle

@Stampyturtle Ho aggiornato la mia risposta con un esempio.
Mokosha,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.