Indexed Rendering

Indexed Rendering ist eine Technik um das Rendern komplexer Modelle oder Szenen zu optimieren. Erreicht wird dies durch eine Reduktion der Datenmenge die zur Verarbeitung an die GPU gesendet wird.

Bisher haben wir beim Rendern von Objekten für jedes Dreieck eines Modells jeweils alle 3 Eckpunkte an die GPU gesendet. Bei aneinander angrenzenden Dreiecken führt dies dazu, dass die Eckpunkte die in mehreren Dreiecken enthalten sind, für jedes Dreieck erneut an die GPU gesendet werden.

Beim sog. "indizierten Rendern" wird jedem Vertex eine eindeutige ID zugewiesen. Jedes Vertex wird dann nur noch genau einmal an die GPU gesendet. Beim Rendern wird lediglich eine Liste von IDs übermittelt und die GPU sucht anhand der ID den passenden Vertex aus der Liste heraus.

Dieser Ansatz kann die Datenmenge, die an die GPU gesendet wird, erheblich reduzieren und die Rendering-Leistung verbessern, da weniger doppelte Eckpunkte und Primitive verarbeitet werden müssen.

Es gibt auch noch Instanced Rendering

Instanced Rendering ist eine weitere Optimierungstechnik. Sie ermöglicht es, dasselbe Objekt in einem einzigen Zeichenaufruf mehrfach mit unterschiedlichen Parametern zu zeichnen. Diese Technik wird häufig für das Rendering komplexer Partikelsysteme, großer Menschenmengen oder der Vegetation in Außenszenen verwendet.

Indexed Rendering und Instanced Rendering sind zwei verschiedene Techniken, die zur Optimierung des Renderings in unterschiedlichen Szenarien eingesetzt werden. Indiziertes Rendering wird verwendet, um die an die GPU gesendete Datenmenge durch die Wiederverwendung gemeinsam genutzter Vertices zu reduzieren, während instanziertes Rendering verwendet wird, um die Anzahl der Zeichenaufrufe zu reduzieren, die zum Rendern vieler Instanzen desselben Objekts erforderlich sind.

Es ist jedoch möglich, indiziertes Rendering und instanziertes Rendering zu kombinieren, um noch größere Leistungsverbesserungen zu erzielen. Sie können zum Beispiel indiziertes Rendering verwenden, um die an die GPU gesendete Datenmenge zu reduzieren, und dann Instanzierung verwenden, um mehrere Instanzen desselben Objekts mit unterschiedlichen Parametern in einem einzigen Zeichenaufruf effizient zu rendern.

Unsere Engine verwendet nur Indexed Rendering.

Aufgaben

1. Machen Sie sich mit dem Indexed Rendering vertraut

1.1: Holen Sie sich die aktuelle Version des Codes von GitHub und verschaffen Sie sich einen Überblick über die Änderungen.

1.2: Wie erkennt die Engine welche Vertices identisch sind?

1.3: Welche Art von Modellen profitiert von dieser Optimierung und bei welcher Art von Modellen ergeben sich evtl. kaum Vorteile? Für diese Frage lohnt sich ein Rückblick in die Grundlagen der Computergrafik und die verschiedenen Shading Methoden beim Erstellen von Modellen.

2. Erarbeiten Sie konkrete Zahlen zu Laufzeiten und Speicherverbrauch

2.1: In diesem Kapitel liegen Ihnen 6 verschiedene Modelle vor. Finden Sie heraus wieviele Vertices jedes Modell hat und wieviele davon laut dem verwendeten Algorithmus als "doppelt" klassifiziert werden.

2.2: Analysieren Sie die Größe der Bufferobjekte und ermitteln Sie wie sich die Größen vor und nach dieser Optimierung unterscheiden.

3. Konkrete Anwendung

3.1: Erstellen Sie sich eine Test-Scene und erhöhen Sie schrittweise die Anzahl der gerenderten Objekte. Ab wann lässt sich ein Unterschied in der Framerate ermitteln? Denken Sie daran V-Sync in den Settings auszuschalten.

3.2: Wie ist der Zusammenhang zwischen der Anzahl der Objekte und deren Einfluss auf die Framerate? Linear? Exponentiell? Unterscheidet sich das auf Ihrem Computer zwischen Indexed Rendering und klassischem Rendern?

3.3: Können Sie ungefähr abschätzen welche Auswirkungen die zusätzliche Implementierung von Instanced Rendering haben könnte?

Ende dieses Themenblocks

Dieses Kapitel schließt den Themenblock der Leistungsoptimerung ab. Es lohnt sich daher an dieser Stelle nochmal die Kapitel 4, 5 und 6 gemeinsam zu betrachten.

Wir haben verschiedene Methoden kennengelernt um die Ladezeit von Ressourcen zu erhöhen und wir haben verschiedene Methoden kennengelernt um den Rendervorgang zu optimieren.

In einer Prüfung ist durchaus davon auszugehen, dass diese Themen fließend ineinander übergehen. Überlegen Sie sich daher mal ob sie mit der folgenden Frage etwas anfangen könnten.

Prüfungsfrage

Sie bekommen den Auftrag eine 3D Engine zu entwickeln mit deren Hilfe ein Echtzeit Flug durch einen 3D generierten Seltersweg möglich sein soll. Die Software soll später auf den dort installierten Stelen laufen. Siehe Bild Die Hardware hat Ihre Grenzen. Unity kommt nicht in Frage. Eine auf die Hardware optimierte OpenGL Lösung ist laut Hersteller praktikabel.

Es gibt bereits hochwertige 3D Modellen und Texturen. Die Stadt hat sogar bereits einen Prototypen entwickeln lassen. Leider ist der Prototyp sehr langsam. Ladezeiten und Framerate sind miserabel.

Halten Sie das Projekt für realisierbar? Falls ja, welche Aspekte der Umsetzung bedürfen besonderer Aufmerksamkeit?

Diese Seite speichern:
Redvery Journal
Computergrafik-Effiziente-Algorithmen-6.trj
Seite speichern
Computergrafik-Effiziente-Algorithmen-6.trj
Redvery Journal ist ein modernes Dateiformat mit dem diese Seite incl. aller Bilder und Anhänge gespeichert und offline verwendet werden kann.

Die passende App dazu gibt es kostenlos unter www.redvery.com/journal
Speichern
Abbrechen