Wie ist der Stand der Technik bei geometrischen LOD in Spielen?

15

Wie werden in modernen Spielen Geometriedetails für Objektnetze wie Zeichen, Gelände und Blätter erstellt? Meine Frage besteht aus zwei Teilen:

  1. Wie sieht die Asset-Pipeline aus? Stellen Künstler ein High-Poly-Modell her, das später dezimiert wird? Wenn ja, welche Dezimierungsalgorithmen sind am beliebtesten? Werden LOD-Netze manchmal von Hand hergestellt?
  2. Wie wechseln Engines zur Laufzeit zwischen verschiedenen Objekt-LODs? Gibt es fließende oder progressive Übergänge?

Die Antwort könnte lauten: "Verschiedene Studios verwenden unterschiedliche Techniken." Wenn ja, geben Sie bitte einige der gängigsten Praktiken an. Es wäre auch großartig, wenn Sie mich auf Whitepapers / Folien verweisen könnten, die bestimmte Beispiele behandeln.

ap_
quelle
1
SIGGRAPH 2014, ein Fortschritt im Echtzeit-Rendering, bietet ein wirklich interessantes Gespräch über die Unterteilung der Aufgaben. Sie sollten es überprüfen. Anstatt ein High-Poly-Netz zu haben, das aus einem Low-Poly-Netz besteht, haben sie Formen analytisch definiert und nach Bedarf weitere Dreiecke hinzugefügt
Alan Wolfe,
Wir können hier über den Stand der Technik in Bezug auf LOD-Algorithmen und Datenstrukturen sprechen, aber wenn es um die Frage geht, wie moderne Spiele dies konkret tun, haben Sie möglicherweise mehr Glück bei gamedev.se: gamedev.stackexchange.com
Pseudonym
3
Ich bezweifle das. Spieleentwickler ist sehr grafisch leicht. Es handelt sich hauptsächlich um Unity- und Java-Fragen mit einigen Fragen zur Pfadfindung und festen Framerate: p
Alan Wolfe
1
@Alan, Activision hat eine Menge modernster Algorithmen verwendet, um ein echtes 3D-Strategiespiel zu erstellen, das nicht auf der isometrischen Sprite-Basis basiert. Ich bin damit einverstanden, aber sie haben großartige Arbeit im Bereich Nachnahme geleistet, aber es ist immer noch etwas träge und faul schon in den frühen stufen mit einer kleinen anzahl von vermögenswerten (ich spreche über ihr mobiles spiel auf einem iphone 5s). Ich denke, Sie müssen OpenGLES-Expertenfunktionen und die zugrunde liegenden Ebenen kennenlernen, um ein solches Spiel erfolgreich zu schreiben.
Iman
Ich spreche von der Konsolenversion von Call of Duty, falls das geklärt werden sollte.
Alan Wolfe

Antworten:

22

Bei der Geometrie-LOD wechseln die meisten Spiele einfach zwischen einer Reihe vordefinierter LOD-Netze. Zum Beispiel verwendet "Infamous: Second Son" 3 LOD-Netze ( Adrian Bentley - "inFAMOUS: Second Son Postmortem", GDC 2014 ) und "Killzone: Shadow Fall" 7 LOD-Netze pro Charakter ( Michal Valient - "Killzone: Shadow Fall") Demo postmortem ", Devstation2013 ). Die meisten von ihnen werden erzeugt, aber wichtigere (wie die Hauptfigur) können von Hand hergestellt werden. Netze werden häufig mit einer beliebten Simplygon-Middleware erstellt, manchmal werden sie jedoch auch von Grafikern in ihrem bevorzugten 3D-Paket erstellt.

Bei Spielen mit großem Zugabstand werden zusätzlich Imposter für Laub, Bäume und hohe Gebäude verwendet ( Adrian Bentley - "inFAMOUS: Second Son Engine Postmortem", GDC 2014 ). Sie verwenden auch hierarchische LODs, die einen Satz von Objekten durch einen ersetzen. Zum Beispiel werden in "Just Cause 2" Bäume zunächst einzeln als normale LOD-Netze gerendert, dann einzeln als Betrüger und schließlich als einzelnes zusammengeführtes Waldnetz ( Emil Persson, Joel de Vahl - "Besiedlung einer riesigen Spielwelt", Siggraph2013 ) und in Entfernte Teile der Welt von "Sunset Overdrive" werden durch einzelne, automatisch offline generierte Netze ersetzt ( Elan Ruskin - "Streaming Sunset Overdrives Open World", GDC2015 ).

