Vorlesung Algorithmen für hochkomplexe Virtuelle Szenen

Ähnliche Dokumente
Vorlesung Geometrische Algorithmen Generierung von Nicht-uniformen Netzen Sven Schuierer

Quadtrees und Meshing

Quadtrees. Christian Höner zu Siederdissen

Quadtrees und Meshing

Quadtrees und Meshing

Quadtrees und Meshing

Algorithmen II Vorlesung am

Quad-trees. Benjamin Niedermann Übung Algorithmische Geometrie

Vorlesung Algorithmen für hochkomplexe Virtuelle Szenen

{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

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

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

4.4 Quadtrees. Literatur

Seminar Computerspiele Räumliche Datenstrukturen. Ralf Pramberger

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

Vorlesung Algorithmen für hochkomplexe Virtuelle Szenen

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

Dualität + Quad-trees

Algorithmen und Datenstrukturen. Bäume. M. Herpers, Y. Jung, P. Klingebiel

Vorlesung Algorithmen für hochkomplexe Virtuelle Szenen

Datenstrukturen & Algorithmen Lösungen zu Blatt 6 FS 14

Geometrie II Hallo Welt! für Fortgeschrittene

Conservative Volumetric Visibility with Occluder Fusion

Übungsblatt 7 - Voronoi Diagramme

7. Dynamische Datenstrukturen Bäume. Informatik II für Verkehrsingenieure

Vorlesung Informatik 2 Algorithmen und Datenstrukturen

Vorlesung Datenstrukturen

5.5 Prioritätswarteschlangen

Vorlesung Algorithmen für hochkomplexe Virtuelle Szenen

Hallo Welt für Fortgeschrittene

Komplexität eines Algorithmus, Grössenordnung, Landau-Symbole, Beispiel einer Komplexitätsberechnung (Mergesort) 7. KOMPLEXITÄT

Entwurf und Analyse von Datenstrukturen

Anwendungsbeispiel MinHeap

Datenstrukturen und Algorithmen. Christian Sohler FG Algorithmen & Komplexität

Fast Searching / Balanced trees

Geometrie 2. Julian Fischer Julian Fischer Geometrie / 30

Suchbäume. Suchbäume. Einfügen in Binären Suchbäumen. Suchen in Binären Suchbäumen. Prinzip Suchbaum. Algorithmen und Datenstrukturen

a) Fügen Sie die Zahlen 39, 38, 37 und 36 in folgenden (2, 3)-Baum ein:

Bereichsabfragen. Dr. Martin Nöllenburg Vorlesung Algorithmische Geometrie

Wiederholung. Objekte) Hauptkosten beim Pathtracing Ziel: Beschleunigung durch Reduktion der Schnittpunktstestzahl. Ansätze

18. Natürliche Suchbäume

Beschleunigungsverfahren für Raytracing Grids Hierarchische Grids Bewertung Fazit

2.2. Schnitte von Liniensegmenten

Distanzprobleme in der Ebene

Raytracing. Beschleunigungsverfahren

Übung zur Vorlesung Algorithmische Geometrie

Geometrische Algorithmen Voronoi-Diagramme. Lernmodul 7: Geo-Algorithmen und -Datenstrukturen - Voronoi-Diagramme

ADS 1: Algorithmen und Datenstrukturen

Informatik II, SS 2014

Hallo Welt für Fortgeschrittene

Informatik II: Algorithmen und Datenstrukturen SS 2015

Satz 172 Jedes vergleichsbasierte Sortierverfahren benötigt im worst-case mindestens n ld n + O(n) Vergleiche und hat damit Laufzeit Ω(n log n).

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

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

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

2. Woche Eindeutige Entschlüsselbarleit, Sätze von Kraft und McMillan, Huffmancodierung

Geometrie. Hallo Welt! für Fortgeschrittene Simon Kuhnle. 11. Juli

Algorithmen und Datenstrukturen 2

3.2. Divide-and-Conquer-Methoden

Kapitel 12: Induktive

Kombinatorische Optimierung

Kollisionserkennung

Vorlesung Datenstrukturen

Algorithmen und Datenstrukturen Bereichsbäume

