Geometrische Datenstrukturen

Ähnliche Dokumente
5/24/07. Allgemeine Regeln zur Optimierung. Octree / Quadtree. 5D-Octree für Strahlen [Arvo u. Kirk 1987] Primitive in adaptiven Gittern / Octrees

Computergrafik Universität Osnabrück, Henning Wenke,

Seminar Computerspiele Räumliche Datenstrukturen. Ralf Pramberger

Informatik II, SS 2014

5 BINÄRE ENTSCHEIDUNGS- DIAGRAMME (BDDS)

Algorithmen und Datenstrukturen 1

Voronoi Diagrams. Christian Wellenbrock. December 1, 2009

A Simple and Practical Method for Interactive Ray Tracing of Dynamic Scenes

Übersicht. Datenstrukturen und Algorithmen. Übersicht. Heaps. Vorlesung 8: Heapsort (K6) Joost-Pieter Katoen. 7. Mai 2015

Stud.-Nummer: Datenstrukturen & Algorithmen Seite 1

\ E) eines Graphen G = (V, E) besitzt die gleiche Knotenmenge V und hat als Kantenmenge alle Kanten des vollständigen Graphen ohne die Kantenmenge E.

Informatik II, SS 2016

Wünschenswerte Eigenschaft von Suchbäumen mit n Knoten: Suchen, Einfügen, Löschen auch im schlechtesten Fall O(log n)

> Parallele Systeme Übung: 4. Übungsblatt Philipp Kegel Wintersemester 2012/2013. Parallele und Verteilte Systeme, Institut für Informatik

Conservative Volumetric Visibility with Occluder Fusion

Kapitel Andere dynamische Datenstrukturen

Informatik II Übung 2

Übung zur Vorlesung Algorithmische Geometrie

Vorlesung Datenstrukturen

Quicksort ist ein Divide-and-Conquer-Verfahren.

WS 2009/10. Diskrete Strukturen

Wintersemester 2004/ Januar Aus der Vorlesung sind Datenstrukturen zur Repräsentation von Wäldern disjunkter Mengen bekannt.

Algorithmen und Datenstrukturen

Definition Ein gerichteter Graph G = (V, E) ist ein Graph von geordneten Paaren (u, v) mit u V und v V.

Mobile Objekte Indexstrukturen

Geradenarrangements und Dualität von Punkten und Geraden

Geradenarrangements und Dualität von Punkten und Geraden

{0,1} rekursive Aufteilung des Datenraums in die Quadranten NW, NE, SW und SE feste Auflösung des Datenraums in 2 p 2 p Gitterzellen

Grundzüge DS & Alg (WS14/15) Lösungsvorschlag zu Aufgabenblatt 3. Aufgabe 1. (a) nicht-heap (b) Heap 25. (c) Beinahe-Heap 9.

Definition Gerichteter Pfad. gerichteter Pfad, wenn. Ein gerichteter Pfad heißt einfach, falls alle u i paarweise verschieden sind.

Algorithmen und Datenstrukturen Musterlösung 5

Informatik II Prüfungsvorbereitungskurs

Kapitel 12: Schnelles Bestimmen der Frequent Itemsets

Beispiellösung zu den Übungen Datenstrukturen und Algorithmen SS 2008 Blatt 5

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 16/17. Kapitel 14. Bäume. Bäume 1

Indizierung von Geodaten - Raumbezogene Indexstrukturen. Seminar mobile Geoinformationssystem Vortrag von Markus Steger

Algorithmische Geometrie 3. Schnitte von Liniensegmenten

Der Dreyfus-Wagner Algorithmus für das Steiner Baum Problem

Repetitive Strukturen

Pro Informatik 2009: Objektorientierte Programmierung Tag 18. Marco Block-Berlitz, Miao Wang Freie Universität Berlin, Institut für Informatik

Agenda. 1 Einleitung. 2 Binäre Bäume. 3 Binäre Suchbäume. 4 Rose Trees. 5 Zusammenfassung & Ausblick. Haskell Bäume. Einleitung.

