Configurar parâmetros de conversão de modelo
Neste artigo, saiba como configurar parâmetros para uma conversão de modelo.
Arquivo de configurações
Se um arquivo chamado <modelName>. ConversionSettings.json é encontrado no contêiner de entrada ao lado do modelo< de entrada modelName.<>ext>, em seguida, o arquivo é usado para fornecer configuração extra para o processo de conversão do modelo. Por exemplo, ao converter box.gltf, você usaria box. ConversionSettings.json para definir parâmetros para a conversão do modelo.
O conteúdo do arquivo de configurações de conversão JSON deve ter este esquema:
{
"$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
}
Uma caixa. O arquivo ConversionSettings.json pode se parecer com este exemplo:
{
"scaling" : 0.01,
"recenterToOrigin" : true,
"material-override" : "box_materials_override.json"
}
O esquema para converter uma malha triangular e uma nuvem de pontos é idêntico. No entanto, uma conversão de nuvem de pontos usa um subconjunto estrito de recursos em comparação com uma conversão de malha triangular.
Configurações para uma malha triangular
Quando você converte uma malha triangular, como de um arquivo .fbx , todos os parâmetros no exemplo de esquema mostrado na seção anterior afetam o resultado da conversão. As próximas seções fornecem uma explicação detalhada dos parâmetros.
Parâmetros de geometria
scaling
: Este parâmetro dimensiona um modelo uniformemente. O dimensionamento pode ser usado para aumentar ou reduzir um modelo, por exemplo, para exibir um modelo de construção em um tampo de mesa. O dimensionamento também é importante quando um modelo é definido em unidades diferentes de metros, porque o mecanismo de renderização espera metros. Por exemplo, se um modelo é definido em centímetros, a aplicação de uma escala de 0,01 renderiza o modelo no tamanho correto. Alguns formatos de dados de origem (por exemplo, arquivos .fbx ) fornecem uma dica de dimensionamento de unidade. Neste caso, a conversão escala implicitamente o modelo em unidades de medidor. O dimensionamento implícito fornecido pelo formato de origem é aplicado sobre oscaling
parâmetro. O fator de escala final é aplicado aos vértices de geometria e às transformações locais dos nós do gráfico de cena. O dimensionamento para a transformação da entidade raiz permanece inalterado.Importante
O Showcase e o Guia de início rápido podem compensar qualquer escalonamento de tempo de conversão porque cada um deles tem um recurso de dimensionamento automático integrado. Para obter mais informações, consulte o guia de solução de problemas.
recenterToOrigin
: Este parâmetro indica que um modelo deve ser convertido para que sua caixa delimitadora esteja centralizada na origem. Se um modelo de origem for deslocado para longe da origem, problemas de precisão de ponto flutuante podem causar artefatos de renderização. Centralizar o modelo pode ajudar nesse cenário.opaqueMaterialDefaultSidedness
: O mecanismo de renderização assume que os materiais opacos são de dupla face. Se essa suposição não for verdadeira para um modelo específico, esse parâmetro deve ser definido comoSingleSided
. Para obter mais informações, consulte Renderização de lado único.
Desduplicação de materiais
deduplicateMaterials
: Este parâmetro permite ou desativa a desduplicação automática de materiais que compartilham as mesmas propriedades e texturas. A desduplicação acontece depois que as substituições de material são processadas. Está ativada por predefinição.Se um modelo tiver mais de 65.535 materiais, mesmo após a desduplicação, o serviço tentará mesclar materiais que tenham propriedades semelhantes. Como última opção, todos os materiais que excederem o limite são substituídos por um material de erro vermelho.
A figura a seguir mostra dois cubos de 68.921 triângulos coloridos. O exemplo à esquerda é antes da desduplicação, com 68.921 materiais coloridos. O exemplo certo é após a desduplicação, com 64.000 materiais coloridos. O limite é de 65.535 materiais. Para obter mais informações sobre limites de material, consulte limites.
Parâmetros do espaço de cor
O mecanismo de renderização espera que os valores de cor estejam no espaço linear. Se um modelo for definido usando espaço gama, as seguintes opções devem ser definidas como true
:
gammaToLinearMaterial
: Converta cores de material do espaço gama para o espaço linear.gammaToLinearVertex
: Converta cores de vértice do espaço gama para o espaço linear.
Nota
Para os formatos de arquivo FBX, E57, PLY, LAS, LAZ e XYZ, essas configurações são definidas como true
padrão. Para todos os outros formatos de arquivo, o padrão é false
.
Parâmetros de cena
sceneGraphMode
: Define como o gráfico de cena no arquivo de origem é convertido.dynamic
(padrão): Todos os objetos no arquivo são expostos como entidades na API e podem ser transformados e reparentados arbitrariamente. No tempo de execução, a hierarquia do nó é idêntica à estrutura no arquivo de origem.static
: Semelhante aodynamic
, mas os objetos no gráfico de cena não podem ser reparentados para outros objetos dinamicamente em tempo de execução. Para modelos dinâmicos que têm muitas partes móveis, como a visualização de explosão, a opção gera um modelo que é mais eficiente para renderizar, masstatic
odynamic
modo ainda permite transformações de peças individuais. Se a reparentalidade dinâmica não for necessária, a opção é astatic
mais adequada para modelos que têm muitas peças individuais.none
: O gráfico de cena é recolhido em um objeto.
Cada modo tem um desempenho de tempo de execução diferente. No dynamic
modo, o custo de desempenho é dimensionado linearmente com o número de entidades no gráfico, mesmo quando nenhuma parte é movida. Use dynamic
o modo apenas quando for necessário mover muitas partes ou subgráficos grandes simultaneamente. Um exemplo é a animação de visualização de explosão.
O static
modo também exporta o gráfico de cena completo. As consultas espaciais retornam partes individuais e cada parte pode ser modificada por meio de substituições de estado. Com esse modo, a sobrecarga de tempo de execução por objeto é insignificante. Este modo é ideal para cenas grandes em que você precisa de inspeção por objeto e alterações de transformação ocasionais em partes individuais, mas sem reparentação de objetos.
O none
modo tem a menor sobrecarga de tempo de execução e também tempos de carregamento ligeiramente melhores. A inspeção ou transformação de objetos individuais não é possível neste modo. Os casos de uso são, por exemplo, modelos de fotogrametria que não começam com um gráfico de cena significativo.
Gorjeta
Muitos aplicativos carregam vários modelos. Você deve otimizar os parâmetros de conversão para cada modelo, dependendo de como você vai usá-lo. Por exemplo, se você quiser exibir o modelo de um carro para o usuário desmontar e inspecionar em detalhes, primeiro converta-o usando dynamic
o modo. No entanto, se você também quiser colocar o carro em um ambiente de show room, você pode converter esse modelo usando sceneGraphMode
set para , ou até mesmo para static
none
.
Parâmetros físicos
generateCollisionMesh
: Se você precisar de suporte para consultas espaciais em um modelo, essa opção deve ser habilitada. A geração de malha de colisão não adiciona tempo de conversão extra e também não aumenta o tamanho do arquivo de saída. O tempo de carregamento e o custo de tempo de execução de um modelo que tem malhas de colisão são apenas insignificantemente maiores. Você pode deixar esse sinalizador para o padrão (habilitado), a menos que tenha um motivo específico para excluir um modelo de consultas espaciais.
Materiais não iluminados
unlitMaterials
: Por padrão, a conversão cria materiais de renderização com base física (PBR). Quando esta opção é definida, o conversor trata todos os materiais como materiais de cor. Se você tiver dados que já incorporam iluminação, como modelos criados por fotogrametria, essa opção permite que você imponha rapidamente a conversão correta para todos os materiais. Você não precisará substituir cada material individualmente.
Conversão de formatos FBX anteriores e modelos de material Phong
fbxAssumeMetallic
: Versões anteriores do formato FBX definem seus materiais usando um modelo de material Phong. O processo de conversão deve inferir como esses materiais são mapeados para o modelo PBR do renderizador. Normalmente, esse mapeamento funciona bem, mas uma ambiguidade pode surgir quando um material não tem texturas, altos valores especulares e uma cor de albedo não cinza. Neste cenário, a conversão deve escolher entre priorizar os altos valores especulares, definindo um material altamente reflexivo e metálico onde a cor do albedo se dissolve, ou priorizando a cor do albedo definindo algo, como em um plástico colorido brilhante. Por defeito, o processo de conversão assume que valores altamente especulares implicam um material metálico em cenários ambíguos. Você pode definir esse parâmetro parafalse
o efeito oposto.
Substituir o sistema de coordenadas
axis
: Use este parâmetro para substituir vetores de unidade do sistema de coordenadas. Os valores padrão são["+x", "+y", "+z"]
. Em teoria, o formato FBX tem um cabeçalho no qual esses vetores são definidos, e a conversão usa essa informação para transformar a cena. O formato GLTF também define um sistema de coordenadas fixas. Na prática, alguns ativos têm informações incorretas em seu cabeçalho ou foram salvos usando uma convenção de sistema de coordenadas diferente. Essa opção permite que você substitua o sistema de coordenadas para compensar. Por exemplo,"axis" : ["+x", "+z", "-y"]
troca o eixo Z e o eixo Y e mantém a mão do sistema de coordenadas invertendo a direção do eixo Y.
Metadados do nó
metadataKeys
: Use este parâmetro para especificar chaves de propriedades de metadados de nó que você deseja manter no resultado da conversão. Você pode especificar chaves exatas ou chaves curinga. As teclas curinga têm o formatoABC*
e correspondem a qualquer tecla que comece comABC
. Os tipos de valor de metadados suportados sãobool
, ,int
float
estring
.Para arquivos GLTF, esses dados vêm do objeto extras em nós. Para arquivos FBX, esses dados vêm dos
Properties70
dados emModel nodes
. Para obter mais informações, consulte a documentação da sua 3D Asset Tool.
Ao carregar um modelo com metadados habilitados, a lista de entradas de metadados de uma entidade específica pode ser recuperada por meio da função assíncrona QueryMetadataAsync.
Formato Vertex
É possível ajustar o formato de vértice para uma malha para trocar precisão para economia de memória. Se o seu modelo tiver um menor espaço de memória, pode carregar modelos maiores ou obter um melhor desempenho. No entanto, dependendo dos seus dados, o formato errado pode afetar significativamente a qualidade da renderização.
Atenção
Alterar o formato do vértice deve ser uma última opção quando os modelos não cabem mais na memória ou quando você estiver otimizando para o melhor desempenho possível. As alterações podem facilmente introduzir artefatos de renderização, tanto óbvios quanto sutis. A menos que você saiba o que procurar, você não deve alterar o padrão.
Você pode fazer estes ajustes:
- Inclua ou exclua explicitamente fluxos de dados específicos.
- Diminua a precisão dos fluxos de dados para reduzir o espaço ocupado pela memória.
A seção a seguir vertex
no arquivo JSON é opcional. Para cada parte que não é especificada explicitamente, o serviço de conversão volta à sua configuração padrão.
{
...
"vertex" : {
"position" : "32_32_32_FLOAT",
"color0" : "NONE",
"color1" : "NONE",
"normal" : "NONE",
"tangent" : "NONE",
"binormal" : "NONE",
"texcoord0" : "32_32_FLOAT",
"texcoord1" : "NONE"
},
...
}
Ao forçar um componente a , é garantido que a NONE
malha de saída não tem o respetivo fluxo.
Formatos de componentes por fluxo de vértice
A tabela a seguir descreve os formatos permitidos para os respetivos componentes:
Componente de vértice | Formatos suportados | Utilização em materiais |
---|---|---|
position |
32_32_32_FLOAT (padrão), 16_16_16_16_FLOAT |
Posição do vértice. Deve estar sempre presente. |
color0 |
8_8_8_8_UNSIGNED_NORMALIZED (padrão), NONE |
Cores de vértice. Veja useVertexColor a propriedade tanto em materiais de cor e materiais PBR, quanto vertexMix em materiais de cor. |
color1 |
8_8_8_8_UNSIGNED_NORMALIZED , NONE (padrão) |
Não utilizado. Deixe como padrão NONE . |
normal |
8_8_8_8_SIGNED_NORMALIZED (por defeito), 16_16_16_16_FLOAT , NONE |
Usado para iluminação em materiais PBR. |
tangent |
8_8_8_8_SIGNED_NORMALIZED (por defeito), 16_16_16_16_FLOAT , NONE |
Usado para iluminação com mapas normais em materiais PBR. |
binormal |
8_8_8_8_SIGNED_NORMALIZED (por defeito), 16_16_16_16_FLOAT , NONE |
Usado para iluminação com mapas normais em materiais PBR. |
texcoord0 |
32_32_FLOAT (por defeito), 16_16_FLOAT , NONE |
Primeiro slot de coordenadas de textura. Texturas individuais como albedo e mapa normal podem usar o slot 0 ou 1, que é definido no arquivo de origem. |
texcoord1 |
32_32_FLOAT (por defeito), 16_16_FLOAT , NONE |
Segundo slot de coordenadas de textura. Texturas individuais como albedo e mapa normal podem usar o slot 0 ou 1, que é definido no arquivo de origem. |
Formatos de componentes suportados
A tabela a seguir descreve as pegadas de memória dos formatos de componentes suportados:
Formato | Descrição | Bytes por vértice |
---|---|---|
32_32_FLOAT |
Precisão total de ponto flutuante de dois componentes | 8 |
16_16_FLOAT |
Precisão de meio ponto flutuante de dois componentes | 4 |
32_32_32_FLOAT |
Precisão total de ponto flutuante de três componentes | 12 |
16_16_16_16_FLOAT |
Precisão de meio ponto flutuante de quatro componentes | 8 |
8_8_8_8_UNSIGNED_NORMALIZED |
Byte de quatro componentes, normalizado para o [0; 1] intervalo |
4 |
8_8_8_8_SIGNED_NORMALIZED |
Byte de quatro componentes, normalizado para o [-1; 1] intervalo |
4 |
Práticas recomendadas para alterações de formato de componentes
position
: É raro que a precisão reduzida seja suficiente.16_16_16_16_FLOAT
Introduz artefatos de quantização percetíveis, mesmo para modelos pequenos.normal
, ebinormal
: Normalmente,tangent
esses valores são alterados juntos. A menos que existam artefatos de iluminação percetíveis que resultam da quantização normal, não há razão para aumentar sua precisão. Em alguns casos, porém, esses componentes podem ser definidos comoNONE
:normal
,tangent
ebinormal
são necessários apenas quando pelo menos um material do modelo deve ser aceso. Na Renderização Remota do Azure, esse cenário ocorre quando um material PBR é usado no modelo a qualquer momento.tangent
ebinormal
são necessários apenas quando qualquer um dos materiais iluminados usa uma textura de mapa normal.
texcoord0
e : As coordenadas de textura podem usar precisão reduzida (16_16_FLOAT
) quando seus valores permanecem no[0; 1]
intervalo etexcoord1
quando as texturas endereçadas têm um tamanho máximo de 2.048 × 2.048 pixels. Se esses limites forem excedidos, a qualidade do mapeamento de textura diminui.
Exemplo
Suponha que você tenha um modelo de fotogrametria, que tem iluminação embutida nas texturas. Tudo o que é necessário para renderizar o modelo são posições de vértice e coordenadas de textura.
Por padrão, o conversor tem que assumir que você pode querer usar materiais PBR em um modelo em algum momento, para que ele gere normal
, tangent
e binormal
dados para você. Assim, o uso de memória por vértice é position
(12 bytes) + (8 bytes) + (4 bytes) + (4 bytes) + tangent
texcoord0
normal
binormal
(4 bytes) = 32 bytes. Modelos maiores deste tipo podem facilmente ter muitos milhões de vértices, resultando em modelos que podem ocupar vários gigabytes de memória. Essas grandes quantidades de dados afetam o desempenho e você pode até ficar sem memória.
Sabendo que você nunca precisa de iluminação dinâmica no modelo, e sabendo que todas as coordenadas de textura estão no [0; 1]
intervalo, você pode definir , e binormal
para , tangent
e definir normal
texcoord0
para NONE
meia precisão (16_16_FLOAT
), resultando em apenas 16 bytes por vértice. Quando os dados de malha são cortados pela metade, você pode carregar modelos maiores e o desempenho é potencialmente melhorado.
Configurações para nuvens de pontos
Quando uma nuvem de pontos é convertida, apenas um pequeno subconjunto de propriedades do esquema é usado. Outras propriedades são ignoradas, a menos que sejam especificadas.
As propriedades que têm um efeito na conversão de nuvem de pontos são:
scaling
: O mesmo significado que para malhas triangulares.recenterToOrigin
: O mesmo significado que para malhas triangulares.axis
: O mesmo significado que para malhas triangulares. Os valores padrão são["+x", "+y", "+z"]
, mas a maioria dos dados da nuvem de pontos é girada em comparação com o próprio sistema de coordenadas do renderizador. Para compensar, na maioria dos casos["+x", "+z", "-y"]
corrige a rotação.gammaToLinearVertex
: Semelhante às malhas triangulares, esta bandeira indica se as cores de ponto devem ser convertidas do espaço gama para o espaço linear. O valor padrão para formatos de nuvem de pontos (arquivos E57, PLY, LAS, LAZ e XYZ) étrue
.generateCollisionMesh
: Semelhante às malhas triangulares, para suportar consultas espaciais, você deve habilitar esse sinalizador.
Otimizações de memória
O consumo de memória do conteúdo carregado pode se tornar um gargalo no sistema de renderização. Se a carga útil da memória se tornar muito grande, isso pode comprometer o desempenho de renderização ou fazer com que o modelo não carregue completamente. Este parágrafo discute algumas estratégias importantes para reduzir a pegada de memória.
Nota
As otimizações a seguir se aplicam a malhas triangulares. Não é possível otimizar a saída de nuvens de pontos definindo as configurações de conversão.
Instanciação
Na instancing, as malhas são reutilizadas para peças que têm transformações espaciais distintas, em vez de cada parte fazer referência à sua própria geometria única. A instanciação tem um impacto significativo na pegada de memória.
Exemplos de casos de uso para instanciação são os parafusos em um modelo de motor ou cadeiras em um modelo arquitetônico.
Nota
A instanciação pode melhorar significativamente o consumo de memória (e, portanto, os tempos de carregamento), mas as melhorias no desempenho de renderização são insignificantes.
O serviço de conversão respeita a instanciação se as partes forem marcadas de acordo com o arquivo de origem. No entanto, a conversão não realiza uma análise extra e profunda dos dados de malha para identificar peças reutilizáveis. A ferramenta de criação de conteúdo e seu pipeline de exportação são os critérios decisivos para a configuração adequada da instanciação.
Uma maneira simples de testar se as informações de instanciação são preservadas durante a conversão é examinar as estatísticas de saída. Especificamente, verifique o numMeshPartsInstanced
valor. Se o valor for numMeshPartsInstanced
maior que zero, as malhas serão compartilhadas entre instâncias.
Exemplo: Configuração de instanciação no 3ds Max
O Autodesk 3ds Max tem modos distintos de clonagem de objetos chamados Copiar, Instância e Referência. Os modos funcionam de forma diferente para instanciação no arquivo .fbx exportado.
- Cópia: Neste modo, a malha é clonada, portanto, nenhuma instanciação é usada (
numMeshPartsInstanced
=0
). - Instância: Os dois objetos compartilham a mesma malha, portanto, a instanciação é usada ( =
numMeshPartsInstanced
1
). - Referência: Modificadores distintos podem ser aplicados às geometrias, de modo que o exportador escolhe uma abordagem conservadora e não usa instanciação ( =
numMeshPartsInstanced
0
).
Modo de composição baseado em profundidade
Se a memória for um problema, configure o renderizador usando o modo de composição baseado em profundidade. Neste modo, a carga útil da GPU é distribuída por várias GPUs.
Diminuir o tamanho do vértice
Conforme discutido em Práticas recomendadas para alterações de formato de componentes, ajustar o formato de vértice pode diminuir o espaço ocupado pela memória. No entanto, esta opção deve ser a última opção que escolher.
Tamanhos de textura
Dependendo do tipo de cenário, a quantidade de dados de textura pode superar a memória usada para dados de malha. Os modelos de fotogrametria são candidatos. A configuração de conversão não fornece uma maneira de reduzir automaticamente as texturas. Se necessário, o dimensionamento de textura deve ser feito como uma etapa de pré-processamento do lado do cliente. Mas a etapa de conversão escolhe um formato de compressão de textura adequado:
- Formato de arquivo BC1 para texturas de cores opacas
- Formato de arquivo BC7 para texturas de cor de origem com canal alfa
Como o formato de arquivo BC7 tem o dobro do espaço de memória do formato de arquivo BC1, é importante garantir que as texturas de entrada não forneçam um canal alfa desnecessário.
Casos de uso típicos
Encontrar boas configurações de importação para um caso de uso específico pode ser um processo tedioso. Por outro lado, as configurações de conversão podem ter um impacto significativo no desempenho do tempo de execução.
Algumas classes específicas de casos de uso qualificam-se para otimizações específicas. Alguns exemplos são descritos nas seções a seguir.
Caso de uso: visualização arquitetônica ou grandes mapas ao ar livre
Para cenários que envolvem visualização arquitetônica ou grandes mapas externos, considere os seguintes fatores:
Este tipo de cenas tendem a ser estáticas. Eles não precisam de peças móveis. Assim, você pode definir
sceneGraphMode
comostatic
, ou até mesmo para , e melhorar onone
desempenho do tempo de execução. Nostatic
modo, o nó raiz da cena ainda pode ser movido, girado e dimensionado. Por exemplo, ele pode alternar dinamicamente entre a escala 1:1 (para visualização em primeira pessoa) e uma visualização de mesa.Se o aplicativo não usar aviões cortados, a
opaqueMaterialDefaultSidedness
bandeira deve ser desligada. O ganho de desempenho normalmente é de 20% a 30%. Você ainda pode usar planos cortados, mas não haverá uma face traseira quando você olhar para a parte interna de um objeto, o que parece contraintuitivo. Para obter mais informações, consulte Renderização de lado único.
Caso de uso: Modelos de fotogrametria
Quando você renderiza modelos de fotogrametria, normalmente não precisa de um gráfico de cena. Nesse cenário, você pode optar por definir sceneGraphMode
como none
. Como esses modelos raramente contêm um gráfico de cena complexo, o efeito de escolher essa opção provavelmente é insignificante. Como a iluminação já está incorporada nas texturas, não é necessária iluminação dinâmica. Neste cenário:
- Defina o
unlitMaterials
sinalizador paratrue
transformar todos os materiais em materiais de cor apagada. - Remova dados desnecessários do formato de vértice. Veja o exemplo anterior.
Caso de uso: Visualização de máquinas compactas e outros
Nestes casos de uso, os modelos geralmente têm um alto grau de detalhe em um pequeno volume. O renderizador é altamente otimizado para lidar bem com esses casos. No entanto, a maioria das otimizações descritas no caso de uso anterior não se aplica aqui. As otimizações incluem:
- As peças individuais devem ser selecionáveis e móveis, por isso
sceneGraphMode
devem ser definidas comodynamic
. - Os moldes de raios são normalmente uma parte integrante da aplicação, por isso as malhas de colisão devem ser geradas.
- Os aviões cortados ficam melhores quando a
opaqueMaterialDefaultSidedness
bandeira está ativada.
Recursos preteridos
A definição de parâmetros de conversão de modelo usando o nome de arquivo conversionSettings.json não específico do modelo ainda é suportada, mas foi preterida. Em vez disso, use o modelName> específico <do modelo. Nome do arquivo ConversionSettings.json.
O uso de uma configuração para identificar um arquivo de substituição de material no arquivo de material-override
configurações de conversão ainda é suportado, mas ele foi preterido. Em vez disso, use o modelName> específico <do modelo. Nome do arquivo MaterialOverrides.json.