Eine weitere Komponente eines LOD-Systems ist die Vereinfachung von Materialien und Shadern. Beispiel: "Killzone: Shadow Fall" deaktiviert den Tangensraum und die normale Zuordnung für die entfernten LODs ( Michal Valient - "Killzone: Shadow Fall-Demo nach dem Tod", Devstation2013 ). Dies wird normalerweise implementiert, indem eine Reihe von Shader-Features pro LOD global deaktiviert werden. Bei Engines mit Shader-Diagrammen, in denen Interpreten benutzerdefinierte Shader erstellen können, muss dies jedoch manuell erfolgen.

Bei den LOD-Übergängen wechseln manche Spiele einfach die Maschen und manche verwenden Dithering für reibungslose LOD-Übergänge. Beim LOD-Wechsel werden zwei Maschen gerendert: die erste wird allmählich ausgeblendet und die zweite wird eingeblendet ( Simon schreibt Blog - "Assassins Creed 3 - LoD Blending" ). Klassische progressive CPU-Mesh-Techniken werden nicht verwendet, da sie ein kostspieliges Mesh-Update und das Hochladen auf die GPU erfordern. Hardware Tessellation wird in einigen Titeln verwendet, jedoch nur zur Verfeinerung eines detailliertesten LOD, da es langsam ist und im Allgemeinen vordefinierte Geometrie-LODs nicht ersetzen kann.

Terrain-LODs werden separat behandelt, um ihre spezifischen Eigenschaften zu nutzen. Geländegeometrie LOD wird normalerweise mithilfe von Clipmaps implementiert ( Marcin Gollent - "Landschaftserstellung und -rendering in REDengine 3" ). Geländematerial-LODs werden entweder ähnlich wie Mesh-LODs oder mit einer Art virtueller Textur behandelt. Ka Chen - "Adaptives virtuelles Textur-Rendering in Far Cry 4" .

Wenn Sie sich für LOD-Pipelines für echte Spiele interessieren, stöbern Sie einfach in der Dokumentation einer der modernen Spiele-Engines: Unreal Engine 4 - "Erstellen und Verwenden von LODs" , CryEgnine - Static LOD und Unity-LOD .

Krzysztof Narkowicz
quelle
1
Game Engines haben normalerweise eine Reihe von vordefinierten Methoden, und Sie können nicht in den Kern gelangen, um den LOD-Algorithmus tatsächlich zu ändern. habe ich recht? Ich habe über den Fall gesprochen, dass Sie selbst ein Spiel mit OpenGL oder SpriteKit schreiben. Ich weiß nicht, ob man den LOD-Algorithmus in Unity oder Unreal anpassen kann. Ist das möglich?
Iman
3

LOD (Level of Detail) bedeutet das Verwalten von Objekten in unterschiedlichen Darstellungsmaßstäben, die in zwei Teile unterteilt sein können. Sie können jedoch eine davon verwenden, und das würde für die meisten Fälle ausreichen.

  1. Ein- / Ausblenden von Ebenen (Gruppe von Objekten desselben Typs) abhängig von der Größe (Anzeigeskala).

  2. Algebraische Geomery-basierte Methode, Generalization genannt (ein Algorithmus zur Vereinfachung von Polygonen). schau dir das folgende bild an

    Verallgemeinerung

Die bekannteste und effizienteste Methode zum Verallgemeinern (Vereinfachen) eines Polygonnetzes ist das Descartes-Euler-Polyedersatz (Gleichung 4.5), die von den meisten räumlichen Datenbanken verwendet wird Zum Beispiel PostGIS-Module in PostgreSQL. Es werden einfach kleinere Seiten eines Polygons entfernt und es wird eine sehr abgerundete Seite erstellt. (Bild oben)

Um LOD in einem Spiel zu implementieren, müssen Sie den Maßstab Ihrer Karte (Szene) beim Vergrößern / Verkleinern speichern und verwalten. Die Skala ändert sich von Null nach Unendlich und Sie müssen dies in eine bestimmte Anzahl von Bereichen aufteilen, zum Beispiel in etwa wie folgt:

  1. 1 / null = unendlich bis 1/50
  2. 1/50 bis 1/100
  3. 1/100 bis 1/1000
  4. 1/1000 bis 1 / unendlich = 0

Dann müssen Sie definieren, welche Arten Ihrer Objekte (Ebenen) in jedem der oben genannten Bereiche sichtbar oder unsichtbar sein sollen. Zum Beispiel sollte ein kleiner Objekttyp wie ein Hydrantenventil nicht sichtbar sein, wenn sich der Benutzer im vierten Bereich befindet, da er bei dieser Skala sehr klein ist und nicht unterschieden werden kann, sodass es egal ist, ob Sie ihn auf der Zeichnung überspringen Bildschirm.