ADS: Algorithmen und Datenstrukturen

Algorithmen & Datenstrukturen Midterm Test 2

Abzählen und Konstruktion der Strukturisomere von Alkanen, Alkenen und Alkinen

Algorithmen und Datenstrukturen 2-1. Seminar -

NAME, VORNAME: Studiennummer: Matrikel:

Hallo Welt für Fortgeschrittene

Vorlesung Wissensentdeckung in Datenbanken

Bereichsabfragen. Dr. Martin Nöllenburg Vorlesung Algorithmische Geometrie

Wie groß ist die Page Table?

Informatik-Seminar Thema 6: Bäume

Performance Verbesserung BIRT-BERICHTE

Algorithmen und Datenstrukturen Heapsort

Mehrwegbäume Motivation

Vorlesung Datenstrukturen

Grundlagen der Künstlichen Intelligenz

Datenstrukturen. einfach verkettete Liste

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen 1

Peg-Solitaire. Florian Ehmke. 29. März / 28

Algorithmen I. Prof. Jörn Müller-Quade Institut für Theoretische Informatik Web:

Vorlesung Datenstrukturen

Graphdurchmusterung, Breiten- und Tiefensuche

Algorithmen und Datenstrukturen 1

Manipulation binärer Bäume Binäre Bäume II

9 Minimum Spanning Trees

Datenstrukturen & Algorithmen

Breitensuche BFS (Breadth First Search)

Übung Algorithmen und Datenstrukturen

Voronoi-Diagramme INSTITUT FÜR THEORETISCHE INFORMATIK FAKULTÄT FÜR INFORMATIK. Dr. Martin Nöllenburg Vorlesung Algorithmische Geometrie

8. A & D - Heapsort. Werden sehen, wie wir durch geschicktes Organsieren von Daten effiziente Algorithmen entwerfen können.

PostgreSQL auf vielen CPUs. Hans-Jürgen Schönig Hans-Jürgen Schönig

Quadtrees. Christian Höner zu Siederdissen

Was bisher geschah. 1. Zerlegung in monotone Polygone 2. Triangulierung der monotonen Teilpolygone

Vorlesung Datenstrukturen

Klasse räumlicher Indexstrukturen, die den Datenraum rekursiv in 4 gleich große Zellen unterteilen (Quadranten NW, NE, SW, SE)

Algorithmen und Datenstrukturen

Datenstrukturen & Algorithmen Lösungen zu Blatt 8 FS 16

Quadtrees und Meshing

Seminar Ausgewählte Themen der medizinischen Visualisierung

9. Übung Algorithmen I

Electronic Design Automation (EDA) Technology Mapping

Flüsse und Schnitte von Graphen

Informatik II Vorlesung am D-BAUG der ETH Zürich

Bäume, Suchbäume und Hash-Tabellen

Quadtrees und Meshing

Data Cubes PG Wissensmangement Seminarphase

Algorithmen auf Sequenzen

Teil 1: Suchen. Ausgeglichene Bäume B-Bäume Digitale Suchbäume. M.O.Franz, Oktober 2007 Algorithmen und Datenstrukturen - Binärbäume 1-1

Quadtrees und Meshing

Mesh-Visualisierung. Von Matthias Kostka. Visualisierung großer Datensätze

10. Übungsblatt zu Algorithmen I im SS 2010

Punktlokalisierung. Dr. Martin Nöllenburg Vorlesung Algorithmische Geometrie INSTITUT FÜR THEORETISCHE INFORMATIK FAKULTÄT FÜR INFORMATIK

Greedy Algorithms - Gierige Algorithmen

10. Übung Algorithmen I

Virtuelle Realität Kollisionserkennung

Algorithmen I - Tutorium 28 Nr. 11

Konvexe Hülle. Abbildung: [Wikipedia]: Nicht-konvexe Menge (links), konvexe Menge (rechts) KIT Institut für Theoretische Informatik 510

