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, pois o mecanismo de renderização espera medidores. Por exemplo, se um modelo for definido em centímetros, a aplicação de uma escala de 0,01 renderizará o modelo no tamanho correto. Alguns formatos de dados de origem (por exemplo, arquivos .fbx ) fornecem uma dica de dimensionamento de unidade. Nesse caso, a conversão dimensiona implicitamente o modelo para unidades de medidor. O dimensionamento implícito fornecido pelo formato de origem é aplicado sobre o scaling parâmetro. 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 Quickstart podem compensar qualquer dimensionamento de tempo de conversão, pois 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: 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 frente e verso. Se essa suposição não for verdadeira para um modelo específico, esse parâmetro deverá ser definido como SingleSided. Para obter mais informações, consulte Renderização de lado único.

Eliminação de duplicação de materiais

  • deduplicateMaterials: Este parâmetro habilita ou desabilita a eliminação automática de duplicação de materiais que compartilham as mesmas propriedades e texturas. A eliminação de duplicação acontece 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 eliminação de duplicação, o serviço tentará mesclar materiais que tenham propriedades semelhantes. Como última opção, todos os materiais que excederem o limite serã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 deduplicação, com 68.921 materiais coloridos. O exemplo certo é após a deduplicação, com 64.000 materiais coloridos. O limite é de 65.535 materiais. Para obter mais informações sobre limites de material, consulte limites.

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

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 deverão ser definidas como true:

  • gammaToLinearMaterial: Converta as cores do material do espaço gama para o espaço linear.
  • gammaToLinearVertex: Converter cores de vértice 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 true como 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 do nó é 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 visualização de explosão, a opção gera um modelo que é mais eficiente para renderizar, mas static o dynamic modo ainda permite transformações de peças individuais. Se a reparentalidade dinâmica não for necessária, a opção é a static 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 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 dynamic o modo 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. As 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 reparentação 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. Os 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ê 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 definido para , ou até mesmo para staticnone.

Parâmetros físicos

  • generateCollisionMesh: Se você precisar de suporte para consultas espaciais em um modelo, essa opção deverá 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 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 PBR (renderização com base física). Quando essa opção é definida, o conversor trata todos os materiais como materiais coloridos. Se você tem dados que já incorporam iluminação, como modelos criados por meio da fotogrametria, essa opção permite que você aplique 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 materiais 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, definir um material altamente reflexivo 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 para false o efeito oposto.

Substituição do 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 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 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 como forma de compensação. Por exemplo, "axis" : ["+x", "+z", "-y"] troca o eixo Z e o eixo Y e mantém a lateralidade do sistema de coordenadas invertendo a direção do eixo Y.

Metadados do nó

  • metadataKeys: Use esse parâmetro para especificar chaves das 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 com ABC. 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 Properties70 dados em Model nodes. Para obter mais informações, consulte a documentação da 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 assíncrona QueryMetadataAsync.

Formato de vértice

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

Cuidado

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 saiba o que deve procurar, você não deve alterar o padrão.

Você pode fazer os seguintes ajustes:

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

A seção a seguir vertex 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 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 (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 os ocupados 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 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

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, e binormal: Normalmente, tangentesses 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 como NONE:
    • normal, tangente binormal são necessários apenas quando pelo menos um material no 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 e binormal são necessários apenas quando qualquer um dos materiais iluminados usa uma textura de mapa normal.
  • texcoord0e : As coordenadas de textura podem usar precisão reduzida (16_16_FLOAT) quando seus valores permanecem no [0; 1] intervalo e texcoord1 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 tem que assumir que você pode querer usar materiais PBR em um modelo em algum momento, para que ele gere normal, tangente binormal dados para você. Assim, o uso de memória por vértice é position (12 bytes) + (8 bytes) + (4 bytes) + (4 bytes) + tangenttexcoord0normalbinormal (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 , e para , tangente binormal definir normaltexcoord0 para NONEmeia-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 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 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, este 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 dar 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 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 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 definindo configurações de conversão.

Instanciação

Na instancing, as malhas são reutilizadas para partes que têm transformações espaciais distintas, em vez de cada parte referenciar sua própria geometria única. A instanciação tem um impacto significativo no espaço ocupado pela 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 o consumo de memória (e, portanto, os tempos de carregamento) significativamente, 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 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 de numMeshPartsInstanced for maior que zero, as malhas serão compartilhadas entre as instâncias.

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

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

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

  • Cópia: nesse 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 ( = numMeshPartsInstanced1).
  • Referência: Modificadores distintos podem ser aplicados às geometrias, de modo que o exportador escolhe uma abordagem conservadora e não usa instanciação ( = numMeshPartsInstanced0).

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 Práticas recomendadas para alterações de formato de componente, ajustar o formato de vértice pode diminuir o volume de memória ocupado. No entanto, essa opção deve ser a última opção escolhida.

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, 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 compactaçã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 volume de memória do formato de arquivo BC1, é importante certificar-se de 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 ao ar livre

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

  • Esses tipos de cenas tendem a ser estáticos. Eles não precisam de partes móveis. Assim, você pode definir sceneGraphMode como static, ou até mesmo para , e melhorar o nonedesempenho do tempo de execução. No static 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 exibição em primeira pessoa) e uma exibição de tabela.

  • 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 cortados, mas não haverá um back-face quando você olhar para a parte interna de um objeto, o que parece contraintuitivo. Para obter mais informações, consulte Renderização unilateral.

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á 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 costumam ter um alto grau de detalhamento 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 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 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 configurações de material-overrideconversão ainda é suportado, mas foi preterido. Em vez disso, use o modelName> específico <do modelo. Nome do arquivo MaterialOverrides.json.

Próximas etapas