Wie können Inhaltsbudgets (z. B. die Anzahl der Polygone) für Ebeneninhalte in einem 3D-Titel festgelegt werden?

13

Bei der Beantwortung dieser Frage für swquinn wurde eine sachdienlichere Frage aufgeworfen, auf die ich gerne Antworten hätte. Ich werde unsere eigene Strategie veröffentlichen (verspreche, ich werde sie nicht als Antwort akzeptieren), aber ich würde gerne andere hören.

Im Einzelnen: Wie legen Sie ein vernünftiges Budget für Ihr Content-Team fest? Normalerweise lautet eine der allerersten Fragen in einer Entwicklung: Wie hoch ist unser Polygonbudget? Natürlich ist es heutzutage selten, dass Vertex / Poly Count allein der limitierende Faktor ist, stattdessen spielen Shader-Komplexität, Füllrate und Beleuchtungskomplexität eine Rolle.

Was das Inhaltsteam möchte, sind einige harte Zahlen / Grenzen, an denen es arbeiten kann, sodass es eine vernünftige Erwartung hat, dass sein Inhalt, sobald er tatsächlich in die Engine gelangt, nicht zu schwer sein wird. Angesichts der Tatsache, dass "es kommt darauf an" keine besonders nützliche Antwort ist, würde ich gerne eine Strategie hören, mit der ich ihnen praktikable Grenzen setzen kann, ohne a) irreführend oder b) falsch zu sein.

MrCranky
quelle
1
Dies ist mehr eine "Vorproduktion" als eine "Produktion".
Patrick Hughes

Antworten:

5

Nach meinem Verständnis ist es viel einfacher, die Komplexität eines Modells zu reduzieren, als Details für ein Modell hinzuzufügen, das gehäutet und manipuliert wurde. Ich weiß, dass einige Unternehmen dies ausnutzen, indem sie sehr detaillierte Vermögenswerte bündeln und sie je nach Situation verkleinern.

Valve macht das mit ihren NPCs. Die NPCs werden extrem detailliert ohne jede Art von Zuordnung modelliert und dann auf ein Maß verkleinert, das von der aktuellen Technologie und den Tricks akzeptiert wird, z. B. verschiedene Zuordnungstechniken, die auf detaillierten Modellen basieren (oder sogar automatisch erstellt werden).

Dies hilft auch bei der Zukunftssicherung, da Sie die Assets niemals neu erstellen müssen, sondern sie nur für jedes neue Projekt neu erstellen müssen. Dies hat auch den Vorteil, dass nicht gewartet werden muss, bis ein Team ein kontextspezifisches Benchmarking durchgeführt hat, bevor mit der Entwicklung der Assets begonnen werden kann. Die Künstler können ab dem 1. Tag voll einbezogen werden.

ClassicThunder
quelle
2
Das ist jedoch kein wirkliches Budget: "Machen Sie es so komplex, wie Sie es benötigen, und verkleinern Sie es später" ist eine Produktionsstrategie. : - /
MrCranky
16

Okay, also ist unsere Strategie:

  • Stellen Sie eine Platzhaltergeometrie her, die in etwa dem richtigen Maßstab für den endgültigen Inhalt entspricht. Das können Gebäude oder Charaktere sein. Es muss nicht wie der endgültige Inhalt aussehen, es kann sich um Kästchen / Kugeln / usw. handeln, aber es sollte tesselliert sein, damit es eine anständige Anzahl von Polygonen hat. Wenn Sie Charaktere spielen, geben Sie ihnen eine repräsentative Anzahl von Knochen.
  • Alternativ können Sie die Geometrie einer anderen Person verwenden. Wenn Sie einen Titel haben, dessen Qualitätsstufe Sie erreichen möchten, suchen Sie nach einer Möglichkeit, die Modelle zu ermitteln (möglicherweise mithilfe eines DirectX-Szenen-Grabbers).
  • Stellen Sie sicher, dass Ihre Geometrie einen repräsentativen Shader enthält. Wenn Sie damit rechnen, mehrere Texturen zu mischen, tun Sie dies auch dann, wenn alle Texturen einfarbig sind. Stellen Sie sicher, dass es sich bei den Texturen um nicht triviale Auflösungen handelt, auch wenn sie nur eine Farbe haben.
  • Setzen Sie eine vernünftige Anzahl von Lichtern ein.
  • Stellen Sie die Kamera an einem realistischen Ort auf und zeigen Sie auf die größtmögliche Menge an Geometrie (z. B. auf einem Hügel mit Blick über das Niveau).
  • Laden Sie die Szene auf Ihre langsamste und schnellste Zielhardware und messen Sie die FPS.
  • Variieren Sie die Werte für Geometrie / Lichter / Shader / Texturauflösung nach oben oder unten, um ein Gefühl für die Kompromisse zu bekommen (z. B. können Sie ein Dutzend zusätzliche Lichter haben, aber Sie müssten die Polyanzahl halbieren).

