As Montagens do Nanite são um componente chave do sistema Folhagem do Nanite que é projetado para lidar com eficiência com a renderização de geometria complexa e repetível, como os galhos e as frondes de uma árvore. É uma funcionalidade complementar para malhas do esqueleto e malhas estático , permitindo a microinstanciação de peças pequenas e altamente detalhadas.
As Montagens do Nanite são uma parte crucial do pipeline de renderização da Folhagem do Nanite. Sem eles, não haveria espaço em disco suficiente ou memória de transmissão para renderizar essas florestas de mundos grandes, como a mostrada na demonstração técnica da Unreal Fest The Witcher 4.
Na cena acima da demonstração, o espaço em disco da maior árvore passou de 3,5 gigabytes (Gb) para cerca de 29 megabytes (Mb). Medimos que a memória de transmissão de apenas uma das árvores em uma visualização específica caiu de aproximadamente 36 MB para cerca de 2,7 MB. Esse tipo de economia possibilita a renderização de 500 mil instâncias de dezenas de variantes de árvores em uma cena, com cada árvore sendo altamente detalhada e tendo entre um e 10 milhões de polígonos cada.
Como funcionam as montagens do Nanite
Montagens do Nanite são uma coleção de malhas de peças usadas para compilar Folhagem do Nanite. Elas são malhas altamente detalhadas instanciadas em uma única folhagem. Essas instâncias transformar a posição, a rotação e a escala no espaço local do conjunto. Você pode combinar essas partes com uma malha base não instanciada , como um tronco de árvore, para criar uma peça completa de folhagem.
Para malhas do esqueleto, essas partes podem ser anexadas a um ou mais ossos, com pesos individuais para lidar com a deformação. Isso possibilita a criar de folhagem animada e detalhada que responde corretamente à animação do esqueleto, reagindo, por exemplo, ao vento dinâmico .
No tempo de execução, o Nanite processa o nível de detalhe (LOD) da montagem dinamicamente. Isso significa que, em distâncias curtas da câmera, as partes individuais de uma montagem são renderizadas como instâncias Nanite , preservando todos os detalhes geométricos. À medida que os objetos ficam menores na tela, essas partes são simplificadas, de modo que o sistema de renderização do Nanite reduz a complexidade de forma inteligente até que todo o conjunto seja representado por um único agrupamento simplificado. Isso garante um ótimo desempenho.
Montagens do Nanite versus instanciação padrão
Para a instanciação padrão , há algumas coisas que devem ser consideradas: a sobrecarga de memória e as distâncias em que elas serão renderizadas.
A instanciação padrão tem uma sobrecarga significativa de memória nos buffers de cena da GPU para a quantidade de instanciação necessária para florestas grandes e expansivas. Com isso, vem a renderização dessas instâncias em distâncias próximas e distantes, com cada instância visível exigindo pelo menos um agrupamento raiz para ser desenhado. Instanciar milhares de ramificações em milhares de árvores significaria rasterizar milhões de agrupamentos até mesmo nas situações mais simples para manter um alto nível de detalhe.
Nos dois casos, as Montagens do Nanite podem lidar com isso muito melhor em termos de desempenho e manutenção da fidelidade visual. Os conjuntos têm uma sobrecarga muito menor por instância, pois são apenas uma grande matriz de matrizes. A desvantagem no desempenho significa que você não poderá fazer algumas coisas nas peças de uma Montagem do Nanite que faria em um gráfico de material usando dados por instância. No entanto, isso significa que, durante o tempo de compilação Modo Criativo: construir , agrupamentos raiz de peças de montagens são combinados para criar os níveis de resolução mais baixa do conjunto, para que estejam muito distantes, os conjuntos são simplificados em um único agrupamento, que é semelhante a ter usar seu próprio nível de detalhe hierárquico interno (HLOD).
Em distâncias maiores, esses níveis simplificados de instâncias de partes individuais são combinados, e suas geometrias são tratadas como parte da malha base. As partes perdem qualquer identidade de instância. Por esse motivo, os dados por instância não são expostos nos gráficos de material das peças da montagem.
Exemplo de uma malha esquelética de montagem do Nanite
O exemplo a seguir mostra que os triângulos da malha base da árvore do conjunto esqueleto (o tronco e as ramificações grandes) são armazenados no próprio ativo com referências às malhas das peças do conjunto (galhos anexados às ramificações). Esses galhos são outros pequenos ativos da malha do esqueleto encontrados na pasta de conteúdo.
Nos conjuntos de malha do esqueleto , cada instância de parte é vinculado a um ou mais ossos no esqueleto da malha base para que seu pivô seja animado com a malha base .
Por enquanto, os vértices das peças da montagem do esqueleto não são revestidos. Eles só têm uma animação rígida na pose de vinculação.
Criando montagens do Nanite
A Unreal Engine inclui alguns plugins experimentais que podem ajudar você a criar Montagens do Nanite importando-os ou criando-os no editor. Estes plugins são:
| Nome do plugin | Descrição | |
|---|---|---|
Utilitários do Editor de Montagem do Nanite | Ele é usado para criar uma Montagem do Nanite a partir de Blueprint. Ele expõe a funcionalidade ao editor de Blueprint para criar montagens estático e de esqueleto. | |
Interoperação de montagens do Nanite da estrutura de geração de conteúdo processual (PCG) | Ele é usado para gerar uma Montagem do Nanite a partir de um Gráfico de PCG para Montagens do Nanite de Malha Estática. | |
Editor de Vegetação Procedural | Este é um editor baseado em gráficos usado para criar vegetação de alta qualidade pronta para Nanite diretamente no editor. Ele aplica princípios botânicos do mundo real que replicam padrões de crescimento natural com personalização e variação para diferentes espécies de vegetação. | |
Importador de USD | Você pode importar montagens do Nanite diretamente de um arquivo USD . Os esquemas para criação de montagens estão incluídos no plugin USD Core. |
Importando montagens do Nanite com USD
Você pode importar conjuntos do Nanite de um arquivo USD para a Unreal Engine usando o plugin USD Importer . Os esquemas relevantes para a criação de montagens estão incluídos no plugin USD Core. Elas incluem NaniteAssemblyRootAPI, NaniteAssemblyExternalRefAPI e NaniteAssemblySkelBindingAPI.
Para obter mais informações sobre como usar esses esquemas, consulte a documentação fornecida com eles no código-fonte.
Uso dos utilitários do editor de Montagem do Nanite para criação no editor
No editor, você pode criar montagens usando o plugin Utilities do Editor de Montagem do Nanite. Este plugin expõe UNaniteAssemblyStaticMeshBuilder e UNaniteAssemblySkeletalMeshBuilder para Blueprint, fornecendo uma maneira poderosa de criar montagens a partir de ativos existentes.
O plugin também inclui ações de script do editor de nível para:
Crie um conjunto de malha estático a partir de uma seleção de malhas estático no editor de nível.
Criar um conjunto de malha do esqueleto a partir de um ator da malha do esqueleto e de todos os componentes da malha do esqueleto anexados a ele.
Como usar o Editor de vegetação procedural para criação no editor
O Editor de Vegetação Procedural (PVE) é uma poderosa ferramenta gráfica integrada à Unreal Engine e ao Geração de Conteúdo Procedural (PCG) framework. Ele permite que os criar ativos de vegetação de alta qualidade prontos para o Nanite diretamente no editor. O PVE aproveita princípios botânicos do mundo real, simulando a geração de plantas com base na distribuição de hormonios e respostas adaptativas.
Para obter mais informações sobre essa ferramenta e seu uso, consulte Editor de Vegetação Procedural.
Limitações conhecidas
Estas são algumas limitações atuais a serem observadas:
Não é possível criar conjuntos a partir de outros conjuntos. No momento, o sistema é compatível com uma única camada de instanciação.
A geometria não é duplicada entre montagens que referência às mesmas malhas parciais. Cada montagem armazena uma cópia própria dos dados da peça.
Para malhas do esqueleto, não é possível posicionar partes individuais. Elas só serão renderizadas em sua pose de vinculação.
As atualizações futuras incluirão suporte para instanciar animação em partes individuais.