OpenGL [1]: Billboards verfeinern mit Z-Feathering [2]

verfasst von : Maddin am 30.09.2006, 13:12 Uhr
OpenGL [3]
In diesem rein theoretischen Tutorial will ich über die Problematik von Geometrie schneidenden Billboards sprechen die so in praktisch allen Spielen vorzufinden ist. Ziel des Tutorials ist es zu erläutern wie die häßlichen Schnittkanten die dabei entstehen effektiv unterdrückt werden können.
Billboards

Das sind in der Regel viereckige, texturierte Polygone, die zur Kamera hin ausgerichtet werden. Sie werden vor allem dazu eingesetzt Detailreichtum vorzutäuschen weshalb sie auch Imposter (engl. Betrüger, Täuscher) genannt werden. So können weit entfernte Objekte wie zum Beispiel Bäume resourcensparend dargestellt werden, indem statt einem Model ein Billboard benutzt wird (siehe z.B. FarCry [4]).

Schnittkanten

Schauen wir uns zunächst einmal an von welchen Kanten eigentlich die Rede ist. Im folgenden Bild sehen wir eine in nebel gehüllte Hügellandschaft. Überall dort wo die Nebelbillboards die Hügel schneiden entstehen deutlich sichtbare Kanten.


Billboardnebel, der die Hügel schneidet


Die Kanten entstehen weil die Billboards nur zu den Rändern hin einen Alphawert von 0 in ihrer Textur haben, also transparent sind. Werden sie aber "innen" geschnitten, weil sie einen Hügel durchdringen, so kann man an den Schnittflächen deutliche Kanten erkennen, da die Billboardtextur dort in der Regel nicht transparent genug ist.

Z-Feathering

Beim Z-Feathering [5] werden nun die Informationen aus dem Z-Puffer benutzt um die Billboards zu ihren Schnittflächen hin auszublenden um so der sichtbaren Kantenbildung entgegenzuwirken.


Schema des Z-Feathering


Dies wird erreicht indem die Tiefeninformation jedes Fragments mit dem bereits im Tiefenpuffer vorhandenen Wert (aufgrund der Hügellandschaft) verglichen wird. Sobald die Differenz zwischen Fragement- und Z-Pufferwert einen vorgegebenen Schwellwert unterschreitet wird damit begonnen die Transparenz des Fragments zu erhöhen. Die betroffenen Fragmente werden also weich "ausgeblendet".


Das Ergebnis für die oben gezeigte Szene sieht dann folgendermaßen aus:


Billboardnebel ohne Schnittkanten


An dieser Stelle muss ich mich entschuldigen keinen Code beigelegt zu haben. Der mir vorliegende Quellcode gehört meinem Arbeitgeber. Ich werde aber Pseudocode für die Shader nachliefern, der die Funktionalität verdeutlichen sollte.

Kommentare

Darstellung Reihenfolge
Re: Z-Buffer-Blending
von fallenAngel84
am 02.10.06, 23:15
[ Benutzer Information [6] ] [ Nachricht senden [7] ]
Ahoi das Wort was du suchst nennt sich Z-Feathering [8]. Es gibt auch ein Beispiel von ATI dazu:

http://www.ati.com/developer/samples/DepthExplosion.html

mfg Mark

Re: Z-Buffer-Blending
von Maddin
am 03.10.06, 16:55
[ Benutzer Information [9] ] [ Nachricht senden [10] ]
Hmm das ist aber nicht ganz das selbe. Die verwenden dort Sprites mit zusätzlichen Tiefeninformationen.

bzw. ist das Ergebniss nicht das gleiche. In meinem Fall werden die Billboards aufgrund der Tiefeninformationen ja ausgeblendet.

... doch du hast Recht es muss Z-Feathering [11] heißen.

Nur angemeldete Benutzer dürfen Kommentare verfassen. Zur Registrierung/Anmeldung [12]
_LINKS
  [1] http://www.gamedev.de/index.php?name=News&catid=17
  [2] http://www.gamedev.de/index.php?name=News&file=article&sid=182
  [3] http://www.gamedev.de/index.php?name=News&catid=&topic=7
  [4] http://www.farcrygame.com
  [5] http://gamedev.de/index.php?name=News&file=article&sid=182
  [6] http://www.gamedev.de/user.php?op=userinfo&module=User&uname=fallenAngel84
  [7] http://www.gamedev.de/index.php?module=Messages&func=compose&uname=fallenAngel84
  [8] http://gamedev.de/index.php?name=News&file=article&sid=182
  [9] http://www.gamedev.de/user.php?op=userinfo&module=User&uname=Maddin
  [10] http://www.gamedev.de/index.php?module=Messages&func=compose&uname=Maddin
  [11] http://gamedev.de/index.php?name=News&file=article&sid=182
  [12] http://www.gamedev.de/user.php