Marching CubesMarching Cubes ist ein Algorithmus zur Darstellung von Isoflächen in der 3D-Computergrafik. Er nähert eine Isofläche durch eine Polygongrafik an. Entwicklung des AlgorithmusMarching Cubes wurde von William E. Lorensen und Harvey E. Cline als Ergebnis einer Forschungsarbeit für die Forschungsabteilung des Unternehmens General Electric im Jahre 1985 entwickelt und zum Patent angemeldet[1]. Im Jahre 1987 wurde der Algorithmus in der Fachzeitschrift Computer Graphics vorgestellt. Lorensen und Cline beschäftigten sich mit der effizienten Visualisierung von Bilddaten bildgebender Verfahren wie Computertomografie, Magnetresonanztomografie und Single-Photon-Emissionscomputertomographie.[2][3] Bedeutung des AlgorithmusIn der 3D-Computergrafik gibt es verschiedene Methoden, dreidimensionale Objekte zu modellieren. Eine davon ist die Modellierung als polygonale Oberfläche („Drahtgittermodell“): Man fügt eckige Flächen – in der Regel Dreiecke – so aneinander, dass sie die Oberfläche des Objektes nachbilden. Diese Modelle können sehr schnell und einfach in Bilder umgesetzt werden, der Speicherbedarf eines Modells ist relativ gering und durch zahlreiche Raffinessen sind sehr realistische Bilder möglich. Andererseits ist es fast unmöglich, auf diese Weise ein Medium wie Nebel zu modellieren, welches keine klar umrissene Oberfläche aufweist. Eine andere Methode ist die Modellierung als Voxel-Datenmenge: In regelmäßigen Abständen wird an einem einzelnen Punkt aus dem Objekt die Dichte des Materials abgelesen; das Ergebnis ist ein würfelförmiges dreidimensionales Gitter aus Voxeln. Bildgebende Systeme wie die Computertomografie erzeugen von Natur aus solche Modelle. Diese Voxel-Modelle können recht einfach in Bilder umgesetzt werden, die zudem sehr realistisch und detailgetreu wirken. Allerdings benötigt das Modell sehr viel Speicherplatz – in Größenordnungen von mehreren hundert Megabyte bis einigen Gigabyte – und die Visualisierung dauert erheblich länger als bei einem polygonalen Oberflächenmodell vergleichbarer Größe. Zudem sind Manipulationen (zum Beispiel das Deformieren eines Objektes) deutlich schwieriger, teils sogar unmöglich. Marching Cubes ermöglichte es erstmals, unpraktikable Volumen-Modelle durch praktikable polygonale Oberflächen-Modelle anzunähern, um sie anschließend effizient zu visualisieren. Der Algorithmus befriedigte damit den Wunsch der Radiologie nach einem Verfahren, Daten bildgebender Systeme wie der Computertomografie schnell und aussagekräftig bildlich darzustellen. Auch heute noch ist Marching Cubes als effizienter Transformationsalgorithmus im Einsatz. Zwar hat die Volumengrafik in der Zwischenzeit Fortschritte gemacht und durch 3D-Texturen Eingang in die Computergrafik-Praxis gefunden, jedoch gibt es bisher keine Hardware, welche die Volumengrafik auf ähnliche Weise beschleunigt, wie dies mit Grafikprozessoren für Dreiecke gelingt. Der AlgorithmusDie Idee von Marching Cubes ist es, das gegebene Voxelmodell eines Objekts zunächst in kleine Würfel („cubes“) zu zerlegen und anschließend von einem Würfel zum nächsten zu „marschieren“ und zu bestimmen, wie die Oberfläche des Objekts den jeweiligen Würfel durchschneidet. Dazu wird ein vom Benutzer gewählter Grenzwert verwendet, um zu bestimmen, welche Teile der einzelnen Würfel innerhalb und welche außerhalb des letztendlichen Objekts liegen. Durch Veränderung dieses als „Dichte“ interpretierten Grenzwerts kann der Benutzer bestimmen, welche Bereiche des Objekts dargestellt werden und welche nicht. EingabeDer Algorithmus verarbeitet folgende Eingabeparameter:
DatenstrukturenDie folgenden Datenstrukturen werden vom Algorithmus verwendet oder erzeugt, aber nicht als Eingabeparameter übergeben:
Verarbeitung
Ausgabe
FunktionsweiseDer Standard-Algorithmus, wie ursprünglich von William E. Lorensen und Harvey E. Cline beschrieben, konstruiert eine facettierte Isofläche, indem er den Datensatz sequentiell würfelweise verarbeitet. Somit verarbeitet der Ansatz zuerst die m Würfel der ersten Zeile der ersten Schicht des Datensatzes in sequentieller Reihenfolge. Während dieser Verarbeitung wird jede Würfelecke, der einen Wert gleich oder über dem Isowert hat, markiert. Alle anderen Ecken bleiben unmarkiert. Die Isofläche schneidet jede Würfelkante, die mit einer markierten und einer unmarkierten Ecke endet. Jeder Würfel, der eine geschnittene Kante enthält, ist aktiv. Die Berechnungen, die die aktiven Würfel finden, können als die aktive Würfelbestimmungskomponente des Algorithmus angesehen werden. Diese Komponente kann als eigenständiger früher Verarbeitungsschritt implementiert oder in eine andere Verarbeitung integriert werden, aber in beiden Fällen beinhaltet sie das Durchlaufen von Datensätzen in sequentieller Reihenfolge. Da jeder der 8 Eckpunkte eines Würfels entweder markiert oder unmarkiert sein kann, gibt es 28 = 256 mögliche Markierungsszenarien für einen Würfel. Der Standard-Algorithmus berücksichtigt jedoch Spiegelsymmetrie und Rotationssymmetrie, was zu nur 15 Markierungsszenarien führt. Spiegelsymmetrische Würfel haben das gleiche Würfel-Isoflächen-Schnittmuster. Zwei Würfel sind rotationssymmetrisch, wenn es eine Reihe von Drehungen gibt, die, wenn sie auf einen Würfel angewendet werden, ihn in eine neue Orientierung transformieren, in der die Markierung an jeder transformierten Ecke identisch mit der Markierung des anderen Würfels ist. Rotationssymmetrische Würfel haben äquivalente Würfel-Isoflächen-Schnittmuster. Die Schnittpunkte zwischen Isofläche und Kante können unter Verwendung einer Interpolationstechnik mit Subvertex-Genauigkeit geschätzt werden. Der Standard-Algorithmus verwendet lineare Interpolation, um den Schnittpunkt für jede Schnittkante zu schätzen. Wenn eine Kante mit der Einheitslänge die Endpunkte und hat, deren Skalarwerte bzw. sind, dann hat der Schnittpunkt bei einem Isowert Komponenten der Form: wobei Ein Vorteil der würfelweisen Verarbeitung des Standard-Algorithmus ist, dass jeder Kantenschnittpunkt nur einmal berechnet werden muss. Trotzdem können Algorithmen, die andere Durchlaufmuster verwenden, auch die gleichen Rechenvorteile durch die Verwendung von Zusatzdatenstrukturen, z. B. Hashtabellen, erreichen. Der letzte Schritt des Algorithmus besteht darin, dreieckige Facetten zu erzeugen, die den Teil der Isofläche darstellen, die jeden Würfel schneidet. Die Schnittpunkte definieren die Ecken der Dreiecke, und die Sammlung der dreieckigen Facetten in allen Würfeln bildet das dreieckige Netz, das die Isofläche definiert. Das Facettierungsmuster in jedem Würfel kann aus der Lookup-Tabelle für die Schnittpunkt-Topologie bestimmt werden. Die Verarbeitungsschritte, die die Facettierung aufbauen, können als Isoflächen-Komponente des Algorithmus betrachtet werden.[3] VerbesserungenDer oben dargestellte Algorithmus für Marching Cubes ist sehr rudimentär. Er nutzt beispielsweise nicht aus, dass bereits berechnete Informationen wieder verwendet werden können: Teilen sich zwei benachbarte Kuben eine Kante, so müssen darauf liegende Knoten nur einmal interpoliert werden; der Nachbar kann die bereits gefundenen Knoten einfach übernehmen. Da die Laufzeit des Algorithmus nur von der Anzahl der betrachteten Kuben abhängig ist, liegt in der Verminderung dieser Anzahl das größte Einsparpotenzial. Weitere Optimierungsansätze versuchen daher, vor dem Marching Cubes-Durchlauf diejenigen Würfel aus der Datenmenge herauszufiltern, die ohnehin nicht mit der Isooberfläche in Berührung kommen. Dies sind diejenigen Kuben, die vollständig innerhalb oder vollständig außerhalb des Objektes liegen. OctreeEine 1992 von Wilhelms/van Gelder vorgeschlagene Methode besteht darin, das Volumen in einem Octree abzulegen. In einem Octree wird normalerweise jeder Würfel von Voxeln in acht Unterwürfel zerlegt. Zu jedem Würfel wird nun der niedrigste und der höchste Wert abgespeichert, der darin zu finden ist. Sind bei einem Würfel beide Werte gleich, so wird er nicht mehr weiter unterteilt. Das Ergebnis ist eine Hierarchie von kleiner werdenden Würfeln, für die jeweils ihr Werteintervall bekannt ist. Durch eine Traversierung dieser Hierarchie lassen sich nun diejenigen Würfel aussortieren, deren Minimum über oder deren Maximum unter dem Iso-Schwellwert liegt[4]. Das Verfahren hat die Nachteile, dass bei jeder Änderung des Isowertes die Hierarchie komplett neu durchlaufen werden muss und dass in realistischen Datensätzen, die normalerweise zentriert vorliegen, meist erst auf unteren Hierarchieebenen Würfel ignoriert werden können. Approximation durch DiskretisierungHierbei handelt es sich um eine Vereinfachung des Marching Cube Algorithmus: die in der obigen Beschreibung des Algorithmus genannte Interpolation der Isoflächenschnittpunkte entfällt. Eckpunkte der durch den Algorithmus erzeugten Dreiecke sind dann lediglich die Mittelpunkte der zwölf Kanten des Würfels sowie sein Mittelpunkt. Auch die Flächennormalen müssen dann nicht mehr interpoliert werden, sondern können auch in einer Nachschlagetabelle gespeichert werden. Ein Vorteil dieser Approximation ist, dass nur noch Integer-Berechnungen durchgeführt werden müssen. Außerdem erhält man viele koplanare Dreiecksflächen, was die Anzahl der resultierenden Dreiecksflächen wesentlich reduziert.[5] PatentierungNach der Patentierung im Jahre 1985[1] konnte der MC-Algorithmus lange Jahre nicht verwendet werden, ohne Gebühren an den Entwickler zu zahlen. Daher wurde als Alternative der Marching Tetrahedrons-Algorithmus entwickelt, welcher die Voxel-Würfel in Tetraeder unterteilte, und sonst gleich funktionierte. Nach 20 Jahren Gültigkeit lief das US-Patent auf den MC-Algorithmus im Jahre 2005 aus. WeblinksEinzelnachweise
|