Udostępnij za pośrednictwem


Konfigurowanie parametrów konwersji modelu

W tym artykule dowiesz się, jak skonfigurować parametry konwersji modelu.

plik Ustawienia

Jeśli plik o nazwie <modelName>. Plik Conversion Ustawienia.json znajduje się w kontenerze wejściowym obok nazwy modelu wejściowego modelName<>.<ext>, a następnie plik jest używany do zapewnienia dodatkowej konfiguracji dla procesu konwersji modelu. Na przykład podczas konwertowania pliku box.gltf należy użyć pola. Konwersja Ustawienia.json, aby ustawić parametry konwersji modelu.

Zawartość pliku ustawień konwersji JSON powinna mieć następujący schemat:

{
    "$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
}

Pole. Plik conversion Ustawienia.json może wyglądać następująco:

{
    "scaling" : 0.01,
    "recenterToOrigin" : true,
    "material-override" : "box_materials_override.json"
}

Schemat konwersji trójkątnej siatki i chmury punktów jest identyczny. Jednak konwersja chmury punktów używa ścisłego podzestawu funkcji w porównaniu z konwersją siatki trójkątnej.

Ustawienia dla trójkątnej siatki

Podczas konwertowania trójkątnej siatki, na przykład z pliku fbx , wszystkie parametry w przykładzie schematu pokazanym w poprzedniej sekcji mają wpływ na wynik konwersji. W następnych sekcjach przedstawiono szczegółowe wyjaśnienie parametrów.

Parametry geometrii

  • scaling: ten parametr skaluje model jednolicie. Skalowanie może służyć do zwiększania lub zmniejszania modelu, na przykład w celu wyświetlenia modelu konstrukcyjnego na górze tabeli. Skalowanie jest również ważne, gdy model jest definiowany w jednostkach innych niż mierniki, ponieważ aparat renderowania oczekuje mierników. Na przykład jeśli model jest zdefiniowany w centymetrach, zastosowanie skali 0,01 renderuje model o prawidłowym rozmiarze. Niektóre formaty danych źródłowych (na przykład pliki fbx ) zapewniają wskazówkę skalowania jednostek. W takim przypadku konwersja niejawnie skaluje model do jednostek miernika. Niejawne skalowanie udostępniane przez format źródłowy jest stosowane na podstawie parametru scaling . Ostateczny współczynnik skalowania jest stosowany do wierzchołków geometrycznych i lokalnych przekształceń węzłów grafu sceny. Skalowanie przekształcenia jednostki głównej pozostaje niezmodyfikowane.

    Ważne

    Prezentacja i przewodnik Szybki start mogą zrekompensować skalowanie w dowolnym czasie konwersji, ponieważ każda z nich ma wbudowaną funkcję automatycznego skalowania. Aby uzyskać więcej informacji, zobacz przewodnik rozwiązywania problemów.

  • recenterToOrigin: ten parametr określa, że model powinien zostać przekonwertowany tak, aby jego pole ograniczenia było wyśrodkowane na początku. Jeśli model źródłowy jest przesiedlony daleko od źródła, problemy z precyzją zmiennoprzecinkowa mogą powodować renderowanie artefaktów. Wyśrodkowanie modelu może pomóc w tym scenariuszu.

  • opaqueMaterialDefaultSidedness: Aparat renderowania zakłada, że nieprzezroczyste materiały są dwustronne. Jeśli to założenie nie jest prawdziwe dla określonego modelu, ten parametr powinien być ustawiony na SingleSidedwartość . Aby uzyskać więcej informacji, zobacz Renderowanie jednostronne.

Deduplikacja materiału

  • deduplicateMaterials: Ten parametr włącza lub wyłącza automatyczne deduplikację materiałów, które mają te same właściwości i tekstury. Deduplikacja odbywa się po przetworzeniu przesłonięć materiału. Jest domyślnie włączony.

  • Jeśli model ma ponad 65 535 materiałów nawet po deduplikacji, usługa próbuje scalić materiały, które mają podobne właściwości. Jako ostatnia opcja wszelkie materiały, które przekraczają limit, są zastępowane czerwonym materiałem błędowym.

