Voxel-Rendering am Beispiel id-Tech 6 Engine, Teil 2
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. [Hinweis: Es handelt sich sich um einen Artikel vom 13.04.2009, den wir anlässlich der Vorstellung des Doom Reboots neue Ehre zuteil werden lassen]
Quelle: http://www.amd.com
AMD Cinema-2.0-Techdemo: Scorpion (Voxel-Rendering)
Anti-Aliasing beim Voxel-Rendering mit id-Tech 6
Bisher war immer von einem Strahl pro Bildpunkt die Rede. Dies verursacht genau wie beim Rasterisierungsverfahren deutlich sichtbare Kanten an den Objektgrenzen, welche umso auffälliger werden, je niedriger die Zielauflösung ist.
Natürlich wäre es möglich, einfach mehrere Strahlen pro Pixel zu berechnen, was dem Supersampling-Verfahren gleichkäme, aber eben auch mit dem x-fachen Rechenaufwand verbunden wäre. Id Software schwebt jedoch ein intelligenteres Verfahren vor. Durch einen Kantenfilter sollen die Bereiche des Bildes gesucht werden, welche am meisten von zusätzlichen Strahlen profitieren würden. Dieses adaptive Supersampling-Verfahren wird dann nur für diese Bereiche genutzt und spart gegenüber einem Brute-Force-Supersampling viel Rechenzeit. Um dabei eine konstante Framerate zu ermöglichen, könnte die Anzahl der zusätzlichen Strahlen zudem so begrenzt werden, dass man innerhalb der verfügbaren Rechenzeit bleibt. Der Kantenfilter leistet dabei wertvolle Hilfe, indem er einzelne Bildschirmpunkte priorisieren kann. Der zugrunde liegende Algorithmus, ob nun auf Kontrast- oder Tiefenwert-Basis, muss dabei allerdings robust genug sein, dass möglichst keine Kanten unbeachtet durchrutschen können, durch die mitten in einem geglätteten Bild eine nervige Flimmerkante entsteht.
Quelle: http://www.pcgameshardware.de
Der Ist-Zustand des Rasterisierungs-Verfahrens (oberes Diagramm) lässt das Dreiecks-Setup zum Flaschenhals werden, da es nicht parallelisiert werden kann. Mindestens die beiden im zweiten und dritten Diagramm schematisierten Optionen bestehen, um diesem Flaschenhals in der nächsten Rasterizer-Generation aus dem Wege zu gehen.
Grenzen des Voxelraumes
Damit die von einem Strahl getroffenen Voxel möglichst schnell gefunden werden, müssen diese durch eine aufwendige Vorverarbeitung in eine passende Form gebracht werden. Aufgrund des Streamings ist die Größe der Spielwelt jedoch nur durch den Speicherplatz beschränkt. Dies gilt allerdings nur für die statischen Bestandteile der Welt wie Gebäude oder Vegetation. Für alles, was sich bewegen soll, muss man eine andere Lösung finden.
In diesem Punkt ist sich id Software noch nicht ganz sicher, in welche Richtung man gehen will. Möchte man auch für dynamische Objekte im Voxel-Space bleiben, müssen die bewegten Objekte immer wieder zur Laufzeit in Voxel umgerechnet und der Sparse-Octree aktualisiert werden - ein nicht zu unterschätzender Rechenaufwand. Folgerichtig denkt man auch daran, die dynamischen Elemente durch klassisches Rasterisieren in den zuvor durch Raycasting gewonnenen Hintergrund einzufügen. Da die Rasterisierungseinheit nicht mehr für den statischen Teil gebraucht wird, ergibt sich etwas zusätzliche Kapazität für mehr Details bei den dynamischen Objekten. Trotzdem hofft id Software, dass bei zukünftigen GPUs auch der Rasterisierungsprozess parallelisiert wird.
Geburt eines Voxels
Nachdem wir nun geklärt haben, was man mit einer als Voxel-Menge gespeicherten Spielwelt tun kann, stellt sich die Frage, wie diese überhaupt entsteht. Klassische Programme zur Erzeugung von 3D-Welten arbeiten mit Dreiecken oder Freiformflächen wie NURBS (Non-Universal Rational B-Splines). Da mit diesen Mitteln aber Körper beschrieben werden, ist es mathematisch verhältnismäßig einfach, diese in eine Würfelmenge zu zerlegen. Der komplizierte Teil beginnt erst danach, wenn die entstandene Datenmenge wieder reduziert werden muss. Dabei muss jedes Voxel dahingehend untersucht werden, ob es jemals sichtbar sein kann. Des Weiteren ist es notwendig zu prüfen, ob die acht Voxel, welche später in der nächsten Voxelstufe zusammengefasst werden, die gleichen Eigenschaften haben. In diesem Fall wäre es nicht notwendig, diesen feinen Detailgrad zu speichern. Dass dabei eine Außenfläche eines Objekts an verschiedenen Stellen unterschiedlich dick werden kann, spielt keine Rolle, denn bei der Abtastung wird nur nach der Außenfläche der Voxel gesucht.
Quelle: http://www.pcgameshardware.de
Mithilfe von Volumen-Rendering auf Voxel-Basis kann man auch das Innere von Objekten wie dem menschlichen Schädel sichtbar machen.
Quelle: http://www.pcgameshardware.de
Durch Veränderung der Shader-Parameter sind beliebige Schnitte durch den Voxel-Datensatz möglich.
Quelle: http://www.pcgameshardware.de
Dadurch ist es möglich, das Innere des abgetasteten Körpers auf Anomalien wie Frakturen oder Tumore abzusuchen.
Raycasting vs. Raytracing
Obwohl beide Techniken ein "Ray" im Namen tragen, gibt es einen entscheidenden Unterschied: Während beim Raytracing ein Strahl von einem getroffenen Objekt abgelenkt werden kann, sucht man beim Raycasting nur das erste Objekt. Entsprechend sind beim Raycasting die Schatten, Reflexionen, Refraktionen oder ähnliche Effekte nicht Teil des Verfahrens. Im Gegenzug weiß man jedoch sehr genau, welche Objekte/Voxel von einem Strahl getroffen werden können. Beim Raytracing dagegen kann theoretisch jedes Objekt der gesamten Spielwelt von einem abgelenkten Strahl getroffen werden. Entsprechend schwer ist es, Raytracing mit Streaming zu verbinden, während dies beim Raycasting nicht komplizierter ist als beim Rasterisierungsverfahren.
Leistungsaussichtent: Voxel-Rendering mit id-Tech 6
Wie bei allen neuen Verfahren stellt sich auch hier die Frage nach der praktischen Umsetzbarkeit. Id Software rechnet damit, dass eine Geforce 8800 ein Bild in 720p mit 30 Fps berechnen könnte. In der Praxis wurde dies jedoch nicht ganz erreicht. Bei einer Prognose für die nächste Konsolengeneration glaubt man, dass 1080p mit 60 Fps erreichbar seien.
Fazit: Voxel-Rendering mit id-Tech 6
Durch den Einsatz von Voxeln und Raycasting würde bei der Detailgenauigkeit ein großer Schritt nach vorn möglich. Allerdings konzentriert sich das von id Software angestrebte Verfahren sehr stark auf die Darstellung einer statischen Welt mit vorberechneter, also nicht dynamischer Beleuchtung - mit steigender Rechenleistung ist aber auch eine dynamische Beleuchtung möglich. Entwickeln sich Spiele weiter in die derzeitige Richtung, dem Spieler mehr Interaktion mit seiner Spielwelt zu erlauben, wird es id Software mit dieser im Grundsatz gar nicht so neuen Idee schwer haben - aber gerade Konsolenspiele passen sich ja oft den Gegebenheiten der verwendeten Engine an.
--
(Der Artikel stammt von unserem freien Mitarbeiter Ralf Kornmann und erschien zunächst in der Printausgabe 05/2009). Passend zum Thema empfehlen wir Ihnen auch unseren Hintergrundartikel zur kommenden Microsoft-API DirectX 11.

...sondern nur texturierte Polygonblöcke, die dort die gleiche Funktion wie Voxel einnehmen!
Einige Minecraf-Klone benutzen aber "echte" Voxel!
Minecraft benutzt übrigens immer noch keine Voxel.
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.
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.
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.
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.