Konfigurieren von Modellkonvertierungsparametern
In diesem Artikel erfahren Sie, wie Sie Parameter für eine Modellkonvertierung konfigurieren.
Einstellungsdatei
Wenn eine Datei namens <modelName>. Conversion Einstellungen.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 das Feld. Conversion Einstellungen.json zum Festlegen von Parametern für die Modellkonvertierung.
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
}
Ein Feld. Konvertierung Einstellungen.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 dreieckigen Gitters und einer Punktwolke ist identisch. Eine Punktwolkenkonvertierung verwendet jedoch eine strenge Teilmenge von Features im Vergleich zu einer dreieckigen Gitterkonvertierung.
Einstellungen für ein dreieckiges Gitter
Wenn Sie ein dreieckiges Gitter wie aus einer FBX-Datei konvertieren, wirken sich alle Parameter im im vorherigen Abschnitt gezeigten Schemabeispiel auf das Konvertierungsergebnis aus. In den nächsten Abschnitten erhalten Sie eine detaillierte Erläuterung der Parameter.
Geometrieparameter
scaling
: Dieser Parameter skaliert ein Modell einheitlich. Die Skalierung kann verwendet werden, um ein Modell zu vergrößern oder zu verkleinern, z. B. zum Anzeigen eines Gebäudemodells auf einem Tabellenanfang. Die Skalierung ist auch wichtig, wenn ein Modell in anderen Einheiten als Metern definiert wird, da das Renderingmodul Meter erwartet. Wenn z. B. ein Modell in Zentimetern definiert ist, wird beim Anwenden einer Skalierung von 0,01 das Modell mit der richtigen Größe gerendert. 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önnen 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 konvertiert werden soll, damit das umgebende Feld am Ursprung zentriert ist. Wenn ein Quellmodell weit vom Ursprung entfernt verschoben wird, können Genauigkeitsprobleme mit Gleitkommapunkten zu Renderingartefakten führen. Das Zentrieren des Modells kann in diesem Szenario hilfreich sein.opaqueMaterialDefaultSidedness
: Das Renderingmodul geht davon aus, dass undurchsichtige Materialien doppelseitig sind. Wenn diese Annahme nicht auf ein bestimmtes Modell zutrifft, sollte dieser Parameter auf .SingleSided
festgelegt werden. Weitere Informationen finden Sie unter single-sided rendering.
Materialdduplizierung
deduplicateMaterials
: Dieser Parameter aktiviert oder deaktiviert die automatische Deduplizierung von Materialien, die dieselben 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 richtige 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
: Konvertieren Sie Materialfarben aus dem Gammaraum in den linearen Raum.gammaToLinearVertex
: Konvertieren Sie Vertexfarben aus dem Gammaraum in den linearen Raum.
Hinweis
Für FBX-, E57-, PLY-, LAS-, LAZ- und XYZ-Dateiformate sind diese Einstellungen standardmäßig festgelegt true
. Für alle anderen Dateiformate ist false
der Standardwert .
Szenenparameter
sceneGraphMode
: Definiert, wie das Szenendiagramm 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 Laufzeit ist die Knotenhierarchie identisch mit der Struktur in der Quelldatei.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, z. B. der Explosionsansicht, generiert diedynamic
Option ein Modell, das effizienter gerendert werden kann, aberstatic
der Modus ermöglicht weiterhin einzelne Teiletransformationen. Wenn keine dynamische Analyse erforderlich ist, ist diestatic
Option für Modelle mit vielen einzelnen Teilen am besten geeignet.none
: Das Szenendiagramm wird in ein 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 dynamic
den 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. Räumliche Abfragen geben einzelne Teile zurück, und jeder Teil kann über 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 eine Objektüberprüfung und gelegentliche Transformationsänderungen an einzelnen Teilen benötigen, aber keine Objektparentierung.
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 Verwendung optimieren. Wenn Sie z. B. das Modell eines Autos anzeigen möchten, das der Benutzer auseinandernimmt und im Detail prüft, konvertieren Sie es zunächst mithilfe dynamic
des Modus. Wenn Sie das Auto 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
: Wenn Sie Unterstützung für räumliche Abfragen für ein Modell 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. Wenn Sie daten haben, die bereits Beleuchtung enthalten, z. B. Modelle, die über Photogrammetrie erstellt wurden, 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
: Frühere Versionen des FBX-Formats definieren ihre Materialien mithilfe eines Phong-Materialmodells. Der Konvertierungsprozess muss ableiten, wie diese Materialien dem PBR-Modell des Renderers zugeordnet werden. 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 die Umwandlung zwischen der Priorisierung der hohen Glanzwerte, der Definition eines stark reflektierenden und metallischen Materials, bei dem sich die Albedofarbe ablöst, oder die Albedofarbe priorisieren, indem sie etwas definieren, wie in einem glänzenden farbigen Kunststoff. Standardmäßig geht der Konvertierungsprozess davon aus, dass hohe Glanzwerte ein metallisches Material in mehrdeutigen Szenarien bedeuten. Sie können diesen Parameterfalse
für den entgegengesetzten Effekt festlegen.
Außerkraftsetzung 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 eine Kopfzeile, in der diese Vektoren definiert sind, und die Konvertierung verwendet diese Informationen, um die Szene zu transformieren. Das GLTF-Format definiert auch ein System mit fester Koordinaten. In der Praxis verfügen einige Objekte entweder über falsche Informationen in der Kopfzeile oder wurden mithilfe einer anderen Koordinatensystemkonvention gespeichert. Mit dieser Option können Sie das Koordinatensystem außer Kraft setzen, um dies zu lösen. Tauscht z. B. die Z-Achse und die Y-Achse und hält die Händigkeit des Koordinatensystems,"axis" : ["+x", "+z", "-y"]
indem die Y-Achsenrichtung umgekehrt wird.
Knotenmetadaten
metadataKeys
: Verwenden Sie diesen Parameter, um Schlüssel von Knotenmetadateneigenschaften anzugeben, die Sie im Konvertierungsergebnis beibehalten möchten. Sie können genaue Schlüssel oder Platzhalterschlüssel angeben. Wild Karte Schlüssel sind das FormatABC*
und entsprechen allen Schlüsseln, die mitABC
. 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
DatenModel nodes
von . 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-Funktion abgerufen werden.
Scheitelpunktformat
Es ist möglich, das Vertexformat für ein Gitter anzupassen, um Genauigkeit für Speichereinsparungen zu erzielen. Wenn Ihr Modell einen geringeren Speicherbedarf aufweist, können Sie größere Modelle laden oder eine bessere Leistung erzielen. Je nach Daten kann sich das falsche Format jedoch erheblich auf die Renderingqualität auswirken.
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. Änderungen können leicht Renderingartefakte einführen, 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 Sie die 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 |
Vertexposition. Muss immer vorhanden sein. |
color0 |
8_8_8_8_UNSIGNED_NORMALIZED (Standard) NONE |
Vertexfarben. Siehe useVertexColor Eigenschaft sowohl in Farbmaterialien als auch in PBR-Materialien und vertexMix in Farbmaterialien. |
color1 |
8_8_8_8_UNSIGNED_NORMALIZED , NONE (Standard) |
Nicht verwendet. Als Standard NONE beibehalten. |
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 normale Karte 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 normale Karte 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 |
Volle Gleitkommagenauigkeit von zwei Komponenten | 8 |
16_16_FLOAT |
Gleitkommagenauigkeit mit zwei Komponenten | 4 |
32_32_32_FLOAT |
Dreiteilige volle Gleitkommagenauigkeit | 12 |
16_16_16_16_FLOAT |
Genauigkeit von vier Komponenten mit halber Gleitkommazahl | 8 |
8_8_8_8_UNSIGNED_NORMALIZED |
Byte mit vier Komponenten, normalisiert in den [0; 1] Bereich |
4 |
8_8_8_8_SIGNED_NORMALIZED |
Byte mit vier Komponenten, normalisiert in den [-1; 1] Bereich |
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 spürbare Quantisierungsartefakte ein, auch für kleine Modelle.normal
,tangent
undbinormal
: In der Regel werden diese Werte 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 jedoch auf :NONE
normal
,tangent
undbinormal
sind nur erforderlich, wenn mindestens ein Material im Modell beleuchtet werden sollte. In Azure Remote Rendering tritt dieses Szenario auf, wenn ein PBR-Material jederzeit im Modell verwendet wird.tangent
undbinormal
sind nur erforderlich, wenn eines der beleuchteten Materialien eine normale Kartentextur verwendet.
texcoord0
undtexcoord1
: Texturkoordinaten können eine reduzierte Genauigkeit (16_16_FLOAT
) verwenden, wenn ihre Werte im[0; 1]
Bereich verbleiben und wenn die adressierten Texturen eine maximale Größe von 2.048 × 2.048 Pixel aufweisen. Wenn diese Grenzwerte überschritten werden, 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 muss der Konverter davon ausgehen, dass Sie PBR-Materialien zu einem Modell zu einem bestimmten Zeitpunkt verwenden möchten, sodass er normal
Daten generiert, tangent
und binormal
für Sie. Die Speicherauslastung pro Vertex beträgt position
also (12 Byte) + texcoord0
(8 Bytes) + normal
(4 Bytes) + tangent
(4 Byte) + binormal
(4 Bytes) = 32 Bytes. Größere Modelle dieses Typs können problemlos viele Millionen von Scheitelpunkten aufweisen, was zu Modellen führt, die mehrere Gigabyte Arbeitsspeicher belegen können. Solche großen Datenmengen wirken sich auf die Leistung aus, und Sie haben möglicherweise sogar keinen Arbeitsspeicher mehr.
Wenn Sie wissen, dass Sie keine dynamische Beleuchtung für das Modell benötigen und wissen, dass sich alle Texturkoordinaten im [0; 1]
Bereich befinden, können normal
Sie festlegen, tangent
und binormal
auf NONE
die texcoord0
Halbe Genauigkeit (16_16_FLOAT
), was zu nur 16 Bytes pro Scheitelpunkt führt. 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, 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 bei dreieckigen Gittern.recenterToOrigin
: Die gleiche Bedeutung wie bei dreieckigen Gittern.axis
: Die gleiche Bedeutung wie bei dreieckigen Gittern. 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 dreieckige Gitter gibt dieses Kennzeichen an, ob Punktfarben von Gammaraum in linearen Raum konvertiert werden sollen. Der Standardwert für Punktwolkenformate (E57-, PLY-, LAS-, LAZ- und XYZ-Dateien) lautettrue
.generateCollisionMesh
: Ähnlich wie dreieckige Gitter müssen Sie dieses Flag aktivieren, um räumliche Abfragen zu unterstützen.
Arbeitsspeicheroptimierungen
Der Speicherverbrauch von geladenen Inhalten kann zu einem Engpass im Renderingsystem werden. Wenn die Speichernutzlast zu groß wird, kann sie die Renderingleistung beeinträchtigen oder dazu führen, dass das Modell nicht vollständig 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 Instancing werden Gitter für Teile wiederverwendet, die unterschiedliche räumliche Transformationen aufweisen, anstatt jedes Teils auf eine eigene eindeutige Geometrie zu verweisen. Die Instancing wirkt sich erheblich auf den Speicherbedarf aus.
Anwendungsfälle für die Instanziierung wären beispielsweise die Schrauben in einem Motorenmodell oder Stühle in einem Architekturmodell.
Hinweis
Die Refinanzierung kann die Speicherauslastung (und damit ladezeiten) erheblich verbessern, aber die Verbesserungen bei der Renderingleistung sind unbedeutend.
Die Instanziierung wird vom Konvertierungsdienst berücksichtigt, wenn Teile in der Quelldatei entsprechend markiert sind. Die Konvertierung führt jedoch keine zusätzliche, umfassende Analyse von Gitterdaten durch, um wiederverwendbare Teile zu identifizieren. Das Tool für die Inhaltserstellung und die Exportpipeline sind die entscheidenden Kriterien für die ordnungsgemäße Einrichtung der Refinanzierung.
Eine einfache Möglichkeit, zu testen, ob Während der Konvertierung Informationen zur Instancing beibehalten werden, besteht darin, die Ausgabestatistiken zu betrachten. Überprüfen Sie insbesondere den numMeshPartsInstanced
Wert. Wenn der Wert größer numMeshPartsInstanced
als 0 ist, werden Gitter über Instanzen hinweg freigegeben.
Beispiel: Einrichtung der Instancing in 3ds Max
Shapes 3ds Max verfügt über verschiedene Objekt-Klonmodi namens Copy, Instance und Reference. Die Modi funktionieren für die Instancing in der exportierten FBX-Datei unterschiedlich.
- Kopieren: In diesem Modus wird das Gitter geklont, sodass keine Instancing verwendet wird (
numMeshPartsInstanced
=0
). - Instanz: Die beiden Objekte verwenden dasselbe Gitter, sodass die Instancing verwendet wird ( =
numMeshPartsInstanced
1
). - Referenz: Unterschiedliche Modifizierer können auf die Geometrien angewendet werden, sodass der Exporter einen konservativen Ansatz auswählt und keine Instancing (
numMeshPartsInstanced
=0
) verwendet.
Tiefenbasierter Kompositionsmodus
Wenn Arbeitsspeicher ein Problem darstellt, konfigurieren Sie den Renderer mithilfe des tiefenbasierten Kompositionsmodus. In diesem Modus wird die GPU-Nutzlast auf mehrere GPUs verteilt.
Verringern der Scheitelpunktgröße
Wie in bewährten Methoden für Komponentenformatänderungen erläutert, kann das Anpassen des Vertexformats den Speicherbedarf verringern. Diese Option sollte jedoch die letzte Option sein, die Sie auswählen.
Texturgrößen
Je nach Szenariotyp kann die Menge der Texturdaten den Speicher überwiegen, der für Gitterdaten verwendet wird. 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 erfolgen. Der Konvertierungsschritt wählt jedoch ein geeignetes Texturkomprimierungsformat aus:
- 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 Suche nach guten Importeinstellungen für einen bestimmten Anwendungsfall kann ein mühsamer Vorgang sein. Andererseits können Konvertierungseinstellungen erhebliche Auswirkungen auf die Laufzeitleistung 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. Sie 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 single-sided rendering.
Anwendungsfall: Photogrammetriemodelle
Wenn Sie Photogrammetriemodelle rendern, benötigen Sie in der Regel kein Szenendiagramm. In diesem Szenario können Sie festlegen sceneGraphMode
none
, auf . 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 ist stark optimiert, um diese Fälle gut zu behandeln. 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, müssen also
sceneGraphMode
aufdynamic
festgelegt 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 der nicht modellspezifischen Konvertierung Einstellungen.json-Dateiname wird weiterhin unterstützt, ist jedoch veraltet. Verwenden Sie stattdessen den modellspezifischen <Modellnamen>. Dateiname "Conversion Einstellungen.json".
Die Verwendung einer Einstellung zum Identifizieren einer material-override
Materialüberschreibungsdatei in der Konvertierungseinstellungsdatei wird weiterhin unterstützt, ist jedoch veraltet. Verwenden Sie stattdessen den modellspezifischen <ModelName>. MaterialOverrides.json-Dateiname .