Na poniższej ilustracji przedstawiono dwa moduły z 68 921 kolorowymi trójkątami. Lewy przykład jest przed deduplikacją z 68 921 materiałami kolorowymi. Właściwym przykładem jest deduplikacja z 64 000 materiałów kolorowych. Limit wynosi 65 535 materiałów. Aby uzyskać więcej informacji na temat limitów materiałów, zobacz limity.

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

Parametry przestrzeni kolorów

Aparat renderowania oczekuje, że wartości kolorów będą znajdować się w przestrzeni liniowej. Jeśli model jest zdefiniowany przy użyciu przestrzeni gamma, należy ustawić następujące opcje na true:

  • gammaToLinearMaterial: Konwertuj kolory materiału z przestrzeni gamma na przestrzeń liniową.
  • gammaToLinearVertex: Konwertuj kolory wierzchołków z przestrzeni gamma na przestrzeń liniową.

Uwaga

W przypadku formatów plików FBX, E57, PLY, LAS, LAZ i XYZ te ustawienia są domyślnie ustawione true . W przypadku wszystkich innych formatów plików wartość domyślna to false.

Parametry sceny

  • sceneGraphMode: definiuje sposób konwertowania grafu sceny w pliku źródłowym.
    • dynamic (ustawienie domyślne): wszystkie obiekty w pliku są uwidocznione jako jednostki w interfejsie API i mogą być przekształcane i ponownie obsługiwane dowolnie. W czasie wykonywania hierarchia węzłów jest identyczna ze strukturą w pliku źródłowym.
    • static: Podobnie jak dynamicw przypadku obiektów w grafie sceny nie można ponownie przenawiać do innych obiektów w czasie wykonywania. W przypadku modeli dynamicznych, które mają wiele ruchomych części, takich jak widok eksplozji, dynamic opcja generuje model, który jest bardziej wydajny do renderowania, ale static tryb nadal pozwala na poszczególne przekształcenia części. Jeśli ponowne ponowne użycie dynamiczne nie jest wymagane, static opcja jest najbardziej odpowiednia dla modeli, które mają wiele pojedynczych części.
    • none: wykres sceny jest zwinięty do jednego obiektu.

Każdy tryb ma inną wydajność środowiska uruchomieniowego. W dynamic trybie koszt wydajności jest skalowany liniowo przy użyciu liczby jednostek na wykresie, nawet jeśli żadna część nie zostanie przeniesiona. Używaj dynamic trybu tylko wtedy, gdy konieczne jest jednoczesne przeniesienie wielu części lub dużych podgrafów. Przykładem jest animacja widoku eksplozji.

Tryb static eksportuje również graf pełnej sceny. Zapytania przestrzenne zwracają poszczególne części, a każda część może być modyfikowana za pomocą przesłonięć stanu. W tym trybie obciążenie środowiska uruchomieniowego na obiekt jest niewielkie. Ten tryb jest idealny w przypadku dużych scen, w których potrzebujesz inspekcji poszczególnych obiektów i okazjonalnych zmian transformacji w poszczególnych częściach, ale bez ponownego przenaczania obiektów.

Tryb none ma najmniejsze obciążenie środowiska uruchomieniowego, a także nieco lepsze czasy ładowania. Inspekcja ani przekształcanie pojedynczych obiektów nie jest możliwa w tym trybie. Przypadki użycia to na przykład modele fotogramów, które nie zaczynają się od znaczącego grafu sceny.

Napiwek

Wiele aplikacji ładuje wiele modeli. Należy zoptymalizować parametry konwersji dla każdego modelu w zależności od sposobu jej używania. Jeśli na przykład chcesz wyświetlić model samochodu, aby użytkownik rozjął się i zbadał go szczegółowo, najpierw przekonwertuj go przy użyciu dynamic trybu. Jeśli jednak chcesz również umieścić samochód w środowisku sali pokazowej, możesz przekonwertować ten model przy użyciu sceneGraphMode ustawienia na static, a nawet na none.

