Entferntes 3D-Objekt-Rendering [Spiele]

9

Was ist die Grundvoraussetzung für Technologie, wie sie in Oblivion zu finden ist (und andere Spiele, ich bin mir sicher, habe nicht genug zu wissen gespielt), in der Objekte aus der Ferne nur vage gezeigt werden, wenn man sie aus der Entfernung betrachtet? Zum Beispiel ist ein großer Turm eine Meile entfernt und Sie sehen das vage Rechteck, das vom Horizont ragt ... Offensichtlich kann eine riesige 3D-Szene nicht alle gerendert werden, und ich weiß, dass es im Fall von Höhenabbildungen nur Näherungsalgorithmen gibt das wird verwendet, um die Höhenmap-Qualität weiter weg von der Kamera zu reduzieren, aber für bestimmte Objekte, was ist der beste Weg, diese zu zeigen?

Ich habe mir eine Vorrendering-Technik ausgedacht, bei der Sie bestimmte Orte in der Landschaft auswählen und dann ein Programm erstellen, das alle Höhen- und 3D-Modelle um diesen Punkt zeichnet und ein Bild macht. Es würde mehrere Bilder machen, und dann, wenn der Spieler in der Nähe dieser Stelle ist, würden die Bilder als Skybox verwendet werden.

Eine weitere offensichtliche Technik ist es, wirklich grobe 3D-Modelle zu speichern, aber wie wählt dann das 3D-Rendering-System spezifisch das grobe Modell des Gebäudes aus und nicht die groben Modelle anderer weniger bedeutender (und wahrscheinlich nicht sichtbarer) Modelle - diese Distanz) Objekte? Wie würden Sie so etwas zusammen mit Ihrer Heightmap speichern? Vielleicht haben Sie vom Design her nur ein paar so bedeutsame Orientierungspunkte und speichern dann die Liste in einer kleinen Datei und geben auf jedem Frame diejenigen wieder, die weniger als x wirklich weit entfernt sind?

Ich bin mir bewusst, dass die Halo-Serie das Spiel in Levels unterteilt und dann jedes Level eine andere handgemachte Skybox hat. Das ist etwas, worauf ich im ersten Vorschlag hinaus wollte, aber ich bin mir nicht sicher. Ich denke, ich versuche wirklich nur andere Ideen oder Verbesserungen oder Probleme in meinen Ideen zu sammeln, so dass ich mit meiner begrenzten Zeit und meinem Wissen auswählen kann, welche Prototypen ich entwickeln soll.

Ein weiteres verwandtes Thema ist die Darstellung von Bergen in einer Entfernung, da sie Teil der Höhenkarte und keine 3D-Modelle darüber wären, so dass sie nicht wirklich eine grobe Version und die Höhenmap-Approximation hätten Der Algorithmus könnte den Berg aus einer so weit entfernten Entfernung zerstören (vorausgesetzt, Sie würden sogar versuchen, eine so weit entfernte Geometrie zu approximieren und darzustellen, was Sie wahrscheinlich nicht tun würden). Bonuspunkte, wenn Sie dies auch in Ihrer Antwort angeben. :)

Danke!

P.S. Ich verwende OpenGL. Ich suche nur nach den grundlegenden Konzepten, aber wenn Sie sich entscheiden, Beispielcode zu veröffentlichen, benutzen Sie bitte OpenGL Funktionen und Begriffe! :)

EDIT: Danke für die Antworten! Zu Dokumentationszwecken hier ist eine andere Ressource, die ich gefunden habe: Kapitel 4.9 in Game Programming Gems 2 behandelt das Konzept, entfernte Landschaften in eine Skybox zu rendern: Ссылка (Leider ist diese Vorschau nur die erste Seite des Kapitels ... Ich muss dieses Buch aus meiner Universitätsbibliothek holen, sobald ich im August zurück bin)

Auch nach dem Lesen dieser Dinge bin ich immer noch der Meinung, dass LOD für Objekte ist, die sich in einigermaßen naher Entfernung befinden. Wenn die Objekte nicht einmal ein Pixel groß sind, aber Sie sie noch der Grafikkarte zuführen, verschwenden Sie nur Energie, egal ob Sie LOD verwenden oder nicht. Und das wäre für alles außer den absolut größten entfernten Objekten der Fall; ein paar hohe Gebäude und einige Berge, in den meisten Fällen, aber die kleinen Detailmodelle (Büsche, sogar Bäume, Felsen, was auch immer andere Landschaft ...) wären aus einer solchen Entfernung nicht sichtbar. Also mag ich die Render-to-Skybox-Technik, und wenn ich auf diese Brücke komme, werde ich sie überqueren; und ich werde sicherstellen, dass LOD für alle Modelle verwendet wird, ich werde einfach keine solche Distanz wiedergeben.

