34
Streaming von Meshes

Mesh: Gesamtheit der Vertex- und Dreicksarrays eines Polygons Streambarer Mesh: Mesh dessen Daten nicht in ihrer Gesamtheit im Hauptspeicher vorhanden

Embed Size (px)

Citation preview

Page 1: Mesh: Gesamtheit der Vertex- und Dreicksarrays eines Polygons Streambarer Mesh: Mesh dessen Daten nicht in ihrer Gesamtheit im Hauptspeicher vorhanden

Streaming von Meshes

Page 2: Mesh: Gesamtheit der Vertex- und Dreicksarrays eines Polygons Streambarer Mesh: Mesh dessen Daten nicht in ihrer Gesamtheit im Hauptspeicher vorhanden

Mesh: Gesamtheit der Vertex- und Dreicksarrays eines Polygons

Streambarer Mesh: Mesh dessen Daten nicht in ihrer Gesamtheit im Hauptspeicher vorhanden sein müssen, um sie zu verarbeiten

Was versteht man darunter ?

Page 3: Mesh: Gesamtheit der Vertex- und Dreicksarrays eines Polygons Streambarer Mesh: Mesh dessen Daten nicht in ihrer Gesamtheit im Hauptspeicher vorhanden

Normale Darstellung von Meshes: Arrays von floats für die Vertexdaten, Array von Indizes auf die Vertexdaten für die Flächendaten

Je komplexer das Polygon wird desto mehr Daten müssen abgelegt werden: mehrere Gigabyte Vertizedaten und mehrere Gigabyte Flächendaten

Motivation

Page 4: Mesh: Gesamtheit der Vertex- und Dreicksarrays eines Polygons Streambarer Mesh: Mesh dessen Daten nicht in ihrer Gesamtheit im Hauptspeicher vorhanden

Um nur einzelne Teile des Meshes zu verwenden ohne alles zu dereferenzieren müssen Maßnahmen an Aufbau und Anordnung der Meshdaten vorgenommen werden

Motivation

Page 5: Mesh: Gesamtheit der Vertex- und Dreicksarrays eines Polygons Streambarer Mesh: Mesh dessen Daten nicht in ihrer Gesamtheit im Hauptspeicher vorhanden

Es gibt immer die Möglichkeit der Speicherung der Daten auf externem Speicher (z.B Festplatte)

Algorithmen die darauf arbeiten nennt man Out-of-core

Verschiedene Möglichkeiten: Zerteilen des Meshes, externe Datenstrukturen, „Dreieckssuppe“, Streaming

Vorrausetzungen

Page 6: Mesh: Gesamtheit der Vertex- und Dreicksarrays eines Polygons Streambarer Mesh: Mesh dessen Daten nicht in ihrer Gesamtheit im Hauptspeicher vorhanden

Simples Verfahren, welches große Meshes in kleinere Abschnitte unterteilt

Aber: dazu muss zunächst für den Cut dereferenziert werden

Mesh-Cutting

Page 7: Mesh: Gesamtheit der Vertex- und Dreicksarrays eines Polygons Streambarer Mesh: Mesh dessen Daten nicht in ihrer Gesamtheit im Hauptspeicher vorhanden

Ähnlicher Ansatz wie Mesh Cutting: Aufteilung in sog. Cluster

Nutzung dieser Aufteilung um je nach aktuellem Bedarf zu pagen

Externe Datenstrukturen

Page 8: Mesh: Gesamtheit der Vertex- und Dreicksarrays eines Polygons Streambarer Mesh: Mesh dessen Daten nicht in ihrer Gesamtheit im Hauptspeicher vorhanden

Umgeht die Problematik der indizierten Daten indem man eben keine Indizes verwendet

Dreiecke werden nacheinander von der Platte in den Speicher geholt

Beziehungen werden rekonstruiert oder einfach ignoriert

„Dreieckssuppe“

Page 9: Mesh: Gesamtheit der Vertex- und Dreicksarrays eines Polygons Streambarer Mesh: Mesh dessen Daten nicht in ihrer Gesamtheit im Hauptspeicher vorhanden