Schließlich: Seien Sie konservativ mit Ihren Zahlen. Rendern ist nicht das einzige, was Ihr Spiel tun muss. Entscheiden Sie also, welchen Anteil Ihres Frames Sie für das Rendern ausgeben möchten, und legen Sie ihn als Ziel fest. Wenn Sie beispielsweise zwei Drittel Ihres Frames für das Rendern mit 30 fps ausgeben möchten, sollten Sie in Ihren Tests 1s / 22ms (45 fps) als Ziel festlegen.

Aus all dem sollten Sie in der Lage sein, Beispielszenen zu geben. Hier ist beispielsweise eine Szene mit 200K-Polygonen, 5 statischen Lichtern und nicht mehr als 3 dynamischen Lichtern pro Modell mit 15 Zeichen mit 50K-Polys und 30 Bones. Sie läuft mit 60 fps und belegt 30 MB Speicher.

MrCranky
quelle
2
tl; dr: Benchmark es selbst;)
Nicol Bolas
+1 Das ist wirklich der einzige Weg, zu bauen und zu messen.
Patrick Hughes
"Ja wirklich?" Ich hatte gehofft, es gäbe eine intelligentere / billigere Lösung, an die wir nicht gedacht hatten.
MrCranky
@ MrCranky leider ja. Wenn Sie eine vorhandene Engine verwenden, können Sie den Prozess sofort starten, indem Sie vorhandene Beispieldaten messen und diese als Basis verwenden, um insbesondere die Zahlen für Ihr Spiel anzupassen - jedes Spiel ist anders.
Patrick Hughes
4

Vertex Count

Ich habe über 15 Jahre lang "Polygon Count" recherchiert. Es gibt keine strikte Methode, um festzustellen, wie viele Grenzen Sie haben, insbesondere bei moderner Software und Hardware. Limits waren viel nützlicher in Motoren, die nur 4.000 Dreiecke für ein ganzes Level unterstützten. Jetzt werden Sie feststellen, dass die meisten Objekte in der Spielumgebung diese Werte einzeln überschreiten.

Entscheidend ist letztendlich, was die Engine mit den Polygonzügen macht.

Wenn die Engine jedes Modell rendert, übernimmt sie Ihre UV-Kartenkoordinaten, die Textur / das Material, die in den Dreiecken dargestellt sind, und erstellt Dreiecksstreifen. In den meisten Fällen wird ein Dreiecksfächer in separate Dreiecksstreifen pro Dreieck aufgeteilt. Dies erhöht die Anzahl der Dreiecksstreifen und verringert die Leistung.

Ein Paradebeispiel für die Befestigung ist die flache Oberseite eines Zylinders. 3D-Pakete richten im Allgemeinen einen Dreiecksfächer mit einem Scheitelpunkt in der Mitte ein. Ich lösche die Kanten und den mittleren Scheitelpunkt und erstelle dann Quads über die Fläche. Dies sollte dann in einen einzelnen Dreiecksstreifen anstatt in mehrere einseitige Streifen trianguliert werden, ohne die Anzahl der Polygone zu ändern.

Nehmen Sie die Anzahl der Polygone als Richtlinie und achten Sie darauf, wie Sie das Netz modellieren und mit UV-Map abbilden. Weniger Spalten im Netz, wenn UV-Mapping oft vorteilhafter ist.

Als nächstes überlegen Sie, was mit normalen Karten gefälscht werden kann. Ein flaches Gesicht mit vielen Details kann in der Regel normal abgebildet werden. Kurven müssen nur rund sein, wenn Sie eine Silhouette sehen können. Wenn Sie die gekrümmten Gesichter von vorne betrachten, sollten Sie den Unterschied zwischen Ihrem hochauflösenden und dem spielauflösenden Assett nicht bemerken. Die Silhouette macht den Unterschied in Ihrem Modell aus, wenn es sich um normale Karten handelt. Silhouette kann jetzt mit DirectX 11 mithilfe von Tessellation und Verschiebungszuordnung geändert werden.

Spieldesign

Beachten Sie beim Entwerfen Ihres Spiels Folgendes:

  1. Spieltyp definieren (zB Action / Abenteuer / Rennen / Scroller)
  2. Ansichtstyp definieren (zB erste Person / dritte Person / orthographisch)
  3. Definieren Sie die Rechenleistung für Ihren Markt. (zB Enthusiast / Gelegenheitsspieler)
  4. Erstellen Sie einen visuellen Stil, den Sie erreichen möchten. Möchten Sie, dass es wie Crysis 2, Borderlands, Bloodforge oder Gears of War aussieht?
  5. Definiere wichtige Objekte für den Spieler. Stehen Ihre Requisiten im Mittelpunkt oder nur im Hintergrund?
  6. Sind die visuellen Netze auch das Kollisionsnetz?