Algorithmische Bioinformatik 1

Kapitel 12: Induktive

Transkript:

Real-Time kd-tree Construction on Graphics Hardware David Mainzer (dm@tu-clausthal.de) Institut für Informatik 1. Juli 2009 Institut für Informatik 1

Gliederung Organisatorisches Warum den Aufbau parallelisieren? Probleme, Hürden bzw. Hindernisse Paralleler kd-tree Anwendungen GPU kd-tree Konstruktion Unterscheidung der Knoten im Baum Algorithmus kd-tree Konstruktion large node Algorithmus kd-tree (large node stage) Algorithmus kd-tree (GPU Segmented Reduction) small node stage Algorithmus kd-tree (small node stage) kd-tree Output Stage Institut für Informatik 2

Organisatorisches Diese Woche werde ich Vorlesung an beiden Tagen halten Das Kapitel Voronoi wird nächste Woche von Prof. Zachmann fortgesetzt und zwar mit Anwendung dieser geom. Datenstruktur Institut für Informatik 4

Warum parallelisieren? Verfahren zum Aufbau kd-trees bereits bekannt Anwendungsfall: Verwendet beim Rendern von Szenen (Ray-Tracing) Um schnell Strahl-Schnitt-Test zu gewährleisten Arbeitet sehr platzsparend: O(n) Aufbau: O(d n log(n)) Aufbau großer Szenen dauert entsprechend lang (Objekte > 300k Dreiecke) Institut für Informatik 6

Warum parallelisieren? Statische Szenen kommen immer mehr aus der Mode In dynamischen Szenen muss kd-tree sehr oft neu aufgebaut werden (wenn Szene sich ändert) Somit ist die Ressource Zeit das Problem Ausweg: Parallelisierung des Aufbaues Neuer Lösungsansatz notwendig! Institut für Informatik 7

Paralleler Ansatz Verwendung der GPU Erreicht Echtzeit-Performance durch Verwendung GPU Streaming Architektur in jedem Schritt der Konstruktion 4 7 mal schneller wie optimierte single-core CPU Algo. und äquivalent zu multi-core CPU Ansätzen Verarbeitung von dynamischen Szenen möglich Institut für Informatik 8

