Compartilhar via


Configurar parâmetros de conversão de modelo

Nesse artigo, saiba como configurar parâmetros para uma conversão de modelo.

Arquivo de configurações

Se um arquivo chamado <modelName> .ConversionSettings.json for encontrado no contêiner de entrada ao lado do modelo de entrada <modelName>.<ext>, o arquivo será 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 esse 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
}

Um arquivo box.ConversionSettings.json pode se parecer com esse 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 a uma conversão de malha triangular.

Configurações para uma malha triangular

Ao converter 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: Esse parâmetro dimensiona um modelo uniformemente. A escala pode ser usado para aumentar ou diminuir um modelo, por exemplo, para exibir um modelo de construção em cima de uma mesa. A escala 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 for 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 escala de unidade. Nesse caso, a conversão dimensiona implicitamente o modelo para unidades de metros. A escala implícita fornecida pelo formato de origem é aplicado sobre o parâmetro scaling. O fator de dimensionamento final será aplicado aos vértices de geometria e às transformações locais dos nós do grafo de cena. O dimensionamento para a transformação da entidade raiz continua inalterado.

    Importante

    O Showcase e o Início Rápido podem compensar qualquer escala no tempo de conversão porque cada um deles tem um recurso de dimensionamento automático integrado. Para obter mais informações, confira o guia de solução de problemas.

  • recenterToOrigin: Esse parâmetro indica que um modelo deve ser convertido para que sua caixa delimitadora fique 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 materiais opacos são dupla face. Se essa suposição não for verdadeira para um modelo específico, esse parâmetro deve ser definido como SingleSided. Para obter mais informações, veja Renderização unilateral.

Desduplicação de material

  • deduplicateMaterials: Esse parâmetro habilita ou desabilita a desduplicação automática de materiais que compartilham as mesmas propriedades e texturas. A desduplicação ocorre depois que as substituições de material são processadas. Isso é habilitado por padrã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, qualquer material que exceda o limite é substituído por um material com erro vermelho.

A figura a seguir mostra dois cubos com 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, veja limites.

Captura de tela que mostra dois cubos de 68.921 triângulos coloridos e o efeito da desduplicação.

Parâmetros de espaço de cores

O mecanismo de renderização espera que os valores de cores estejam em um espaço linear. Se um modelo for definido usando o espaço gama, as seguintes opções devem ser definidas como true:

  • gammaToLinearMaterial: Converta cores de materiais do espaço gama para o espaço linear.
  • gammaToLinearVertex: Converter cores de vértices do espaço gama para o espaço linear.

Observação

Para os formatos de arquivo FBX, E57, PLY, LAS, LAZ e XYZ, essas configurações são definidas como true por 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 ter o parentesco redefinido de maneira arbitrária. Em tempo de execução, a hierarquia de nós é idêntica à estrutura no arquivo de origem.
    • static: semelhante a dynamic, mas os objetos no grafo de cena não podem ter o parentesco redefinido para outros objetos de maneira dinâmica em runtime. Para modelos dinâmicos que têm muitas partes móveis, como a vista de explosão, a opção dynamic gera um modelo que é mais eficiente para renderizar, mas o modo static ainda permite transformações de partes individuais. Se a reconstrução dinâmica não for necessária, a opção static é a mais adequada para modelos que possuem muitas partes individuais.
    • none: O gráfico de cena é recolhido em um objeto.

Cada modo tem um desempenho de runtime diferente. No modo dynamic, o custo de desempenho é dimensionado linearmente com o número de entidades no grafo, mesmo quando nenhuma parte for movida. Use o modo dynamic somente quando for necessário mover muitas partes ou subgráficos grandes simultaneamente. Um exemplo é a animação de exibição de explosão.

O modo static também exporta o grafo de cena completo. Consultas espaciais retornam partes individuais, e cada parte pode ser modificada por meio de substituições de estado. Com esse modo, a sobrecarga do runtime por objeto é insignificante. Esse modo é ideal para cenas grandes nas quais você precisa de inspeção por objeto e alterações ocasionais de transformação em partes individuais, mas sem reparentalidade de objetos.

