Voxel-Rendering am Beispiel id-Tech-6 erläutert

Neue Technologien

Voxel-Rendering am Beispiel id-Tech-6 erläutert

Carsten Spille
|
13.04.2009 07:30 Uhr
|
Neu
|
Voxel-Rendering und damit Raycasting ist wieder "in": Nicht nur Intel freut sich für Larrabee darüber, auch Grafikkarten- und Spielhersteller wie id Software finden wieder Gefallen an dem Verfahren. PC Games Hardware zeigt am Beispiel der id-Tech 6 Engine Möglichkeiten und Grenzen des Voxel-Renderings.

AMD Cinema-2.0-Techdemo: Scorpion (Voxel-Rendering) AMD Cinema-2.0-Techdemo: Scorpion (Voxel-Rendering) [Quelle: Siehe Bildergalerie]
Voxel-Rendering mit id-Tech 6: Einleitung
id Software, die Spieleschmiede um Programmiererlegende John Carmack, ist ebenso für technologisch innovatives Design ihrer Spiele-Engines wie für die Indizierungsgefahr der damit veröffentlichten Titel bekannt. Die kommende id-Tech-6-Engine soll sich gar von der bekannten Polygon- und Rasterwelt entfernen und auf Voxel-Rendering setzen. Wir beleuchteten den technischen Hintergrund dieses Verfahrens der 3D-Darstellung bereits in der PCGH-Printausgabe 05/2009 und bieten unseren Online-Lesern diesen Artikel als kleines Ostergeschenk bereits jetzt auf der Webseite an.

Voxel-Rendering - was ist das überhaupt?
Genau wie Pixel und Texel ist auch Voxel ein Kunstwort, ein sogenanntes Portmanteau. Der Begriff setzt sich aus den beiden Bestandteilen "Volumetric" und "Pixel" zusammen - Letzteres ist ebenfalls ein Kunstwort, welches den kleinsten Bestandteil eines digitalen Bildes bezeichnet ("picture element").

Damit ist im Gegensatz zum rein zweidimensionalen Pixel ein Bildpunkt gemeint, welcher sich im virtuellen dreidimensionalen Raum befindet. Neben einer Angabe der Höhen- und Breitenposition besitzt ein Voxel also auch eine Tiefe (den sogenannten Z-Wert).

Raycasting in der Welt der Voxel
Nachdem man bei id Software bereits vor mehr als 15 Jahren für die in Deutschland beschlagnahmte Nazijagd im österreichischen Schloss Wolfenstein auf Raycas­ting setzte, denkt man nun erneut über den Einsatz dieses Verfahrens nach. Damals begnügte man sich noch mit einem einfachen zweidimensionalen Raster als Spielwelt. Entsprechend musste auch nur ein einzelner Strahl (Ray) für jede Bildschirmspalte bis zum nächsten Block berechnet werden. Aus der Länge dieses Strahls ergab sich dann die Bildschirmhöhe der abgetasteten Wand.

Heute könnte man mit dieser Variante der Raycasting-Technik nichts mehr erreichen, da Spieler zumindest bei Ego-Shootern zu Recht eine dreidimensionale Umgebung erwarten. Daher setzt man anstelle des einfachen 2D-Rasters auf ein komplett dreidimensionales Volumen. Aus den flachen Blöcken werden dann vollständige Würfel (Voxel). Vergrößert man die Spielwelt um eine Dimension, muss die Abtastung ebenfalls um diese vergrößert werden. So erfordert id Softwares neue Raycasting-Technik einen Strahl pro Bildschirmpunkt im Vergleich zu einem Strahl pro Spalte (Horizontalauflösung). Damit wird der benötigte Rechenaufwand unumgänglich vervielfacht.

Amdahls Gesetz veranschaulicht: Ist der Programmcode an einer Stelle nicht parallelisierbar, helfen auch Dutzende von Prozessoren kaum weiter. Selbst bei 95-prozentiger Parallelisierbarkeit erreicht man mit acht Kernen nur einen Geschwindigkeitszuwachs von rund 500 Prozent. Amdahls Gesetz veranschaulicht: Ist der Programmcode an einer Stelle nicht parallelisierbar, helfen auch Dutzende von Prozessoren kaum weiter. Selbst bei 95-prozentiger Parallelisierbarkeit erreicht man mit acht Kernen nur einen Geschwindigkeitszuwachs von rund 500 Prozent. [Quelle: Siehe Bildergalerie] Was jedoch unverändert bleibt, ist die Tatsache, dass jeder Strahl unabhängig von allen anderen berechnet wird, die Aufgabe also sehr gut parallelisiert werden kann. Genau hierin sieht Jon Olick von id Software den großen Vorteil des Raycastings gegenüber dem bisherigen, in der Vorverarbeitung sehr seriellen Rasterisierungsverfahren. Denn bereits bei aktuellen Bildschirmauflösungen können Mehrkernprozessoren nahezu perfekt ausgelastet werden. Dies gilt nicht nur für Hauptprozessoren (CPU), sondern auch für die auf Grafikkarten eingesetzten, aktuellen GPUs. Hier kommt das Amdahl'sche Gesetz zum Zuge (siehe Grafik rechts): Je höher der Anteil an Programmcode, welcher sich paral­lelisieren lässt, desto besser ist die Skalierung mit steigender Anzahl an Prozessoren. Auch andersherum gilt: Lässt sich - wie bei der dreiecksbasierten Rasterisierung - nur ein gewisser Anteil des Codes durch Parallelität beschleunigen, sinkt der Nutzen durch eine hohe Prozessoranzahl.

