Co to jest cieniowanie lub oświetlenie?

14

Co to jest cieniowanie lub oświetlenie i jak działa? Czy różni się od cieniowania tonicznego, czy jest to ta sama koncepcja? Jak inaczej oblicza się specularity dla cieniowania rampowego w porównaniu do blinn-phonga lub Lamberta?

StampyTurtle
źródło

Odpowiedzi:

21

W tradycyjnym cieniowaniu Blinn / Phong obliczasz rozproszony składnik piksela, mierząc cosinus kąta między normalną na powierzchni a kierunkiem światła. W takim przypadku prosty moduł cieniujący wyglądałby mniej więcej tak:

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

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

W cieniowaniu rampą chodzi o modulowanie współczynnika rozproszenia za pomocą tekstury wyszukiwania 1D. W zależności od tego, co umieścisz w tej teksturze, możesz generować różne efekty. Dlatego nasza funkcja cieniowania do obliczania współczynnika rozproszenia staje się:

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

Na przykład, jeśli chcielibyśmy wdrożyć moduł cieniujący komórki, moglibyśmy wygenerować teksturę rampy, która emuluje funkcję kroku:

wprowadź opis zdjęcia tutaj

Możesz użyć tego samego pomysłu, aby wygenerować różne efekty również dla oświetlenia lustrzanego. „Rampowanie” naprawdę odnosi się tylko do pomysłu modulacji wartości cieniowania za pomocą tekstury.

EDYCJA : Team Fortress 2 korzysta z modułu cieniującego podczas renderowania. Możesz sprawdzić szczegóły w tym dokumencie:

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

Spójrz na sekcję 5, w podsekcji zatytułowanej „Diffuse Warping Function”

Mokosha
źródło
1
Świetna odpowiedź! Wyjaśnienie różnicy w oświetleniu między oświetleniem rozproszonym i rampowym jest dokładnie tym, czego szukałem. Doceniam także komentarz na temat ogólnej koncepcji cieniowania. Na marginesie, czy mógłbyś zamieścić przykładowy obraz z gry, która korzysta z tej koncepcji?
StampyTurtle 15.03.13
@Stampyturtle Zaktualizowałem swoją odpowiedź przykładem.
Mokosha