2010-01-03 8 views

Antwort

14

Verzögerte Schattierung.

Kurz gesagt, Sie rendern Ihre Szene ohne Lichter. Stattdessen speichern Sie die Normalen und Weltpositionen zusammen mit den texturierten Pixeln in mehreren Rahmenpuffern (sogenannten Renderzielen). Sie können dies sogar in einem einzigen Durchgang tun, wenn Sie eine Mehrfach-Renderziel-Erweiterung verwenden.

Sobald Sie Ihre Puffer vorbereitet haben, beginnen Sie, eine Reihe von Vollbild-Quads zu rendern, jedes mit einem Pixel-Shader-Programm, das die Normalen und Positionen ausliest und das Licht für eine oder mehrere Lichtquellen berechnet.

Da Licht additiv ist, können Sie so viele Vollbild-Quads rendern, wie Sie möchten, und das Licht für so viele Lichtquellen akkumulieren, wie Sie möchten.

Ein letzter Schritt besteht aus einer Komposition zwischen Ihrem Licht und dem unbeleuchteten texturierten Bildpuffer.

Das ist mehr oder weniger der State-of-the-Art Weg, es zu tun. Es ist jedoch eine Herausforderung, Nebel und Transparenz mit einem solchen System zu arbeiten.

7

OpenGL Lichter ist ein simplistic System, das, soweit ich weiß, bereits in der veralteten Liste ist. Sie sollten selbst mit den Lichtern umgehen, indem Sie eine schreiben. Werfen Sie einen Blick here.

+1

Das Tutorial sagt "daher ist der beste Weg, verschiedene Shader für verschiedene Lichtmengen zu kompilieren." Ähm ... das ist nicht wirklich das, was ich machen möchte, da ich mich in der Welt bewegen kann und manchmal 100 Lichter, manchmal 10 Lichter ... Ich würde nicht mehr als 2000 Shader für jede mögliche Kombination von sichtbar schreiben wollen Beleuchtung. Oder habe ich etwas schrecklich falsch verstanden: / –