Einfache binäre Suchbäume können entarten, so dass sich die Tiefen ihrer Blattknoten stark unterscheiden

Lernmodul 7 Algorithmus von Dijkstra

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

Definition 14 Rot-Schwarz-Bäume sind externe Binärbäume (jeder Knoten hat 0 oder 2 Kinder) mit roten und schwarzen Kanten, so dass gilt:

Algorithmische Bioinformatik 1

Trees. November 14, Algorithms & Datastructures 2 Exercises WT 2017

Algorithmische Geometrie: Voronoi Diagramme (Teil 2)

Wiederholung. Divide & Conquer Strategie

Datenstrukturen Teil 2. Bäume. Definition. Definition. Definition. Bäume sind verallgemeinerte Listen. Sie sind weiter spezielle Graphen

Klausur. 18. Juli 2008, 10:15-12:15 Uhr. Name:... Matrikelnummer:... Anzahl beschriebener Blätter (ohne Aufgabenblatt):... D(p) : Y = p x X + p y

Bereichsabfragen II. Dr. Martin Nöllenburg Vorlesung Algorithmische Geometrie

Vorlesung Datenstrukturen

Vorlesung Algorithmische Geometrie Konvexe Hülle im R 3

Vorlesung Algorithmen für hochkomplexe Virtuelle Szenen

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

Kap. 3: Sortieren (3)

Informatik II, SS 2016

Trees. November 13, Algorithms & Datastructures 2 Exercises WT 2017

4.3 R-Bäume (I) Idee. basiert auf der Technik überlappender Seitenregionen verallgemeinert die Idee des B + -Baums auf den 2-dimensionalen Raum

EINI LW. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 11/12

Suchen und Sortieren Sortieren. Heaps

Algorithmische Geometrie 3. Schnitte von Liniensegmenten

Optimierungsalgorithmen

Bereichsabfragen II. Dr. Martin Nöllenburg Vorlesung Algorithmische Geometrie

Algorithmen und Datenstrukturen Wintersemester 2018/2019 Übung#5, Christian Rieck, Arne Schmidt

9. Natürliche Suchbäume

11.1 Grundlagen - Denitionen

Uberblick 1. Kurzeste Wege 2. Sichtbarkeitsgraphen 3. Berechnung des Sichtbarkeitsgraphen 4. Kurzeste Wege fur polygonale Roboter 1

2.4. Triangulierung von Polygonen

Kapitel 4: Dynamische Datenstrukturen. Algorithmen und Datenstrukturen WS 2017/18. Pro f. Dr. Sán do r Fe k e te

3. Minimale Spannbäume. Definition 99 T heißt minimaler Spannbaum (MSB, MST) von G, falls T Spannbaum von G ist und gilt:

Klausur Algorithmen und Datenstrukturen II 29. Juli 2013

Transkript:

Vorlesung Algorithmen für hochkomplexe Virtuelle Szenen Sommersemester 2012 Matthias Fischer mafi@upb.de Vorlesung 5 24.4.2012 Matthias Fischer 135

Übersicht Quadtrees / Octrees Motivation Quadtrees für Punktmengen Speicherung von Dreiecken Eigenschaften Aufbau eines Quadtrees Suche im Quadtree Balancierung Loose-Octree Einfügen und Partitionieren im Octree Einsortierung Konstruktion Größe der Loose-Octreebox Direkte Platzierung Frustum Culling Matthias Fischer 136

Literatur Quadtrees / Octrees Computational Geometry - Algorithms and Applications; Mark de Berg, Marc de Kreveld, Mark Overmars; Springer Verlag, 2000. Kapitel: Quadtrees Loose Octrees Mark DeLoura Game Programming Gems Kap. 4.11 Loose Octrees, von Thatcher Ulrich Charles River Media, 2000 Matthias Fischer 137

Motivation Datenstruktur von Finkel und Bentley, 1974 Ziel Räumliche Sortierung Bereichsanfragen Anwendungen Finite Elemente Methode (Erzeugung von hochkomplexen Netzen) Meshes Verdeckungsberechnung Matthias Fischer 138