O modo none tem a menor sobrecarga do runtime, além de tempos de carregamento um pouco melhores. Não é possível fazer a inspeção ou a transformação de objetos únicos nesse modo. Casos de uso são, por exemplo, modelos de fotogrametria que não começam com um gráfico de cena significativo.

Dica

Muitos aplicativos carregam vários modelos. Você deve otimizar os parâmetros de conversão para cada modelo dependendo de como você irá 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 o modo dynamic. No entanto, se você também quiser colocar o carro em um ambiente de showroom, você pode converter esse modelo usando sceneGraphMode definido como static, ou mesmo para 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 extra de conversão e também não aumenta o tamanho do arquivo de saída. O tempo de carregamento e o custo de execução de um modelo que possui malhas de colisão são apenas insignificantemente maiores. Você pode deixar esse sinalizador no padrão (habilitado), a menos que tenha um motivo específico para excluir um modelo de consultas espaciais.

Materiais não iluminados

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 é possível que surja uma ambiguidade quando um material não tiver texturas, valores especulares altos e uma cor de albedo não cinza. Nesse cenário, a conversão deve escolher entre priorizar os altos valores especulares, definindo um material altamente refletivo e metálico onde a cor do albedo se dissolve, ou priorizar a cor do albedo definindo algo, como em um plástico colorido brilhante. Por padrão, 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 como false para o efeito oposto.

Substituição do sistema de coordenadas

  • axis: Use esse parâmetro para substituir vetores unitários 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 essas informações 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 no 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 como forma de compensação. Por exemplo, "axis" : ["+x", "+z", "-y"] troca o eixo Z e o eixo Y e mantém a destreza do sistema de coordenadas invertendo a direção do eixo Y.

Metadados do nó

  • metadataKeys: Use esse parâmetro para especificar chaves de propriedades de metadados do nó que você deseja manter no resultado da conversão. Você pode especificar chaves exatas ou chaves curinga. As chaves curinga têm o formato ABC* e correspondem a qualquer chave que comece comABC. Os tipos de valor de metadados com suporte são bool, int, float e string.

    Para arquivos GLTF, esses dados vêm do objeto extras nos nós. Para arquivos FBX, esses dados vêm dos dados Properties70 em Model nodes. Para obter mais informações, consulte a documentação da sua ferramenta de ativos 3D.

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 QueryMetadataAsync assíncrona.

Formato de vértice

É possível ajustar o formato do vértice de uma malha para trocar precisão por economia de memória. Se o seu modelo tiver um consumo de memória menor, você poderá carregar modelos maiores ou obter melhor desempenho. No entanto, dependendo dos seus dados, o formato errado pode afetar significativamente a qualidade da renderização.

Cuidado

No entanto, dependendo dos seus dados, o formato diferente pode afetar significativamente a qualidade da renderização. Alterações podem facilmente introduzir artefatos de renderização, tanto óbvios quanto sutis. A menos que saiba o que deve procurar, você não deve alterar o padrão.

Você pode fazer esses ajustes:

  • Incluir ou excluir explicitamente fluxos de dados específicos.
  • Diminua a precisão dos fluxos de dados para reduzir o consumo de memória.

A seção vertex a seguir no arquivo JSON é opcional. Para cada parte que não seja 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 NONE, garante-se que a malha de saída não terá o respectivo fluxo.

Formatos de componentes por fluxo de vértice

A tabela a seguir descreve os formatos permitidos para os respectivos componentes:

Componente de vértice Formatos com suporte Uso 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 propriedade em materiais coloridos e materiais PBR, e vertexMix em materiais coloridos.
color1 8_8_8_8_UNSIGNED_NORMALIZED, NONE (padrão) Não utilizado. Deixar como padrão NONE.
normal 8_8_8_8_SIGNED_NORMALIZED (padrão), 16_16_16_16_FLOAT, NONE Usado para iluminação em Materiais PBR.
tangent 8_8_8_8_SIGNED_NORMALIZED (padrão), 16_16_16_16_FLOAT, NONE Usado para iluminação com mapas normais em materiais PBR.
binormal 8_8_8_8_SIGNED_NORMALIZED (padrão), 16_16_16_16_FLOAT, NONE Usado para iluminação com mapas normais em materiais PBR.
texcoord0 32_32_FLOAT (padrão), 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 (padrão), 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 com suporte