Wenn ein Benutzer die Vergrößerung durch Vergrößern und Verkleinern ändert, wechselt er durch die oben genannten Grenzen von einem zum anderen Bereich. In Ihrem Spiel werden diese Anzeigeskalen zum Verwalten der Detailebene verwendet, indem Objekte in der Szene angezeigt oder ausgeblendet werden. Dies ist eine diskrete Lösung, bei der Objekte während des Verkleinerns plötzlich verblassen. Wenn jedoch die Anzeigeskalen und Vergrößerungsbereiche sorgfältig definiert sind, spürt der Benutzer nichts.

Die obige Gruppe von 4 Bereichen ist nur ein Beispiel und Sie müssen durch Ausprobieren das Beste für Ihren eigenen Fall finden. Dafür gibt es keine Regel.

Manchmal verwenden die Spiele ihre eigenen LOD-Methoden, Subway Surfer for Instant, und zeigen ein kleines Rechteck ohne Textur, um ein Gebäude in der Ferne zu zeigen. Sie haben nicht über Ihr Projektionssystem gesprochen, was sehr wichtig ist. Sie haben auch nicht darüber gesprochen, welche Art von Spiel Sie erstellen.

Angenommen, Sie implementieren ein vollständiges 3D-Spiel mit openGl und möchten einige Mesh-Dateien filtern, bevor Sie sie auf Grafikhardware übertragen. Ich bin sicher, dies wird Ihnen dabei helfen, die Bindungs- / Entbindungsoperationen mit Pufferobjekten und Vertex-Arrays (VBO, VAO) zu reduzieren Umgang mit OpenGl.

Verwenden Sie nur eine Ebenenverwaltung oder implementieren Sie einfach die Euler-Generalisierung

In den meisten Fällen ist es nicht erforderlich, einen Generalisierungsalgorithmus zu implementieren, und das Filtern von Objekten funktioniert einfach und bringt Sie zu der Effizienz (Aktualisierungsrate), die Sie benötigen, es hängt jedoch von Fall zu Fall völlig davon ab. Obwohl es ein einfacher Algorithmus ist, bei dem nur die kleinen Seiten eines Polygons entfernt werden, müssen Sie einen Schwellenwert definieren, der das Produkt der Größe und einer konstanten Zahl ist, damit größere Seiten unter einem viel weiter entfernten Gesichtspunkt gefiltert werden.

Wenn Sie die Ebenenverwaltung vergessen und nur den Euler-Generalisierungsalgorithmus implementieren, erhalten Sie eine sehr übersichtliche und kontinuierliche Methode, bei der Sie die einzelnen Seiten und Linien nur anhand eines vordefinierten Schwellenwerts überprüfen und sie nur dann anzeigen, wenn sie groß genug sind, um auf dem Bildschirm unterschieden zu werden.

PS: Die Vergrößerung ist eine Gleitkommazahl> 0, die 1 / Skala entspricht, und die Skala ist normalerweise <1, da eine 1: 1-Skala bedeutet, dass Sie reale Längen in Ihrem Spiel haben.

Iman
quelle
Daunenwähler, bitte denk daran, dass du erneut abstimmst, wenn es immer noch eine -1 ist. Hinterlasse einen Kommentar für mich. Danke
Iman,
Ich habe nicht abgelehnt, aber ein Teil von mir fragt sich, was ist der Stand der Technik hier? Also kann ich auch nicht abstimmen.
Joojaa
1
Ich habe einen Downvot abgegeben, weil es schwer zu lesen war und es meiner Meinung nach für LODs in Spielen nicht relevant ist. Nachdem ich es mir noch einmal überlegt hatte, entschloss ich mich, meine Gegenstimme durch Upwoting abzubrechen und einfach meine eigene Antwort hinzuzufügen.
Krzysztof Narkowicz
Der Stand der Technik soll eine sehr herausragende Arbeit bedeuten, aber in verschiedenen Fällen ergeben sich unterschiedliche Methoden, z. B. hat Call of Duty Layer-Management und Mipmaping Texturen. U-Bahn-Surfer sind eine völlig andere Geschichte, und ich sage, dass sie alle auf dem neuesten Stand der Technik sind, obwohl U-Bahn-Surfer diskret Gebäude und andere städtische Objekte zeichnet oder Call of Duty beim Zoomen oder Schwenken etwas träge ist. Ich denke, sie sind alle in ihrem Fall am besten.
Iman
3

Iman hat bereits eine vollständige Antwort vorbereitet, aber ich möchte etwas hinzufügen

LOD kann auf zwei verschiedene Arten durchgeführt werden

  1. Continuous heißt CLOD und ist eine Polygonnetzoptimierung
  2. Diskret wird fast jeder andere Algorithmus als die Polygonnetzoptimierung in dieser Gruppe betrachtet.

Zum Beispiel ist Mipmaping ein gutes, schnelles, aber schweres Mipmaping, das zur zweiten Gruppe oben gehört

Hier finden Sie eine gute Erklärung zu Mipmaping und Implementierungscode mit OpenGl.

Imzich
quelle