Quadtrees für Punktmengen Quadtree 2-dimensional jeder Knoten korrespondiert mit einem Quadrat (Octreezelle, Quadrant) innere Knoten haben vier Kinder alle Quadrate in derselben Ebene sind gleich groß Octree 3-dimensional jeder Knoten korrespondiert mit einem Würfel (Octreezelle, Oktant) innere Knoten haben acht Kinder alle Würfel in derselben Ebene sind gleich groß NW SW NE SE Matthias Fischer 139

Quadtrees für Punktmengen Welche Fragen stellen sich? Wie tief nehmen wir die Unterteilung vor? feste maximale Tiefe so tief gehen, bis in jeder Zelle < c Elemente liegen NW NE Wo speichern wir die Elemente? in den Blättern in Blättern und inneren Knoten (bspw. bei Dreiecken) SW SE Wie speichern wir Punkte? in den Zellen, in denen sie liegen Wie speichern wir Dreiecke?... Matthias Fischer 140

Quadtrees für Punktmengen Aufbau eines Quadtrees für Punktmengen Eingabe: Eine Menge P von n Punkten NW NE Aufbau: Jeder Punkt wird in genau einem Quadrat gespeichert, das Quadrat ist ein Blatt des Quadtrees, die Blätter enthalten maximal k Punkte (im Beispiel rechts k=2), innere Blätter speichern nur das Quadrat, aber keine Punkte. SW SE NW NE SW SE NW NE SW SE Matthias Fischer 141

Definition und Aufbau Rekursive Definition Quadtree (Octree analog) Sei σ x σ : x σ y σ : y σ das oberste Quadrat für die Punktmenge P Falls P 1 Der Quadtree besteht aus einem Blatt, an dem σ und P gespeichert sind Falls P 1 Seien σ NE, σ NW, σ SW, σ SE, die vier Quadranten von σ und sei x mid x σ+x σ 2, y mid (y+y σ ) 2 Wir definieren: P NE p P p x > x mid p y > y mid }, P NW p P p x x mid p y > y mid } P SW p P p x x mid p y y mid }, P SE p P p x > x mid p y y mid } Der Quadtree besteht aus einem Knoten v, in dem σ gespeichert ist Knoten v hat vier Kinder: Das NE-Kind ist die Wurzel eines Quadtree der Punktmenge P NE im Quadrat σ NE Das NW-Kind -- -- P NW im Quadrat σ NW Das SW-Kind -- -- P SW im Quadrat σ SW Das SE-Kind -- -- P SE im Quadrat σ SE Matthias Fischer 142

Definition und Aufbau Algorithmus Quadtree (Octree) Aufbau 1. Beginne mit einer Zelle (Quadrat/Würfel), die alle Punkte enthält, bspw. Boundingbox von allen Punkten. 2. Unterteile das Quadrat (Würfel) in vier (acht) gleich große Quadrate (Oktanten) und verteile alle Punkte in die Quadrate (Oktanten). 3. Unterteile rekursiv die Quadrate (Oktanten) bis maximal k Punkte in einem Quadrat (Würfel) erreicht sind. Alternatives Abbruchkriterium ist die Beschränkung der Baumtiefe; hängt von der Anwendung ab. In praktischen Anwendungen ist der Wert von k entscheidend für die Laufzeit des Algorithmus, der die Datenstruktur anwendet (Renderingalgorithmus) und liegt typischerweise deutlich über 1. Matthias Fischer 143

Definition und Aufbau Wie hängen Tiefe des Quadtrees und die Punktmenge voneinander ab? Wir können Größe (Anzahl der Knoten) und Tiefe des Quadtrees nicht durch die Anzahl Punkte beschränken. Es gilt die folgende Aussage: Die Tiefe eines Quadtrees für eine Punktemenge P in der Ebene ist höchstens log s c + 3 2 Dabei ist c die minimale Entfernung zwischen zwei Punkten und s die Seitenlänge des äußersten Quadrats. Warum? Matthias Fischer 144

Definition und Aufbau Weil Seitenlänge des Quadrats eines Knoten in Tiefe i ist s 2 i Maximale Entfernung zweier Punkte in einem Quadrat ist 2 s 2 i Interne Quadrate umfassen mind. 2 Punkte, die mind. c voneinander entfernt sind für jedes interne Quadrat auf Tiefe i gilt: 2 s 2i c i log s c + 1 2 die Schranke folgt, da die Tiefe des Quadtrees um eins tiefer ist, als die maximale Tiefe eines internen Knotens Matthias Fischer 145