A tabela a seguir descreve as pegadas de memória dos formatos de componentes suportados:

Formatar Descrição Bytes por vértice
32_32_FLOAT Precisão de ponto flutuante total de dois componentes 8
16_16_FLOAT Precisão de meio ponto flutuante de dois componentes 4
32_32_32_FLOAT Precisão de ponto flutuante total de três componentes 12
16_16_16_16_FLOAT Precisão de ponto flutuante de quatro componentes 8
8_8_8_8_UNSIGNED_NORMALIZED Byte de quatro componentes, normalizado para o intervalo [0; 1] 4
8_8_8_8_SIGNED_NORMALIZED Byte de quatro componentes, normalizado para o intervalo [-1; 1] 4

Melhores práticas para alterações de formato de componente

  • position: raramente a precisão reduzida é suficiente. 16_16_16_16_FLOAT introduz artefatos de quantização perceptíveis, mesmo para modelos pequenos.
  • normal, tangent, e binormal: Normalmente, esses valores são alterados juntos. A menos que haja artefatos de iluminação perceptíveis que sejam resultado da quantificação normal, não há motivos para aumentar sua precisão. Em alguns casos, porém, esses componentes podem ser definidos para NONE:
    • normal, tangent, e binormal são necessários somente quando pelo menos um material no modelo deve ser aceso. No Azure Remote Rendering, esse cenário ocorre quando um material PBR é usado no modelo a qualquer momento.
    • tangent e binormal são necessários somente quando qualquer um dos materiais iluminados usa uma textura de mapa normal.
  • texcoord0 e texcoord1 : As coordenadas de textura podem usar precisão reduzida (16_16_FLOAT) quando seus valores permanecem no [0; 1] intervalo e 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, o qual tenha iluminação nas texturas. Tudo de que você precisa para renderizar o modelo são as posições de vértice e as coordenadas de textura.

Por padrão, o conversor precisa assumir que você pode querer usar materiais PBR em um modelo em algum momento, então ele gera dados normal, tangent, e binormal para você. Portanto, o uso de memória por vértice é position (12 bytes) + texcoord0 (8 bytes) + normal (4 bytes) + tangent (4 bytes) + binormal (4 bytes) = 32 bytes. Modelos maiores desse 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 normal, tangent, e binormal como NONE e definir texcoord0 como meia precisão (16_16_FLOAT), resultando em apenas 16 bytes por vértice. Quando os dados da malha são cortados pela metade, você pode carregar modelos maiores e o desempenho é potencialmente melhorado.

Configurações para nuvens de ponto

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 ponto são:

  • scaling: O mesmo significado das malhas triangulares.
  • recenterToOrigin: O mesmo significado das malhas triangulares.
  • axis: O mesmo significado das malhas triangulares. Os valores padrão são ["+x", "+y", "+z"], mas a maioria dos dados da nuvem de pontos é rotacionada em comparação ao 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, esse sinalizador indica se as cores dos pontos 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 oferecer suporte a 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 de memória ficar muito grande, isso poderá comprometer o desempenho da renderização ou fazer com que o modelo não carregue completamente. Este parágrafo discute algumas estratégias importantes para reduzir o volume de memória.

Observação

As otimizações a seguir se aplicam a malhas triangulares. Não é possível otimizar a saída de nuvens de pontos configurando as configurações de conversão.

Instanciação

Por exemplo, as malhas são reutilizadas para peças que têm transformações espaciais distintas, em vez de cada peça referenciar sua própria geometria exclusiva. A instanciação tem um impacto significativo no consumo de memória.

Exemplos de casos de uso de instanciação são os parafusos em um modelo de motor ou cadeiras em um modelo de arquitetura.

Observação

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 respeitará a instanciação se as partes estiverem marcadas adequadamente no arquivo de origem. No entanto, a conversão não realiza análises extras e profundas 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 instância.