Parametry fizyki

  • generateCollisionMesh: Jeśli potrzebujesz obsługi zapytań przestrzennych w modelu, należy włączyć tę opcję. Generowanie siatki kolizji nie dodaje dodatkowego czasu konwersji, a także nie zwiększa rozmiaru pliku wyjściowego. Czas ładowania i koszt środowiska uruchomieniowego modelu, który ma siatki kolizji, jest tylko nieznacznie wyższy. Możesz pozostawić tę flagę domyślną (włączoną), chyba że masz określony powód wykluczania modelu z zapytań przestrzennych.

Materiały nieoświetzone

  • unlitMaterials: Domyślnie konwersja tworzy materiały renderowania fizycznego (PBR). Po ustawieniu tej opcji konwerter traktuje wszystkie materiały jako materiały kolorowe. Jeśli masz już dane, które zawierają już oświetlenie, takie jak modele utworzone za pomocą fotogrammetrii, ta opcja pozwala szybko wymusić poprawną konwersję dla wszystkich materiałów. Nie trzeba zastępować każdego materiału indywidualnie.

Konwersja z wcześniejszych formatów FBX i modeli materiału Phong

  • fbxAssumeMetallic: Wcześniejsze wersje formatu FBX definiują swoje materiały przy użyciu modelu materiału Phong. Proces konwersji musi wywnioskować, w jaki sposób te materiały są mapowane na model PBR modułu renderowania. Zazwyczaj to mapowanie działa dobrze, ale niejednoznaczność może powstać, gdy materiał nie ma tekstur, wysokich wartości spekulacyjnych i koloru nieszarwego albedo. W tym scenariuszu konwersja musi wybierać między ustalaniem priorytetów wysokich wartości spekulacyjnych, definiując wysoce refleksyjny i metaliczny materiał, w którym kolor albedo rozpuszczy się, lub priorytetowo ustalając kolor albedo, definiując coś, jak w błyszczącym kolorowym plastiku. Domyślnie proces konwersji zakłada, że wysoce spekularne wartości oznaczają materiał metaliczny w niejednoznacznych scenariuszach. Można ustawić ten parametr na false wartość dla odwrotnego efektu.

Zastępowanie układu współrzędnych

  • axis: użyj tego parametru, aby zastąpić wektory jednostek układu współrzędnych. Wartości domyślne to ["+x", "+y", "+z"]. Teoretycznie format FBX ma nagłówek, w którym te wektory są zdefiniowane, a konwersja wykorzystuje te informacje do przekształcania sceny. Format GLTF definiuje również układ współrzędnych stałych. W praktyce niektóre zasoby mają niepoprawne informacje w nagłówku lub zostały zapisane przy użyciu innej konwencji układu współrzędnych. Ta opcja umożliwia zastąpienie układu współrzędnych w celu zrekompensowania. Na przykład "axis" : ["+x", "+z", "-y"] wymienia oś Z i oś Y i utrzymuje układ współrzędnych przez odwrócenie kierunku osi Y.

Metadane węzła

  • metadataKeys: użyj tego parametru, aby określić klucze właściwości metadanych węzła, które mają być zachowywane w wyniku konwersji. Możesz określić dokładne klucze lub klucze wieloznaczne. Klucze wieloznaczne mają format ABC* i pasują do dowolnego klucza rozpoczynającego się od ABC. Obsługiwane typy wartości metadanych to bool, , intfloati string.

    W przypadku plików GLTF te dane pochodzą z obiektu dodatków w węzłach. W przypadku plików FBX te dane pochodzą z Properties70 danych w pliku Model nodes. Aby uzyskać więcej informacji, zobacz dokumentację narzędzia zasobów 3D.

Podczas ładowania modelu z włączonymi metadanymi można pobrać listę wpisów metadanych określonej jednostki za pomocą asynchronicznej funkcji QueryMetadataAsync.

Format wierzchołka