Jedoch: Wieder initiales dereferenzieren aller indizierten Daten notwendig

Ergo wie die anderen Varianten nicht die Lösung des Problems

„Dreieckssuppe“

Page 10: Mesh: Gesamtheit der Vertex- und Dreicksarrays eines Polygons Streambarer Mesh: Mesh dessen Daten nicht in ihrer Gesamtheit im Hauptspeicher vorhanden

Einführung einer neuen Information: Finalisierung

Ist ein Vertex finalisiert wird er nicht länger für die Berechnungen benötigt

Ist ein vertex finalisiert kann er also aus dem Hauptspeicher entfernt werden

Streambare Meshes

Page 11: Mesh: Gesamtheit der Vertex- und Dreicksarrays eines Polygons Streambarer Mesh: Mesh dessen Daten nicht in ihrer Gesamtheit im Hauptspeicher vorhanden

Im Standardformat für Meshes werden keine Anforderungen daran gestellt wo die Vertices der einzelnen Dreiecke abgelegt werden

Für die anfänglichen Meshes praktisch, heute jedoch problematisch, da keine bekannten Ordnungen existieren

Bisherige Anordnung

Page 12: Mesh: Gesamtheit der Vertex- und Dreicksarrays eines Polygons Streambarer Mesh: Mesh dessen Daten nicht in ihrer Gesamtheit im Hauptspeicher vorhanden

Um die Güte der Streambarkeit einer Meshindexanordnung zu bestimmen brauchen wir Anhaltswerte

Dreicksabstand : gibt an wieviele Dreiecke sich zwischen der ersten und der letzten Referenzierung des Vertex‘ sind

Definition Streambarkeit

Page 13: Mesh: Gesamtheit der Vertex- und Dreicksarrays eines Polygons Streambarer Mesh: Mesh dessen Daten nicht in ihrer Gesamtheit im Hauptspeicher vorhanden

Vertexabstand: maximal Indexdifferenz zwischen den Vertices eines Dreiecks

Dreiecks- Vertexweite: maximale Anzahl die zwischen erstem und letztem Element von Vertexreferenz oder Dreiecksreferenz stehen

Skip: Anzahl der Vertices welche die Indexreihefolge umgehen

Definition Streambarkeit

Page 14: Mesh: Gesamtheit der Vertex- und Dreicksarrays eines Polygons Streambarer Mesh: Mesh dessen Daten nicht in ihrer Gesamtheit im Hauptspeicher vorhanden

Demonstration der Gütewerte

Page 15: Mesh: Gesamtheit der Vertex- und Dreicksarrays eines Polygons Streambarer Mesh: Mesh dessen Daten nicht in ihrer Gesamtheit im Hauptspeicher vorhanden

Bereits erwähnt: kennzeichnung der Finalisierung

Daraus ergibt sich die Menge der aktuell bearbeiteten Vertices, nämlich alle die zwischen Einführung und Finalisierung stehen

Die maximale Anzahl bildet die Frontweite des Meshes

Definition Streaming Meshes

Page 16: Mesh: Gesamtheit der Vertex- und Dreicksarrays eines Polygons Streambarer Mesh: Mesh dessen Daten nicht in ihrer Gesamtheit im Hauptspeicher vorhanden

Es gibt 2 Arten von streambaren Meshes: Pre- und Post-Order

Pre-Order: Vertex kommt vor allen Dreickecken die aud ihn referenzieren an

Post-Order: Vertex kommt nach allen Dreicken die auf ihn referenziern an

Pre- und Post-Order

Page 17: Mesh: Gesamtheit der Vertex- und Dreicksarrays eines Polygons Streambarer Mesh: Mesh dessen Daten nicht in ihrer Gesamtheit im Hauptspeicher vorhanden

Darzustellendes Polygon:

Original Darstellung

Pre- und Post-Order

