• Zuhause
  • Artikel
  • Erkundung der Naumachia von Parc Monceau mit Minsar: Teil 3
Veröffentlicht am 04-03-2019

Erkundung der Naumachia von Parc Monceau mit Minsar: Teil 3

So optimieren Sie 3D-Modelle für Echtzeitanwendungen

Dies ist der dritte Teil eines vierteiligen Artikels, in dem die technische und konzeptionelle Durchführung der Erfahrung dargestellt wird:

  • Teil 1 - KontextDas Gebäude selbst, warum ich es für mein Experiment ausgewählt habe und welche Ziele es waren.
  • Teil 2 - Wie ich die Assets gefunden und ausgewählt habeDie Suche nach den Assets und warum ich sie ausgewählt habe
  • Teil 3 - Optimieren von 3D-Modellen für EchtzeitanwendungenGrundkonzepte, die Sie verwenden sollten, wenn Sie nur wenig über 3D-Modellierung für Echtzeitanwendungen wissen
  • Teil 4 - Wie ich die Szene in Blender vor dem Import in Minsar für das Endergebnis vorbereiteteRelease am 4. April

Was ist Optimierung?

Zu diesem Zeitpunkt hätte ich meine Objekte bereits in Minsar importieren können. Aufgrund meiner Erfahrung in der 3D-Erstellung und Echtzeitanwendungen wusste ich jedoch, dass ich einen sehr wichtigen Schritt durchlaufen muss: die Optimierung. Was meine ich mit "Optimierung"?

Nun, das sind eigentlich die Grundlagen von Echtzeit-3D und -Anwendungen. Ein 3D-Objekt besteht aus mehreren Dreiecken oder Polygonen. Je komplexer das Objekt ist, desto mehr ist seine Topologie, dh die Dichte der Dreiecke / Polygone, aus denen es besteht, komplex. Je komplexer die Topologie ist, desto mehr Zeit benötigt das Gerät (Computer, iPad, Hololens ...), um es zu berechnen, um es entsprechend der Umgebung zu rendern, in der es sich befindet. Tatsächlich erfordern Echtzeitanwendungen, dass ein Objekt neu berechnet wird jedes einzelne Bild, um den Eindruck zu vermitteln, in Echtzeit zu sein (Interaktionen mit dem Licht, Bewegungen usw.).

Dieses Bild zeigt die Einheiten, aus denen ein 3D-Objekt besteht. Hier werden sie als Quads dargestellt, aber in Wirklichkeit wird ein Quad von zwei Dreiecken gebildet. So entsteht ein

Stellen Sie sich nun vor, Sie sollten Ihr Gerät bitten, pro Frame 1 Million Dreiecke zu berechnen (ein Frame, der viel weniger als eine Sekunde dauert). Ihr Gerät wird sicherlich entweder abstürzen oder sehr langsam laufen. Daher ist das Wort "Optimierung" in jedem Geist des Spiele-Designers, Entwicklers und 3D-Graphikers (oder sollte es zumindest sein). Die Optimierung eines Assets besteht darin, die Auswirkungen auf die Leistung des Rendergeräts zu reduzieren. Dies kann auf verschiedene Weise erfolgen, beispielsweise durch Verringern der Größe der Texturen oder durch Definieren der Topologie, dh Verringern der Dichte der Dreiecke, aus denen sie bestehen.

Tatsächlich möchten wir in Minsar eine Funktionalität entwickeln, die es den Benutzern ermöglicht, ihre Modelle automatisch zu dezimieren, wenn sie für die Erfahrung zu schwer sind. Eine weitere Funktionalität ermöglicht die automatische Reduzierung von Texturen mit zu hoher Auflösung je nach Plattform und verwendetem Gerät.

Dreieck Dezimierung

In meiner Naumachia-Erfahrung wollte ich mindestens zwei Schiffe mit jeweils zwanzig Männern importieren, die alle bewaffnet und kampfbereit waren. Nach einer schnellen Berechnung der Gesamtheit der herbeigeführten Dreiecke wurde es offensichtlich, dass ich die heruntergeladenen Modelle manipulieren musste, um sie zu optimieren. Beim Nachdenken über die globale Darstellung meiner Erfahrungen im Parc Monceau rechnete ich außerdem damit, dass die Schiffe aus Sicht des Besuchers eher klein sein würden. Daher waren keine besonderen Details erforderlich.