Uma maneira simples de testar se as informações de instanciação são preservadas durante a conversão é observar as estatísticas de saída. Especificamente, verifique o valor numMeshPartsInstanced. Se o valor de numMeshPartsInstanced for maior que zero, as malhas serão compartilhadas entre instâncias.

Exemplo: configuração de instanciação em 3ds Max

O Autodesk 3ds Max possui modos distintos de clonagem de objetos chamados Cópia, Instância e Referência. Os modos funcionam de forma diferente para instanciação no arquivo .fbx exportado.

Captura de tela que mostra um exemplo de clonagem de um objeto usando o Autodesk 3ds Max.

  • Cópia: Nesse modo, a malha é clonada, portanto, nenhuma instância é usada (numMeshPartsInstanced = 0).
  • Instância: Os dois objetos compartilham a mesma malha, então a instanciação é usada (numMeshPartsInstanced = 1).
  • Referência: Modificadores distintos podem ser aplicados às geometrias, de modo que o exportador escolha uma abordagem conservadora e não use instanciação (numMeshPartsInstanced = 0).

Modo de composição com base em profundidade

Se a memória for uma preocupação, configure o renderizador usando o modo de composição baseado em profundidade. Nesse modo, o conteúdo de GPU é distribuído entre várias GPUs.

Diminuir tamanho do vértice

Conforme discutido em Melhores práticas para alterações de formato de componente, ajustar o formato do vértice pode diminuir o consumo de memória. No entanto, essa opção deve ser a última que você 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 forma de reduzir verticalmente as texturas de modo automático. Se necessário, a escala da 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 cores de origem com canal alfa

Como o formato de arquivo BC7 ocupa o dobro da 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 se qualificam 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 externos

Para cenários que envolvem visualização arquitetônica ou grandes mapas externos, considere os seguintes fatores:

  • Esses tipos de cenas tendem a ser estáticas. Eles não precisam de partes móveis. Dessa forma, você pode definir sceneGraphMode como static, ou até mesmo como none, e melhorar o desempenho do tempo de execução. No modo static, o nó raiz da cena ainda pode ser movido, girado e dimensionado. Por exemplo, ele pode alternar dinamicamente entre escala 1:1 (para visão em primeira pessoa) e visão de mesa.

  • Caso o aplicativo não use planos de corte, o sinalizador opaqueMaterialDefaultSidedness deverá ser desativado. O ganho de desempenho normalmente é de 20% a 30%. Você ainda pode usar planos de corte, mas não haverá uma face posterior quando você olhar para a parte interna de um objeto, o que parece contraintuitivo. Para obter mais informações, veja renderização unilateral.

Caso de uso: Modelos de fotogrametria

Ao renderizar modelos de fotogrametria, normalmente você não precisa de um gráfico de cena. Nesse cenário, você pode escolher definir sceneGraphMode para 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á presente nas texturas, nenhuma iluminação dinâmica é necessária. Neste cenário:

  • Defina o sinalizador unlitMaterials como true para transformar todos os materiais em materiais de cores não iluminados.
  • Remova dados desnecessários do formato de vértice. Veja o exemplo anterior.

Caso de uso: Visualização de máquinas compactas e outras

Nesses casos de uso, os modelos geralmente têm um alto grau de detalhes em um pequeno volume. O renderizador é altamente otimizado para lidar bem com esses casos. Entretanto, a maioria das otimizações descritas no caso de uso anterior não se aplicam aqui As otimizações incluem:

  • As partes individuais devem ser selecionáveis ​​e móveis, portanto sceneGraphMode deve ser definido como dynamic.
  • Os ray casts normalmente são parte integrante do aplicativo, de modo que as malhas de colisão devem ser geradas.
  • Os planos de corte ficam melhores quando o sinalizador opaqueMaterialDefaultSidedness está habilitado.

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 está obsoleta. Em vez disso, use o nome de arquivo <modelName>.ConversionSettings.json específico do modelo.

O uso de uma configuração material-override para identificar um arquivo de substituição de material no arquivo de configurações de conversão ainda é suportado, mas está obsoleto. Em vez disso, use o nome de arquivo <modelName>.MaterialOverrides.json específico do modelo.

Próximas etapas