Definition und Aufbau Was bedeutet die Anhängigkeit von der Tiefe des Baumes für ungünstige Punkteanordnungen? Quadtrees lassen sich nicht so balancieren, wie man es von anderen Baumstrukturen gewohnt ist Was kostet der Aufbau eines Quadtrees mit n Punkten? Ein Quadtree mit n Punkten und Tiefe d hat O((d + 1)n) Knoten und kann in Zeit O((d + 1)n) aufgebaut werden Warum? Matthias Fischer 146

Definition und Aufbau Weil. Zu 1.) Jeder innere Knoten hat vier Kinder Anzahl Blätter = 1+ 3 x Anzahl innerer Knoten Wir betrachten nur die inneren Knoten, über die Anzahl innerer Knoten wissen wir: Jeder innere Knoten enthält mindestens einen Punkt, Knoten auf gleichem Level sind disjunkt u. überdecken alle Punkte Anzahl innerer Knoten auf jedem Level ist O(n) Baum hat O((d + 1)n) Knoten Zu 2.) Auf jedem Level werden die Punkte eines Quadrats auf die vier Kinder verteilt Zeit hängt linear von der Anzahl Punkte in jedem Quadrat ab Aufbau kostet O((d + 1)n) für alle Level Matthias Fischer 147

Suche im Quadtree Suche im Quadtree Wir haben einen Knoten v im Quadtree und suchen seinen (nördlichen) Nachbarn: NordNachbar(v, T) Idee Laufe im Quadtree hoch bis zu dem ersten Knoten, der gemeinsamer Vorfahr von v und NordNachbar(v, T) ist NordNachbar(v,T) Knoten v Matthias Fischer 148

Suche im Quadtree Eingabe: Ein Knoten v in einem Quadtree T Ausgabe: Tiefster Knoten v dessen Tiefe höchstens so tief ist wie die von v, so dass σ(v ) NordNachbar von σ(v) ist. Falls es keine Knoten gibt, gib nil aus. μ = NordNachbar von Eltern(v) Algorithmus NordNachbar(v,T) 1. If v=root(t) then return nil 2. If v=sw-kind von Eltern(v) then return NW-Kind von Eltern(v) 3. If v=se-kind von Eltern(v) then return NE-Kind von Eltern(v) 4. μ := NordNachbar(Eltern(v), T) 5. If μ = nil or μ ist ein Blatt then return μ else if v = NW-Kind von Eltern(v) then return SW-Kind von μ else return SE-Kind von μ SW-Kind σ(v) Eltern(v) SE-Kind Laufzeit Nachbar eines Knotens v im Quadtree der Tiefe d wird in Zeit O(d + 1) gefunden. Matthias Fischer 149

Octrees Speicherung von Dreiecken Was müssen wir beim Abspeichern von Dreiecken beachten? Problem Polygone werden häufig von den Kanten/Begrenzungsflächen der Zellen geschnitten. Matthias Fischer 150

Octrees Speicherung von Dreiecken Praktikable Lösungsansätze Polygon aufteilen Polygonanzahl erhöht sich Polygon redundant speichern Verwaltungsaufwand erhöht sich, da nur 1x zeichnen sinnvoll Polygon in der Zelle speichern, für die es noch nicht unterteilt wird Viele Polygone liegen höher im Baum, als es ihrer Größe entspricht Matthias Fischer 151

Octrees Speicherung von Dreiecken Loose Octrees (Thatcher Ulrich) vergrößere den von den Knoten belegten Raum in allen Dimensionen Objekt Mittelpunkt entscheidet, in welchem Knoten ein Objekt liegt Ebene hängt nur noch von der Größe des Objekts ab NW SW NE SE NW NE NW NE SW SE SW SE Matthias Fischer 152