Also habe ich den römischen Schild drastisch von 8000 auf weniger als 500 Dreiecke dezimiert. Auch hier sah der Schild aus der Nähe sehr einfach und weniger detailliert aus, aber ich dachte daran, dass er im Endergebnis recht klein sein würde.

Links das „High-Poly“ -Modell und rechts das Ergebnis des Dezimierungswerkzeugs in Blender. Es muss beachtet werden, dass dieses Ergebnis topologisch nicht sehr gut ist: Einige Gesichter sind verzerrt, das allgemeine Gefühl ist etwas gestört. Dies ist im Allgemeinen darauf zurückzuführen, dass ein automatischer Prozess verwendet wird. Im Allgemeinen ist es am besten, Dinge manuell oder mit fortschrittlicheren Tools wie Topo Gun auszuführen. In der 3D-Produktion gibt es drei Hauptfälle, für die KEINE automatische Dezimierung verwendet werden sollte. Erstens, wenn das Objekt danach animiert werden muss. Zweitens, wenn Sie die Textur manuell erstellen möchten. Drittens, wenn jemand anderes eingreifen muss und das Objekt möglicherweise ändern muss. In meinem Fall war ich in keinem dieser drei Fälle, weshalb ich mich für diese Lösung entschieden habe.

Das Optimierungsbedürfnis ist auch der Grund, warum ich den spartanischen Helm von Anthony Yaez reopologisieren musste, da er über 5000 Dreiecke war.

Hergestellt im Mixer 2.79. Für den spartanischen Helm führte die automatische Dezimierung zu schlechten Ergebnissen und brach die allgemeine Form vollständig. In diesem Fall hatte ich kaum eine andere Wahl, als die Topologie manuell neu zu erstellen. Dieses Bild zeigt Ihnen den Vorgang: In Grau haben Sie das High-Poly-Modell. In Orange ist die Topologie, die ich schrittweise über das Original aufbaute. Es ist wirklich so, als würde man das Originalobjekt in eine grobe, primäre Form

UV-Mapping und Auspacken

Eine weitere Möglichkeit zur Optimierung eines Modells besteht darin, alle Einzelteile in einem einzigen Objekt zusammenzufassen. Bei einigen Objekten können 3D-Ersteller bestimmte Teile auf eine separate Textur anwenden, da sie die Möglichkeit bietet, diesem Teil mehr Details in der Textur zu geben.

Um ein 3D-Objekt zu strukturieren, müssen Sie es UV-auspacken. Das heißt, Sie müssen es in Ihrer 3D-Software aufklappen, genauso wie Sie ein Kleid oder eine Hose aufklappen würden, um deren Nähte und alles zu definieren. Durch das UV-Unwrapping eines Objekts können die Render-Engines wissen, wo sie diesen oder den Teil der Textur rendern sollen, weil Sie ihnen eine Karte geben, die als UV-Karte bezeichnet wird.

Auf diesem Bild sehen Sie, dass die UV-Karte eine 2D-Darstellung des 3D-Würfels ist. Der rote Teil des Würfels hat Koordinaten im 3D-Raum (X, Y und Z), und die UV-Karte übersetzt diese Koordinaten in einen 2D-Raum. Die Abmessungen dieses UV-Raums sind U und V (sie haben sie so genannt, um Verwechslungen mit den Abmessungen X, Y und Z des 3D-Raums zu vermeiden). Diese Übersetzung von 3D-Koordinaten in einen 2D-Raum führt zur Erstellung einer Karte.

Das Problem ist, dass eine UV-Karte einen begrenzten Platz hat. Wenn Sie also einen ganzen Menschen auf einer einzigen UV-Karte auspacken, muss jeder Teil des Objekts eine bestimmte Anzahl Pixel enthalten, die durch die Texturauflösung selbst hervorgerufen wird. Wie Sie vielleicht jetzt, besteht ein Bild aus mehreren Pixeln. Ein Pixel ist für ein Bild wie ein Dreieck für ein 3D-Objekt. Nun, die "Qualität" dieses Bildes, die Detailgenauigkeit, wird als Auflösung bezeichnet. Sie wird durch die Größe der Pixel bestimmt, aus denen das Bild besteht. Je kleiner die Pixel sind, desto zahlreicher sind sie auf dem Bild und desto mehr Details werden angezeigt. Je größer die Pixel sind, desto weniger Platz bleibt auf dem Bild und desto weniger Details werden angezeigt.

Links sind die Pixel viel größer als rechts. Wenn Sie die Kreise beobachten, sehen Sie, dass der Linke im Vergleich zum sauberen Kreis auf der rechten Seite etwas unscharf wirkt. © Der Ortho-Kosmos.

