Konfigurowanie parametrów konwersji modelu
W tym artykule dowiesz się, jak skonfigurować parametry konwersji modelu.
Plik ustawień
Jeśli plik o nazwie <modelName>. ConversionSettings.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. ConversionSettings.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 ConversionSettings.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 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 parametruscaling
. 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 naSingleSided
wartość . 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.
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 jakdynamic
w 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, alestatic
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 nafalse
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ą formatABC*
i pasują do dowolnego klucza rozpoczynającego się odABC
. Obsługiwane typy wartości metadanych tobool
, ,int
float
istring
.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 plikuModel 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 NONE
wartość , 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 | 100 |
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 |
100 |
8_8_8_8_SIGNED_NORMALIZED |
Czteroskładnikowy bajt znormalizowany do [-1; 1] zakresu |
100 |
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
,tangent
ibinormal
: 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ć naNONE
wartość :normal
,tangent
ibinormal
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
ibinormal
są potrzebne tylko wtedy, gdy dowolny z oświetlonych materiałów używa normalnej tekstury mapy.
texcoord0
itexcoord1
: 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 normal
dane , tangent
i binormal
dla Ciebie. Dlatego użycie pamięci na wierzchołek wynosi position
(12 bajtów) + (8 bajtów) + texcoord0
(4 bajty) + normal
tangent
(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ć normal
wartości , tangent
i 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) totrue
.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 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 .
- Kopiuj: W tym trybie siatka jest klonowana, więc nie jest używany żaden instancing ( =
numMeshPartsInstanced
0
). - Wystąpienie: Dwa obiekty współdzielą tę samą siatkę, więc używane jest tworzenie instancingu ( =
numMeshPartsInstanced
1
). - Odwołanie: Modyfikatory odrębne można stosować do geometrii, więc eksporter wybiera konserwatywne podejście i nie używa instancingu ( =
numMeshPartsInstanced
0
).
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śćstatic
na , a nawet nanone
, i zwiększyć wydajność środowiska uruchomieniowego. Wstatic
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ść sceneGraphMode
none
. 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 pliku conversionSettings.json specyficznego dla modelu jest nadal obsługiwane, ale jest przestarzałe. Zamiast tego użyj nazwy modelu> specyficznej dla <modelu. ConversionSettings.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.