Można dostosować format wierzchołka siatki, aby uzyskać precyzję w celu uzyskania oszczędności pamięci. Jeśli model ma mniejsze zużycie pamięci, możesz załadować większe modele lub osiągnąć lepszą wydajność. Jednak w zależności od danych niewłaściwy format może znacząco wpłynąć na jakość renderowania.

Uwaga

Zmiana formatu wierzchołka powinna być ostatnią opcją, gdy modele nie mieszczą się już w pamięci lub gdy optymalizujesz pod kątem najlepszej możliwej wydajności. Zmiany mogą łatwo wprowadzać artefakty renderowania, zarówno oczywiste, jak i subtelne. Jeśli nie wiesz, co należy zwrócić uwagę, nie należy zmieniać wartości domyślnej.

Możesz wprowadzić następujące korekty:

  • Jawne dołączanie lub wykluczanie określonych strumieni danych.
  • Zmniejsz dokładność strumieni danych, aby zmniejszyć zużycie pamięci.

Poniższa vertex sekcja w pliku JSON jest opcjonalna. Dla każdej części, która nie jest jawnie określona, usługa konwersji powraca do domyślnego ustawienia.

{
    ...
    "vertex" : {
        "position"  : "32_32_32_FLOAT",
        "color0"    : "NONE",
        "color1"    : "NONE",
        "normal"    : "NONE",
        "tangent"   : "NONE",
        "binormal"  : "NONE",
        "texcoord0" : "32_32_FLOAT",
        "texcoord1" : "NONE"
    },
    ...
}

Wymuszając składnik na NONEwartość , gwarantuje to, że siatka wyjściowa nie ma odpowiedniego strumienia.

Formaty składników na strumień wierzchołka

W poniższej tabeli opisano formaty dozwolone dla odpowiednich składników:

Składnik wierzchołka Obsługiwane formaty Użycie materiałów
position 32_32_32_FLOAT (wartość domyślna), 16_16_16_16_FLOAT Położenie wierzchołka. Zawsze musi być obecny.
color0 8_8_8_8_UNSIGNED_NORMALIZED (wartość domyślna), NONE Kolory wierzchołków. Zobacz useVertexColor właściwość zarówno w materiałach kolorów, jak i w materiałach PBR oraz vertexMix w materiałach kolorowych.
color1 8_8_8_8_UNSIGNED_NORMALIZED, NONE (ustawienie domyślne) Nieużywany. Pozostaw wartość domyślną NONE.
normal 8_8_8_8_SIGNED_NORMALIZED (ustawienie domyślne), 16_16_16_16_FLOAT, NONE Używany do oświetlenia w materiałach PBR.
tangent 8_8_8_8_SIGNED_NORMALIZED (ustawienie domyślne), 16_16_16_16_FLOAT, NONE Używane do oświetlenia z normalnymi mapami w materiałach PBR.
binormal 8_8_8_8_SIGNED_NORMALIZED (ustawienie domyślne), 16_16_16_16_FLOAT, NONE Używane do oświetlenia z normalnymi mapami w materiałach PBR.
texcoord0 32_32_FLOAT (ustawienie domyślne), 16_16_FLOAT, NONE Pierwsze gniazdo współrzędnych tekstury. Poszczególne tekstury, takie jak albedo i normalna mapa, mogą używać miejsca 0 lub 1, który jest zdefiniowany w pliku źródłowym.
texcoord1 32_32_FLOAT (ustawienie domyślne), 16_16_FLOAT, NONE Drugie gniazdo współrzędnych tekstury. Poszczególne tekstury, takie jak albedo i normalna mapa, mogą używać miejsca 0 lub 1, który jest zdefiniowany w pliku źródłowym.

Obsługiwane formaty składników

W poniższej tabeli opisano ślady pamięci obsługiwanych formatów składników:

Format opis Bajty na wierzchołek
32_32_FLOAT Dwuskładnikowa pełna precyzja zmiennoprzecinkowa 8
16_16_FLOAT Precyzja dwuskładnikowa o połowę zmiennoprzecinkowa 4
32_32_32_FLOAT Trójskładnikowa pełna precyzja zmiennoprzecinkowa 12
16_16_16_16_FLOAT Czteroskładnikowa precyzja półprzecinkowa 8
8_8_8_8_UNSIGNED_NORMALIZED Czteroskładnikowy bajt znormalizowany do [0; 1] zakresu 4
8_8_8_8_SIGNED_NORMALIZED Czteroskładnikowy bajt znormalizowany do [-1; 1] zakresu 4

