Das Half-Life 2 Multisampling Anti-Aliasing Problem
6. August 2003 / von Demirug / Seite 1 von 2
Einleitung
Als vor kurzem Valve die ersten Videos zu ihrem neuesten Werk Half-Life 2 veröffentlichte, erkannte man recht schnell, dass dort kein Anti-Aliasing aktiviert war. Auf Nachfrage musste man bei Valve eingestehen, dass die Verwendung von Multisampling Anti-Aliasing zu unschönen Artefakten führen würde - im genauen Pixelflimmern am Polygonenrand, wobei bei diesem Flimmern dann Pixel mit einer total falschen Farbe auftauchen können.
Kurze Zeit später verkündete Gabe Newell von Valve, man habe eine mögliche Lösung gefunden und werde in kürze zwei Videos zum Vergleichen veröffentlichen.
Die Ursache
Der Hauptgrund für das Multisampling Anti-Aliasing Problem von Half-Life 2 ist in der Art der Texturverwaltung des Spiels zu suchen. Um eine größere Abwechslung in den im Spiel zu sehenden Oberflächen zu bieten, ohne dafür aber gleichzeitig einen unzumutbaren Leistungseinbruch in Kauf nehmen zu müssen, speichert Half-Life 2 mehrere Texturen zusammen in einer einzigen.
Durch diese Technik lässt sich die Anzahl der benötigten Renderdurchläufe zur Darstellung eines Objekts reduzieren. Da jeder Durchlauf von der CPU eingeleitet werden muss, kommt dies vor allem schwächeren CPUs zugute. Die Grafikchips profitieren davon zwar ebenfalls, aber in einem geringeren Maße. Wir wissen also nun, dass Half-Life 2 mehrere Texturen zusammenfasst.
4 Texturen werden in einer einzigen größeren gespeichert
Zum Verhängnis werden Valve nun diese Stellen, an denen zwei Texturen zusammentreffen. Liegt genau auf dieser Kante auch noch eine Polygonkante, sind die Probleme vorprogrammiert. Der genaue Grund dafür hängt mit der Art zusammen, wie Multisampling Anti-Aliasing arbeitet. Es werden zwar für einen Pixel mehrere Sub-Pixel erzeugt und die Prüfung, ob ein Pixel vom Polygon bedeckt wird oder nicht, findet ebenfalls auf dieser Sub-Pixel-Ebene statt.
Im Gegensatz zum Supersampling Anti-Aliasing wird aber nicht für jedes Sub-Pixel das komplette Pixelshading (Berechnen der Texturkoordinaten, Textursamplen sowie das Verrechnen der gesampelten Werte) durchlaufen, sondern nur für einen Punkt innerhalb des Pixels. Dieser Punkt liegt üblicherweise an einer zentralen Stelle des Pixels.
Aufgrund dieser Vorgehensweise kann es nun dazu kommen, dass am Polygonrand der Punkt, welcher als Referenz für das Pixelshading herangezogen wird, außerhalb des eigentlichen Polygons liegt. In der Regel stellt dies kein Problem dar, im Falle der von Valve benutzten Texturspeicherung bei Half-Life 2 allerdings schon. Hier kann es unbeabsichtigt dazu kommen, dass die Texturkoordinaten in einen Bereich der Textur rutschen, welcher gar nicht für dieses Polygon gedacht war.
ungünstiger Samplepunkt am Polygonrand