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).
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 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.
Quelle: bei Interess bitte klicken