Braucht man nun gar keine Texturen mehr?
Bei der id-Tech-5-Engine, welche im kommenden Spiel Rage eingesetzt wird, setzt id Software auf eine hohe Varianz bei den Texturen, um eine optisch glaubwürdige Spielwelt zu simulieren. Dagegen benötigt eine in Voxeln gespeicherte Geometrie eigentlich keinerlei Texturen mehr. Jedes einzelne Voxel wird inklusive seiner Farbe als Teil der gesamten Informationen gespeichert.

Um optisch mit den heute üblichen hochauflösenden, mehrschichtigen Texturen mithalten zu können, muss die Spielwelt entsprechend fein zerlegt werden. Id Software ist sich der enormen Datenmenge, die dabei entstehen würde, bewusst und greift daher zu einem Trick, welchen die Firma als Voxel Mipmapping bezeichnet.

Dieses Voxel-Modell wurde auf der Siggraph 2008 auf einem aktuellen PC-System mit 60 in Echtzeit berechneten Fps vorgeführt (Modell: Dimitry Parkin). Dieses Voxel-Modell wurde auf der Siggraph 2008 auf einem aktuellen PC-System mit 60 in Echtzeit berechneten Fps vorgeführt (Modell: Dimitry Parkin). [Quelle: Siehe Bildergalerie] Während bei herkömmlichem Texture-Mipmapping für jeweils vier Punkte einer Textur der Mittelwert in der nächstkleineren Mip-Stufe gespeichert wird, geht das Voxel-Mipmapping den umgekehrten Weg: Jedes Voxel kann bis zu acht kleinere Sub-Voxel enthalten. Da diese wiederum auf bis zu acht weitere Voxel verweisen können, lässt sich der Detailgrad quasi beliebig steigern. Voxel, die niemals sichtbar sein können, weil sie zum Beispiel im Inneren eines Objekts liegen, werden dabei einfach nicht gespeichert. Auch die Spielwelt wird von dieser Entscheidung beeinflusst.

Je dynamischer die Umgebung, sprich je realistischer sie auf die Aktionen der Spieler reagieren kann, desto höher muss die Voxel-Auflösung auch unterhalb der sichtbaren Oberfläche sein. Einschusslöcher oder Explosionskrater können so geometrisch korrekt dargestellt werden, anstatt nur über ein simples Texturpflaster angedeutet zu werden.

Speicherplatz: Das alte Problem
Zum Speichern eines einzelnen Voxels geht id Software von einer benötigten Datenmenge von 52 Bytes aus. Dies ist deutlich mehr als die typischen 32 Byte (Position, Normale, Texturkoordinate) pro Vertex. Zusätzlich werden trotz des Mipmappings mehr Voxel als Vertices für den gleichen Detailgrad benötigt. Der durch den Wegfall der Texturen gesparte Speicherplatz kann diesen Zuwachs bei Weitem nicht ausgleichen. Bevor man dieses Problem angehen kann, muss man sich jedoch zuerst einmal Gedanken darüber machen, was man nun mit den in mehreren Mipmaps gespeicherten Voxeldaten tun möchte.

Ziel muss es sein, für jeden Bildschirmpunkt das Voxel zu finden, welches vom jeweilgen Strahl getroffen wird. Entsprechend beginnt man bei dem am gröbsten aufgelösten und sucht den ersten Treffer. Von dort untersucht man nun die bis zu acht Sub-Voxel und wiederholt das Ganze, bis man am Ende des als ­Sparse-Oct-Tree bezeichneten Baums angekommen ist. Das letzte dabei getroffene Voxel bestimmt die grundlegende Pixelfarbe.

