Was ist Ramp Shading oder Beleuchtung?

14

Was ist Rampenbeschattung oder Beleuchtung und wie funktioniert es? Ist es anders als Toon Shading oder ist es das gleiche Konzept? Wie wird die Spekularität für Rampenschattierung anders berechnet als für Blinn-Phong oder Lambert?

StampyTurtle
quelle

Antworten:

21

Bei der herkömmlichen Blinn / Phong-Schattierung berechnen Sie den diffusen Term für ein Pixel, indem Sie den Cosinus des Winkels zwischen der Normalen an der Oberfläche und der Richtung des Lichts messen. In diesem Fall würde ein einfacher Shader ungefähr so ​​aussehen:

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

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

Bei der Rampenschattierung besteht die Idee darin, den diffusen Koeffizienten durch eine 1D-Nachschlagetextur zu modulieren. Abhängig davon, was Sie in diese Textur einfügen, können Sie verschiedene Effekte erzeugen. Daher lautet unsere Shader-Funktion zur Berechnung des diffusen Koeffizienten:

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

Wenn wir beispielsweise einen Cell Shader implementieren möchten, können wir eine Rampentextur generieren, die eine Sprungfunktion emuliert:

Bildbeschreibung hier eingeben

Mit derselben Idee können Sie auch unterschiedliche Effekte für die spiegelnde Beleuchtung erzeugen. "Rampenschattierung" bezieht sich eigentlich nur auf die Idee, einen Schattierungswert durch eine Textur zu modulieren.

BEARBEITEN : Team Fortress 2 verwendet beim Rendern einen Ramp-Shader. Sie können die Details in diesem Artikel überprüfen:

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

Schauen Sie sich unter Abschnitt 5 den Unterabschnitt "Diffuse Warping Function" an.

Mokosha
quelle
1
Gute Antwort! Die Erklärung für den Unterschied zwischen diffusem und Rampenlicht ist genau das, wonach ich gesucht habe. Ich schätze auch die Bemerkung darüber, was das Konzept der Rampenbeschattung im Allgemeinen ist. Könnten Sie vielleicht ein Beispielbild aus einem Spiel posten, das dieses Konzept verwendet?
StampyTurtle
@Stampyturtle Ich habe meine Antwort mit einem Beispiel aktualisiert.
Mokosha