Najlepsze rozwiązania dotyczące zmian formatu składnika

  • position: Rzadko zdarza się, że mniejsza dokładność jest wystarczająca. 16_16_16_16_FLOAT wprowadza zauważalne artefakty kwantyzacji, nawet w przypadku małych modeli.
  • normal, tangenti binormal: zazwyczaj te wartości są zmieniane razem. Chyba że istnieją zauważalne artefakty oświetlenia, które wynikają z normalnej kwantyzacji, nie ma powodu, aby zwiększyć ich dokładność. W niektórych przypadkach te składniki można jednak ustawić na NONEwartość :
    • normal, tangenti binormal są potrzebne tylko wtedy, gdy co najmniej jeden materiał w modelu powinien być oświetlony. W usłudze Azure Remote Rendering ten scenariusz występuje, gdy materiał PBR jest używany w modelu w dowolnym momencie.
    • tangent i binormal są potrzebne tylko wtedy, gdy dowolny z oświetlonych materiałów używa normalnej tekstury mapy.
  • texcoord0 i texcoord1 : Współrzędne tekstury mogą używać mniejszej dokładności (16_16_FLOAT), gdy ich wartości pozostają w [0; 1] zakresie, a adresowane tekstury mają maksymalny rozmiar 2048 × 2048 pikseli. Jeśli te limity zostaną przekroczone, jakość mapowania tekstury spadnie.

Przykład

Załóżmy, że masz model fotogrammetrii, który ma oświetlenie upieczone w tekstury. Wszystko, co jest potrzebne do renderowania modelu, to położenia wierzchołków i współrzędnych tekstury.

Domyślnie konwerter musi zakładać, że możesz chcieć używać materiałów PBR w modelu w pewnym momencie, więc generuje normaldane , tangenti binormal dla Ciebie. Dlatego użycie pamięci na wierzchołek wynosi position (12 bajtów) + (8 bajtów) + texcoord0 (4 bajty) + normaltangent (4 bajty) + binormal (4 bajty) = 32 bajty. Większe modele tego typu mogą łatwo mieć wiele milionów wierzchołków, co skutkuje modelami, które mogą przyjmować wiele gigabajtów pamięci. Takie duże ilości danych wpływają na wydajność, a nawet zabraknie pamięci.

Wiedząc, że nigdy nie potrzebujesz dynamicznego oświetlenia w modelu i wiedząc, że wszystkie współrzędne tekstury znajdują się w [0; 1] zakresie, można ustawić normalwartości , tangenti na NONE, i binormal ustawić texcoord0 na połowę precyzji (16_16_FLOAT), co powoduje tylko 16 bajtów na wierzchołek. Gdy dane siatki są wycinane o połowę, można ładować większe modele, a wydajność jest potencjalnie większa.

Ustawienia chmur punktowych

Po przekonwertowaniu chmury punktów jest używany tylko niewielki podzbiór właściwości ze schematu. Inne właściwości są ignorowane, chyba że zostały określone.

Właściwości, które mają wpływ na konwersję chmury punktowej, to:

  • scaling: takie samo znaczenie jak w przypadku trójkątnych siatk.
  • recenterToOrigin: takie samo znaczenie jak w przypadku trójkątnych siatk.
  • axis: takie samo znaczenie jak w przypadku trójkątnych siatk. Wartości domyślne to ["+x", "+y", "+z"], ale większość danych chmury punktów jest obracana w porównaniu z własnym systemem współrzędnych modułu renderowania. Aby zrekompensować, w większości przypadków ["+x", "+z", "-y"] naprawia rotację.
  • gammaToLinearVertex: Podobnie jak trójkątne siatki, ta flaga wskazuje, czy kolory punktów powinny być konwertowane z przestrzeni gamma na przestrzeń liniową. Wartość domyślna formatów chmury punktów (E57, PLY, LAS, LAZ i XYZ) to true.
  • generateCollisionMesh: Podobnie jak trójkątne siatki, aby obsługiwać zapytania przestrzenne, należy włączyć tę flagę.