Ich denke übrigens eher an ein Oblivion-Spiel, also könnte die Antwort vom Spielgenre abhängen.

    
Ricket 18.06.2009, 16:21
quelle

8 Antworten

7

Einige Techniken, einschließlich der von Ihnen erwähnten:

  • Detaillierungsgrad. Oben beschrieben.
  • Mipmapping. Für Texturen.
  • Sichtfeld. Beschränken Sie, wie viele Dinge Ihre Kamera "sehen" kann, indem Sie eine geeignete Zoomstufe auswählen. Siehe auch Ansicht Keulen von Kaugummis.
  • Far-Clipping-Ebene. Okklusion von weit entfernten Orten: Die meisten Spiele benutzen Nebel, Berge oder eine andere Ausrede, um einen harten Abstand davon zu haben, wie weit entfernt man sehen kann. Dies kann unter Verwendung von Octrees oder einer anderen derartigen Technik implementiert werden. Dies kann auf ganzen Objekten, oder Polygonen, oder was auch immer, basieren, und es wird normalerweise so eingestellt, dass es genau hinter diesen oben erwähnten Bergen stattfindet.
  • Arenen / Level / Bereiche / was auch immer - die meisten Spiele beschränken dich künstlich darauf, in einer Arena zu spielen. der Vorteil liegt auf der Hand (Sie können Objekte in allen anderen Arenen ignorieren)
  • Pre-rendering - das ist, was Sie oben vorschlagen. Für statische Szenen, die weit entfernt sind, rendern Sie die Szene in einer "typischen" Ansicht und machen Sie sie zu einer Textur im Hintergrund, oder verwenden Sie sie für die Skybox / Reflektionskarte / etc.

Die Idee besteht darin, so viele Details wie möglich zu beseitigen, bevor die Benutzer bemerken.

Es gibt eine Reihe bereits vorhandener Toolkits, die diese Dinge automatisch erledigen, aber sie kosten normalerweise Geld. Wenn Sie eine ernsthafte App betrachten, würde ich empfehlen, zumindest die Lösungen zu erforschen, die sie enthalten.

    
Alex Feinman 18.06.2009, 17:43
quelle
7

Ich denke, das ist, was Sie Detailgrad (LOD)

suchen     
AvatarOfChronos 18.06.2009 16:25
quelle
4

Bei 3D-Modellen wird die Technik Detaillierungsgrad genannt. Im Wesentlichen werden mehrere Versionen von Modellen zur Verfügung gestellt, die je nach Kontext verwendet werden. Es ist nicht immer nur für die Entfernung, es kann auch verwendet werden, um in anderen Situationen Bildfrequenz zu halten.

Seien Sie jedoch vorsichtig, wenn Sie das Mipmapping aktiviert haben, oder Sie werden auf den größeren Texturen der unteren res-Modelle glitzern und auf Animationen achten. Das Modell unter ein animierendes Skelett zu schalten ist knifflig, also besteht eine Technik darin, das gleiche Skelett beizubehalten, selbst wenn man das Modell LOD-basiert.

Es gibt dynamische LOD-Systeme sowohl für Gelände- als auch für Objektmodelle, aber diese können CPU-lastig sein.

    
sean riley 18.06.2009 16:28
quelle
0

Eine Technik ist LOD (level of detail). Je weiter ein Objekt von der Kamera entfernt ist, desto weniger Dreiecke werden gezeichnet. Hier ist ein Link: Ссылка

    
jjxtra 18.06.2009 16:25
quelle
0

Sie können Texturen für entfernte Objekte rendern, aber Sie müssen die Textur jedes Mal neu rendern, wenn sich die Perspektive über einen bestimmten Schwellenwert hinaus ändert. Es funktioniert gut für entfernte Objekte, wo die Perspektive sich nicht so oft ändert wie in den Bergen in der Ferne, aber wenn sich die Ansichtsquelle zu schnell bewegt oder du zu nah bist, dann erhältst du einen Fischaugeneffekt die frühen Tage des Himmels, die im Beben rendering. Diese Art von System eignet sich für Welten wie eve online, die große Entfernungen enthalten.