Page 18: Mesh: Gesamtheit der Vertex- und Dreicksarrays eines Polygons Streambarer Mesh: Mesh dessen Daten nicht in ihrer Gesamtheit im Hauptspeicher vorhanden

Pre- und Post-Order

Pre-Order Post-Order

Page 19: Mesh: Gesamtheit der Vertex- und Dreicksarrays eines Polygons Streambarer Mesh: Mesh dessen Daten nicht in ihrer Gesamtheit im Hauptspeicher vorhanden

Vertexkompakt: jeder Vertex ist vom vorhergehenden oder nachfolgenden Dreieck referenziert

Dreieckskompakt: letzter benötigter Vertex ist direkt davor oder danach im Stream zu finden

Kompakt: beide Kompaktheitsformen

Kompaktheit im Stream

Page 20: Mesh: Gesamtheit der Vertex- und Dreicksarrays eines Polygons Streambarer Mesh: Mesh dessen Daten nicht in ihrer Gesamtheit im Hauptspeicher vorhanden

Schritt 1: Trennung von Vertex- und Dreiecksdaten

Soll eine Anordnung von Indices nicht erhalten bleiben sondern umsortier kann diese verworfen werden

Vertices müssen jedoch den auf sie referenzierenden Dreicken zugeordnet werden können

Erzeugung von Streammeshes

Page 21: Mesh: Gesamtheit der Vertex- und Dreicksarrays eines Polygons Streambarer Mesh: Mesh dessen Daten nicht in ihrer Gesamtheit im Hauptspeicher vorhanden

Schritt 2: Zuweisung von Keys für Dreicke t und zugehörigen Vertices v

Wir erhalten zwei Datein mit Datensätzen <kv, v, d ,x ,y ,z> und <kt, v1, v2, v3>

Erzeugung von Streammeshes

Page 22: Mesh: Gesamtheit der Vertex- und Dreicksarrays eines Polygons Streambarer Mesh: Mesh dessen Daten nicht in ihrer Gesamtheit im Hauptspeicher vorhanden

Schritt 3: Sortierun und Anordnen der Datensätze in einen streambaren Datensatz

Für pre-Order nach Dreiecken

Für Post-Order nach Vertices

Verschiedene techniken zum Anordnen

Erzeugung von Streammeshes

Page 23: Mesh: Gesamtheit der Vertex- und Dreicksarrays eines Polygons Streambarer Mesh: Mesh dessen Daten nicht in ihrer Gesamtheit im Hauptspeicher vorhanden

Wenn die Streamgüte des alten Layouts gut genug ist kann man einen Streambaren Mesh erhalten indem man einfach die Datensätze anpasst und Finalisierung vorsieht

Indizierten Mesh verschachteln

Page 24: Mesh: Gesamtheit der Vertex- und Dreicksarrays eines Polygons Streambarer Mesh: Mesh dessen Daten nicht in ihrer Gesamtheit im Hauptspeicher vorhanden

Gerade bei hohem skip-Wert bietet sich Kompaktierung an

Dadurch kann leicht Pre-Order erreicht werden: Sortierung der Vertices und Einfügen eines Dreiecks sobald alle dafür nötigen Vertices bereits vorher eingefügt wurden

Kompaktierung

Page 25: Mesh: Gesamtheit der Vertex- und Dreicksarrays eines Polygons Streambarer Mesh: Mesh dessen Daten nicht in ihrer Gesamtheit im Hauptspeicher vorhanden

Post-order: Einfügen der Dreiecke jeweils wenn ein Vertex dafür benötigt wird und vor dem besagten Vertex

Kompaktierung

Page 26: Mesh: Gesamtheit der Vertex- und Dreicksarrays eines Polygons Streambarer Mesh: Mesh dessen Daten nicht in ihrer Gesamtheit im Hauptspeicher vorhanden

Simple Sortierung der keys nach einer räumlichen Ausrichtung also x, y oder z danach Orientierung entweder an Vertices oder Dreiecken und erzeugen eines kompakten Meshes

