Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

1

17.08.2012, 14:12

Rendern von großen 3D Szenen: welche Verfahren gibt es?

Hi,
welche Verfahren gibt es bzw. kennt ihr um große 3D Szenen zu rendern? Ich rede jetzt nicht nur von Terrains,
sondern einfach von Szenen, die mit tausenden von 3D Objekten gefüllt sind (z.B. wie bei Spielen wie RAGE, Crysis oder Skyrim).
Außerdem würde mich interessieren, welche Verfahren noch aktuelle sind. BSP Trees verwendet nämlich meines Wissens kaum noch jemand (außer Valve).
Mir selbst fällt jetzt nur Portal-Based-Rendering ein. Und Level-of-Detail alleine reicht auch nicht wirklich aus, um viele Objekte zu rendern, weil man ja trotzdem viel zu viele Render-Calls hat.

Thoran

Alter Hase

Beiträge: 520

Wohnort: Stuttgart

Beruf: Senior Software Engineer

  • Private Nachricht senden

2

17.08.2012, 14:15

Occlusion-Culling, View-Frustrum-Culling und damit die zu rendernde Geometriegröße reduzieren.
Mein Entwicklertagebuch
Aktuelles Projekt: Universum Espionage
Eingestellt:Spieleengine SilverCore
Organisator "Spieleentwickler Stammtisch Stuttgart"

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

3

17.08.2012, 14:22

Zitat

trotzdem viel zu viele Render-Calls hat.

Um dem entgegen zu wirken, würde ich Techniken wie Instancing einsetzen.

Zitat

BSP Trees verwendet nämlich meines Wissens kaum noch jemand

Ich wüsste nicht was gegen BSP-Trees spricht.
Ohne eine solche Baumunterteilung, lassen sich Techniken wie Frustum Culling oder Kollisionsberechnung nur ineffizient implementieren
Ich würde allerdings Okttrees bevorzugen, da die Implementierung einfacher ist und man Rekursionstiefe einspart.

Schrompf

Alter Hase

Beiträge: 1 470

Wohnort: Dresden

Beruf: Softwareentwickler

  • Private Nachricht senden

4

17.08.2012, 14:33

Die Frostbite-Engine benutzt zum Frustum Culling einfach ein flaches Array aus ZeichenbarenDingen (tm) und cullt parallel auf allen Kernen gegen ganz simple Bounding Spheres. Soweit ich weiß, stand mal in irgendeiner Präsentation. Die Gewinne durch hierarchische Vorunterscheidung, wie sie alle Beschleunigungsstrukturen im Grunde bieten, scheinen heutzutage durch die nicht-lineare Ausführung wieder aufgefressen zu werden. CPU wie GPU sind ja am schnellsten, wenn sie sich linear ohne Unterscheidungen durch die Daten fressen können.

Abgesehen davon würde ich für große Objektzahlen tatsächlich Instancing empfehlen. Das lohnt sich wohl aber nur bei einem Deferred Renderer irgendeiner Art, für Forward Renderer sind durch die verschiedenen Lichteinflüsse die Shader-Parameter pro Instanz zu unterschiedlich, um Instancing anwenden zu können.

(Älterer) Erfahrungsbericht: ich habe vor einigen Jahren auch mal eine automatische Instancing-Erkennung in die Splitterwelten eingebaut. Hat die Anzahl der DrawCalls auch tatsächlich grob halbiert, aber mehr ging nicht wegen zu unterschiedlicher Objektparameter. Und es war netto sogar ein Performance-Verlust, weil die eingesparten DrawCalls durch das Locken dynamischer Instanz-VertexBuffer und für die Wechsel der Vertex Declaration mehr als draufgingen. Selbst wenn ich auch Einzelobjekte als Instanzen gezeichnet habe, um den Wechsel der Vertex-Deklaration zu vermeiden, war es am Ende immer noch ein Nullsummen-Spiel.

Das statische Zusammenfassen größerer Objektgruppen in feste Sammel-Meshes hat dagegen viel gebracht. Das würde ich auch jederzeit empfehlen.
Häuptling von Dreamworlds. Baut aktuell an nichts konkretem, weil das Vollzeitangestelltenverhältnis ihn fest im Griff hat. Baut daneben nur noch sehr selten an der Open Asset Import Library mit.

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

5

17.08.2012, 14:49

Es komm auch immer die Szene an. am meisten performance bringt wohl batching und Culling. Die dazu benötigten Techniken wurden schon genannt:

1. Octree für hierarchisches Culling (geeignet für Outdoor-Szenen)
2. Portal-System (Indoor)

Ansonsten sind Instancing und Occlusion Culling meiner Meinung nach schon eher "exotische" Methoden, um Performance zu erhöhen. Batching (wenige Drawcalls) durch zusammenfassen statischer Geometrie (Ogre hat dazu sogar methoden, das zur Laufzeit zu tun), Texturatlanten machen wohl sehr viel aus.

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

6

17.08.2012, 18:28

Erst mal Danke für eure Antworten :)

@TrommlBomml: Warum hällst du "Instancing" für eher exotisch? Ist das nicht sogar eher eine recht neue Technik?! (zumindest Hardware Instancing)

@Schrompf: Ich dachte es gibt Hardware Instancing in Direct3D erst seit version 10, oder habt ihr bzw. du die Splitterwelten mitlerweile von D3D9 auch D3D10 umgestellt?

@all: View-Frustum Culling lässt sich bei Hardware Instancing nicht mehr wirklich gut umsetzten, oder etwa doch?

Schrompf

Alter Hase

Beiträge: 1 470

Wohnort: Dresden

Beruf: Softwareentwickler

  • Private Nachricht senden

7

17.08.2012, 18:48

Hardware Instancing geht halbwegs stressfrei ab DX9. Google mal nach IDirect3DDevice9::SetStreamSourceFreq - damit stellt man das zugegebenermaßen etwas umständlich ein. Klappt aber prima, nutzen wir seit geschätzt vielleicht 2007 für den Bodenbewuchs.

Jede Art von Culling geht natürlich nur pro Batch, also für alle Instanzen eines DrawCalls gemeinsam. Ab DX10 könnte man dann was im GeometrieShader drehen, aber ich glaube, das lohnt sich nicht.
Häuptling von Dreamworlds. Baut aktuell an nichts konkretem, weil das Vollzeitangestelltenverhältnis ihn fest im Griff hat. Baut daneben nur noch sehr selten an der Open Asset Import Library mit.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

8

17.08.2012, 20:55

Zum Thema "Textur-Atlanten" habe ich heute einen 50-seitigen Projektbericht abgegeben (für mein Master-Projekt - das ist quasi die Vorstufe zur Master-Thesis).
Mit der Technik habe ich auch sehr gute Erfahrungen gemacht.
Wer Interesse hat: hier ist das PDF! :)

9

18.08.2012, 06:21

Danke David das du diese Arbeit mit uns teilst. Sie ist sehr informativ und das ein oder andere konnte ich so auch noch lernen.
Danke dir.

Grüsse Spitzohr

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

10

18.08.2012, 13:25

Danke für die Tips und danke David für das Teilen deiner Master-Arbeit :)

Werbeanzeige