Octree Einfügen und Partitionieren im Octree Partitionieren von Objekten durch einen Octree Die Aufteilung des Raumes erfolgt: ohne Redundanzen, vollständig, ohne Berücksichtigung auf die Lage der Objekte. Wie fügen wir Objekte ein? Nachteil nur Punkte lassen sich einfach und eindeutig einsortieren für Objekte mit Ausdehnung sind zusätzliche Lösungen gefragt Einfachste Lösung sortiere Objekt so tief wie möglich ein Matthias Fischer 153

Octree Einfügen und Partitionieren im Octree Herkömmliche Traversierung zum Einfügen eines Objektes in einen Octree Jeder Knoten im Octree enthält: Zentrum des Bounding-Box Mittelpunktes Referenzen auf die 8 Kinder Liste, der im Knoten gespeicherten Objekte (Dreiecke) struct node { Vector3 CubeCenter; } node* Child[2][[2][2]; ObjectList Objects; Matthias Fischer 154

Octree Einfügen und Partitionieren im Octree Wir benötigen eine Funktion (Classify ), die klassifiziert, ob ein Objekt (v) von einer Ebene (p) durchschnitten wird: int Classify (plane p, volume v) { }} if ( v ist vollständig hinter p) { return 0; } else if ( v ist vollständig vor p) { return 1; } else { // v wird von p durchtrennt return 2; Matthias Fischer 155

Octree Einfügen und Partitionieren im Octree Die Funktion InsertObjectIntoTree zum Einfügen eines Objektes o in einen Knoten n des Octrees führt schrittweise eine Partitionierung durch: void InsertObjectIntoTree( node* n, Object* o) { int xc = Classify(plane(1,0,0, CubeCenter.x), o.boundingvolume); int yc = Classify(plane(0,1,0, CubeCenter.y), o.boundingvolume); int zc = Classify(plane(0,0,1, CubeCenter.z), o.boundingvolume); if ( xc == 2 yc == 2 zc == 2) }} { // Objekt wird mind. einer Teilungsebene geschnitten, // es passt nicht in einen Kindknoten, speichere es hier Objects.Insert(o); } else { // Objekt passt in einen Kindknoten, // Speichere Objekt im Kindknoten InsertObjectIntoTree( Child[zc][yc][xc], o); Matthias Fischer 156

Octree Frustum Culling Wie berechnen wir Frustum Culling mit dem Octree? enum Visibility {NOT_VISIBLE, PARTLY_VISIBLE, FULLY_VISISBLE}; void Node::Render(Frustum f, Visibility v) { } // Falls Elternknoten nicht vollständig sichtbar, // Sichtbarkeit prüfen if (v!= FULLY_VISIBLE) { } v= ComputeVisibility(this.BoundingBox, f); if (v == NOT_VISIBLE) return; // Objekte der aktuellen Knoten immer rendern this.objectlist.render(f,v); // Alle Kinder mit PARTLY_VISIBLE und FULLY_VISIBLE // traversieren for (children) {child.render(f, v);} Matthias Fischer 157

Eigenschaften Eigenschaften von Ouadtrees/Octrees Für dynamische Daten geeignet, einfügen/löschen von Objekten ruft meist nur lokale Änderungen hervor, vgl. kd-bäume. Struktur nur bedingt von der Dichte der Objekte abhängig, s. Anhäufungen von Punkten. Polygone können sehr ungünstig positioniert sein, bei Speicherung in der kleinstmöglichen Zelle, bleiben sie ggfs. im Wurzelknoten liegen. Matthias Fischer 158

Loose-Octree Konstruktion Wie vermeiden wir die Nachteile eines Octrees? Ziel Kleine Objekte bleiben nicht mehr auf den Kanten höherer Knoten liegen. Lösungsansatz Wir vergrößern die Zellen der Octrees. Fragen: Um wie viel vergrößern wir die Zellen? Was ändert sich hierdurch? Matthias Fischer 159

Loose-Octree Konstruktion Im herkömmlichen Octree gilt: Kantenlänge der Octreezelle W L(tiefe) = 2 tiefe S Abstände der Octreezellen (in x,y,z-richtung) S(tiefe) = W 2 tiefe tiefe = Tiefe des Octree W = Länge der Octreezelle, die die virtuelle Szene umschließt L Matthias Fischer 160

Loose-Octree Konstruktion Loose-Octrees Vergrößere den Raum einer Octreezelle in allen Dimensionen: Wir verändern die Kantenlänge der Octreezellen: L(tiefe) = k W tiefe k = ein Faktor > 1 2 Wir lassen die Abstände der Zellenmittelpunkte gleich: S(tiefe) = W 2 tiefe Wir lassen zu, dass sich die Loosezellen der Kinder überlappen. Octreezelle Loosezelle Matthias Fischer 161

Loose-Octree Konstruktion Drei Fragen stellen sich: 1. In welchen Zellen speichern wir die Objekte? 2. Was bewirkt der Faktor k für die Abspeicherung? 3. Wie groß wird k gewählt? Matthias Fischer 162

Loose-Octree Einsortierung Frage 1 In welchen Zellen speichern wir die Objekte? Objektmittelpunkt entscheidet, in welchem Knoten ein Objekt liegt. wähle den Oktanten, der den Objektmittelpunkt enthält. aufgrund der Redundanzen sind andere Möglichkeiten denkbar. Der Loose-Octree hat dann folgende Eigenschaft: Die Tiefe der Ebene, auf der Objekte gespeichert werden, hängt nur noch von der Objektgröße Objekts ab Matthias Fischer 163

Loose-Octree Größe der Loosezelle Frage 2 Was bewirkt der Faktor k für die Abspeicherung? Octree: Kleine Objekte bleiben bei ungünstiger Position auf höheren Ebenen des Baumes liegen. Loose Octree: Kleine Objekte fallen auf tiefere Ebenen des Baumes. Matthias Fischer 164

Loose-Octree Größe der Loosezelle Wie klein darf ein Objekt werden, um auf einem Knoten mit Tiefe d liegen zu bleiben? Ein Objekt mit Radius (k 1) L fällt mindestens bis 4 auf Tiefe d, wobei L = W 2d die Kantenlänge der Octreezelle ist. Warum? Objekte bleiben nur im grau schraffierten Bereich liegen. 2r = k L 2 L 2 = k 1 L 2 k<2 L k=2 2r r = k 1 L 4 Matthias Fischer 165

Loose-Octree Größe der Loosezelle Frage 3 Wie groß wird k gewählt? k < 2 Nur ganz kleine Objekte fallen durch. k = 2 Alle Objekte, deren Durchmesser gleich der Kantenlänge der Octreezelle ist, passen in den entsprechenden Knoten der Loosezelle. k > 2 Überlappungen werden zu groß, zu große Redundanzen entstehen. Matthias Fischer 166

Loose-Octree Größe der Loosezelle Warum ist für k = 2 unser Problem kleiner ungünstig liegender Objekte gelöst? Sei B, die Octreezelle BL, die um k = 2 entsprechend vergrößerte Loosezelle Dann passt jedes Objekt O aus dem Elternknoten von BL, das nicht größer als B ist, in ein Kind BL des Elternknotens. BL B O Matthias Fischer 167

Loose-Octree Größe der Loosezelle Verlust der vollständigen Aufteilung Der Raum der Loosezelle eines Elternknoten BL Eltern ist größer als die Summe der Loosezellen BL Kind aller Kinder. BL Kind BL Eltern B BL Summe Kinder Was machen wir mit Objekten O, die so groß sind, wie die Octreezellen B der Kinder, die jedoch außerhalb der Summe aller Loosezellen der Kinder liegen? Diese finden in den Kindern der Geschwister der Eltern Platz (Cousin/e). O Matthias Fischer 168

Loose-Octree Direkte Platzierung Platzierungsformel Wir zeigen: Für k = 2 können alle Objekte direkt im Loose-Octree gespeichert werden (direkte Adressierung). Eine Traversierung und Suche wie beim Octree ist nicht mehr nötig. Matthias Fischer 169

Loose-Octree Direkte Platzierung Beobachtung Alle Objekte mit Radius 1 4 der Kantenlänge der Loosezelle BL, passen in die Loosezelle. Das ist unabhängig von der Position des Objektes. Objekte mit Radius 1 der Kantenlänge 8 der Loosezelle, werden eine Ebene tiefer gespeichert. Alles zwischen diesen beiden Größen gehört in die Loosezelle BL BL Matthias Fischer 170

Loose-Octree Direkte Platzierung Berechnung der Tiefe Idee: Wir betrachten den maximalen Radius eines Objektes, das in eine Loosezelle passt: R max (tiefe) = maximaler Objektradius, der in Ebene tiefe gespeichert werden kann R max (tiefe) Wir suchen von unten die erste passende Ebene: tiefe(r) = tiefste Ebene, die ein Objekt mit Radius R aufnehmen kann tiefe(r) Matthias Fischer 171

Loose-Octree Direkte Platzierung Berechnung der Tiefe Wir berechnen den maximalen Radius eines Objektes, das in einer Ebene gespeichert werden kann: L tiefe = 2 W 2 tiefe R max (tiefe) = 1 L tiefe 4 = 1 W 2 2 tiefe R max (tiefe) Wir suchen von unten nach oben die erste passende Ebene für das Objekt mit Radius R: R R max (tiefe(r)) 1 2 W 2 tiefe(r) tiefe(r) log ( W R ) 1 tiefe(r) Matthias Fischer 172

Loose-Octree Direkte Platzierung Nachteil der Platzierungsformel Objekte werden nicht an der tiefsten möglichen Stelle gespeichert: Die beiden Kreise werden wegen ihrer Größe im der roten Loosezelle gespeichert. Für den gelben Kreis wäre die Speicherung im Knoten einer Ebene tiefer möglich. Matthias Fischer 173

Loose-Octree Direkte Platzierung Wie finden wir die kleinste mögliche Loosezelle? Passende Ebene mit Plazierungsformel berechnen. Kinder testen, ob das Objekt dort aufgenommen werden kann. Ansonsten eine Ebene höher speichern. Mit Plazierungsformel berechnet Durch testen der 4 blauen Kinder gefunden Matthias Fischer 174

Loose-Octree Frustum Culling Welchen Preis bezahlen wir für die gute Platzierung kleiner Objekte? Empirische Untersuchungen zeigen für den Loose-Octree: es werden weniger möglich sichtbare Objekte zurückgeliefert, es müssen mehr Knoten getestet werden. Beim Loose-Octree wird nur der Teilbaum dieses Kindes nicht traversiert Empirische Daten zum Vergleich Ouadtree / Loose Quadtree siehe Game Programming Gems (Kapitel 4.11) Beim Octree wird nur der Teilbaum dieses Kindes weiter traversiert Frustum Matthias Fischer 175

Balancierung Balancierte Quadtrees Problem Große Quadrate können an einer Seite viele kleine Nachbarn haben. Was verstehen wir unter einer Balance? Wie wird eine Balance konstruiert? hat viele kleine Nachbarn Matthias Fischer 176

Balancierung Definition Ein Quadtree ist balanciert, wenn sich zwei benachbarte Quadrate in der Seitenlänge höchstens um einen Faktor zwei unterscheiden. Matthias Fischer 177

Balancierung Algorithmus zum Aufbau eines balancierten Quadtrees Idee 1. Baue den Quadtree mit dem mit dem normalen Algorithmus auf. 2. Verfeinere alle unbalancierten Blätter (= weitere Aufteilungen hinzufügen), bis alle Blätter balanciert sind. 3. Teile dazu alle Blätter, die zu groß sind, weiter auf. Matthias Fischer 178

Balancierung Eingabe: umbalancierter Quadtree (aus Punkten) Ausgabe: balancierte Version des Quadtrees Algorithmus BalanceQuadtree(T) 1. Füge alle Blätter in eine lineare Liste L 2. while L ist nicht leer 3. entferne ein Blatt v aus L 4. if σ(v) muss aufgeteilt werden 5. then Ersetze Blatt v als internen Knoten mit vier Kindern. Falls v einen Punkt enthält, füge ihn in das entsprechende Blatt (Kind von v). Füge alle vier Kinder von v in L ein. Prüfe, ob σ(v) jetzt Nachbarn enthält, die aufzuteilen sind. Füge die ggfs. in L ein. Matthias Fischer 179

Balancierung Wie wird geprüft, ob ein Blatt aufgeteilt werden muss? verwende den Algorithmus zur Nachbarsuche NordNachbar(v, T) Es gibt unbalancierte Nordnachbarn zu einem Knoten v, wenn der Nordnachbar von v ein SW- oder SE-Kind hat, dass kein Blatt ist. Wie wird geprüft, ob nach einem Split von v die Nachbarn von σ(v) aufgeteilt werden müssen? σ(v) verwende den Algorithmus zur Nachbarsuche NordNachbar(v, T) Es gibt einen unbalancierten Nordnachbarn zu einem Knoten v, wenn der Nordnachbar größer ist als σ(v). σ(v) Matthias Fischer 180

Balancierung Es gilt: Sei T ein Quadtree mit m Knoten. Die balancierte Version T von T hat O(m) Knoten. Warum bewirkt eine Aufteilung nicht die Erzeugung vieler weiterer Aufteilungen? Wir zeigen: Es sind nur O(m) Aufteilungen notwendig. T hat O(m) Knoten Matthias Fischer 181

Balancierung Lemma Seien v 1, v 2, v 3 drei benachbarte Knoten auf gleicher Tiefe, wobeiv 2, v 3 Blätter in T sind. Für jede beliebige Unterteilung von σ(v 1 ) bewirken die balancierenden Aufteilungen durch den Algo. in σ(v 2 ) keine weiteren Aufteilungen in σ(v 3 ). Beweis: Induktion über die Tiefe d des Teilbaum unterv 1 I.A. Für d = 1 hat σ(v 1 ) eine Unterteilung, σ(v 2 ), σ(v 3 ) werden nicht unterteilt. Matthias Fischer 182

Balancierung I.S. Habe v 1 jetzt Tiefe d, mit d > 1. Nach I.V. verursacht die Blancierung im SW-Quadrat von σ(v 2 ) (notwendig wegen kleiner SE-Quadrate in σ(v 1 ) keine Aufteilung im SE-Quadrat von σ(v 2 ). Ebenso nach I.V. verursacht die Blancierung im NW-Quadrat von σ(v 2 ) (notwendig wegen kleiner NE-Quadrate in σ(v 1 )) keine Aufteilung im NE-Quadrat von σ(v 2 ). NE und SE in σ(v 2 ) werden nicht aufgeteilt σ(v 3 ) braucht nicht aufgeteilt werden q.e.d. (Lemma) Matthias Fischer 183

Balancierung Folgerung Die Unterteilung eines Quadrates σ(v) verursacht in anderen Quadraten σ(v ) gleicher Größe nur dann eine weitere Aufteilung, wenn v ein Knoten der 8 benachbarten Quadrate von v ist. Wir müssen jetzt die Quadrate zählen, die aufgeteilt werden: Dazu unterscheiden wir die Quadrate des ursprünglichen Quadtree und die neu durch die Balancierung hinzugefügten Quadrate. σ(v) σ(v ) Alte Quadrate := Quadrate von T Neue Quadrate := zusätzliche neue Quadrate von T Matthias Fischer 184

Balancierung Betrachte den Split eines Quadrates σ: Der Split kostet 4 neue Knoten. Eines der umgebenden Quadrate muss ein altes Quadrat σ sein, das den Split verursacht hat. Wir weisen die Kosten des Splits (4) dem alten Quadrat σ zu. Jeder alte Knoten von T bekommt durch die Balancierung so maximal 8-mal Kosten zugewiesen. Die blaue Unterteilung des alten Quadrates verursacht keinen Split. Die rote Unterteilung des alten Quadrates verursacht einen Split. q.e.d. Die grüne Unterteilung des alten Quadrates verursacht einen Split. Matthias Fischer 185

Balancierung Laufzeit Sei T ein Quadtree mit m Knoten. Die balancierte Version kann in Zeit O((d + 1)m) konstruiert werden. Warum? Da wir eine konstante Anzahl von Nachbarschaftssuchen durchführen benötigen wir O(d + 1) Zeit, um ein Blatt in der Liste L zu behandeln. Da jeder Knoten höchstens einmal behandelt wird und es höchstens O(m) Knoten gibt. Laufzeit ist O((d + 1)m) Matthias Fischer 186