Nanite es el sistema de geometría virtualizada de Unreal Engine 5 que utiliza un nuevo formato de malla interna y tecnología de renderizado para los detalles a escala de píxeles y un gran número de objetos. Funciona inteligentemente solo en los detalles que se pueden percibir y nada más. El formato de datos de Nanite también está altamente comprimido y son compatibles con la transmisión de granularidad fina con un nivel de detalle automático.
Beneficios de Nanite
- Múltiples órdenes de magnitud de aumento en la complejidad de la geometría, recuentos de triángulos y de objetos más altos de lo que ha sido posible antes en tiempo real
- Los presupuestos de fotogramas ya no están limitados por conteos de polígonos, llamadas de dibujo y utilización de memoria de la malla
- Ahora es posible importar directamente artes con recursos de calidad de película, como esculturas ZBrush y escaneos de fotogrametría
- Us detalles formados por muchos polígonos en lugar de integrar detalles en texturas de normal Map
- El nivel de detalle (LOD) se maneja automáticamente y ya no requiere una configuración manual para los LOD de mallas individuales
- La pérdida de calidad es rara o inexistente, especialmente con transiciones LOD
Aunque las ventajas pueden ser revolucionarias, existen límites prácticos que aún permanecen. Por ejemplo, los recuentos de instancias, los triángulos por malla, la complejidad del material, la resolución de salida y el rendimiento deben medirse cuidadosamente para cualquier combinación de contenido y hardware. Nanite continuará ampliando sus capacidades y mejorando el rendimiento en futuras versiones de Unreal Engine.
Diferencias entre una malla Nanite y una malla estática
Una malla Nanite es una malla estática con Nanite habilitado. Una malla Nanite sigue siendo esencialmente una malla triangular con mucho nivel de detalle y compresión aplicada a sus datos. Además de eso, Nanite utiliza un sistema completamente nuevo para renderizar ese formato de datos de una manera extremadamente eficiente.
Todo lo que se requiere para que una malla estática aproveche Nanite es un indicador para habilitarlo. Crear contenido para Nanite no es diferente de las mallas tradicionales, excepto que Nanite puede manejar órdenes de magnitud de más triángulos e instancias de lo que es posible para la geometría renderizada tradicionalmente. Mueve la cámara lo suficientemente cerca y Nanite dibujará los triángulos de origen originales que se importaron.
Las mallas Nanite son compatibles con los UV y los colores de vértice. Los materiales se asignan a secciones de la malla de modo que esos materiales pueden utilizar diferentes modelos de sombreado y efectos dinámicos que se pueden hacer en los sombreadores. La asignación de materiales se puede intercambiar dinámicamente, al igual que cualquier otra Malla estática, y Nanite no requiere ningún proceso para integrar los materiales.
No es necesario utilizar lasTexturas virtuales con Nanite, pero son muy recomendables. Las texturas virtuales son una característica ortogonal de Unreal Engine con objetivos similares para los datos de textura que Nanite logra con los datos de la malla.
Trabajar con Nanite debería ser familiar para los flujos de trabajo de Mallas Estáticas, pero hay muchas cosas que aún no son compatibles. Consulta la sección Funciones compatibles de esta página para obtener más detalles.
¿Cómo funciona Nanite?
Nanite se integra de la mejor manera posible en los flujos de trabajo del motor existente, mientras utiliza un enfoque novedoso para almacenar y representar datos de malla.
- Durante la importación — las mallas se analizan y se dividen en grupos jerárquicos de grupos de triángulos.
- Durante el renderizado — los grupos se intercambian sobre la marcha con diferentes niveles de detalle según la vista de la cámara y se conectan perfectamente sin grietas a los grupos vecinos dentro del mismo objeto. Los datos se transmiten por encargo para que solo los detalles visibles deban residir en la memoria. Nanite se ejecuta en su propio pase de renderizado que omite por completo las llamadas de dibujo tradicionales. Los modos de visualización se pueden utilizar para inspeccionar la canalización de Nanite.
Dado que Nanite se basa en la capacidad de transmitir rápidamente datos de malla desde el disco por encargo. Se recomiendan unidades de estado sólido (o SSD) para el almacenamiento en tiempo de ejecución.
¿Para qué tipos de mallas debe utilizarse Nanite?
Nanite generalmente debe habilitarse siempre que sea posible. Cualquier malla estática que lo tenga habilitado normalmente se renderizará más rápido y ocupará menos memoria y espacio en disco.
Más específicamente, una malla es un candidato especialmente bueno para Nanite si:
- Contiene muchos triángulos o tiene triángulos que serán muy pequeños en la pantalla
- Tiene muchas instancias en la escena
- Actúa como un oclusor principal de otra geometría Nanite
- Proyecta sombras usando Mapas de sombras virtuales
Un ejemplo de una excepción a estas reglas es algo así como una esfera celeste: sus triángulos serán grandes en la pantalla, no ocluye nada y solo hay uno en la escena. Por lo general, estas excepciones son raras y la pérdida de rendimiento por utilizar Nanite con ellas es bastante mínima, por lo que la recomendación es no preocuparse demasiado por dónde no se debe habilitar Nanite si ya es compatible con el caso de uso.
Algunos casos de uso no son compatibles con Nanite actualmente. Consulta la sección Funciones compatibles de esta página para obtener más detalles.
Cómo habilitar mallas compatibles con Nanite
Nanite se puede habilitar en la geometría compatible de las siguientes maneras:
- Al importar
- Utilizando editores de mallas individuales
- [Selección por grupos en el Navegador de contenido] (#enablingnaniteonmeshesinbatches)
La conversión de geometría a Nanite requiere algo de tiempo de procesamiento para cada malla. En proyectos grandes, la utilización de un caché de datos derivados (DDC) compartido es especialmente útil si hay muchos recursos de Nanite. Consulta la documentación DDC compartida para obtener más información.
Cómo importar una malla estática
Al importar una malla destinada a nosotros con Nanite, marca la casilla Construir Nanite.
Se recomienda deshabilitar la propiedad Generar Lightmap de los UV cuando no se utiliza iluminación precalculada con Lightmass.
Cuando esta propiedad está habilitada, la geometría altamente detallada agrega un tiempo significativo a la importación y creación de datos de malla estática. La propiedad también agrega un canal UV adicional, que incluye una cantidad significativa de datos para mallas muy densas. Si tu proyecto no requiere iluminación integrada, no hay necesidad de incurrir en ningún costo.
Cómo habilitar Nanite en recursos
En los casos en los que ya tienes el proyecto completo con contenido en el que deseas habilitar Nanite, tienes dos opciones: habilitar recursos en lotes utilizando el Explorador de contenido o habilitar recursos individuales a través de sus propios editores.
Habilitar Nanite en mallas en grupos
Para los lotes de recursos de malla estática para los que deseas habilitar Nanite, utiliza el Explorador de contenido para seleccionarlos todos. Haz clic con el botón derecho y selecciona Nanite > Habilitar en el menú contextual.
Habilitar Nanite en mallas individuales
Abre el editor de cualquier malla que sea compatible con Nanite, como mallas estáticas y [Colecciones de geometría] (https://docs.unrealengine.com/en-US/making-interactive-experiences/Physics/Destruction/) (Mallas de fractura realizadas por la física de Chaos) y habilita Nanite a través del panel Detalles.
En el Editor de malla estática, localiza Configuración de Nanite y marca la casilla Habilitar compatibilidad con Nanite.
En el Editor de colecciones de geometría, busca la sección Nanite y marca la casilla Habilitar Nanite.
Funciones compatibles de Nanite
Esta sección describe la mejor manera de trabajar con Nanite en un proyecto de Unreal Engine con detalles sobre qué es y qué no es compatible y las posibles limitaciones.
Geometría
Nanite se puede habilitar en mallas estáticas y colecciones de geometría.
Una malla habilitada para Nanite se puede utilizar con los siguientes tipos de componentes:
- Malla Estática
- Malla estática instanciada
- Malla estática instanciada jerárquica
- Colección Geometría
- Pintor de follaje
- Césped del Terreno
Nanite tiene compatibilidad limitado para la deformación de mallas rígidas. Nanite es compatible con la traslación dinámica, la rotación y el escalado no uniforme de estas mallas, ya sea dinámico o estático. Esto significa mover cualquier posición de una malla de Nanite de una manera que sea más compleja de lo que se puede expresar en una sola multiplicación de matriz de 4x3, aplicada uniformemente a toda la malla.
La deformación está limitada con:
- Desplazamiento de posición del Mundo (Beta) en Materiales
- Los cuadros delimitadores utilizados para los grupos de selección de oclusión no actualizan ni expanden sus cuadros delimitadores en función de la deformación. Esto significa que cada vez que una superficie se desplaza hacia afuera, de modo que cubriría donde estaba anteriormente, existe una buena posibilidad de que se ocluya y se vea rota.
- El follaje que utiliza WPO es menos problemático porque el follaje está lleno de agujeros y realmente no puede ocluirse.
La deformación no es compatible con:
- Animación esquelética
- Objetivos de transformación
- Mallas spline
Las mallas habilitadas para Nanite actualmente no son compatibles:
- Profundidad personalizada o plantilla
- Pintura de vértices en instancias.
- Esto significa específicamente colores pintados por instancia utilizando el Modo de pintura de malla del editor, pero Nanite es compatible con colores de vértice en la malla original.
La cantidad máxima de instancias que pueden estar presentes en la escena está fijada a 16 millones de instancias, lo que incluye todas las instancias que se transmiten, no solo las habilitadas para utilizarse con Nanite. Solo las instancias transmitidas se cuentan para el total.
Las tangentes por vértice no se almacenan desde la Malla estática cuando está habilitada para Nanite. En cambio, el espacio tangente se deriva implícitamente en el sombreador de píxeles. Los datos tangentes no se almacenan para reducir el tamaño de los datos. Esta diferencia en el espacio tangente usando este enfoque podría causar discontinuidades en los bordes. Sin embargo, este problema en particular no ha demostrado ser significativo y hay planes para que las tangentes de vértice sean compatibles en una versión futura.
Materiales
Nanite es compatible con materiales que tienen su modo de fusión establecido en Opaco y Con máscara. Cuando se detecta un tipo de material no admitido, se asigna un material predeterminado a la malla habilitada para Nanite y se coloca una advertencia en el Registro de salida con información adicional.
Notas adicionales sobre las características del material:
- Las mallas compatibles con Nanite pueden recibir calcomanías proyectadas en sus superficies, pero no admiten Calcomanías de malla, que requieren materiales para utilizar un Modo de Fusión Translúcido.
- La casilla de verificación Cuadro de conector no es compatible.
- Se admiten el nodo Interpolador de vértices y los UV personalizados, pero se evaluarán tres veces por píxel.
Cómo renderizar
Las siguientes funciones de renderizado no son admitidas actualmente:
- Filtrado específico de vista de objetos utilizando:
- Radio de pantalla mínimo
- Eliminación de distancia
- Renderización hacia adelante
- Representación estéreo para Realidad Virtual
- Pantalla dividida
- Multimuestreo Anti-Aliasing (MSAA)
- Canales de iluminación
- Trazado de rayos contra mallas Nanite
- La malla de respaldo se utiliza para mallas habilitadas para Nanite de manera predeterminada. Baja el parámetro Error relativo de respaldo en el editor de malla estática para utilizar más triángulos de la malla de origen.
- (Experimental) El soporte inicial para trazado de rayos nativo de mallas Nanite está habilitado con la variable de consola
r.RayTracing.Nanite.Mode 1. Esto conserva todos los detalles mientras utilizas significativamente menos memoria de GPU que las mallas de respaldo sin errores.
-
Algunos modos de visualización aún no admiten la vista de mallas Nanite
Ten cuidado con algunos modos de visualización en el editor de mallas estáticas cuando veas geometría muy detallada. Ver Normales y UV puede causar problemas con el rendimiento del editor.
Plataformas compatibles
Actualmente, Nanite es compatible con PlayStation 5, Xbox Series S|X y PC con tarjetas gráficas que cumplan con estas especificaciones, utilizando los controladores más recientes con DirectX 12 con Shader Model 6 (SM6):
- NVIDIA: Tarjetas de generación Maxwell o más nuevas
- AMD: Tarjetas de generación GCN o más nuevas
- Se admiten todas las versiones más recientes de Windows 10 (más reciente que la versión 1909.1350) y Windows 11 con soporte para [DirectX 12 Agility SDK] (https://devblogs.microsoft.com/directx/gettingstarted-dx12agility).
- Windows 10 versión 1909 — El número de revisión debe exceder o ser igual a .1350.
- Windows 10 versión 2004 y 20H2 — El número de revisión debe exceder o ser igual a .789.
- DirectX 12 con Shader Model 6.6 atomics o Vulkan (VK_KHR_shader_atomic_int64)
- Controladores de gráficos más recientes
PlayStation 4 y Xbox One también son compatibles con Nanite, pero la compatibilidad con estas plataformas actualmente se considera experimental. Se espera que el rendimiento de Nanite en estas plataformas con contenido de muy alta fidelidad no cumpla con los requisitos de un juego enviable.
Ajustes de precisión y malla de respaldo de Nanite
Las mallas estáticas incluyen propiedades adicionales que controlan la precisión de la representación de Nanite y la malla alternativa generada a partir de la malla de detalle completo.
Estos ajustes se encuentran en el panel Detalles del editor de malla estática en la sección Configuración de Nanite.
La configuración de Nanite incluye las siguientes propiedades:
| Propiedad | Descripción |
|---|---|
| Habilitar compatibilidad con Nanite | Permite utilizar esta malla con Nanite y generar una malla alternativa en situaciones en las que no se puede usar Nanite. |
| Preservar Área | Permite que las mallas de Nanite que perderían área de superficie debido a la simplificación, redistribuyan esa área perdida a los triángulos restantes al dilatar los bordes de los límites abiertos. Esto es más útil para el follaje donde las hojas tienden a convertirse en triángulos y quads disjuntos debido a la simplificación. El efecto de esta configuración es aumentar la escala de cada hoja. Para las cintas de geometría, como las puntas del césped, tienes el efecto de hacerlas más espesas. Esta configuración debe habilitarse en todas las mallas de follaje y nada más. |
| Precisión de posición | Elige la precisión con la que debes utilizar esta malla al generar la malla Nanite. Automáticamente determina la precisión adecuada según el tamaño de la malla. La precisión se puede anular para mejorar la precisión u optimizar la huella del disco. |
| Residencia mínima | Establece el tamaño de bytes de la memoria que esta malla siempre debe mantener en la memoria y transmite el resto. Los valores más altos requieren más memoria, pero para algunas mallas, esto puede mitigar la aparición de problemas emergentes de transmisión. |
| Mantener porcentaje de triángulos | El porcentaje de triángulos a mantener de la malla de origen. Reduce este porcentaje para optimizar el tamaño del disco. |
| Error relativo de recorte | Establece la cantidad máxima de error relativo permitido eliminar para la malla Nanite. Se eliminan todos los detalles de la malla de origen con menos impacto visual que esta cantidad de error relativa. El error relativo no tiene tamaño unitario y es relativo al tamaño de la malla. De forma predeterminada, Nanite almacena todos los triángulos de la malla de origen original. |
| Porcentaje de triángulo de respaldo | Establece el porcentaje de triángulos que quedan al reducir la malla de origen para Nanite. Esto se convierte en la representación gruesa (o malla de respaldo) que se utiliza cuando no se pueden obtener todos los detalles de los datos de Nanite, como las plataformas que no admiten la renderización de Nanite, o cuando no es práctico usar datos de Nanite como con una colisión compleja. |
| Error de respaldo relativo | Establece la cantidad máxima de error relativo que se puede eliminar para la malla de respaldo. Se eliminan todos los detalles en la malla de respaldo generada con menos impacto visual que esta cantidad de error relativa. El error relativo no tiene tamaño unitario y es relativo al tamaño de la malla. |
| Nombre de archivo de importación de origen | La ruta del archivo utilizada para importar una malla de Alta resolución para usarla con Nanite. La versión de alta resolución de la malla se utiliza en lugar de LOD0 en sistemas que pueden beneficiarse de una geometría más detallada, como Nanite y Modelado de geometría en Unreal Engine. |
Precisión de vértice
Nanite cuantifica las posiciones de los vértices de la malla para maximizar la densidad de la memoria y minimizar el espacio ocupado en el disco. El tamaño del paso de cuantificación es una potencia de dos que se puede seleccionar para que coincida con los requisitos de las mallas individuales utilizando la propiedad Precisión de posición. De forma predeterminada, Automáticamente elige la precisión adecuada según el tamaño de la malla y la densidad de tu triángulo. Puedes anular manualmente seleccionando un tamaño de precisión para mejorarlo u optimizar el espacio del disco.
La qantinización es una forma de compresión con pérdida. La compresión con pérdida es particularmente desafiante cuando se trabaja con piezas de malla modular u otras mallas que tienen límites compartidos. Especialmente cuando esos límites deben alinearse perfectamente para no introducir agujeros o grietas en la geometría.
Para garantizar la coherencia, la cuantificación se realiza en coordenadas de objeto no normalizadas centradas alrededor del origen de la malla. Esto asegura que la cuantización nunca provoque grietas cuando la malla utiliza la misma configuración de precisión, y la traslación entre el centro de la malla es un múltiplo de esa precisión.
Cómo reducir datos
Hay ocasiones en las que necesitarás reducir la cantidad de datos que almacena Nanite para optimizar el tamaño del disco. Nanite incluye configuraciones que te permiten recortar los datos detallados de una malla Nanite almacenada en cualquier momento durante la producción, lo que significa que puedes sobrepasar la calidad de manera segura al principio y ajustar en consecuencia más adelante.
Para recortar los datos detallados, querrás utilizar las propiedades Mantener porcentaje de triángulo y Recortar error relativo. Puedes pensar en ellos como una opción prediezmada antes de almacenarse como una malla Nanite. En el caso de Nanite, no es necesario que los detalles sean uniformes en toda la malla. Primero elimina los datos menos significativos y es más parecido a la compresión con pérdida.
Utiliza Mantener porcentaje de triángulo para establecer el porcentaje de triángulos que se mantendrán de la malla de origen.
Utiliza Recortar error relativo para establecer la cantidad máxima de error relativo que se permite al reducir los datos de la malla de origen. Se elimina cualquier triángulo que, al hacerlo, incurriría en un error relativo menor que esta cantidad. Otra forma de pensar en esto es que se recortan todos los detalles con menos impacto visual que este valor. El error relativo no tiene un tamaño de unidad y es relativo al tamaño de la malla.
Los valores predeterminados para ambas propiedades son tales que nada se reduce de forma predeterminada y Nanite almacena todos los triángulos de la malla de origen.
Recortar estos datos es importante para reducir el tamaño del disco (en otras palabras, el tamaño de la descarga), no para mejorar el rendimiento. Consulta la sección Tamaño de datos a continuación para obtener más información sobre este tema.
Malla de respaldo
Muchas partes de Unreal Engine necesitan acceso al búfer de vértices tradicional proporcionado por las mallas renderizadas tradicionalmente. Cuando Nanite está habilitado para una malla estática, genera una representación aproximada (llamada Malla de respaldo) de la malla altamente detallada que es accesible y se utiliza donde los datos de Nanite no pueden estar. La malla de respaldo es la malla generada que se utiliza cuando el renderizado de Nanite no es compatible. También se utiliza en situaciones en las que no sería ideal usar la malla de detalle completo, como cuando se necesita una colisión compleja, se requiere el uso de mapas de luz para iluminación integrada y para reflejos de trazado de rayos de hardware con Lumen.
La propiedad Porcentaje de triángulo de respaldo representa el porcentaje de triángulos de la malla de origen que se utilizan para generar la malla de respaldo. Puedes especificar el porcentaje de triángulos para mantener entre 0 y 100 por ciento, donde los porcentajes grandes mantienen más detalles de la malla original.
Error relativo de respaldo establece la cantidad máxima de error relativo que se permite al eliminar detalles de la malla de origen. Cualquier triángulo que, si se elimina, incurriría en un error relativo menor que esta cantidad, se elimina y los detalles de menor impacto visual son los primeros en desaparecer. El error relativo no tiene tamaño unitario y es relativo al tamaño de la malla.
Por ejemplo, si quisieras que tu malla no tuviera ningún diezmado, usarías un Porcentaje de triángulo de respaldo de 100 y un Error relativo de respaldo de 0.
En la comparación a continuación, se encuentra la malla Nanite altamente detallada creada a partir de la malla de origen que se compara con la configuración predeterminada de una malla alternativa Nanite generada.


Utiliza el error relativo de respaldo para especificar cuánto del detalle original se retiene de la malla de origen y el porcentaje de respaldo para establecer la cantidad de ese detalle que se utiliza.
En la siguiente comparación, la malla de respaldo mantiene el 100 % del porcentaje del triángulo de respaldo, pero ajusta el error relativo de respaldo para utilizar más triángulos de la malla de origen original. Al ajustar estos valores, puede utilizar los detalles de Nanite para Triángulos de Nanite en la ventana gráfica como indicador al cambiar sus valores.


Visualización de malla alternativa
En el editor de malla estática, puedes alternar entre la malla Nanite detallada y la malla Nanite de respaldo utilizando la opción Nanite de respaldo de las ventanas gráficas en el menú desplegable Mostrar. Alternativamente, puedes utiliza la tecla de acceso rápido Ctrl + N para alternar rápidamente entre las dos opciones de visualización.
Botón deslizante de malla alternativa de Nanite del editor de malla estática](static-mesh-editor-viewport-show-nanite-fallback-mesh.png)
Cómo utilizar el LOD de malla alternativa personalizadas para mallas habilitadas para Nanite
La malla de respaldo se utiliza para las características del motor, como la colisión compleja por polígonos, el trazado de rayos, la integración ligera, etc. También se utiliza para plataformas que no son compatibles con Nanite. Al generar la malla de respaldo, una malla habilitada para Nanite siempre usa la ranura LOD0 de la malla de origen para generar automáticamente la malla alternativa. Sin embargo, hay momentos en los que es deseable utilizar una malla de respaldo especificada manualmente, o una serie de LOD tradicionales, en lugar de uno generado automáticamente.
Este nivel de control te permitiría utilizar Nanite en un proyecto, pero también controlar directamente la geometría que se ve en los reflejos del trazado de rayos, o en plataformas que no son compatibles con Nanite.
Sigue los pasos a continuación para especificar tu propia malla alternativa personalizada o para utilizar una serie de LOD:
- Establece el Porcentaje de triángulo de respaldo en 0 para que la malla de respaldo sea lo más pequeña posible, ya que se ignorará al utilizar este enfoque.
- Agrega uno o más LOD a la malla utilizando este procedimiento de configuración de LOD tradicional.
- Utiliza el menú desplegable Importación de LOD para Importar nivel de LOD 1 desde la sección Configuración de LOD.
- Establece el LOD mínimo en 1 en la sección Configuración de LOD. Esto hace que se ignore la malla de respaldo generada por Nanite.
La colisión compleja presenta un caso especial. Utiliza la propiedad LOD para colisión en Configuración general para especificar qué LOD debe utilizarse para la colisión. Se puede utilizar cualquier LOD para la colisión, incluido LOD0.
Es posible que este enfoque en particular no sea factible para hacer que los proyectos de Nanite sean automáticamente compatibles con plataformas que no lo son con Nanite, y deben probarse y evaluarse para tu proyecto.
Nanite maneja de manera eficiente una gran cantidad de instancias, pero si Nanite está deshabilitado, podría haber una cantidad abrumadora de llamadas de dibujo para la canalización de procesamiento tradicional. Puedes probar esto en tu proyecto para ver si es factible utilizando r.Nanite 0 para activar y desactivar el soporte de Nanite.
Consulta la sección Variables y comandos de la consola de esta página para obtener más información.
Cómo trabajar con contenido habilitado para Nanite
En la mayoría de los casos, Nanite escala extremadamente bien dentro de la resolución de pantalla. Lo hace basándose en dos técnicas: nivel de granularidad fina y eliminación selectiva de oclusión. Por lo general, esto significa que, independientemente de la complejidad geométrica de los datos de origen en la escena, la cantidad de triángulos que Nanite intenta dibujar en la pantalla es consistente y proporcional a la cantidad de píxeles.
Nanite sigue el principio de diseño de que no sirve de nada dibujar muchos más triángulos que píxeles.
Sin embargo, hay algunos casos de contenido que rompe las técnicas que utiliza Nanite para escalar, pero esto no significa que no deba utilizarse en absoluto para este contenido, o que no se procesará más rápido que la canalización de procesamiento tradicional. Solo significa que para este tipo de contenido, escalar con píxeles, y no con la complejidad de la escena, ya no se aplica a ellos. Utiliza las funciones Generación de perfiles proporcionadas por Unreal Engine para monitorear este tipo de situaciones cuando ocurren.
Geometría agregada
La geometría agregada es aquella que tiene muchas partes inconexas que se convierten en un volumen en la distancia, como el cabello, las hojas de los árboles y el césped. Este tipo de geometría rompe el nivel de detalle y las técnicas de selección de oclusión de Nanite.
Nanite es inherentemente una estructura de nivel de detalle jerárquico basada en poder simplificar triángulos pequeños en triángulos más grandes y elegir el más grueso cuando determina que la diferencia es menor de lo que se puede percibir. Para superficies continuas, esto funciona bien, pero no para geometría agregada que, desde la distancia, parece más una nube opaca parcial que una superficie sólida.
Es más probable que Nanite determine que no puede reducir la geometría agregada tan agresivamente como lo haría con las superficies sólidas típicas, lo que da como resultado que se dibujen más triángulos para la misma cantidad de píxeles cubiertos.
Otra optimización que rompe la geometría agregada es Eliminación de oclusión. Aunque es muy detallada, su granularidad no es por píxel. La geometría que está llena de agujeros, y peor aún, capas sobre capas de geometría llena de agujeros, provoca una sobredimensión porque es necesario acumular muchas capas de profundidad antes de que esa área en la pantalla bloquee cualquier cosa detrás de ella. Una forma de pensar en esto es considerar una región píxeles en la pantalla de de 8x8 y cuántas capas de profundidad deben dibujarse antes de que se llene cada píxel. Una sobredimensión significa que para la misma cantidad de píxeles cubiertos, Nanite intenta dibujar más triángulos, lo que hace que se procese más lentamente.
El follaje es el caso más obvio de causar problemas con el sacrificio de oclusión, pero aun así, no significa que Nanite no deba utilizarse en absoluto en mallas de follaje. Consulta la sección Follaje utilizando nanite a continuación para obtener más información.
Es bueno experimentar con diferentes casos de uso y ver qué funciona bien para tus proyectos. Utiliza herramientas de generación de perfiles para confirmar el buen rendimiento de Nanite con este tipo de mallas.
Superficies estrechamente agrupadas
La eliminación de oclusión con mallas tradicionales hace que los flujos de trabajo de kitbashing sean casi imposibles a gran escala debido a limitaciones prácticas. La naturaleza detallada de la eliminación selectiva de oclusiones con Nanite hace posible utilizar este tipo de flujos de trabajo durante el desarrollo con menos preocupaciones.
Como se explica en la sección anterior de Geometría agregada, el sobredimensionamiento puede provenir de superficies ocultas que están muy cerca de las superficies visibles debajo de ellas. Si alguna geometría está enterrada muy por debajo de la superficie visible, Nanite la detecta y la elimina de manera eficiente, de modo que se puede considerar gratuita. Sin embargo, cuando hay geometría apilada que está muy cerca de la superficie superior, Nanite no puede determinar cuál está arriba o abajo, lo que hace que ambos se dibujen simultáneamente.
Este problema particular con la selección es el peor de los casos en el que Nanite no sabe qué superficie está en la parte superior y, en su lugar, simplemente dibuja todas las capas. La imprecisión como esta se escala con el tamaño de la pantalla y la distancia, por lo que si bien 10 centímetros pueden separar las capas y verse bien cerca de la superficie, las distancias más lejanas pueden hacer que la diferencia entre estas sea más pequeña que un píxel, lo que resulta en una sobredimensión.


En el siguiente ejemplo, si la cámara se mueve para mirar hacia abajo en el área donde se encuentra el personaje, la visualización de Nanite Sobredimensión muestra cómo se renderizan estas superficies apiladas. Las áreas más brillantes indican que está ocurriendo más sobredimensión en esas áreas que en otras.
La visualización de sobredimensión es la forma más efectiva de encontrar problemas de este tipo. Si bien se debe esperar cierta cantidad de sobredimensionamiento, cantidades excesivas dan como resultado que los costos de rasterización y eliminación de Nanite sean más altos, y la escala de Nanite independientemente de la complejidad de la escena se volverá menos efectiva en el proceso.
Normales facetados y de borde duro
Un problema a tener en cuenta es cuando se importan mallas muy detalladas que tienen normales facetadas, lo que significa que la normal entre dos polígonos diferentes no se suavizó. Este problema es común y fácil de pasar por alto, y se debe tener precaución para evitarlo, ya que las cantidades bajas de vértices compartidos en una malla pueden volverse significativamente más costosas tanto en el rendimiento de la representación como en el tamaño de los datos.
Idealmente, el número de vértices de una malla debe ser menor que el número de triángulos que tiene. Si la relación es de 2:1 o superior, es probable que haya un problema, especialmente si esto da como resultado un recuento alto de triángulos. Tener una proporción de 3:1 significa que la malla está completamente facetada donde cada triángulo tiene sus propios tres vértices, ninguno de los cuales se comparte con otro triángulo. La mayoría de las veces, esto se debe a que las normales no son iguales porque no están suavizadas.
Con eso en mente, más vértices significan más datos para almacenar. También significa más trabajo de transformación de vértices, y las proporciones superiores a 2:1 caen en algunas rutas de renderizado lentas. La utilización intencional en el modelado de superficies duras no debería causar ningún problema y no hay razón para no utilizarlos. Sin embargo, las mallas muy densas con facetas accidentalmente al 100% son mucho más caras de lo previsto. Otra cosa a tener en cuenta son las normales importadas en superficies densas de tipo orgánico generadas en otros paquetes DCC que tienen umbrales normales duros que pueden ser sensibles en mallas de polígonos inferiores, pero pueden agregar gastos innecesarios con Nanite.
Por ejemplo, en las dos mallas siguientes, la malla de la izquierda tiene normales facetadas mientras que la de la derecha tiene normales suavizadas. Al compararlos con la visualización de Triángulos de Nanite, hay diferencias notables en la cantidad de triángulos que utiliza Nanite para dibujarlos. El facetado de la izquierda dibuja significativamente más triángulos que el suavizado de la derecha.
| Mallas habilitadas para Nanite con normales facetadas (izquierda) y suavizadas (derecha) | Visualización de triangulo de mallas habilitadas para Nanite con normales facetadas (izquierda) y suavizadas (derecha) |
| Haz clic en la imagen para el tamaño completo. | Haz clic en la imagen para tamaño el completo. |
Follaje utilizando Nanite
El follaje utilizando Nanite se considera en Beta y se está investigando y desarrollando activamente. Esta sección brinda orientación sobre la utilización de follaje con Nanite en Unreal Engine 5.1.
Para recursos como árboles con la configuración predeterminada de Nanite, es posible que las copas tiendan a adelgazarse con la distancia. Estos casos son una forma particular de Geometría Agregada donde cada parte disjunta (una hoja o punta de césped) tiene bordes abiertos en su límite. Habilitar Preservar área es útil para evitar que se diluya cuando Nanite está habilitado. Cuando Nanite simplifica la geometría en la distancia al reducir la cantidad de triángulos, eventualmente necesita comenzar a eliminar por completo algunos de estos elementos disjuntos. Sin que Nanite tenga más información, el resultado se verá diluido porque hubo una gran pérdida de área de superficie. Preservar área redistribuirá esa área perdida a los triángulos restantes dilatando los bordes de los límites abiertos. La dilatación de formas simétricas como hojas tiene el mismo efecto que escalarlas. En casos asimétricos como cintas, por ejemplo puntas de césped, tiene el efecto de espesarlas.
Se recomienda Preservar área para todas las mallas de follaje, pero no para las mallas que no son de follaje.


La visualización de Grupo Nanite proporciona una visión más clara de cómo Preservar área redistribuye el área perdida.


A continuación, se incluyen algunas recomendaciones al utilizar y crear recursos de follaje con Nanite en mente. Todavía estamos experimentando y aprendiendo nosotros mismos cuáles son los mejores enfoques. Hasta ahora, hemos visto que el follaje que utiliza Nanite debe crearse de manera diferente que antes, pero si aprovecha sus puntos fuertes, puede obtener resultados más rápidos y de mayor calidad con Nanite.
- Utilizar Preservar área (habilitado en el Editor de malla estática).
- Utiliza geometría en lugar de tarjetas con máscara.
- Los materiales con máscaras son bastante caros en comparación con los opacos. Es probable que se obtengan los resultados más rápidos al no utilizarlos en absoluto.
- El enfoque de tarjeta tradicional (muchos elementos se representan con una sola tarjeta) con Nanite puede ser más lento que sin Nanite. No esperes que habilitar Nanite en el follaje basado en tarjetas siempre sea una mejora en el rendimiento.
- Los píxeles con máscara cuestan casi tanto como los píxeles dibujados. La sobredimensión ya es un problema con los agregados en Nanite. Si se utiliza un material con máscara, la visualización de sobredimensión de Nanite no te contará la historia completa en términos de costo. Sobredimensión es un concepto complejo en este caso y la visualización solo muestra un aspecto particular del mismo.
- El follaje geométrico ha demostrado ser más rápido con Nanite que con los enfoques de tarjetas, tanto con tarjetas Nanite como con tarjetas que no son Nanite. También se ve mejor.
- El paquete Megaescanes: Césped en el Mercado de Unreal Engine ofrece buenos ejemplos para probar. El paquete ofrece geometría con máscara y de alto contenido de polígonos donde cada elemento es independiente y tarjetas con máscara de bajo contenido de polígonos donde muchos elementos están representados por una sola tarjeta.
- Al utilizar Desplazamiento de posición del mundo (WPO), más vértices equivalen a un mayor costo. La lógica WPO debe ser limitada y monitoreada.
- Aún se aplican los problemas explicados en la sección Geometría agregada de esta página. Los bosques densos (como los ejemplos anteriores) se renderizarán mucho más lento que la misma escena con todas las mallas reemplazadas con formas sólidas del mismo número de triángulos.
Flujos de trabajo de contenido híbrido con y sin Nanite
Las siguientes secciones destacan los flujos de trabajo que puedes utilizar en tus proyectos habilitados para Nanite que también deben ser compatibles con características y plataformas que no sean de Nanite sin duplicar recursos.
Cómo importar una malla de alta resolución para Nanite
Puedes importar una malla de alta resolución para que sea tu representación de Nanite para cualquier malla estática existente que no sea de Nanite a través del Explorador de contenido o el Editor de malla estática.
Desde el Explorador de contenido, puede utilizar el menú contextual del botón derecho en un recurso de malla estática para seleccionar Nivel de detalle > Alta resolución > Importar alta resolución y navegar hasta el archivo que deseas importar.
Alternativamente, puedes utilizar el Editor de malla estática para importar una malla de alta resolución utilizando la configuración de Nanite en el panel de Detalles. Haz clic en Importar y navega hasta el archivo que desea importar.
Con este flujo de trabajo, la malla estática preexistente y su cadena de nivel de detalle (LOD) se convierten en la malla de respaldo en lugar de que el proceso de importación genere automáticamente una malla alternativa a partir de la geometría de Nanite.
Este flujo de trabajo respeta la configuración No habilitar Nanite en Actores de malla estática en tus escenas y se explica con más detalle en la sección Opciones de componente de malla estática a continuación.
Flujos de trabajo del Material
Hay dos formas de mejorar los flujos de trabajo de Nanite y que no son de Nanite con materiales: mediante la utilización de un nodo en el Gráfico material para dividir las rutas lógicas, o mediante la utilización de un material de anulación que solo se utilizar para renderizar con Nanite.
Nodo Switch Pass de Nanite
El Nodo Switch Pass de Nanite te permite definir un comportamiento especializado en un gráfico de material cuando se renderice con Nanite.
Utiliza la entrada Predeterminada al renderizar en pases que no sean de Nanite, para manejar el material como lo harías normalmente. Utiliza la entrada de Nanite para cualquier lógica de material que desees simplificar o representar específicamente en pases de Nanite. Por ejemplo, en los casos en los que un material utiliza una función no admitida por Nanite, puedes mantener la misma lógica para la entrada predeterminada y utilizar una lógica más amigable para la entrada de Nanite.
Material de anulación de Nanite
La ranura Material de anulación de Nanite está disponible en Materiales e Instancias de material. Cuando configuras un material de anulación, cualquier malla habilitada para Nanite que tenga asignado el Material o la Instancia de material utilizará el material de anulación de Nanite al que se hace referencia en su lugar. Esto significa que puedes crear materiales específicos para los flujos de trabajo de Nanite en lugar de administrar la lógica directamente dentro del Gráfico de material utilizando el nodo Switch Pass de Nanite.
En Instancias de material, la ranura de Material de anulación de Nanite se establece por defecto en Ninguno, de modo que establecer la anulación en un material principal no hará que se herede automáticamente en ninguna de las instancias secundarias de ese material.
En el siguiente ejemplo, el recurso de Malla estática para la estatua tiene habilitado Nanite y tiene aplicada una Instancia de material. La instancia de material tiene su conjunto Material de anulación Nanite con algunos cambios de color simples para fines de demostración. El Actor de malla estática de la izquierda muestra el material de anulación de Nanite, ya que la malla se renderiza con Nanite. El Actor de malla estática a la derecha muestra el mismo material hasta que se configura Deshabilitar Nanite en el actor, deshabilitando el Material de Anulación de Nanite para mostrar el material base que no es de Nanite de la Instancia de Material.
Opción de componente de malla estática: No permitir Nanite
Puedes establecer cuándo las mallas estáticas habilitadas para Nanite deben utilizar su representación de Nanite utilizando la configuración No permitir Nanite en actores de escena individuales. Esto significa que puedes tener una combinación de actores Nanite y no Nanite que utilizan el mismo recurso de malla estática.
El siguiente ejemplo muestra un único recurso de malla estática habilitado para Nanite donde la izquierda es la representación de malla de Nanite y la derecha tiene habilitado No permitir Nanite.
Terreno
Esta es una característica experimental.
Para utilizar Nanite con tu terreno, selecciónalo y utiliza el panel Detalles para marcar la casilla junto a Habilitar Nanite.
Hay dos formas de construir la representación de malla de Nanite a partir de datos del Terreno:
- Haz clic en el botón Datos reconstruidos en el panel Detalles del Terreno en la sección Nanite.
- Utiliza el menú Construir para seleccionar Construir solo Nanite.
Según el tamaño del Terreno o la cantidad de mosaicos, puede llevar un momento generar la representación de Nanite. Cuando esté completa, puede comprobarlo en los modos de visualización de Nanite.
Las siguientes variables de consola son útiles cuando se trabaja con Terrenos habilitados para Nanite:
Landscape.LiveRebuildNaniteOnModificationdesencadena una reconstrucción de la representación de Nanite inmediatamente cuando se realiza una modificación. (Predeterminado 0)Landscape.RenderNaniteestablece si el Terreno debe renderizarse con Nanite o no. (Default 1)
Los Terrenos habilitados para Nanite tienen las siguientes limitaciones:
- Cuando se utiliza la modificación de los terrenos habilitados para Nanite (
Landscape.LiveRebuiltNaniteOnModification 1), la escultura del Terreno es casi inutilizable porque reconstruye la representación de Nanite de todos los Actores del terreno en cada fotograma. - La resolución máxima de la malla Nanite es la misma que LOD0 para Terreno. No se debe esperar un aumento de resolución al utilizar Nanite sobre un Terreno normal. En su estado actual, esto es puramente una optimización del tiempo de ejecución.
- Guardar actores de Terreno con Nanite habilitado cuando la malla de Nanite no se ha actualizado es más lento, ya que las mallas de Nanite deben construirse antes de guardar.
Consideraciones técnicas:
- Los Terrenos de Nanite se transmiten actualmente además de la transmisión de datos de Terreno habitual porque tanto los datos de Nanite como los que no son de Nanite son necesarios en el tiempo de ejecución, y el último es necesario para el tiempo de ejecución de las texturas virtuales, la representación de agua y más. Esto significa que se debe transmitir el doble de datos (un conjunto de datos con la transmisión de Nanite y el otro con la transmisión de texturas) y residir en la memoria cuando Nanite está habilitado.
- El rendimiento del tiempo de ejecución se mejora con el renderizado de Nanite, especialmente con respecto a los pases de sombra, pero no se debe esperar una mejora visual (o una degradación) ya que los datos de origen son idénticos.
- Se espera que el nivel de detalle jerárquico (HLOD)/transmisión se comporte de manera idéntica al paisaje que no es de Nanite.
Al editar Terrenos habilitados para Nanite, recomendamos mantener desactivada la reconstrucción en vivo de las mallas de Nanite (Landscape.LiveRebuiltNaniteOnModification 0). El renderizado de Terrenos se basa en Terrenos que no son de Nanite hasta que se reconstruye la malla de Nanite (ya sea al guardar o al utilizar Crear solo para Nanite / Crear todos los Terrenos en el menú Crear), en cuyo caso utilizará esa versión para renderizar. Dado que no debe existir una diferencia visual importante entre Nanite y los Terrenos que no son de Nanite, significa que el rendimiento en el editor mientras se usa el terreno que no es de Nanite no es representativo del rendimiento en tiempo de ejecución de su proyecto.
Rendimiento del contenido típico
A modo de comparación, los siguientes tiempos de GPU se tomaron de la demostración técnica de Unreal Engine 5 [Lumen in the Land of Nanite] (https://www.youtube.com/watch?v=qC5KtatMcUw) en una PlayStation 5:
- Resolución de renderizado promedio de 1400p aumentada temporalmente a 4K.
- ~2,5 milisegundos (ms) para seleccionar y rasterizar todas las mallas de Nanite (que era casi todo en esta demostración)
- Casi toda la geometría utilizada fue una malla Nanite
- Casi ningún costo de CPU ya que es 100% impulsado por GPU
- ~2ms para evaluar materiales para todas las mallas de Nanite
- Pequeño costo de CPU con 1 llamada de dibujo por material presente en la escena.
Al considerar estos tiempos de GPU juntos, son aproximadamente 4,5 ms combinados para lo que sería equivalente al pase previo de profundidad de Unreal Engine 4 más el pase base. Esto hace que Nanite sea ideal para proyectos de juegos que apuntan a 60 FPS.
Números como estos deben esperarse de aquel contenido que no sufre los problemas de rendimiento antes mencionados en las secciones anteriores. Los conteos de instancias muy altos y una gran cantidad de materiales únicos también pueden aumentar los costos y es un área de desarrollo de Nanite en la que se está trabajando activamente.
Tamaño de datos
Debido al micro detalle que Nanite es capaz de lograr, se puede suponer que significa un gran aumento en los datos geométricos, lo que resulta en paquetes de juegos y descargas más grandes para los jugadores. Sin embargo, la realidad no es tan grave. De hecho, el formato de malla de Nanite es significativamente más pequeño que el formato de malla estática estándar debido a la codificación de malla especializada de Nanite.
Por ejemplo, con el ejemplo de Unreal Engine 5 Valley of the Ancients, las mallas de Nanite promedian 14,4 bytes por triángulo de entrada. Esto significa que una malla Nanite de un millón de triángulos en promedio tendrá ~13,8 megabytes (MB) en el disco.
Comparando una malla tradicional de baja cantidad de polígonos además de su Normal Map con una malla Nanite de alta cantidad de polígonos, se vería algo como:
Malla con baja cantidad de polígonos
Tamaño del paquete comprimido de malla estática: 1,34 MB |
Malla de Nanite
Tamaño del paquete comprimido de Static Mesh: 19,64 MB |


Sin embargo, el tamaño del paquete comprimido no es el tamaño completo del recurso. También hay texturas únicas que solo utilizan esta malla que deben tenerse en cuenta. Muchos de los materiales utilizados por las mallas tienen sus propias texturas únicas compuestas de diferentes texturas Normal, ColorBase, Metalica, Especular, Rugosidad y con Máscara.
Este recurso en particular solo usa dos texturas (ColorBase y Normal) y, por lo tanto, no es tan costoso en espacio en disco como uno con muchas otras texturas únicas. Por ejemplo, ten en cuenta que el tamaño de la malla Nanite con ~1,5 millones de triángulos es más pequeño (19,64 MB) que una textura de mapa normal de 4k.
| Tipo de textura | Tamaño de textura | Tamaño en disco |
|---|---|---|
| ColorBase | 4k x 4k | 8.2MB |
| Normal | 4k x 4k | 21.85MB |
El tamaño total del paquete comprimido para esta malla y sus texturas es:
- Malla con baja cantidad de polígonos: 31.04MB
- Malla con alta cantidad de polígonos: 49.69MB
Debido a que la malla de Nanite ya es muy detallada, podemos intentar reemplazar el Normal Map único con un detalle de mosaico normal que se comparte con otros recursos. Aunque esto da como resultado cierta pérdida de calidad en este caso, es bastante pequeña y ciertamente mucho más pequeña que la diferencia de calidad entre la versión con alta y baja cantidad de polígonos. Por lo tanto, una malla Nanite triangular de 1,5 M puede verse mejor y ser más pequeña que una malla con baja cantidad de polígonos con un Normal Map 4k.
Tamaño total del paquete comprimido para la malla y las texturas habilitadas para Nanite: 27,83 MB


Se pueden realizar muchos experimentos con resolución de texturas y Normal Map detallados, pero esta comparación en particular es para demostrar que los tamaños de datos de las mallas de Nanite no son muy diferentes de los datos con los que los artistas ya están familiarizados.
Por último, podemos comparar la compresión de Nanite con el formato de Malla estática estándar usando una cantidad alta de polígonos, donde ambos son idénticos en LOD0.
Malla estática de alta cantidad de polígonos
Tamaño del paquete comprimido de malla estática: 148,95 MB |
Malla de Nanite
Tamaño del paquete comprimido de Static Mesh: 19,64 MB |
Comparando la compresión Nanite anterior con un tamaño de 19,64 MB, es 7,6 veces más pequeña que la compresión de la malla estática estándar con 4 LOD.
La compresión de Nanite y los tamaños de datos son un área clave que se mejorará en futuras versiones de Unreal Engine.
Consejos generales sobre el tamaño de los datos
Los sistemas Nanite y [Texturizado virtual] (designing-visuals-rendering-and-graphics\rendering-optimization\virtual-textures), junto con SSD rápidos, han disminuido la preocupación por los presupuestos de tiempo de ejecución de geometría y texturas. El mayor obstáculo de rendimiento es cómo entregar estos datos al usuario.
El tamaño de los datos en el disco es un factor importante cuando se considera cómo se entrega el contenido (en medios físicos o descargados a través de Internet) y que la tecnología de compresión no puede hacer mucho. El ancho de banda de Internet del usuario promedio, los tamaños de los medios ópticos y los tamaños de los discos duros no se han escalado al mismo ritmo que el ancho de banda del disco duro y la latencia de acceso, la potencia de la GPU y la tecnología de software como Nanite. Llevar esos datos a los usuarios está demostrando ser un desafío.
La representación eficiente de mallas altamente detalladas es una preocupación menor con Nanite, pero el almacenamiento de sus datos en el disco es ahora el área clave que debe mantenerse bajo control.
Modos de visualización
Nanite incluye varios modos de visualización para inspeccionar sus datos en la escena actual.
En la ventana de nivel, debajo del menú desplegable Modos de vista, desplace el cursor sobre Visualización de Nanite y elige de la selección.
La visualización Descripción general muestra la escena renderizada en el centro de la imagen con visualizaciones seleccionadas de Nanite alrededor de la pantalla como referencia.
Los siguientes modos de visualización de Nanite están disponibles para elegir:
| Visualización de Nanite | Descripción |
|---|---|
| Máscara | Visualización que marca la geometría Nanite (verde) y la que no es de Nanite (roja). |
| Triángulos | Muestra todos los triángulos de las mallas de Nanite en la escena actual. |
| Grupos | Muestra representaciones en color de todas las agrupaciones de triángulos que se representan en la vista de escena actual. |
| Primitivos | Visualización que colorea todos los componentes del mismo color para todas las instancias en una Malla estática de instancia (ISM). |
| Instancias | Visualización que aplica un color diferente para cada instancia en la escena. |
| Sobredimensión | Muestra la cantidad de sobredimensionamiento que se produce en la geometría de la escena. Los objetos más pequeños que están apilados juntos crean más sobredimensión que los más grandes. |
| ID de material | Muestra colores separados para cada ID de Material de mallas Nanite individuales. |
| Mapa de luz UV | Visualización que muestra las coordenadas UV de las superficies de malla de Nanite. |
| Evaluar WPO | Colorea la geometría habilitada para Nanite que está utilizando la posición desplazada del mundo (verde) frente a las que no lo están (rojo). |
Nanite incluye un modo de visualización Avanzado que habilita opciones de visualización adicionales en el menú Visualización de Nanite. Estas visualizaciones son útiles para los programadores que están depurando o perfilando varios aspectos de bajo nivel de Nanite.
HabilitA este modo de visualización avanzada con la variable de consola r.Nanite.Visualize.Advanced 1.
Variables y comandos de la consola
Las siguientes estadísticas y variables de consola están disponibles para su uso en la depuración y configuración de Nanite.
La representación de Nanite se puede habilitar y deshabilitar globalmente durante el tiempo de ejecución utilizando la variable de consola r.Nanite 0. Deshabilitar Nanite es una buena manera de emular plataformas donde no es compatible.
Modos de renderización de respaldo de Nanite
Nanite proporciona modos de renderización de malla de respaldo para cuando Nanite está deshabilitado o no es compatible con una plataforma. Puedes controlar qué modo se utiliza con la variable de consola r.Nanite.ProxyRenderMode.
- 0 es el modo predeterminado y recurre a renderizar mallas de respaldo o LOD controlados por espacio de pantalla, si está configurado. Esto incluye el reconocimiento de Min LOD en las propiedades del editor de Malla estática (descrito en la sección anterior Malla de respaldo).
- 1 deshabilita todo el renderizado de mallas habilitadas para Nanite.
- 2 funciona de manera similar al modo 1, pero permite que la visualización Mostrar > Respaldo de Nanite en el editor de malla estática renderice un respaldo de Nanite.
Los modos de renderizado de Respaldo 1 y 2 son útiles para escenas que tienen muchas más instancias de las que podrían admitirse sin Nanite. Permiten abrir la escena en el editor en plataformas que no son compatibles con Nanite.
Por ejemplo, en el proyecto de muestra de Unreal Engine 5 Valley of the Ancients, deshabilitar Nanite provocaría que se produjeran decenas de miles de sorteos regulares, lo que dificultaría abrir el mapa en una plataforma no compatible.
Comando de estadísticas de Nanite
El comando Nanitestats añade una superposición de estadísticas de selección de Nanite en la parte superior derecha del visor.
Los argumentos de comando se utilizan para especificar qué estadísticas muestra Nanite en la pantalla. Cuando no se proporciona ningún argumento, se utiliza la vista principal.
Use Nanitestats List para mostrar todas las vistas disponibles en la salida de depuración:
- Primario
- VirtualShadowMaps
También puedes ver otras estadísticas disponibles para ShadowAtlas y CubemapShadows cuando estén disponibles. Selecciona una vista ingresando el comando seguido del nombre de la lista de estadísticas que deseas ver. Por ejemplo, ingresarías NaniteStats VirtualShadowMaps.
Para las vistas que utilizan la eliminación selectiva de oclusión de dos pases, las estadísticas se dividen en grupos separados para el pase principal y posterior.
Cómo controlar del tamaño del grupo de transmisión de Nanite
Controla la cantidad de memoria dedicada a almacenar datos de transmisión de Nanite con la variable de consola r.Nanite.Streaming.StreamingPoolSize. Utilizar grupos más grandes reduce el trabajo de IO y descompresión cuando te mueve por la escena, pero con el costo de un gasto de memoria más grande.
Si el grupo no es lo suficientemente grande como para que quepan todos los datos necesarios para una vista, puede ocurrir errores en la memoria caché donde la transmisión nunca se establece ni siquiera para una vista estática.
Esta variable de consola no se puede cambiar en tiempo de ejecución y se debe especificar en un archivo de configuración (.ini).
Cómo configurar grupos máximos en un pase único
Puede especificar la cantidad máxima de grupos de candidatos y visibles utilizados en un solo pase con la variable de consola r.Nanite.MaxCandidateClusters y r.Nanite.MaxVisibleClusters. Sus valores se utilizan para dimensionar los búferes intermedios y sus valores predeterminados se eligieron para trabajar en escenarios de renderización comunes.
No hay ningún mecanismo para cambiar el tamaño dinámicamente de ninguno de estos búferes, o para reducir automáticamente la calidad en caso de desbordamiento, lo que puede provocar que los artefactos de renderización de ellos sean demasiado pequeños para la complejidad de la escena y, por lo general, se manifiesten como geometría faltante o parpadeante. Cuando se produzcan estos tipos de artefactos, utiliza Nanitestats para determinar los límites conservadores de los candidatos y los grupos visibles. Más específicamente, consulta las estadísticas de GruposSW y GruposHW. El costo de memoria de un grupo candidato es actualmente de 12 bytes y un clúster visible es de 16 bytes.
Esta variable de consola no se puede cambiar en tiempo de ejecución y se debe especificar en un archivo de configuración (.ini).