Dieses Verfahren ist jedoch für den praktischen Einsatz kaum nutzbar, denn es bringt zwei Probleme mit sich: Will man den Baum jedes Mal bis zum Ende durchlaufen, muss er auch vollständig im Speicher liegen. Aufgrund seiner Größe ist das ein schier aussichtsloses Unterfangen. Das zweite Problem ist nicht weniger verzwickt: Am Ende des Baums sind sehr kleine Voxel gespeichert. Damit kommt ein Detailgrad zustande, welcher nur dann wirklich nützlich ist, wenn man direkt vor dem jeweiligen Objekt steht. Ist dieses jedoch weiter entfernt, trifft man nach einer minimalen Kamerabewegung ein völlig anderes Voxel. Es kommt dadurch zu einem unschönen Flimmern in der Tiefe des Bildes. Beide Probleme können jedoch auf die gleiche Weise gelöst werden. Man sucht nicht mehr das exakte Voxel, welches vom Strahl getroffen wird, sondern das Voxel, das den entsprechenden Bildschirmpunkt vollständig bedeckt. Hierzu kommt dann wieder die Entfernung zur Kamera ins Spiel. Mit zunehmender Entfernung kann auf die feiner aufgelösten Zweige des Voxel-Baums verzichtet werden. Ein schöner Nebeneffekt dieses Verfahrens ist die Reduktion der benötigten Berechnungen. Mithilfe der genutzten Technik lässt sich quasi nebenbei ein Level-of-Detail-System (LOD) für Geometrie erzeugen. Mithilfe der genutzten Technik lässt sich quasi nebenbei ein Level-of-Detail-System (LOD) für Geometrie erzeugen. [Quelle: Siehe Bildergalerie]

Da der Abbruch dieser Rechenoperationen aber dynamisch erfolgt, kann sich dies nur dann positiv auf die Rechenzeit auswirken, wenn der eingesetzte Prozessor über eine entsprechend gute Leistungsfähigkeit bei dynamischen Programmverzweigungen (Dynamic Branching) verfügt. Hauptprozessoren tun dies üblicherweise, während Grafikprozessoren (GPUs) besonders in der Vergangenheit damit so ihre Probleme hatten. Seit Geforce 8 und Radeon X1000 ist das für Shader-Modell 3 erforderliche Dynamic Branching jedoch recht performant integriert. Intels Larrabee könnte mit entsprechender Software-Unterstützung nochmals einen Sprung nach vorne bringen.

Retter in der Not: Auslagerung (Streaming)
Da man nun aufgrund der Entfernung eines Voxel-Blocks zur Kamera sehr genau vorhersagen kann, welcher Detailgrad benötigt wird, ist es möglich, bei Bedarf einzelne Voxelblöcke vom Hauptspeicher in den Grafikspeicher zu laden. Da trotz moderater RAM-Preise jedoch auch der Arbeitsspeicher schnell sein Limit erreichen könnte und auch die Speichermenge der nächs­ten Konsolengeneration noch ein großes Geheimnis ist, sollen auch weitere Datenspeicher wie Festplatten oder optische Datenträger mit einbezogen werden.

Am Daumen (rechts) sehen Sie bei höchster Zoomstufe erste Artefakte. Am Daumen (rechts) sehen Sie bei höchster Zoomstufe erste Artefakte. [Quelle: Siehe Bildergalerie] Der geringeren Bandbreite dieser Speichermedien Rechnung tragend, soll hier ein Format zum Einsatz kommen, das lediglich acht Byte pro Voxel benötigt. Des Weiteren sollen mehrere Voxel zusammen komprimiert werden. Id Software geht davon aus, auf diese Weise nicht mehr Bandbreite als aktuelle Streaming-Lösungen zu benötigen. Das Voxel-Mipmapping hilft auch hier: Kommen Sektoren zum ersten Mal in den Sichtbereich des Spielers, sind diese noch weit entfernt. Entsprechend werden nur die Voxeldaten mit der groben Auflösung benötigt. Kommt der Spieler nun näher, können Schritt für Schritt feiner aufgelöste Voxel vom Datenträger zur Grafikkarte gebracht werden. Durch dieses Verfahren entfällt auch die Notwendigkeit, für Objekte mehrere Genauigkeitsstufen zu erzeugen. Durch entsprechendes Verrechnen der Voxeldaten in Abhängigkeit von der errechneten Länge des Strahles können so unschöne Effekte, wie sie beim Wechsel der Objektgenauigkeit (LOD-Popping) entstehen, vermieden werden.

 
Moderator
21.04.2009 02:50 Uhr
Nuja - Effizienz...
Bei deinem Vorschlag hat jeder Pixel eine seine Koordinaten als Teil eines Polygons, seine Grundtextur, seine bump bzw. displacement map-ordinaten,...
Bei ner Voxelengine hat er seine Koordinaten und ne Farbe. Und der Übergang von einem Detaillevel zum nächsten, wie von ID geplant, ist auch wesentlich einfacher, als ein System, dass in drei verschiedenen Ebenen (tessliert, normal, parallaxbump) rendert, wobei ich mich Frage, ob das überhaupt natlos funktionieren kann, wenn ein Objekt sich über eine größere Bildtiefe erstreckt.
Schraubenverwechsler(in)
20.04.2009 18:27 Uhr
Zitat: (Original von MechUnit;724885)
stimmt, beim bump mapping u.ä. - nicht aber beim normal mapping, da sind das echte höhenunterschiede. aber auch da sind einschusslöcher u.ä. nur als bump maps zu sehen. ich stimme dir also zu.

