Erstellen VR-fähiger 3D-Modelle

Die Leistungsanforderungen an die Bildsynthese (aka Rendering) dreidimensionaler Objekte und Szenen sind für VR-Anwendungen sehr unterschiedlich. Während interaktive, dynamische VR-Anwendungen wie HEGIAS VR Bilder in Echtzeit berechnen müssen (Echtzeitrendern), können statische VR-Anwendungen wie z.B. Panotour oder Raumgleiter für die Berechnung einer fotorealistischen Szene mehrere Stunden, nicht selten auch Tage investieren (Realistisches Rendern).

Damit dreidimensionale Objekte in dynamischen VR-Anwendungen innerhalb von Millisekunden visualisiert werden können, müssen sie für das Echtzeitrendern optimiert werden. Nachfolgend werden die wichtigsten Schritte und Anforderungen beschrieben. Dabei lautet die Maxime:

So viel wie nötig, so wenig wie möglich

Für jedes in HEGIAS VR abzubildende Objekt sollte immer zuerst geprüft werden, ob es dafür bereits ein hochauflösendes 3D-Modell gibt. Zum Beispiel bieten Evermotion und Dimensiva für Architektur-Visualisierungen viele Designer-Objekte an, welche als Ausgangsmodelle benutzt werden können.

HiRes- und LowRes-Modelle



                HiRes: 55k Polygone                                        LowRes: 2k Polygone

Der Ablauf der Objektmodellierung ist i.d.R. immer der Gleiche: Ausgangspunkt ist ein hoch aufgelöstes, geometrisches Modell (HiRes-Modell). Durch Normal Mapping werden die für die Beleuchtung eines Objektes relevanten Informationen durch auf ein niedrig aufgelöstes 3D-Modell (LowRes-Modell) übertragen.

Hierfür werden sogenannte Retopology-Tools verwendet, die ein Objekt mit dem Ziel, die Anzahl der objektbeschreibenden Polygone maximal zu reduzieren, in möglichst wenige ebenmässige, quadratische Flächen (Quads) zerlegen. Das Ergebnis ist ein sogenanntes Netzmodell (Mesh). Automatische Reduktions-Tools erzeugen in den meisten Fällen keine brauchbaren Meshes. Bitte achten Sie darauf, dass die Meshes kleinerer Objekte nicht mehr Geometrie enthalten als die grösserer Objekte und verwenden Sie zur Betonung der Formen möglichst viele Glättungsgruppen (Smoothing Groups).

Danach spannen Sie ein zweidimensionales Texturmodelle (UV) sauber auf das LowRes-Modell. Durch das sogenannte UV-Mapping werden die LowRes-Modelle praktisch foliiert. Für das Baking der NormalMaps ist es wichtig, dass sich die UVs nicht überlappen oder gespiegelt werden, da dies beim Baking zu Texturfehlern führen könnte. Beim Erstellen der UVs sollte immer mit verschiedenen Schachbrett- und Linien-Texturen gearbeitet und Verzerrungen möglichst komplett behoben werden.

Sollten an einem Objekt gleiche oder gespiegelte Details vorkommen, sind diese nur einmal zu modellieren und nach dem Baking und Texturieren an den richtigen Stellen zu platzieren. Echtzeit-Modelle müssen nicht exakt gebaut sein. Allerdings sind schwebende Geometrien nicht erlaubt, da der Echtzeit-zBuffer limitiert ist und es zum Flackern kommen könnte (z-Fighting).

Ein Mesh sollte wenn möglich immer nur mit einem Material foliiert werden. Sehr kleine Objekte, z.B. Blumentöpfe, Besteck, Bücher, Bilder etc., sollten logisch zusammengefasst und nur mit einer Textur und einem Material belegt werden.

Der Pivot- oder Center-Point ist immer an die richtige Stelle zu schieben, da es sonst beim Platzieren oder Animieren des Objektes zu Problemen kommen kann.

Materialien und Texturen

Materialien und Texturen sollten denselben Namen wie das Mesh erhalten, wobei auf Kürzel oder Nummerierungen zu verzichten ist.

Bei HEGIAS arbeiten wir ausschliesslich mit dem Substance Painter. Texturen können aber auch mit anderen Tools erstellt werden. Es ist wichtig, dass das Format der PBR-Texturen korrekt ist. Gerade NormalMaps und Metallic-Roughness Maps sind keine von Hand bearbeitbaren Texturen, sondern in einem Bild-Format gespeicherte Daten!

Bitte verwenden Sie keine Tools, die versprechen, aus einem Bild komplette PBR-Texturen generieren zu können. Das sieht immer falsch aus.

Mit Substance Painter oder xNormal baken Sie dann das HiRes- auf das LowRes-Modell. Um Zeit zu sparen, können Sie auf Substance Source und Substance Share nachsehen, ob es evtl. Texturen gibt, die man dort kaufen kann. Ansonsten können Sie mit SubstanceDesigner prozedurale Texturen erstellen.

Bake in Substance Painter



Wenn ein Objekt verschiedene Materialien aufweist, kann man dem HiRes-Modell verschiedene Materialien zuweisen und diese in eine ID-Map baken lassen. Bei der Schatztruhe wurden dem HiRes-Modell zwei verschiedene Materialien zugewiesen: Holz und Metall.



Das Holz wurde nach Foto-Referenzen einer echten Schatzkiste erstellt und bearbeitet. 
Für das Metall wurde ein Standard-Material benutzt. 
 