Angenommen, Ihre Textur hat eine Auflösung von 2048 Pixel x 2048 Pixel: Alle Teile Ihres Objekts müssen 2048 Pixel breit und 2048 Pixel hoch sein. Wenn Sie sich dafür entscheiden, den Kopf eines Menschen separat als einzelnes Objekt auszuwickeln, und die Gesichtsbeschaffenheit ebenfalls 2048 x 2048 beträgt, wird das Gesicht in diesem Fall sehr viel detaillierter sein, da nur die Gesichtsbereiche die Textur teilen Sie müssen es nicht mit dem Rest des Körpers teilen. Deshalb werden bei manchen 3D-Animationsfilmen die Köpfe der Charaktere separat ausgepackt, da sie viel mehr Details enthalten.

Über das Backen

Die Grundlagen des Backens

In unserem Fall befinden wir uns zunächst in einer Echtzeitanwendung. Zweitens erstellen wir ein schematisches Erlebnis. Drittens werden die 3D-Elemente nicht aus der Nähe gesehen. Diese drei Gründe erklären, warum ich dachte, ich sollte so viele Objekte wie möglich miteinander kombinieren. Ich habe am Schiff angefangen. In Blender nahm ich alle Teile des Schiffes, kopierte sie und führte sie zu einem einzigen Objekt zusammen. Zu diesem Zeitpunkt musste ich das Modell erneut auspacken, um eine neue UV-Karte mit allen Teilen zu erhalten.

Auf der linken Seite wurde das Schiff mit allen Teilen zu einem Objekt zusammengefügt. Auf der rechten Seite die UV-Karte. Im Allgemeinen ist es auch besser, ein Modell manuell zu entpacken, da Sie dadurch viel mehr Kontrolle über das Endergebnis haben. Wie ich jedoch sagte, ich wollte so schnell wie möglich arbeiten, deshalb habe ich das Smart UV Project-Tool von Blender (das im Allgemeinen übrigens ziemlich gute Arbeit leistet) verwendet.

Dann ging ich zu einer Aktion über, die auch in der Welt des Echtzeit-3D unverzichtbar ist: das Backen der Texturen. Was bedeutet es also, eine Textur zu backen? Im Grunde bedeutet es, die Software (in meinem Fall Blender) zu bitten, die Texturinformationen eines Modells zu kopieren und in ein zweites Modell einzufügen. Dort sehen wir wieder den Zweck einer UV-Karte: Die Karte des ersten Modells wird entsprechend der neuen Positionen der verschiedenen Teile in die Karte des zweiten Modells transponiert. In Modell A befinden sich die Informationen zum Arm beispielsweise in 0,5, 0,3, wohingegen sie in Modell B in 1, 0,5, 4 liegen. Beim Backen werden die Informationen eines Elements an einem bestimmten Ort übernommen der Karte und Wiederholung in einer anderen Karte, wo sich dieses Element an anderer Stelle befindet. Genau das habe ich für mein Schiff getan: Ich bat die Software, alle separaten Texturen, die auf die einzelnen Teile angewendet wurden, zu nehmen und sie alle zu einer einzigen Textur zusammenzufassen. Ich tat das gleiche für die römischen und griechischen Krieger, was mir für jede eine einzige Textur gab, die den Körper und die Waffen enthielt.

Einzelne Textur für das griechische Schiff, gebacken aus allen Teilen des Originalmodells. Mixer 2,80.

Normale Karten

In der Welt der 3D-Erstellung werden meistens Backtexturen für Normalen verwendet. Was ist normal? Eine Normale ist im Wesentlichen die Richtung, in die ein Dreieck (oder ein Polygon) zeigt. Normalen sind für die Entlastung Ihres Objekts verantwortlich, da dies Einfluss darauf hat, wie Licht mit dem Dreieck interagiert, genauer in welche Richtung es abprallen wird. Tatsächlich werden Details eines Modells tatsächlich durch die Orientierung jedes Dreiecks, das das Detail selbst bildet, induziert. Das ist, was Schatten und folglich Volumen erzeugt.

