Konfigurieren von Modellkonvertierungsparametern
In diesem Artikel lernen Sie, wie Sie Parameter für eine Modellkonvertierung konfigurieren.
Einstellungsdatei
Wenn eine Datei namens <modelName>. ConversionSettings.json befindet sich im Eingabecontainer neben dem Eingabemodellmodellname. <<>ext>, dann wird die Datei verwendet, um zusätzliche Konfigurationen für den Modellkonvertierungsprozess bereitzustellen. Wenn Sie beispielsweise box.gltf konvertieren, verwenden Sie box.ConversionSettings.json, um Parameter für die Modellkonvertierung festzulegen.
Der Inhalt der JSON-Konvertierungseinstellungendatei sollte dieses Schema aufweisen:
{
"$schema" : "http://json-schema.org/schema#",
"description" : "ARR ConversionSettings Schema",
"type" : "object",
"definitions" :
{
"position_attribute" : {"type" : "string", "description" : "Destination format of the position attribute", "enum" : [ "32_32_32_FLOAT", "16_16_16_16_FLOAT" ]},
"color_attribute" : {"type" : "string", "description" : "Destination format of the color attribute", "enum" : [ "NONE", "8_8_8_8_UNSIGNED_NORMALIZED" ]},
"vector_attribute" : {"type" : "string", "description" : "Destination format of the normals, tangents and binormals attributes", "enum" : [ "NONE", "8_8_8_8_SIGNED_NORMALIZED", "16_16_16_16_FLOAT" ]},
"texcoord_attribute" : {"type" : "string", "description" : "Destination format of the texture coordinates attribute", "enum" : [ "NONE", "32_32_FLOAT", "16_16_FLOAT" ]}
},
"properties" :
{
"scaling" : { "type" : "number", "exclusiveMinimum" : 0, "default" : 1.0 },
"recenterToOrigin" : { "type" : "boolean", "default" : false },
"opaqueMaterialDefaultSidedness" : {" type" : "string", "enum" : [ "SingleSided", "DoubleSided" ], "default" : "DoubleSided" },
"material-override" : { "type" : "string", "default" : "" },
"gammaToLinearMaterial" : { "type" : "boolean", "default" : false },
"gammaToLinearVertex" : { "type" : "boolean", "default" : false },
"sceneGraphMode" : { "type" : "string", "enum" : [ "none", "static", "dynamic" ], "default" : "dynamic" },
"generateCollisionMesh" : { "type" : "boolean", "default" : true },
"unlitMaterials" : { "type" : "boolean", "default" : false },
"deduplicateMaterials" : {"type" : "boolean", "default" : true },
"fbxAssumeMetallic" : {"type" : "boolean", "default" : true },
"axis" : {
"type" : "array",
"items" : {
"type" : "string",
"enum" : [ "default", "+x", "-x", "+y", "-y", "+z", "-z" ]
},
"minItems" : 3,
"maxItems" : 3
},
"vertex" : {
"type" : "object",
"properties" : {
"position" : { "$ref" : "#/definitions/position_attribute" },
"color0" : { "$ref" : "#/definitions/color_attribute" },
"color1" : { "$ref" : "#/definitions/color_attribute" },
"normal" : { "$ref" : "#/definitions/vector_attribute" },
"tangent" : { "$ref" : "#/definitions/vector_attribute" },
"binormal" : { "$ref" : "#/definitions/vector_attribute" },
"texcoord0" : { "$ref" : "#/definitions/texcoord_attribute" },
"texcoord1" : { "$ref" : "#/definitions/texcoord_attribute" }
},
"additionalProperties" : false
},
"metadataKeys" : {
"type" : "array",
"items" : {
"type" : "string"
}
}
},
"additionalProperties" : false
}
Eine Feld. ConversionSettings.json Datei könnte wie in diesem Beispiel aussehen:
{
"scaling" : 0.01,
"recenterToOrigin" : true,
"material-override" : "box_materials_override.json"
}
Das Schema zum Konvertieren eines Dreieckgitters und einer Punktwolke ist identisch. Eine Punktwolkenkonvertierung verwendet jedoch eine strenge Teilmenge von Features im Vergleich zu einer Dreiecksgitterkonvertierung.
Einstellungen für ein Dreiecksgitter
Wenn Sie ein Dreiecksgitter wie aus einer FBX-Datei konvertieren, wirken sich alle Parameter im vorherigen Abschnitt gezeigten Schemabeispiel auf das Konvertierungsergebnis aus. In den nächsten Abschnitten erhalten Sie eine detaillierte Erklärung der Parameter.
Geometrieparameter
scaling
: Mit diesem Parameter wird ein Modell einheitlich skaliert. Die Skalierung kann genutzt werden, um ein Modell zu vergrößern oder zu verkleinern, z. B. zum Anzeigen eines Gebäudemodells auf einer Tischplatte. Die Skalierung ist auch dann wichtig, wenn ein Modell in anderen Einheiten als Meter definiert ist, weil die Rendering-Engine Meter erwartet. Wenn zum Definieren eines Modells beispielsweise Zentimeter verwendet wurden, sollte es in der richtigen Größe gerendert werden, wenn eine Skalierung mit dem Wert 0,01 angewendet wird. Einige Quelldatenformate (z . B. FBX-Dateien ) stellen einen Hinweis zur Skalierung der Einheit bereit. In diesem Fall skaliert die Konvertierung das Modell implizit auf Metereinheiten. Die implizite Skalierung, die vom Quellformat bereitgestellt wird, wird über demscaling
Parameter angewendet. Der abschließende Skalierungsfaktor wird auf die Scheitelpunkte der Geometrie und die lokalen Transformationen der Szenengraphknoten angewendet. Die Skalierung für die Transformation der Stammentität bleibt unverändert.Wichtig
Showcase und Schnellstart könnten jede Konvertierungszeitskalierung ausgleichen, da sie jeweils über ein integriertes Feature für die automatische Skalierung verfügen. Weitere Informationen finden Sie im Leitfaden zur Problembehandlung.
recenterToOrigin
: Dieser Parameter gibt an, dass ein Modell so konvertiert werden sollte, dass der Begrenzungsrahmen am Ursprung zentriert ist. Wenn ein Quellmodell gegenüber dem Ursprung weit versetzt wurde, könnten Probleme mit der Gleitkommagenauigkeit zu Artefakten beim Rendering führen. Ein Zentrieren des Modells kann in dieser Situation hilfreich sein.opaqueMaterialDefaultSidedness
: Vom Renderingmodul wird vorausgesetzt, dass undurchsichtige Materialien doppelseitig sind. Wenn diese Annahme für ein bestimmtes Modell nicht zutrifft, sollte dieser Parameter aufSingleSided
.festgelegt werden. Weitere Informationen finden Sie unter Einseitiges Rendering.
Materialdeduplizierung
deduplicateMaterials
: Dieser Parameter aktiviert oder deaktiviert die automatische Deduplizierung von Materialien, die die gleichen Eigenschaften und Texturen aufweisen. Die Deduplizierung erfolgt nach der Verarbeitung von Materialüberschreibungen. Standardmäßig ist sie aktiviert.Wenn ein Modell auch nach der Deduplizierung über mehr als 65.535 Materialien verfügt, versucht der Dienst, Materialien mit ähnlichen Eigenschaften zusammenzuführen. Als letzte Option werden alle Materialien, die den Grenzwert überschreiten, durch ein rotes Fehlermaterial ersetzt.
Die folgende Abbildung zeigt zwei Würfel mit 68.921 farbigen Dreiecken. Das linke Beispiel ist vor der Deduplizierung mit 68.921 Farbmaterialien. Das rechte Beispiel ist nach der Deduplizierung mit 64.000 Farbmaterialien. Der Grenzwert beträgt 65.535 Material. Weitere Informationen zu Materialgrenzwerten finden Sie unter "Grenzwerte".
Farbraumparameter
Vom Renderingmodul wird erwartet, dass sich die Farbwerte im linearen Raum befinden. Wenn ein Modell mithilfe des Gammaraums definiert wird, sollten die folgenden Optionen auf folgendes true
festgelegt werden:
gammaToLinearMaterial
: Dient zum Konvertieren der Materialfarben aus dem Gamma-Raum in den linearen Raum.gammaToLinearVertex
: Dient zum Konvertieren der Scheitelpunktfarben aus dem Gamma-Raum in den linearen Raum.
Hinweis
Für FBX-, E57-, PLY-, LAS-, LAZ- und XYZ-Formate sind diese Einstellungen standardmäßig auf true
festgelegt. Für alle anderen Dateiformate ist der Standardwert false
.
Szenenparameter
sceneGraphMode
: Definiert, wie der Szenengraph in der Quelldatei konvertiert wird.dynamic
(Standard): Alle Objekte in der Datei werden als Entitäten in der API verfügbar gemacht und können unabhängig voneinander transformiert und neuen übergeordneten Objekten zugewiesen werden. Zur Runtime ist die Knotenhierarchie mit der Struktur in der Quelldatei identisch.static
: Ähnlich wiedynamic
, aber Objekte im Szenengraph können zur Laufzeit nicht anderen Objekten als neuen übergeordneten Objekten zugewiesen werden. Bei dynamischen Modellen mit vielen beweglichen Teilen (beispielsweise einer „Explosionsansicht“) generiert die Optiondynamic
ein Modell, das effizienter gerendert werden kann. Der Modusstatic
lässt jedoch weiterhin die Transformation einzelner Teile zu. Falls keine dynamische Zuordnung neuer übergeordneter Objekte erforderlich ist, ist die Optionstatic
am besten für Modelle mit vielen Einzelteilen geeignet.none
:Der Szenengraph wird zu einem Objekt reduziert.
Jeder Modus weist eine andere Runtimeleistung auf. Im Modus dynamic
ist der Leistungsaufwand linear von der Anzahl von Entitäten im Graphen abhängig. Dies gilt auch, wenn kein Teil verschoben wird. Verwenden Sie den dynamic
Modus nur, wenn es erforderlich ist, viele Teile oder große Untergraphen gleichzeitig zu verschieben. Ein Beispiel ist eine Explosionsansichtsanimation.
Der Modus static
exportiert außerdem das vollständige Szenendiagramm. Bei räumlichen Abfragen werden einzelne Teile zurückgegeben, und jedes Teil kann mithilfe von Zustandsüberschreibungen geändert werden. In diesem Modus ist der Runtime-Mehraufwand pro Objekt vernachlässigbar. Dieser Modus eignet sich ideal für große Szenen, in denen Sie objektspezifische Überprüfungen, und gelegentliche Transformationsänderungen an einzelnen Teilen, aber keine Neuzuordnung zu übergeordneten Objekten benötigen.
Im Modus none
fällt der geringste Runtime-Mehraufwand an, und es werden etwas kürzere Ladedauern erreicht. Die Überprüfung oder Transformation einzelner Objekte ist in diesem Modus nicht möglich. Anwendungsfälle sind beispielsweise Photogrammetriemodelle, die nicht mit einem aussagekräftigen Szenendiagramm beginnen.
Tipp
Viele Anwendungen laden mehrere Modelle. Sie sollten die Konvertierungsparameter für jedes Modell je nach Nutzung optimieren. Wenn Sie beispielsweise ein PKW-Modell anzeigen möchten, das vom Benutzer auseinandergenommen und im Detail untersucht werden kann, müssen Sie es zuerst unter Verwendung vom Modus dynamic
konvertieren. Wenn Sie den PKW jedoch auch in einer Showroomumgebung platzieren möchten, können Sie dieses Modell mithilfe sceneGraphMode
von Set auf static
, oder sogar in . none
Physikparameter
generateCollisionMesh
: Falls Sie für ein Modell Unterstützung für räumliche Abfragen benötigen, muss diese Option aktiviert sein. Die Kollisionsgittergenerierung fügt keine zusätzliche Konvertierungszeit hinzu und erhöht auch nicht die Größe der Ausgabedatei. Die Ladezeit und Laufzeitkosten eines Modells mit Kollisionsgittern sind nur unbedeutend höher. Sie können dieses Kennzeichen nur dann auf die Standardeinstellung (aktiviert) setzen, wenn Sie einen bestimmten Grund haben, ein Modell aus räumlichen Abfragen auszuschließen.
Unbeleuchtete Materialien
unlitMaterials
: Standardmäßig erstellt die Konvertierung physische Renderingmaterialien(PBR). Wenn diese Option festgelegt ist, behandelt der Konverter stattdessen alle Materialien als Farbmaterialien. Falls Sie bereits über Daten mit Beleuchtung verfügen, z. B. bei Modellen auf Grundlage der Fotogrammetrie, können Sie mit dieser Option schnell die richtige Konvertierung für alle Materialien erzwingen. Sie müssen jedes Material nicht einzeln überschreiben.
Konvertierung aus früheren FBX-Formaten und Phong-Materialmodellen
fbxAssumeMetallic
: Ältere Versionen des FBX-Formats definieren die Materialien mit einem Phong-Materialmodell. Beim Konvertierungsprozess muss abgeleitet werden, wie diese dem PBR-Modell des Renderers zugeordnet sind. Normalerweise funktioniert diese Zuordnung gut. Es kann aber zu Mehrdeutigkeiten kommen, wenn ein Material keine Texturen aufweist und über hohe Glanzwerte und eine andere Albedofarbe als Grau verfügt. In diesem Szenario muss bei der Konvertierung zwischen den folgenden Optionen gewählt werden: der Priorisierung der hohen Glanzwerte, der Definition eines stark reflektierenden metallischen Materials, bei dem sich die Albedofarbe quasi auflöst, oder der Priorisierung der Albedofarbe, indem beispielsweise ein glänzender farbiger Kunststoff definiert wird. Standardmäßig wird beim Konvertierungsprozess vorausgesetzt, dass hohe Glanzwerte in mehrdeutigen Szenarien ein metallisches Material implizieren. Sie können diesen Parameterfalse
für den entgegengesetzten Effekt festlegen.
Überschreibung des Koordinatensystems
axis
: Verwenden Sie diesen Parameter, um Koordinatensystemeinheitsvektoren außer Kraft zu setzen. Die Standardwerte lauten wie folgt:["+x", "+y", "+z"]
. Theoretisch verfügt das FBX-Format über einen Header, in dem diese Vektoren definiert sind, und diese Informationen werden vom Konvertierungsmodul zum Transformieren der Szene verwendet. Vom GLTF-Format wird auch ein festes Koordinatensystem definiert. In der Praxis enthalten einige Objekte entweder fehlerhafte Informationen im Header oder wurden unter Verwendung einer anderen Koordinatensystemkonvention gespeichert. Mit dieser Option können Sie das Koordinatensystem außer Kraft setzen, um dies zu lösen. Zum Beispiel,"axis" : ["+x", "+z", "-y"]
vertauscht die Z- und die Y-Achse, und die „Händigkeit“ des Koordinatensystems wird beibehalten, indem die Richtung der Y-Achse invertiert wird.
Knotenmetadaten
metadataKeys
: Verwenden Sie diesen Parameter, um Schlüssel für Eigenschaften von Knotenmetadaten anzugeben, die Sie im Konvertierungsergebnis beibehalten möchten. Sie können genaue Schlüssel oder Platzhalterschlüssel angeben. Platzhalterschlüssel weisen das FormatABC*
auf und stimmen mit allen Schlüsseln überein, die mitABC
beginnen. Die unterstützten Metadatenwerttypen sindbool
,int
,float
undstring
.Bei GLTF-Dateien stammen diese Daten aus dem Extras-Objekt auf Knoten. Bei FBX-Dateien stammen diese Daten aus den
Properties70
-Daten anModel nodes
. Weitere Informationen finden Sie in der Dokumentation für Ihr 3D-Objekttool.
Beim Laden eines Modells mit aktivierten Metadaten kann die Liste der Metadateneinträge einer bestimmten Entität über die asynchrone QueryMetadataAsync-Funktionabgerufen werden.
Scheitelpunktformat
Es ist möglich, das Scheitelpunktformat für ein Gitter anzupassen, um auf Kosten der Genauigkeit Arbeitsspeicher zu sparen. Wenn Ihr Modell einen geringeren Speicherbedarf aufweist, können Sie größere Modelle laden oder eine bessere Leistung erzielen. Je nach Ihren Daten kann ein falsches Format aber erhebliche Auswirkungen auf die Renderingqualität haben.
Achtung
Das Ändern des Vertexformats sollte eine letzte Option sein, wenn Modelle nicht mehr in den Arbeitsspeicher passen oder wenn Sie die bestmögliche Leistung optimieren. Durch Änderungen kann es leicht zu Artefakten beim Rendern kommen – sowohl offensichtlich als auch subtil. Wenn Sie nicht wissen, worauf Sie achten müssen, sollten Sie die Standardeinstellung nicht ändern.
Sie können diese Anpassungen vornehmen:
- Explizit bestimmte Datenströme einschließen oder ausschließen.
- Verringern der Genauigkeit von Datenströmen, um den Speicherbedarf zu verringern.
Der folgende vertex
-Abschnitt in der JSON-Datei ist optional. Für jeden Teil, der nicht explizit angegeben ist, greift der Konvertierungsdienst auf die Standardeinstellung zurück.
{
...
"vertex" : {
"position" : "32_32_32_FLOAT",
"color0" : "NONE",
"color1" : "NONE",
"normal" : "NONE",
"tangent" : "NONE",
"binormal" : "NONE",
"texcoord0" : "32_32_FLOAT",
"texcoord1" : "NONE"
},
...
}
Wenn Sie für eine Komponente die Einstellung NONE
erzwingen, ist sichergestellt, dass das Ausgabegittermodell nicht über den entsprechenden Datenstrom verfügt.
Komponentenformate pro Scheitelpunkt-Datenstrom
In der folgenden Tabelle werden Formate beschrieben, die für die jeweiligen Komponenten zulässig sind:
Scheitelpunktkomponente | Unterstützte Formate | Verwendung bei Materialien |
---|---|---|
position |
32_32_32_FLOAT (Standard), 16_16_16_16_FLOAT |
Scheitelposition. Muss immer vorhanden sein. |
color0 |
8_8_8_8_UNSIGNED_NORMALIZED (Standard), NONE |
Vertexfarben. Siehe useVertexColor Eigenschaft sowohl bei Farbmaterialien als auch bei PBR-Materialien, und vertexMix in Farbmaterialien. |
color1 |
8_8_8_8_UNSIGNED_NORMALIZED , NONE (Standard) |
Nicht verwendet. Behalten Sie den Standard bei NONE . |
normal |
8_8_8_8_SIGNED_NORMALIZED (Standard), 16_16_16_16_FLOAT , NONE |
Wird für die Beleuchtung bei PBR-Materialien verwendet. |
tangent |
8_8_8_8_SIGNED_NORMALIZED (Standard), 16_16_16_16_FLOAT , NONE |
Wird für die Beleuchtung mit Normalmaps bei PBR-Materialien verwendet. |
binormal |
8_8_8_8_SIGNED_NORMALIZED (Standard), 16_16_16_16_FLOAT , NONE |
Wird für die Beleuchtung mit Normalmaps bei PBR-Materialien verwendet. |
texcoord0 |
32_32_FLOAT (Standard), 16_16_FLOAT , NONE |
Erster Slot mit Texturkoordinaten. Einzelne Texturen wie Albedo und Normalmap können entweder Slot 0 oder 1 verwenden, der in der Quelldatei definiert ist. |
texcoord1 |
32_32_FLOAT (Standard), 16_16_FLOAT , NONE |
Zweiter Slot mit Texturkoordinaten. Einzelne Texturen wie Albedo und Normalmap können entweder Slot 0 oder 1 verwenden, der in der Quelldatei definiert ist. |
Unterstützte Komponentenformate
In der folgenden Tabelle werden die Speicherabdrücke unterstützter Komponentenformate beschrieben:
Format | Beschreibung | Byte pro Scheitelpunkt |
---|---|---|
32_32_FLOAT |
Vollständige Gleitkommagenauigkeit mit zwei Komponenten | 8 |
16_16_FLOAT |
Halbe Gleitkommagenauigkeit mit zwei Komponenten | 4 |
32_32_32_FLOAT |
Vollständige Gleitkommagenauigkeit mit drei Komponenten | 12 |
16_16_16_16_FLOAT |
Halbe Gleitkommagenauigkeit mit vier Komponenten | 8 |
8_8_8_8_UNSIGNED_NORMALIZED |
Byte mit vier Komponenten, auf den Bereich [0; 1] normalisiert |
4 |
8_8_8_8_SIGNED_NORMALIZED |
Byte mit vier Komponenten, auf den Bereich [-1; 1] normalisiert |
4 |
Bewährte Methoden für Änderungen des Komponentenformats
position
: Die geringere Genauigkeit reicht nur in seltenen Fällen aus.16_16_16_16_FLOAT
führt erkennbare Quantisierungartefakten ein, auch bei kleinen Modellen.normal
,tangent
, undbinormal
:Diese Werte werden normalerweise zusammen geändert. Sofern es bei der normalen Quantisierung nicht zu erkennbaren Beleuchtungsartefakten kommt, gibt es keinen Grund, die Genauigkeit hierfür zu erhöhen. In einigen Fällen können diese Komponenten aber aufNONE
festgelegt werden:normal
,tangent
undbinormal
werden nur benötigt, wenn mindestens ein Material des Modells beleuchtet sein soll. In Azure Remote Rendering tritt dieses Szenario auf, wenn ein PBR-Material jederzeit im Modell verwendet wird.tangent
undbinormal
werden nur benötigt, wenn für ein beleuchtetes Material eine normale Mapping-Textur verwendet wird.
texcoord0
undtexcoord1
Texturkoordinaten können eine reduzierte Genauigkeit (16_16_FLOAT
) verwenden, wenn sich die Werte im[0; 1]
Bereich befinden und die jeweiligen Texturen eine maximale Größe von 2,048 x 2,048 Pixel aufweisen. Bei Überschreitung dieser Grenzwerte verringert sich die Qualität der Texturzuordnung.
Beispiel
Angenommen, Sie verfügen über ein Fotogrammetriemodell, bei dem die Beleuchtung in die Texturen integriert ist. Zum Rendern des Modells werden hierbei nur die Scheitelpunktpositionen und Texturkoordinaten benötigt.
Standardmäßig wird vom Konverter vorausgesetzt, dass Sie für ein Modell ggf. irgendwann PBR-Materialien nutzen, daher erzeugt er normal
, tangent
und binormal
Daten für Sie. Die Speichernutzung pro Scheitelpunkt beträgt daher position
(12 Byte) + texcoord0
(8 Byte) + normal
(4 Byte) + tangent
(4 Byte) + binormal
(4 Byte) = 32 Byte. Größere Modelle dieses Typs können ohne Weiteres mehrere Millionen Scheitelpunkte aufweisen, was zu Modellen führt, die mehrere Gigabyte an Arbeitsspeicher belegen können. Diese hohen Datenmengen wirken sich auf die Leistung aus, und unter Umständen ist nicht genügend Arbeitsspeicher vorhanden.
Da Sie wissen, dass Sie für das Modell niemals eine dynamische Beleuchtung benötigen und dass alle Texturkoordinaten in dem Bereich [0; 1]
liegen, können Sie normal
, tangent
und binormal
auf NONE
und texcoord0
auf die halbe Genauigkeit (16_16_FLOAT
) festlegen, sodass sich nur 16 Byte pro Scheitelpunkt ergeben. Wenn die Gitterdaten in der Hälfte gekürzt werden, können Sie größere Modelle laden, und die Leistung wird potenziell verbessert.
Einstellungen für Punktwolken
Wenn eine Punktwolke konvertiert wird, dann wird nur eine kleine Teilmenge von Eigenschaften aus dem Schema verwendet. Andere Eigenschaften werden ignoriert, es sei denn, sie werden angegeben.
Folgende Eigenschaften haben Auswirkungen auf die Punktwolkenkonvertierung:
scaling
: Die gleiche Bedeutung wie für Dreiecksgitter.recenterToOrigin
: Die gleiche Bedeutung wie für Dreiecksgitter.axis
: Die gleiche Bedeutung wie für Dreiecksgitter. Standardwerte sind["+x", "+y", "+z"]
, aber die meisten Punktwolkendaten werden im Vergleich zum eigenen Koordinatensystem des Renderers gedreht. Um die Drehung zu kompensieren, wird diese in den meisten Fällen durch["+x", "+z", "-y"]
behoben.gammaToLinearVertex
– Ähnlich wie Dreiecksgitter gibt dieses Flag an, ob Punktfarben vom Gammaraum in den linearen Raum konvertiert werden sollen. Der Standardwert für Punktwolkenformate (E57, PLY, LAS, LAZ und XYZ) isttrue
.generateCollisionMesh
: Ähnlich wie Dreiecksgitter müssen Sie dieses Flag aktivieren, um räumliche Abfragen zu unterstützen.
Arbeitsspeicheroptimierungen
Der Arbeitsspeicherverbrauch geladener Inhalte kann zu einem Engpass im Renderingsystem werden. Eine zu große Arbeitsspeichernutzlast kann die Renderingleistung beeinträchtigen oder dazu führen, dass das Modell gar nicht geladen wird. In diesem Absatz werden einige wichtige Strategien zur Verringerung des Speicherbedarfs erläutert.
Hinweis
Die folgenden Optimierungen gelten für Dreiecksnetze. Sie können die Ausgabe von Punktwolken nicht optimieren, indem Sie Konvertierungseinstellungen konfigurieren.
Instanziierung
Bei der Instanziierung werden Gitter für Teile wiederverwendet, die unterschiedliche räumliche Transformationen aufweisen, anstatt jedes Teil auf eine eigene eindeutige Geometrie zu verweisen. Die Instanziierung hat eine erhebliche Auswirkung auf den Speicherbedarf.
Anwendungsfälle für die Instanziierung wären beispielsweise die Schrauben in einem Motorenmodell oder Stühle in einem Architekturmodell.
Hinweis
Die Instanziierung kann den Arbeitsspeicherbedarf (und somit die Ladezeiten) erheblich verbessern, aber die Verbesserungen bei der Renderingleistung sind jedoch zu vernachlässigen.
Die Instanziierung wird vom Konvertierungsdienst berücksichtigt, wenn Teile in der Quelldatei entsprechend markiert sind. Bei der Konvertierung wird jedoch keine zusätzliche Tiefenanalyse der Netzdaten durchgeführt, um wiederverwendbare Teile zu identifizieren. Das Inhaltserstellungstool und dessen Exportpipeline für eine ordnungsgemäße Instanziierung entscheidend.
Um zu testen, ob Instanziierungsinformationen bei der Konvertierung erhalten bleiben, können Sie sich einfach das Element in der Ausgabestatistik ansehen. Überprüfen Sie insbesondere den numMeshPartsInstanced
Wert. Ist der Wert für numMeshPartsInstanced
größer Null, werden Gitter instanzübergreifend gemeinsam genutzt.
Beispiel: Instanziierungseinrichtung in 3ds Max
Autodesk 3ds Max verfügt über verschiedene Objekt-Klonmodi namens Copy, Instanzund Reference. Die Modi funktionieren für die Instanziierung in der exportierten FBX-Datei unterschiedlich.
- Kopieren: In diesem Modus wird das Mesh geklont. Es findet also keine Instanziierung statt (
numMeshPartsInstanced
=0
). - Instanz: Von den beiden Objekten wird das gleiche Mesh verwendet. Es erfolgt also eine Instanziierung (
numMeshPartsInstanced
=1
). - Referenz:Da auf die Geometrien unterschiedliche Modifizierer angewendet werden können, wird vom Exportprogramm ein konservativer Ansatz gewählt, und es findet keine Instanziierung statt (
numMeshPartsInstanced
=0
).
Tiefenbasierter Kompositionsmodus
Falls der Arbeitsspeicher ein kritischer Faktor ist, konfigurieren Sie den Renderer mit dem Modus „DepthBasedComposition“. In diesem Modus wird die GPU-Nutzlast auf mehrere GPUs verteilt.
Verringern der Scheitelpunktgröße
Wie in Bewährte Methoden für Änderungen des Komponentenformats erläutert, lässt sich der Speicherbedarf durch Anpassen des Scheitelpunktformats verringern. Diese Option sollte jedoch die letzte Option sein, die Sie auswählen.
Texturgrößen
Die Texturdatenmenge kann abhängig von der Art des Szenarios den für Gitterdaten genutzten Arbeitsspeicher übersteigen. Dies kann beispielsweise bei Fotogrammetriemodellen der Fall sein. In der Konvertierungskonfiguration gibt es keine Möglichkeit zum automatischen Herunterskalieren von Texturen. Bei Bedarf muss die Texturskalierung als clientseitiger Vorverarbeitungsschritt durchgeführt werden. Der Konvertierungsschritt wählt jedoch ein geeignetes Texturkomprimierungsformataus:
- BC1-Dateiformat für undurchsichtige Farbtexturen
- BC7-Dateiformat für Quellfarbtexturen mit Alphakanal
Da das BC7-Dateiformat den doppelten Speicherbedarf des BC1-Dateiformats aufweist, ist es wichtig, sicherzustellen, dass die Eingabetexturen keinen unnötigen Alphakanal bereitstellen.
Typische Anwendungsfälle
Die Ermittlung von gut geeigneten Importeinstellungen für einen bestimmten Anwendungsfall kann ein aufwendiger Prozess sein. Andererseits könnten die Konvertierungseinstellungen auch große Auswirkungen auf die Runtimeleistung haben.
Einige bestimmte Anwendungsklassen qualifizieren sich für bestimmte Optimierungen. Einige Beispiele werden in den folgenden Abschnitten beschrieben.
Anwendungsfall: Architekturvisualisierung oder große Outdoor-Karten
Berücksichtigen Sie bei Szenarien mit Architekturvisualisierung oder großen Outdoor-Karten die folgenden Faktoren:
Diese Szenenarten sind tendenziell statisch. Sie benötigen keine beweglichen Teile. Dementsprechend können Sie die Laufzeitleistung auf
static
oder sogar aufnone
" festlegensceneGraphMode
und verbessern. Imstatic
Modus kann der Stammknoten der Szene weiterhin verschoben, gedreht und skaliert werden. Er kann z. B. dynamisch zwischen 1:1-Skalierung (für die Ansicht der ersten Person) und einer Tabellenoberansicht wechseln.Wenn für die Anwendung keine Schnittebenen verwendet werden, sollte das Flag
opaqueMaterialDefaultSidedness
deaktiviert werden. Der Leistungsgewinn beträgt in der Regel 20 Prozent bis 30 Prozent. Sie können weiterhin ausgeschnittene Ebenen verwenden, aber es gibt keine Rückseite, wenn Sie in den inneren Teil eines Objekts blicken, der kontraintuitiv erscheint. Weitere Informationen finden Sie unter Einseitiges Rendering.
Anwendungsfall: Fotogrammetriemodelle
Wenn Sie Fotogrammetriemodelle rendern, benötigen Sie in der Regel kein Szenendiagramm. In diesem Szenario können Sie auswählen, sceneGraphMode
auf none
festzulegen. Da diese Modelle selten ein komplexes Szenendiagramm enthalten, ist die Auswahl dieser Option wahrscheinlich unbedeutend. Es wird keine dynamische Beleuchtung benötigt, weil sie bereits in die Texturen integriert ist. Szenario:
- Legen Sie das Flag
unlitMaterials
auftrue
fest, um alle Materialien in unbeleuchtete Farbmaterialien zu verwandeln. - Entfernen Sie nicht benötigte Daten aus dem Scheitelpunktformat. Weitere Informationen finden Sie im vorherigen Beispiel.
Anwendungsfall: Visualisierung von kompakten Computern und anderen
In diesen Anwendungsfällen haben die Modelle oft einen hohen Detailgrad in einem kleinen Volumen. Der Renderer wurde speziell optimiert, um diese Fälle gut verarbeiten zu können. Die meisten der im früheren Anwendungsfall beschriebenen Optimierungen gelten hier jedoch nicht. Zu den Optimierungen gehören:
- Einzelne Teile sollten auswählbar und verschiebbar sein, also muss
sceneGraphMode
aufdynamic
eingestellt werden. - Das Raycasting ist meist integraler Bestandteil der Anwendung, sodass Kollisionsgittermodelle generiert werden müssen.
- Schnittebenen sehen besser aus, wenn die
opaqueMaterialDefaultSidedness
Kennzeichnung aktiviert ist.
Veraltete Features
Das Festlegen von Modellkonvertierungsparametern mithilfe des nicht modellspezifischen conversionSettings.json Dateinamens wird weiterhin unterstützt, ist jedoch veraltet. Verwenden Sie stattdessen den modellspezifischen <modelName>.ConversionSettings.json Dateinamen.
Die Verwendung einer material-override
-Einstellung zum Identifizieren einer Materialüberschreibungsdatei in der Datei mit den Konvertierungseinstellungen wird noch unterstützt, ist aber veraltet. Verwenden Sie stattdessen den modellspezifischen <modelName>.MaterialOverrides.json Dateinamen.