Alternativ aber ähnlich: Sortierung nach topologischen Richtlinien

Räumliche Anordnung

Page 27: Mesh: Gesamtheit der Vertex- und Dreicksarrays eines Polygons Streambarer Mesh: Mesh dessen Daten nicht in ihrer Gesamtheit im Hauptspeicher vorhanden

Ordnung nach minimaler Weite und Abstand: da diese Werte die Güte der Streambarkeit angeben der natürlichste Ansatz

Aber: das Trennen der Vertices und die Bildung von passenden Reihenfolgen erweist sich als NP-hartes Problem

Spectral Sequencing

Page 28: Mesh: Gesamtheit der Vertex- und Dreicksarrays eines Polygons Streambarer Mesh: Mesh dessen Daten nicht in ihrer Gesamtheit im Hauptspeicher vorhanden

Daher: Heuristiken werden benötigt

Beliebt dafür ist das Spectral Sequencing: Aufteilung in Cluster, umordnen dieser per ACE-Clusterformatierung gut geformte Teile

Dadurch wird ein ausreichend gutes gesamtbild erzeugt

Spectral Sequencing

Page 29: Mesh: Gesamtheit der Vertex- und Dreicksarrays eines Polygons Streambarer Mesh: Mesh dessen Daten nicht in ihrer Gesamtheit im Hauptspeicher vorhanden

Benötigte Zeiten für die Formatierungsmethoden

Page 30: Mesh: Gesamtheit der Vertex- und Dreicksarrays eines Polygons Streambarer Mesh: Mesh dessen Daten nicht in ihrer Gesamtheit im Hauptspeicher vorhanden

I/O-effizientes Arbeiten da durch die Formatierung des Meshes die Dreicke sobald sie im Speicher eintreffen gerendert werden können und alle finalisierten Vertices aus dem Speicher entfernt werden können um Platz zu sparen

Arbeiten mit Streammeshes

Page 31: Mesh: Gesamtheit der Vertex- und Dreicksarrays eines Polygons Streambarer Mesh: Mesh dessen Daten nicht in ihrer Gesamtheit im Hauptspeicher vorhanden

Nachteil: kein Mitführen von Informationen wie Valennzen, Inzidenzen und andere topologische Merkmale

Dafür gibt es den Spezialfall von Streammeshes die sogeanntnen „Processing Sequences“

Arbeiten mit Streammeshes

Page 32: Mesh: Gesamtheit der Vertex- und Dreicksarrays eines Polygons Streambarer Mesh: Mesh dessen Daten nicht in ihrer Gesamtheit im Hauptspeicher vorhanden

Zudem bietet das Sequenzielle Format der Streammeshes eine gute Möglichkeit für Komprimierung der Daten

Normale Meshkompression benötigt Zugriff auf den Raum in zufälliger Folge, was beim Streamen nicht möglich ist

Daher: eigene Kompression welche die Daten on-the-fly beim Streamen packt

Kompression

Page 33: Mesh: Gesamtheit der Vertex- und Dreicksarrays eines Polygons Streambarer Mesh: Mesh dessen Daten nicht in ihrer Gesamtheit im Hauptspeicher vorhanden

Durch einfaches Umformatieren wird es ermöglicht auch mit wenig Speicher grosse Modelle zu rendern welche aufgrund der Datenmengen sonst nicht möglich wären

Nicht an spezifisches Format gebunden, auch Standardformate können bei passenden Abständen genutzt werden (z.B. PLY, OBJ)

Nutzen der Streammeshes

Page 34: Mesh: Gesamtheit der Vertex- und Dreicksarrays eines Polygons Streambarer Mesh: Mesh dessen Daten nicht in ihrer Gesamtheit im Hauptspeicher vorhanden

Einfache Formatierungsmethoden können auch direkt in einem Stream geschrieben werden

Manche Ideen wie Ordnungserhaltende Kompression und die Kompaktierung der Meshanordung können auch an anderen Orten Anwendung finden

Nutzen der Streammeshes