Wenn Sie ein Modell dezimieren, gehen logischerweise viele Details verloren. Sie können jedoch sicherstellen, dass diese ursprünglichen Details auf Ihrem dezimierten Modell weiterhin sichtbar sind. Wie? Durch Erstellen einer sogenannten "Normal Map". Es ist genau das gleiche wie die Farbtextur, die wir gebacken haben und die auf eine Reihe von UV-Strahlen angewendet wird, außer, dass sie nicht die Farbe des Objekts beeinflusst, sondern dessen Relief und die Art und Weise, wie Licht damit interagiert. Die Normal-Map ist eine Textur, die dem Renderer (Blender oder Minsar) anzeigt, wie jedes Dreieck des Modells mit Licht reagieren soll.

Nehmen wir die Planken auf dem Deck unseres Schiffes. Zwischen jeder Planke gibt es eine physische Höhle: Die Topologie ist hier so geformt, dass zwischen den Planken eine Abgrenzung besteht. Diese Abgrenzung, diese Höhle, besteht, wie wir zuvor gesehen haben, aus Dreiecken. Es ist die Orientierung der Dreiecke (oder Polygone), die das Relief erzeugen, die Form dieses Hohlraums.

Nehmen wir an, dass bei dem dezimierten Modell die Hohlräume verschwunden sind, weil die Topologie vereinfacht wurde und die Dreiecke an dieser Stelle jetzt flach ausgerichtet sind. Indem der Renderer gebeten wird, die Normal-Map zu berücksichtigen, die auf das vereinfachte Objekt angewendet wird (Normal-Map, die wir aus dem komplexeren Objekt gebacken haben), wird der Renderer verstehen, dass an diesem genauen Punkt zwischen zwei Planken die Polygone sein sollen Sie sind so ausgerichtet, dass sie einen Hohlraum bilden, und daher sollte sie einen besonderen Einfluss auf das Licht haben. So erscheint bei unserem dezimierten Modell ein Hohlraum, obwohl es eine reine Illusion ist.

Dies ist die normale Karte der Holzplanken des Schiffes. Diese bestimmte Farbe wird durch die Tatsache hervorgerufen, dass das Bild in RGB erzeugt wird, wobei jeder Kanal einer Ausrichtung entspricht. © Alint.

Da es unterschiedliche Farbtexturen hatte, hatte das Schiff verschiedene normale Karten, je nach den verschiedenen Teilen des Schiffes. In der Tat war dieses Schiff höchstwahrscheinlich so konzipiert, dass es aus der Nähe betrachtet werden konnte, weshalb der Schöpfer den normalen Karten besondere Aufmerksamkeit schenkte. In meinem Fall hatte ich das Gefühl, dass ich keine normalen Karten brauche, da die Details aus der Ferne nicht sichtbar wären. Deshalb habe ich mich entschlossen, überhaupt keine Normal-Karte zu verwenden. Ich habe jedoch die Rauheitsdaten gebacken, um die richtige Menge an Spiegeln auf dem Schiff zu haben, das eigentlich aus Holz sein sollte.

Der besondere Fall der glTF-Pipeline

Ich wollte, dass mein endgültiges Objekt in .glTF exportiert wird. Dies implizierte eine weitere spezifische Manipulation. Das glTF-Format ist ein Format für 3D, das universell, Open Source und frei sein soll. Ziel ist es, eine gleichwertige Alternative zu Formaten wie FBX oder MAX bereitzustellen, die proprietär sind.

Wir bei Minsar glauben an die Demokratisierung der Schöpfung. Deshalb haben wir uns entschlossen, dieses Format zu unterstützen, das von jedermann verwendet werden soll, ohne dass zwangsläufig große Beträge für den Kauf der proprietären Software bezahlt werden müssen.

Um ein glTF-Objekt zu erstellen und es in diesem Format zu exportieren, sind jedoch einige spezielle Manipulationen erforderlich. Dazu gehören die Kombination der Informationen von Ambient Occlusion, Metallic und Roughness zu einer einzigen Textur namens ORM (weitere Informationen auf der Website der Khronos Group und auf dem Tutorial, das ich hier geschrieben habe) Betreff im Minsar-Benutzerhandbuch). Bei meinem Schiff habe ich die Rauhigkeitskarte gebacken, und unter Photoshop habe ich eine weiße Textur für Occlusion und eine schwarze für Metallic erstellt. Dann kombinierte ich die drei zu einem ORM.

In diesem dritten Teil wurden die Grundlagen für die Optimierung von 3D-Modellen für Echtzeitanwendungen erläutert. Nun ist es an der Zeit, das in Minsar erstellte Endergebnis zu sehen!

Siehe auch

Erkundung der Naumachia von Parc Monceau mit Minsar: Teil 4Im Widerspruch zu mir