Dies ist natürlich nur ein weiterer Trick in Ihrem Arsenal und Sie werden LOD in gewissem Umfang noch brauchen.

    
gradbot 18.06.2009 16:45
quelle
0

Modelle mit wenig Details funktionieren besonders gut für Fahrzeuge und Objekte. Es ist wirklich schwierig mit Gelände. Ich habe an Kampfzonen-Spielen und PC-Flugsimulatoren gearbeitet. Ein kleiner Nebel hilft dabei, die "Pops" zwischen den Details zu verdecken.

In den unteren Details wird das Textur-Mapping häufig durch einige einfarbige Polygone ersetzt.

"Eine weitere offensichtliche Technik besteht darin, wirklich grobe 3D-Modelle zu speichern, aber wie wählt das 3D-Rendering-System dann spezifisch das grobe Modell des Gebäudes aus und nicht die groben Modelle anderer weniger signifikanter (und wahrscheinlich nicht sichtbarer) Von-dieser-Entfernung-Objekte? Wie würden Sie so etwas zusammen mit Ihrer Heightmap speichern? "

Sie können Ihr Terrain rasterieren und eine Liste mit den Objekten speichern, die in jeder Rasterzelle sichtbar sind.

    
Nosredna 18.06.2009 16:54
quelle
0

Eine Möglichkeit, mit Terrain umzugehen, sind Kacheln mit mehreren Auflösungen. Ähnlich wie bei Virtual Earth und Google Maps teilen sie die Welt rekursiv in Kacheln. Also, es gibt 4 Kacheln auf Level 0, 16 auf Level 1, etc ... Dann, mit einem LoD-Algorithmus, um den Zoom / Maßstab zu bestimmen, würden Sie die entsprechenden Terrain-Kacheln für den gegebenen Bereich laden.

    
Erich Mirabal 18.06.2009 17:54
quelle
0

Die Technik des dynamischen Zwischenspeicherns vor gerenderter Ansichten entfernter Objekte wird üblicherweise als "Betrüger" bezeichnet. Hier ist ein Artikel aus einem alten Game Programming Gems Buch zu diesem Thema.

Es gibt viele Techniken, um den Detaillierungsgrad für Höhennetz-Terrains zu handhaben. Werfen Sie einen Blick auf vterrain.org für einen Überblick über einige gebräuchliche Techniken. Das allgemeine Prinzip ist in den meisten Varianten das gleiche - brechen Sie das Gelände in Abschnitte und verwenden Sie Geometrie und Texturen mit geringerer Auflösung in der Ferne - aber die Details variieren.

Um die Anzahl der Objekte zu reduzieren, die an die Grafikkarte gesendet werden, wird normalerweise eine Art Sichtbarkeits-Culling implementiert. Am einfachsten ist es, wenn Sie nur Modelle ablegen, deren Begrenzungskugel weniger als einen bestimmten Schwellenwert von Bildschirmpixeln abdeckt (Sie werden dies trotzdem berechnen, wenn Sie die zu verwendende LOD auswählen, wenn Sie ein LOD-System haben). Für eine höhere Effizienz kann eine Art von hierarchischer räumlicher Datenstruktur für die Keulung verwendet werden - Quadtrees oder Octtrees, Sphärenbäume, Portalsysteme (nicht allgemein für Außenumgebungen verwendet), einfache Grid-basierte Schemata usw. Die Grundidee ist, Arbeit zu sparen indem man einen Knoten höherer Ebene in der Hierarchie aussortiert und somit vermeidet, selbst viele Blattknoten zu betrachten. Ein einfaches Beispiel wäre das Aussortieren eines Gebäudes und das effektive Aussortieren aller seiner Kindknoten (Objekte innerhalb oder oberhalb des Gebäudes), ohne sie einzeln zu betrachten.

Für ein Spiel wie das Vergessen machen sie wahrscheinlich auch eine Art Okklusions-Culling - Culling-Objekte, bevor sie an die Grafik-Hardware gesendet werden, basierend darauf, dass sie sich hinter anderen Objekten verbergen. Es gibt eine Vielzahl von Techniken, um dies zu tun, einige von ihnen können sehr komplex sein.

    
mattnewport 16.07.2009 21:41
quelle

Tags und Links