Probleme, Hürden bzw. Hindernisse Effizientes Nutzen der Streaming Architektur der GPU (moderne GPUs massive parallele Rechenwerke mit 10 3 10 4 Threads) BFS jeder Knoten in einem Hierarchie Level verwendet eigenen Thread (#Threads verdoppelt sich, wenn Level um eins erhöht (Skizze!)) Für large nodes im oberen Baumbereich existiert Strategie da nicht optimal für GPU Architektur Problem im oberen Bereich des Baumes, nahe root-knoten, hier die GPU Architektur nicht ideal (nur wenige Threads workload ist nicht gut verteilt #Primitiven variiert stark von Knoten zu Knoten) Institut für Informatik 9

Probleme, Hürden bzw. Hindernisse Weiteres Problem: effiziente Berechnung der node-split-cost, durch surface area heuristic (SAH) oder voxel volume heuristic (VVH) Kosten node-split entscheidend für die Qualität des kd-trees Standardtechnik für Berechnung der Kosten in Echtzeit zu aufwendig neue Technik für Beschleunigung der Berechnung Unterscheidung der Baumknoten in large und small Knoten Institut für Informatik 10

Anwendungen GPU Ray Tracing Verwendung der real-time kd-tree Erstellung Rate reicht für Interaktion, inkl. Darstellung von Schatten und Reflexion/Lichtbrechung Verwendet state-of-the-art multi-core Ray Tracer Dynamische Szenen können behandelt werden Dynamische Geometrien werden effizient behandelt, direkt auf GPU bewertet (wie subdivision surfaces und skinned meshes) Institut für Informatik 12

Anwendungen GPU Ray Tracing Abbildung: Erstellt mit Ray Tracing Verfahren Institut für Informatik 13

Anwendungen GPU Ray Tracing Abbildung: Erstellt mit Ray Tracing Verfahren Institut für Informatik 14

Anwendungen GPU Photon Mapping Von Henrik Wann Jensen 1995 veröffentlichter Algorithmus der Bildsynthese Oft Erweiterung von Raytracing-basierten Verfahren Photon Mapping zählt zu den Particle-Tracing-Methoden Ziel: effiziente Ermittlung der globale Beleuchtung einer Szene Mit GPU Ray Tracer ist Rendern von Schatten sowie Reflexion/Lichtbrechung möglich Institut für Informatik 15

Anwendungen Point Cloud Modeling kd-tree Verwendung bei dynamischen Punkwolken, Suche nach nächsten Nachbarn Mögliche Nachbarn werden für Bestimmung der Sampling Dichte, Berechnung Normalen und Aktualisierung des Kräftefeldes benötigt Institut für Informatik 16

kd-tree Standard Implementierung Zeit: O(n log n) für dynamische Szenen einfach zu hoch Andere Ansätze verwenden BFS (Breitensuche) nur bis gewisse Baumtiefe und nutzen dann DFS (Tiefensuche), für multi-core CPUs (geringe Parallelität) entwickelt Problem das Bereich hohes Level, tief im Baum 90% der Konstruktionszeit verbraucht Institut für Informatik 17

GPU kd-tree Konstruktion Setzt auf übliche kd-tree Aufbau Technik: greedy, top-down Methode mit rekursiver Unterteilung des aktuellen Knoten: 1. Bestimme die SAH Kosten für alle möglichen Trennebenen 2. Wähle optimalen Kandidaten (geringste Kosten) und teile Knoten in 2 Kinderknoten 3. Sortiere Dreieck und verteile auf 2 Kinderknoten Institut für Informatik 18

SAH Kostenfunktion SAH surface area heuristic SAH(x) = C ts + C L (x) A L (x) A + C R (x) A R (x) A C ts : konstante Kosten für Traversierung des Knoten C L (x): Kosten für linken Kindknoten mit Unterteilung an x C R (x): Kosten für rechten Kindknoten mit Unterteilung an x A L (x) und A R (x): Größe der Fläche des linken bzw. rechten Kindes A: Fläche des gesamten Knoten Institut für Informatik 19

SAH Kostenfunktion Statt globales Maxima, bestimme lokale, greedy, approximierte Lösung Annahme: Kinder sind Blätter C L (x) und C R (x): #Elemente im linken bzw. rechten Teilbaum Institut für Informatik 20

large node und small node Knoten gilt als large wenn #Dreiecke im Knoten einen Schwellwert überschreitet Verwendung von 2 einfachen und kostengünstigen Heuristiken zur Kostenbestimmung: median splitting empty space maximizing small node und hohes Level (sehr tief im Baum) Genaue Bestimmung der Kosten Speicherung der Primitiven als Bit-Mask effiziente Sortierung und Berechnung der Kosten Dank Bitoperationen Institut für Informatik 21

Algorithmus 1 : Konstruktion begin / / i n i t i a l i z a t i o n stage i n i t node_l, active_l, small_l, next_l Create rootnode 5 active_l. add (rootnode) for each input t r i a n g l e t i n _ p a r a l l e l Compute AABB for t r i a n g l e t / / l a r g e node stage while not active_l. empty ( ) 10 node_l. append (active_l) next_l. c l e a r ( ) PROCESSLARGENODES( active_l, small_l, next_l ) Swap next_l and active_l / / small node stage 15 PREPROCESSSMALLNODES( small_l ) active_l small_l while not active_l. empty ( ) node_l. append (active_l) next_l. c l e a r ( ) 20 PROCESSSMALLNODES( active_l, next_l ) Swap next_l and active_l / / kd Tree output stage PREORDERTRAVERSAL ( node_l ) end Institut für Informatik 22

Erklärung: Algorithmus 1 Menge von Dreiecken übergeben abarbeiten der Pipeline Nach Initialisierung wird Baum nach dem BFS Verfahren, für große und kleine Knoten aufgebaut Abschließend Umorganisierung und Speicherung aller Knoten Pipeline enthält Reihe von stream processing steps mit einigen Einordnungsschritten stream processing steps werden komplett auf GPU erledigt; Einordnen ist Nebenläufigkeit auf CPU Initialisierungsschritt Reservierung globaler Speicher und Anlegung des root Knoten Ausführung eines streaming steps und Bestimmung AABB (axis aligned bounding box) für jedes Dreieck Schwellwert für Unterscheidung zwischen small und large Knoten ist T = 64 (#Dreiecke) Institut für Informatik 23

large node Voraussetzung für SAH Berechnung ist allg. greedy optimierter Algorithmus, welcher 2 Blattknoten erzeugt für große Knoten Annahme falsch, somit auch die resultierende Abschätzung Verwendete Split-Verfahren ist Kombination aus spatial-median split (räumliche Halbierung) und empty space maximizing, ist für unteren Teil des Baumes effizient Institut für Informatik 24

large node Institut für Informatik 25

large node Voraussetzung für SAH Berechnung ist allg. greedy optimierte Algorithmus, welcher 2 Blattknoten erzeugt für große Knoten Annahme falsch, somit auch die resultierende Abschätzung Verwendete Split-Verfahren ist Kombination aus spatial-media split (räumliche Halbierung) und empty space maximizing, ist für unteren Teil des Baumes effizient Besonderheit ist: überschreitet der leere Bereich einen Wert C e (typisch: 25% Vol) entlang der Achsen, so wird dieser im folgenden Schritt entfernt; jedoch muss zuvor BBox um alle Dreiecke des Knoten bestimmt werden Institut für Informatik 26

Algorithmus 2 : large node stage procedure PROCESSLARGENODES( in active_l ; out small_l, next_l ) begin / / group t r i a n g l e s i n t o chunks for each node i in active_l i n _ p a r a l l e l 5 Group a l l triangles in node i into fixed size chunks, store chunks in chunk_l / / compute per node bounding box for each chunk k in chunk_l i n _ p a r a l l e l Compute the bounding box of a l l triangles in k, using standard reduction 10 Perform segmented reduction on per chunk reduction r e s u l t to compute per node bounding box / / s p l i t l a r g e nodes for each node i in active_l i n _ p a r a l l e l 15 for each s i d e j of node i i f i contains more than C e empty space on s i d e j then Cut o f f i s empty space on s i d e j S p l i t node i at spatial median of the longest axis for each created c h i l d node ch 20 next_l. add (ch) Institut für Informatik 27

/ / s o r t and c l i p t r i a n g l e s to c h i l d nodes for each chunk k in chunk_l i n _ p a r a l l e l i k. node ( ) 25 for each t r i a n g l e t in k i n _ p a r a l l e l i f t i s contained in both children of i then t 0 t t 1 t Sort t 0 and t 1 i n t o two c h i l d nodes 30 Clip t 0 and t 1 to t h e i r r e s p e c t i v e owner node else Sort t into the child node containing i t / / count t r i a n g l e numbers f o r c h i l d nodes 35 for each chunk k in chunk_l i n _ p a r a l l e l i k. node ( ) Count triangle numbers in i s children, using reduction Perform segmented reduction on per chunk r e s u l t to compute per child node t r i a n g l e number 40 / / small node f i l t e r i n g for each node ch in next_l i n _ p a r a l l e l i f ch i s small node then small_l. add (ch) 45 next_l. d elete (ch) end Institut für Informatik 28

Erklärung: Algorithmus 2 Übergeben: active_l Rückgabe: small_l und next_l Hauptschritte: Gruppiere alle Dreiecke aller Knoten in gleich große Bereiche (Chunk) (im Bereich um 256) Großteil der Berechnungen werden parallel auf einen Bereich (Chunk) angewandt Nächste Schritt bestimmt für jedes Dreieck die entsprechende BBox bestimmt; erfolgt, indem zuerst AABBs für alle Dreiecke in einem Chunk bestimmt werden (Verwendung des reduction-algo Algo 3) und anschließend BBox für jeden Knoten (Sammlung von Chunks) wird erreicht indem auf alle Results aus Reduktion bei den Chunks wiederum eine Segmented Reduction angewendet wird Gibt Sequenz mit Reduktion für ein Element zurück Institut für Informatik 29

Algorithmus 3 : GPU Segmented Reduction procedure GPUSEGREDUCE( in data, owner ; op : reduction operator ; out result ) begin result new l i s t F i l l result with ops identity element 5 / / assume there are n elements for d = 0 to log 2 n 1 for each i = 0 to (n 1)/2 d+1 i n _ p a r a l l e l w 0 owner[2 d+1 i] w 1 owner[2 d+1 i + 2 d ] 10 i f w 0 w 1 then result[w 1 ] op(result[w 1 ], data[2 d+1 i + 2 d ]) else data[2 d+1 i] op(data[2 d+1 i], data[2d + 1i + 2 d ]) end Institut für Informatik 30

Erklärung: Algorithmus 3 Übergeben: data (enthält alle Daten, zu einem Segment gehörende Daten werden zusammenhängend im Speicher übergeben (Caching)) owner owner[i] enthält Segment Index für data[i] Rückgabe: small_l und next_l Multi-Pass Ansatz: Jeder Thread (auf GPU) bekommt 2 Elemente Beide selbe owner durch ihr op(fkt.)-result ersetzt Sonst wird ein Element aufsummiert (hier w 1 ) und andere wird beibehalten Im dritten Schritt (Algo 2) (Knoten BBoxes sind berechnet) large nodes werden unterteilt (parallel) Institut für Informatik 31

Noch einmal: verwenden empty space splitting bis gewisser Wert erreicht ist ermöglicht wiederverwenden der BBoxen Vierter Schritt: sortieren und aufteilen der Dreiecke auf Kinder Für jeden Chunk: für alle Dreiecke wird überprüft ob sie in einem Kindknoten sind oder nicht wird in einem Vektor gespeichert Unterteilung Dreiecke in zwei Gruppen: linke und rechte Kindknoten Überprüfung welche Dreieck liegen in beiden Kindknoten, diese müssen in einem weiterem Durchlauf entsprechend auf Kinder aufgeteilt werden Letzte Schritt: für jeden Knoten #Dreieck bestimmt (Verwendung des + Operators) #Dreiecke kleiner wie ein Schwellwert T, einfügen in Liste small_l und löschen aus next_l Institut für Informatik 32

small node stage Im Vergleich zu large node stage sehr einfach :) Berechnung ist parallelisiert über die Knoten (nicht über Dreiecke) Arbeitslast über small nodes ist sehr ausgeglichen, da #Dreiecke pro Knoten zwischen 0 und T variiert (min, max) Wird nicht wie im large node stage Dreiecke unterteilt sondern Bit-Mask verwendet Institut für Informatik 33

Algorithmus 4 : Small Node Stage procedure PREPROCESSSMALLNODES( small_l ) begin for each node i in small_l i n _ p a r a l l e l i.splitlist l i s t of a l l s p l i t candidates in i 5 for each s p l i t candidate j in i i n _ p a r a l l e l / / " l e f t " r epresents smaller coordinate j.left triangle set on the l e f t of j j.right t r i a n g l e s e t on the r i g h t of j end Institut für Informatik 34

Algorithm 4: Fortsetzung procedure PROCESSSMALLNODES( in active_l ; out next_l ) begin for each node i in active_l i n _ p a r a l l e l / / compute SAH and determine the s p l i t plane 15 s i.triangleset r i.smallroot A 0 area of node i SAH 0 s for j where j r.splitlist and j.triangle s 20 C L s j.left C R s j.right A L area of l e f t c h i l d a f t e r s p l i t j A R area of r i g h t c h i l d a f t e r s p l i t j SAH j (C L A L + C R A R )/A 0 + C ts 25 p The s p l i t candidate that yields minimal SAH / / s p l i t small nodes i f SAH p SAH 0 then Mark i as l e a f node 30 else S p l i t i using p, add new nodes to next_l Sort t r i a n g l e s to new nodes end Institut für Informatik 35

Erklärung: Algorithmus 5 Besitzt zwei Proceduren PREPROCESSSMALLNODES und PROCESSSMALLNODES Erste Methode sammelt alle Split-Kandidaten: Für jede Split-Plane erstelle List mit Dreiecken, welche Sie schneidet (ein Pass über alle Dreiecke) Zweite Funktion unterteilt small nodes: Parallel für jeden Knoten i: bestimme alle Dreiecks-Menge triangleset und höchsten (geringster Level im Baum) small node und speichere ihn in smallroot Bestimme SAH Kosten für alle möglichen Splitting-Planes (Trennebenen) innerhalb eines Knoten Abschließend wird Trennebene mit geringsten Kosten gewählt und Dreiecke entsprechend auf Kinder verteilt Institut für Informatik 36

Erklärung: Algorithmus 5 Gegensatz zu large node werden Dreiecke als eine Bit-Mask von smallroot gespeichert Für jedes Dreieck-Set wird jeder Split-Kandidaten j, wie auch j.left und j.right als Bit-Mask gespeichert Abbildung: smallroot Bit-Mask Institut für Informatik 37

Erklärung: Algorithmus 5 Durch anwenden von Bitoperationen ist eine effiziente Bestimmung, Dreieck-Sortierung und SAH Berechnung möglich Bit-Maske des linken Kindes wird berechnet durch: Bitweise UND des aktuellen Knoten s und Bit-Maske der linken Seite des Split-Kandidaten j (bestimmt in PREPROCESSSMALLNODES) Bit-Counting Routine zur Bestimmung #Dreiecke im linken Kind Durch Bit-Mask Darstellung kann optimale Split-Plane in O(n) bestimmt werden und Dreiecke entsprechend in O(1) (Konstant) Institut für Informatik 38

Ausgabe des erzeugten kd-trees GPU Ray Tracer Stack-basiert kd-tree als preorder traversal der Knoten vorliegen um den Cache Eigenschaften optimal nutzen zu können preorder traversal durch zwei parallele BFS Durchläufe bestimmt (siehe Algorithmus??) 1. Erfolgt von unten nach ob um benötigten Speicherplatz für jeden Teilbaum zu bestimmen 2. Durchläuft Baum von oben nach unten um Startpunkt jedes Teilbaumes zu bestimmen und speichert Informationen des entsprechenden Knoten (für den finalen Baum) Institut für Informatik 39

Algorithmus 5 : Preorder Traversal procedure PREORDERTRAVERSAL ( node_l ) begin for each t r e e l e v e l l of node_l from bottom up UPPASS ( l ) 5 Allocate tree using root node s size for each t r e e l e v e l l of node_l from top down DOWNPASS( l ) end 10 procedure UPPASS ( active_l ) begin for each node i in active_l i n _ p a r a l l e l i f i i s not a leaf then i. s i z e i.left.size + i.right.size + 1 15 else i.size i.trianglecount + 1 end procedure DOWNPASS( a c t i v e l i s t : l i s t ) 20 begin for each node i in active_l i n _ p a r a l l e l i f i i s not a leaf then i.left.address i.address + 1 i.right.address i.address + 1 + i.left.size 25 Store node i in f i n a l format to i.address end Institut für Informatik 40

Ausgabe des erzeugten kd-trees Beachte: Methode PREORDERTRAVERSAL benötigt alle Knoten in einem Level des Baumes Diese Information ist glücklicherweise in der while-schleife (Algo 1) verfügbar Nach preorder traversal beinhaltet List der Knoten, Nummer und Indizies der enthaltenen Dreiecke, Trennebene und Links zu den Kindknoten Institut für Informatik 41