voxel an sich waren ja damals schon bei delta force (glaube beim 2. teil), outcast etc. eine hardwarelastige sache - die spiele liefen nur auf high end daddelkisten sauber und die grafik hinterlies bei mir eher gemischte gefühle: mal sahs von weitem toll aus, dann aber aus der nähe hässlich... jetzt sieht voxel space natürlich besser aus und wenn die voxel engines tatsächlich technisch mit tricks performance bieten und vergleichsweise nicht mehr so grässliche "fehler" wie damals haben, wird das ne recht interessante sache. ich bin mal gespannt.


Naja, das lässt sich aber auch wesentlich effizienter mit tessalation erreichen bzw. mit dem dazugehörigen displacement mapping.Entfernte Objekte könnten getrost mit bump maps (oder etwas nähere auch mit parallax occlusion maps) dargestellt werden, während sehr nahe Objekt mit displacement mapping und tessalation dargestellt werden, sodass die height-map zum tessalieren das Objekts genutzt wird.3
Das ist sogar streambar da die beziersurfaces nur sehr wenig speicherplatz benötigen und nur temporär ( und sehr schnell) in der GraKa expandiert werden um mit gerundeten surfaces (oberflächen) zu rendern.
Schraubenverwechsler(in)
18.04.2009 06:00 Uhr
Zitat von Ob4ru|3r:
Das ermöglicht auch endlich "richtige" Tiefe in Strukturen, so ziemlich jede "raue" Wand aus z.B. Backsteinen mit Furchen etc. ist meist einfach eine glatte Strutkur samt Texturtapete der mit u.a. Bump Mapping nur der Effekt einer realen Struktur vermittelt wird, das sieht man, wenn man in bestimmten schrägen Winkeln genau vor der Wand steht: Schlichte Illusion. Mit Voxeln kann man da endlich richtige Struktur reinbringen.


stimmt, beim bump mapping u.ä. - nicht aber beim normal mapping, da sind das echte höhenunterschiede. aber auch da sind einschusslöcher u.ä. nur als bump maps zu sehen. ich stimme dir also zu.

voxel an sich waren ja damals schon bei delta force (glaube beim 2. teil), outcast etc. eine hardwarelastige sache - die spiele liefen nur auf high end daddelkisten sauber und die grafik hinterlies bei mir eher gemischte gefühle: mal sahs von weitem toll aus, dann aber aus der nähe hässlich... jetzt sieht voxel space natürlich besser aus und wenn die voxel engines tatsächlich technisch mit tricks performance bieten und vergleichsweise nicht mehr so grässliche "fehler" wie damals haben, wird das ne recht interessante sache. ich bin mal gespannt.
PCGH-Community-Veteran(in)
15.04.2009 21:08 Uhr
Zitat: (Original von ruyven_macaran;718276)
Man sollte dabei aber bedenken, dass die Rechenlast noch einmal massiv gesteigert wird, wenn jeder Gegenstand auch mit Voxeln gefüllt sein soll...


da könnte standartfüllungen benutzen. das teil hat solange keine füllung bis ein treffer kommt. erst dann wird je nach gegenstand (steine z.B. graue voxel, holz braun etc pp) die gegenstände gefüllt. Somit wäre das eine sehr dynamische sache...
Moderator
15.04.2009 20:13 Uhr
Man sollte dabei aber bedenken, dass die Rechenlast noch einmal massiv gesteigert wird, wenn jeder Gegenstand auch mit Voxeln gefüllt sein soll...

Verwandte Artikel

Neu
 - 
Taiwan Semiconductor Manufacturing Company (TSMC) hat bestätigt, dass man mit der Massenproduktion von 300-mm-Wafern in 28 nm begonnen hat. Erste Chips sollen bereits an die Kunden ausgeliefert worden sein. mehr... [30 Kommentare]
Neu
 - 
Die PCI SIG hat nun, wie vorher bereits angekündigt, die finalen Spezifikationen für den neuen PCI-E-Standard 3.0 verabschiedet. Damit erhöht sich die Bandbreite entsprechender Geräte beträchtlich. mehr... [15 Kommentare]
Neu
 - 
Ein neues Eingabegerät des MIT Media Lab sorgt für Aufsehen. Dabei handelt es sich um eine Technologie, welche die Hand als Maus erkennt. Zum Einsatz kommt unter anderem Infrarottechnik. mehr... [14 Kommentare]