Optymalizacje pamięci

Zużycie pamięci załadowanej zawartości może stać się wąskim gardłem w systemie renderowania. Jeśli ładunek pamięci stanie się zbyt duży, może to spowodować naruszenie wydajności renderowania lub całkowite załadowanie modelu. W tym akapicie omówiono niektóre ważne strategie zmniejszenia zużycia pamięci.

Uwaga

Poniższe optymalizacje dotyczą trójkątnych siatk. Nie można zoptymalizować danych wyjściowych chmur punktowych, konfigurując ustawienia konwersji.

Tworzenie wystąpienia

W przypadku instancingu siatki są ponownie używane dla części, które mają odrębne przekształcenia przestrzenne zamiast każdej części odwołującej się do własnej unikatowej geometrii. Instancing ma znaczący wpływ na zużycie pamięci.

Przykładowe przypadki użycia na potrzeby stancingu to śruby w modelu silnika lub krzesłach w modelu architektonicznym.

Uwaga

Instancing może znacznie poprawić zużycie pamięci (a tym samym czas ładowania), ale ulepszenia wydajności renderowania są nieistotne.

Usługa konwersji uwzględnia instancing, jeśli części są odpowiednio oznaczone w pliku źródłowym. Jednak konwersja nie wykonuje dodatkowej, głębokiej analizy danych siatki w celu identyfikowania części wielokrotnego użytku. Narzędzie do tworzenia zawartości i jego potok eksportu są decydującymi kryteriami właściwej konfiguracji stancingu.

Prostym sposobem sprawdzenia, czy informacje dotyczące stancingu są zachowywane podczas konwersji, jest sprawdzenie statystyk wyjściowych. W szczególności sprawdź numMeshPartsInstanced wartość. Jeśli wartość parametru numMeshPartsInstanced jest większa niż zero, siatki są współużytkowane przez wystąpienia.

Przykład: konfigurowanie instancingu w 3ds Max

Program Autodesk 3ds Max ma różne tryby klonowania obiektów o nazwie Copy, Instance i Reference. Tryby działają inaczej w przypadku instancingu w wyeksportowanym pliku fbx .

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

  • Kopiuj: W tym trybie siatka jest klonowana, więc nie jest używany żaden instancing ( = numMeshPartsInstanced0).
  • Wystąpienie: Dwa obiekty współdzielą tę samą siatkę, więc używane jest tworzenie instancingu ( = numMeshPartsInstanced1).
  • Odwołanie: Modyfikatory odrębne można stosować do geometrii, więc eksporter wybiera konserwatywne podejście i nie używa instancingu ( = numMeshPartsInstanced0).

Tryb kompozycji opartej na głębi

Jeśli dotyczy to pamięci, skonfiguruj moduł renderowania przy użyciu trybu kompozycji opartej na głębi. W tym trybie ładunek procesora GPU jest dystrybuowany na wiele procesorów GPU.

Zmniejsz rozmiar wierzchołka

Zgodnie z opisem w artykule Najlepsze rozwiązania dotyczące zmian formatu składnika dostosowanie formatu wierzchołka może zmniejszyć zużycie pamięci. Jednak ta opcja powinna być ostatnią wybraną opcją.

Rozmiary tekstur

W zależności od typu scenariusza ilość danych tekstury może przeważyć nad pamięcią używaną na potrzeby danych siatki. Modele fotogramów są kandydatami. Konfiguracja konwersji nie umożliwia automatycznego skalowania tekstur w dół. W razie potrzeby skalowanie tekstur musi być wykonywane jako krok przetwarzania wstępnego po stronie klienta. Jednak krok konwersji wybiera odpowiedni format kompresji tekstury:

  • Format pliku BC1 dla nieprzezroczystych tekstur kolorów
  • Format pliku BC7 dla tekstur kolorów źródłowych z kanałem alfa