Mit der ID-Map konnte schnell eine Material-Maske für das Holz und die Eisenbeschläge erstellt werden. 
Mit weiteren Maskeneffekten wurden Abnutzungsspuren definiert und bearbeitet. 

HEGIAS VR nutzt das WebVR API und die Daten werden als glTF-Dateien geladen. Die Texturen müssen zwingend dem glTF-PBR Standard entsprechen: 

Albedo-/Base Color-Map
Normal-Map
Emission-Map (wird eher selten gebraucht)
ORM-Map, das Format für die ORM-Map ist folgendes:
Rot: Ambient Occlusion 
Grün: Roughness 
Blau: Metallic  

Wichtig: Normal-Maps und ORM-Maps dürfen nicht komprimiert werden, denn es handelt sich bei ihnen um Daten-Files, nicht um Bild-Files. Wenn diese komprimiert werden, gibt es deutlich sichtbare Shading-Artefakte. Aus dem gleichen Grund sollten beide Maps im Linearen Colorspace gesichert werden. Albedo- und Emission-Maps sollten als JPEG(sRGB) und Normal- und ORM-Maps als PNG(linear) gesichert werden.

Weitere Infos: https://www.khronos.org/blog/art-pipeline-for-gltf 

Finales Objekt

Für das beste Ergebnis sollten die Dateien als GLB-Files gespeichert werden. Diese kann man direkt in HEGIAS VR testen. Auch im 3D-Object Viewer von Windows, kann man prüfen, ob das finale Objekt wie beabsichtigt visualisiert wird.

In GLB-Files sind die Texturen eingebettet. Sie sollten nicht zu gross sein, da dies längere Downloadzeit und höheren Memory-Verbrauch für den Endkunden bedeutet. Hier ist Augenmass gefragt - bitte vergleichen Sie das neue Objekt mit bereits bestehenden Objekten.

Nicht alle Texturen müssen gleich gross sein. Bei der ORM-Map kann man teilweise eine halb so grosse Textur verwenden, ohne Qualitätseinbussen in Kauf nehmen zu müssen. Dies ist allerdings von Objekt zu Objekt unterschiedlich. 

Folgende reservierte Schlüsselwörter sollten Sie in Filenamen nicht benutzen: 

Ceiling
Floor
Glass
Wall
Stair
Interior

Diese Schlüsselwörter können zu unerwarteten Ergebnissen führen, weil die Graphic Engine sie interpretiert und ggf. die Materialien ersetzt.

Objekte sollten immer im reellen Massstab erstellt werden, damit sie in der VR richtig wirken. Dies bitte auch immer wieder im Headset überprüfen.

Sollte es mal vorkommen, dass ein Objekt zu klein wirkt, obwohl es massststabsgetreu umgesetzt wurde, hilft es unter Umständen, dem Objekt ein paar kleine Details hinzuzufügen.

Weitere Details

Filenamen sollten immer der CamelCase-Notation entsprechen, z.B.: 
MeinErstesObjekt.glb, MeinErstesObjekt.fbx.

Verwenden Sie keine Minuszeichen, Spaces, Punkte, Kürzel und vor allem keine Versionsnummern im Filenamen. Verwenden Sie Underscores bitte nur sporadisch und nur wo es wirklich sinnvoll ist, z.B: 
VitraPolderCompact_LeatherBlack.glb und VitraPolderCompact_LeatherBlue.glb 

Alle Namen und Bezeichnungen sollten auf Englisch sein.

Edge Loops

 

Edge Loops /Edge Flow 

Wenn immer möglich, versuchen Sie in Quads zu arbeiten und saubere Edge-Loops zu kreieren. Saubere Loops können einfach selektiert, bearbeitet und gelöscht werden. So können Sie LowRes-Meshes schnell modifizieren.

HiRes Details

Für Details in der HiRes-Geometrie (und nur dort) kann man „fliegende“ Details benutzen. Statt Details komplett in die Geometrie einzubauen, lässt man sie einfach über der Geometrie schweben. Beim Baken der NormalMap macht das fast keinen Unterschied. Dafür ist das Modell besser wart- und änderbar. Gerade bei negativen Formen wie Dellen, Kerben und anderen Vertiefungen, ist das ein grosser Vorteil.



Das "gebakte" Resultat 



Smoothing Groups

Smoothing Groups können das Aussehen eines LowPoly-Objekts stark beeinflussen. Deshalb sollte immer darauf geachtet werden, diese einzusetzen. Ansonsten wird beim Import des Objekts ein zufälliger Wert verwendet, der in der Graphic Engine ggf. zu einer schlechteren Darstellung führt. Beim Baken machen die Smoothing Groups ebenfalls einen Unterschied. Deshalb sollten Smoothing Groups vor dem Baken erstellt und nach dem Baken geprüft werden, ob das gewünschte Ergebnis erzielt wurde. 



Vertex Colors

Da Vertex-Colors von HEGIAS nicht unterstützt werden, sollten sie nicht verwendet werden. In den meisten Fällen werden heutzutage nur Informationen für Programmierer in Vertex-Farben codiert um Spezialeffekte zu ermöglichen/steuern.

UV Maps

Die meisten Applikationen reservieren sich die zweite UV-Map eines Objekts und überschreiben diese, falls nötig. Für HEGIAS VR gibt es keinen Grund, einem Objekt eine zweite UV-Map zuzuweisen.

In der Praxis hat es sich bewährt, einem Objekt mehr Geometrie und grössere Texturen zuzuweisen, denn wegschneiden, verkleinern und optimieren ist einfacher als umgekehrt.
War dieser Beitrag hilfreich?
Stornieren
Danke!