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 dem scaling 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".

Screenshot that shows two cubes of 68,921 colored triangles and the effect of deduplication.

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 truefestgelegt 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 falseder 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 wie dynamic, 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 die dynamic Option ein Modell, das effizienter gerendert werden kann, aber static der Modus ermöglicht weiterhin einzelne Teiletransformationen. Wenn keine dynamische Analyse erforderlich ist, ist die static 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 Parameter false 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 Format ABC* und entsprechen allen Schlüsseln, die mit ABC. Die unterstützten Metadatenwerttypen sind bool, int, float und string.

    Bei GLTF-Dateien stammen diese Daten aus dem Extras-Objekt auf Knoten. Bei FBX-Dateien stammen diese Daten aus den Properties70 Daten Model nodesvon . 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 NONEbeibehalten.
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, tangentund binormal: 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, tangentund binormal 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 und binormal sind nur erforderlich, wenn eines der beleuchteten Materialien eine normale Kartentextur verwendet.
  • texcoord0 und texcoord1 : 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 normalDaten generiert, tangentund 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 normalSie festlegen, tangentund binormal auf NONEdie 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) lautet true.
  • 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.

Screenshot that shows an example of cloning an object by using Autodesk 3ds Max.

  • 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 ( = numMeshPartsInstanced1).
  • 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 staticoder sogar auf none" festlegen sceneGraphMode und verbessern. Im static 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 sceneGraphModenone, 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 auf true 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 auf dynamicfestgelegt 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-overrideMaterialüberschreibungsdatei in der Konvertierungseinstellungsdatei wird weiterhin unterstützt, ist jedoch veraltet. Verwenden Sie stattdessen den modellspezifischen <ModelName>. MaterialOverrides.json-Dateiname .

Nächste Schritte