Ponieważ format pliku BC7 ma dwa razy większy rozmiar pamięci w formacie pliku BC1, ważne jest, aby upewnić się, że tekstury wejściowe nie zapewniają niepotrzebnego kanału alfa.

Typowe przypadki użycia

Znalezienie dobrych ustawień importu dla określonego przypadku użycia może być żmudnym procesem. Z drugiej strony ustawienia konwersji mogą mieć znaczący wpływ na wydajność środowiska uruchomieniowego.

Niektóre określone klasy przypadków użycia kwalifikują się do określonych optymalizacji. Niektóre przykłady opisano w poniższych sekcjach.

Przypadek użycia: Wizualizacja architektoniczna lub duże mapy zewnętrzne

W przypadku scenariuszy obejmujących wizualizację architektury lub duże mapy zewnętrzne należy wziąć pod uwagę następujące czynniki:

  • Te typy scen wydają się być statyczne. Nie potrzebują ruchomych części. W związku z tym można ustawić sceneGraphMode wartość staticna , a nawet na none, i zwiększyć wydajność środowiska uruchomieniowego. W static trybie węzeł główny sceny można nadal przenosić, obracać i skalować. Może na przykład dynamicznie przełączać się między 1:1 skalowaniem (w przypadku widoku pierwszej osoby) a widokiem na górę tabeli.

  • Jeśli aplikacja nie używa płaszczyzn wycinania, flaga opaqueMaterialDefaultSidedness powinna zostać wyłączona. Wzrost wydajności zwykle wynosi od 20 procent do 30 procent. Nadal można używać płaszczyzn wyciętych, ale nie będzie tylnej twarzy, gdy spojrzysz na wewnętrzną część obiektu, która wydaje się nieintuiktywna. Aby uzyskać więcej informacji, zobacz renderowanie jednostronne.

Przypadek użycia: Modele fotogramów

Podczas renderowania modeli fotogramów zwykle nie potrzebujesz grafu sceny. W tym scenariuszu możesz wybrać opcję , aby ustawić wartość sceneGraphModenone. Ponieważ modele te rzadko zawierają złożony graf sceny, efekt wybrania tej opcji jest prawdopodobnie nieistotny. Ponieważ oświetlenie jest już pieczone w teksturach, nie jest potrzebne dynamiczne oświetlenie. W tym scenariuszu:

  • Ustaw flagęunlitMaterials, aby przekształcić true wszystkie materiały w materiały nielitowe.
  • Usuń niepotrzebne dane z formatu wierzchołka. Zobacz wcześniejszy przykład.

Przypadek użycia: Wizualizacja kompaktowych maszyn i innych

W takich przypadkach użycia modele często mają duży stopień szczegółowości w małej ilości. Renderer jest mocno zoptymalizowany pod kątem obsługi tych przypadków. Jednak większość optymalizacji opisanych we wcześniejszym przypadku użycia nie ma zastosowania tutaj. Optymalizacje obejmują:

  • Poszczególne części powinny być wybierane i wymienne, dlatego sceneGraphMode należy ustawić wartość dynamic.
  • Rzutowania promieni są zazwyczaj integralną częścią aplikacji, więc siatki kolizji muszą być generowane.
  • Wyciąć płaszczyzny wyglądają lepiej, gdy flaga opaqueMaterialDefaultSidedness jest włączona.

Przestarzałe funkcje

Ustawianie parametrów konwersji modelu przy użyciu konwersji specyficznej dla modelu Ustawienia.json jest nadal obsługiwane, ale jest przestarzałe. Zamiast tego użyj nazwy modelu> specyficznej dla <modelu. Konwersja Ustawienia.json nazwa pliku.

material-override Używanie ustawienia do identyfikowania pliku zastąpienia materiału w pliku ustawień konwersji jest nadal obsługiwane, ale jest przestarzałe. Zamiast tego należy użyć nazwy modelu> specyficznej dla <modelu. MaterialOverrides.json nazwa pliku.

Następne kroki