Entscheiden Sie anhand der Spiel- und Ansichtstypen, wie tief die Ansicht sein soll. Wirst du entfernte Objekte sehen und mit welcher Klarheit? Machst du etwas mit eingeschränkter Sicht, wie einen Korridor-Schützen? (zB Gears of War) Machst du etwas, das sich in offenen Landschaften frei bewegt? (zB Skyrim)

Sobald Sie wissen, wie es aussehen sollte, können Sie nach ähnlichen Spielen suchen.

Die Animation begrenzt dann Ihre Fähigkeit, die Anzahl der Polygone zu erhöhen. Bei statischen Gittern ist alles, was an derselben Position verbleibt, auf der GPU und der CPU am billigsten. Vor allem, wenn es sich nicht um physikalische Objekte handelt. Für Physikobjekte können Sie häufig einfache Kollisionshüllen und komplexe visuelle Netze erstellen. In den meisten Spielen gibt es nicht genügend Interaktion, um den Unterschied zu bemerken. Die Animation bewegt Ihr Modell dreidimensional mit mehreren Knochen pro Scheitelpunkt, wobei die Gewichtung der einzelnen Scheitelpunkte gemischt wird. Dies kann in Bezug auf die CPU-Zeit teuer sein, was zu Konflikten mit KI und softwarebasierter Physik führen kann. Je mehr Vertices von der Anzahl der Bones im gesamten Modell betroffen sind, desto geringer ist die CPU-Leistung. Dies ist der andere Grund, warum Spielfiguren als "Kunst" gelten. Es ist sehr schwierig, eine Polygonbegrenzung zu definieren.

Mein Beispiel

Ich benutze die UDK, die einen langsamen Third-Person-Shooter macht, mit einer begrenzten Anzahl von Spielern und NPCs, die jederzeit auf dem Bildschirm zu sehen sind. Dafür strebe ich ungefähr 10.000 Dreiecke pro Spieler an, 5.000 Dreiecke für typische, generische Feinde und, wenn ich einen "Boss" -Stil-Charakter erschaffe, ungefähr 15.000. Darüber hinaus werden Waffen für die dritte Person rund 4.000 Dreiecke sehr detailliert. Fahrzeuge um 10.000 Dreiecke. Alles erfordert Detailgenauigkeit, da ich große Sichtabstände benötige.

Wenn ich eine erste Person machen würde, würde ich die Arme auf ungefähr 2.000 Dreiecken, die Waffe auf ungefähr 5.000 Dreiecken, mit normalen Mappings für jede basieren.

Fazit

Das ist es, was "es kommt darauf an" wahrscheinlich bedeutet, aber ich dachte, es könnte einige Dinge klarstellen, über die sich die Leute oft wundern.

  1. Verwenden Sie die Anzahl der Polygone als Richtlinie.
  2. Schauen Sie sich Bereiche an, die normal abgebildet statt modelliert werden könnten.
  3. Seien Sie vorsichtig beim Platzieren von Dreiecksfächern, wenn möglich, erstellen Sie einen Streifen.
  4. Verwenden Sie beim UV-Mapping weniger Spalten im Netz, und beachten Sie dabei die Streifen.
Markham Ward
quelle
2

Eine Methode, die ich mir vorstellen kann, besteht darin, automatisch erstellte Szenen zu verwenden, um statistische Daten zu generieren, anhand derer Sie die gesuchten Informationen entziffern können.

  1. Holen Sie sich ein großes Volumen von Assets (möglicherweise automatisch generiert).

  2. Erstellen Sie ein Tool zum Generieren von Szenen, die von Ihrer Engine mithilfe des Asset-Pools geladen werden können.

  3. Führe einen Bot aus, der deine Kamera durch die Szene bewegt. Möglicherweise möchten Sie auch einige andere Bots ausführen, um die Szene dynamischer zu gestalten, einschließlich Lichtquellen.

  4. Sammle so viele Informationen wie möglich und wirf sie in eine Datenbank. FPS, Poly Count, Shaderwechsel, Anzahl der Lichter, Draw Calls etc.

  5. Machen Sie einige Werkzeuge, um die Daten in Ihrer Datenbank auf so viele Arten wie möglich anzuzeigen.

Dieser Link kann einige weitere Ideen liefern: Dead Rising Tools

OriginalDaemon
quelle
Diese Antwort gefällt mir, da sie den teuersten Teil unserer eigenen Strategie angeht: Jemand muss sich die Mühe machen, repräsentative Szenen zu erstellen. Die Generierung von Algorithmen oder Skripten zum schnellen Platzieren einer großen Anzahl von Objekten mit vernünftiger Größe würde die Erstellung einer testbaren Szene erheblich beschleunigen. Ich werde die populärere Antwort akzeptieren, aber ich denke, diese ist das Kopfgeld wert.
MrCranky