Los montajes de Nanite son un componente clave del sistema de follaje de Nanite y están diseñados para gestionar de forma eficiente el renderizado de geometría compleja y repetible, como las ramas y las frondas de un árbol. Se trata de una función complementaria de las mallas esqueléticas y estáticas que permite la creación de «microinstancias» en piezas pequeñas y muy detalladas.
Los montajes de Nanite son una parte fundamental del proceso de renderizado del follaje de Nanite. Sin ellos, no habría suficiente espacio en el disco mi memoria de transmisión para renderizar bosques de gran tamaño, como el que se muestra en la demo técnica de Unreal Fest: The Witcher 4.
En la escena anterior de la demostración, el espacio en disco para el árbol más grande pasó de ser de 3,5 gigabytes (Gb) a unos 29 megabytes (Mb). Se midió que la memoria de transmisión de uno solo de los árboles en una vista particular bajó de aproximadamente 36 Mb a alrededor de 2,7 Mb. Este tipo de guardado hace posible renderizar 500 000 instancias de decenas de variantes de árboles en una escena, con cada árbol muy detallado y con entre uno y diez millones de polígonos cada uno.
Cómo funcionan los montajes de Nanite
Los montajes de Nanite son una colección de mallas de piezas que se usan para construir el follaje de Nanite. Son mallas muy detalladas que se instancian en una sola pieza de follaje. Estas instancias transforman su posición, rotación y escala dentro del espacio local del montaje. Puedes combinar estas piezas con una malla base sin instancias, como el tronco de un árbol, para crear un follaje completo.
En el caso de las mallas esqueléticas, estas piezas se pueden vincular a uno o más huesos, con pesos individuales para controlar la deformación. Esto hace posible crear un follaje animado detallado que responda correctamente a la animación esquelética, como si reaccionara al viento dinámico.
En tiempo de ejecución, Nanite controla el nivel de detalle (LOD) del montaje de forma dinámica. Esto significa que, a poca distancia de la cámara, las piezas individuales de un montaje se renderizan como sus instancias de Nanite, conservando todos sus detalles geométricos. A medida que los objetos se hacen más pequeños en la pantalla, estas piezas se simplifican, de modo que el sistema de renderizado de Nanite reduce de forma inteligente la complejidad hasta que todo el montaje queda representado por un único conjunto simplificado. Esto garantiza un rendimiento óptimo.
Montajes de Nanite en comparación con la instanciación estándar
Para la instanciación estándar, hay un par de cosas que deben tenerse en cuenta: la sobrecarga de memoria y las distancias a las que se renderizarán.
La instanciación estándar tiene una sobrecarga de memoria significativa en los búferes de escena de la GPU para la cantidad de instanciación necesaria para bosques grandes y expansivos. Esto conlleva el renderizado de estas instancias a distancias cercanas y lejanas, y cada instancia visible requiere que se dibuje al menos un conjunto raíz. Instanciar miles de ramas en miles de árboles implicaría rasterizar millones de conjuntos, incluso en las situaciones más sencillas, para mantener un alto nivel de detalle.
En ambos casos, los montajes de Nanite pueden manejar esto mucho mejor en términos de rendimiento y fidelidad visual. Los montajes tienen una sobrecarga por instancia mucho menor, ya que no son más que una gran matriz de matrices. Esta desventaja en cuanto al rendimiento significa que no podrás hacer ciertas cosas con las piezas del montaje de Nanite que sí puedes hacer en un grafo de materiales usando datos por instancia. Eso sí, durante el proceso de compilación, los conjuntos raíz de las piezas del montaje se combinan para crear los niveles de resolución más bajos del montaje para que, a distancias muy lejanas, los montajes se reduzcan a un solo conjunto, que es como tener que usar tu propio nivel de detalle jerárquico (HLOD) interno.
A mayor distancia, estos niveles simplificados de instancias de piezas individuales se fusionan y su geometría se trata como parte de la malla base: las piezas pierden toda identidad como instancia. Por este motivo, los datos por instancia no se muestran en los grafos de materiales para las piezas de montaje.
Ejemplo de malla esquelética de montaje de Nanite
El siguiente ejemplo muestra los triángulos de la malla base del árbol del montaje esquelético (el tronco y las ramas grandes) almacenados en el propio recurso junto con las referencias a sus mallas de piezas del montaje (las ramitas unidas a las ramas). Estas ramitas son solo otros pequeños recursos de malla esquelética que se encuentran en la carpeta de contenido.
En el caso de los montajes de malla esquelética, cada instancia de pieza está vinculada a uno o más huesos del esqueleto de la malla base para que su punto de traslación se anime con la malla base.
En este momento, los vértices de las piezas del montaje esquelético no se articulan, por lo que solo se animan de forma rígida en su pose de vinculación.
Creación de montajes de Nanite
Unreal Engine incluye algunos complementos experimentales que pueden ayudarte a crear montajes de Nanite importándolos o creándolos dentro del editor. Estos complementos son:
| Nombre del complemento | Descripción | |
|---|---|---|
Nanite Assembly Editor Utilities | Se usa para crear un montaje de Nanite a partir de un blueprint. Expone la función al blueprint del editor para crear montajes esqueléticos y estáticos. | |
Procedural Content Generation Framework (PCG) Nanite Assemblies Interop | Se usa para generar un montaje de Nanite a partir de un grafo de generación procedimental de contenido para montajes de Nanite de malla estática. | |
Procedural Vegetation Editor | Este es un editor basado en grafos que se usa para crear vegetación de alta calidad apta para Nanite directamente en el editor. Aplica principios botánicos del mundo real que replican patrones de crecimiento naturales con personalización y variación para diferentes especies de vegetación. | |
USD Importer | Puedes importar montajes de Nanite directamente desde un archivo USD. Los esquemas para crear montajes se incluyen en el complemento USD Core. |
Importación de montajes de Nanite con USD
Puedes importar montajes de Nanite a Unreal Engine desde un archivo USD usando el complemento USD Importer. Los esquemas relevantes para la creación de montajes se incluyen en el complemento USD Core. Entre ellos, se encuentran NaniteAssemblyRootAPI, NaniteAssemblyExternalRefAPI y NaniteAssemblySkelBindingAPI.
Para obtener más información sobre cómo usar estos esquemas, consulta la documentación que se incluye con ellos en el código fuente.
Cómo usar el complemento Using Nanite Assembly Editor Utilities para la creación dentro del editor
En el editor, puedes crear montajes de Nanite usando el complemento Nanite Assembly Editor Utilities. Este complemento expone UNaniteAssemblyStaticMeshBuilder y UNaniteAssemblySkeletalMeshBuilder al blueprint, proporcionando un método potente de crear montajes a partir de recursos existentes.
El complemento también incluye acciones programadas del editor de niveles para:
Crea un montaje de malla estática a partir de una selección de mallas estáticas en el editor de niveles.
Crear un montaje de malla esquelética a partir de un actor de malla esquelética y cualquier componente de malla esquelética asociado a él.
Cómo usar el complemento Using Procedural Vegetation Editor para la creación dentro del editor
El complemento Procedural Vegetation Editor (PVE) es una potente herramienta basada en grafos que se integra con Unreal Engine y el marco de generación procedimental de contenido (PCG). Permite a los usuarios crear recursos de vegetación de alta calidad listos para Nanite directamente dentro del editor. PVE aprovecha los principios botánicos del mundo real, simulando la generación de plantas en función de la distribución de hormonas y las respuestas adaptativas.
Para obtener más información sobre esta herramienta y su uso, consulta Procedural Vegetation Editor.
Limitaciones conocidas
Estas son algunas limitaciones actuales que debes tener en cuenta:
No puedes crear montajes a partir de otros montajes. Actualmente el sistema admite una sola capa de instanciación.
La geometría no se duplica entre montajes que hacen referencia a las mismas mallas de piezas. Cada montaje almacena su propia copia de los datos de la pieza.
En el caso de las mallas esqueléticas, no puedes posar piezas individuales, ya que solo se renderizarán en su pose de vinculación.
En futuras actualizaciones se añadirá compatibilidad para instanciar animación en piezas individuales.