Nanite es el sistema de geometría virtualizada de Unreal Engine 5 que emplea un nuevo formato de malla interna y tecnología de renderizado que permite obtener detalles a escala de píxel y una gran cantidad de objetos. Trabaja de forma inteligente únicamente en los detalles que se pueden percibir y nada más. El formato de datos de Nanite también está altamente comprimido y permite la retransmisión detallada con un nivel de detalle automático.
Ventajas de Nanite
- Aumento de múltiples órdenes de magnitud en la complejidad de la geometría, mayor número de triángulos y objetos de lo que ha sido posible hasta ahora en tiempo real
- Los límites de fotogramas ya no están condicionados por el número de polígonos, las llamadas de trazado y el uso de la memoria de malla
- Ahora se pueden importar directamente fuentes artísticas de calidad cinematográfica, como esculturas ZBrush y escaneados fotogramétricos
- Utiliza detalles de alta poligonización en vez de hacer un baking de los detalles en las texturas de los mapas de normales
- El nivel de detalle (LOD) se gestiona de forma automática de modo que ya no es necesario configurar manualmente los LOD de cada malla
- Las pérdidas de calidad son poco frecuentes o inexistentes, especialmente con las transiciones de LOD
Pese a que las ventajas que ofrece son capaces de cambiar las reglas del juego, en la práctica siguen existiendo límites. Por ejemplo, el recuento de instancias, los triángulos por malla, la complejidad de los materiales, la resolución de salida y el rendimiento se deberían medir minuciosamente para cada combinación de contenido y hardware. Nanite no dejará de ampliar sus posibilidades y mejorar su rendimiento en las futuras versiones de Unreal Engine.
Diferencias entre una malla de Nanite y una malla estática
Una malla de Nanite es una malla estática con la opción Nanite activada. Una malla de Nanite sigue siendo una malla de triángulos en el fondo con mucho nivel de detalle y compresión aplicada a sus datos. Además, Nanite utiliza un sistema completamente nuevo para el renderizado de ese formato de datos de una forma extremadamente eficiente.
Todo lo necesario para que una malla estática aproveche las ventajas de Nanite es un indicador que lo active. La creación de contenido para Nanite no es muy diferente a la de las mallas tradicionales, salvo que Nanite puede manejar órdenes de magnitud de más triángulos e instancias que lo que es posible hacerlo para la geometría renderizada tradicionalmente. Acerca la cámara lo suficiente y Nanite trazará los triángulos fuente originales importados.
Las mallas de Nanite admiten múltiples UV y colores de vértices. Los materiales se asignan a secciones de la malla de tal forma que esos materiales pueden utilizar diferentes modelos de sombreado y efectos dinámicos que se pueden realizar en los sombreadores. La asignación de materiales se puede intercambiar dinámicamente, al igual que con cualquier otra malla estática, y Nanite no requiere ningún proceso de bake de materiales.
Las texturas virtuales no son obligatorias para Nanite, pero son muy recomendables. Las texturas virtuales son una característica ortogonal de Unreal Engine cuyos objetivos para los datos de textura son similares a los que Nanite consigue con los datos de malla.
El funcionamiento de Nanite debería resultar muy parecido al de las mallas estáticas, pero hay muchas cosas que aún no son compatibles. Consulta la sección Características compatibles de esta página para obtener más información.
¿Cómo funciona Nanite?
Nanite se integra sin problemas en los flujos de trabajo de los motores existentes, a la vez que utiliza un enfoque innovador para guardar y renderizar los datos de malla.
- Durante la importación: las mallas se analizan y se descomponen en clústeres jerárquicos de grupos de triángulos.
- Durante el renderizado: los clústeres se intercambian sobre la marcha con distintos niveles de detalle según la vista de la cámara, y se conectan perfectamente y sin fisuras con los clústeres vecinos dentro del mismo objeto. Los datos se transmiten bajo demanda, de modo que solo los detalles visibles permanecen en la memoria. Nanite se ejecuta en su propia pasada de renderizado, prescindiendo por completo de las llamadas de trazado tradicionales. Se pueden utilizar modos de visualización para inspeccionar el proceso de Nanite.
Puesto que Nanite se basa en la capacidad de retransmitir rápidamente datos de malla desde el disco bajo demanda, se recomiendan las unidades de estado sólido (o SSD) para el almacenamiento en tiempo de ejecución.
¿Para qué tipos de mallas se debería utilizar Nanite?
Generalmente, Nanite debería activarse siempre que sea posible. Normalmente, cualquier malla estática que lo tenga activado se renderizará más rápido y ocupará menos espacio en memoria y en disco.
Más concretamente, una malla es una candidata especialmente buena para Nanite si:
- Contiene muchos triángulos, o tiene triángulos que aparecerán muy pequeños en pantalla
- Tiene muchas instancias en la escena
- Actúa como un oclusor importante de otra geometría Nanite
- Proyecta sombras mediante mapas de sombras virtuales
Una excepción a estas reglas es, por ejemplo, una esfera celeste: sus triángulos serán grandes en pantalla, no ocluye nada y solo hay una en la escena. Normalmente, estas excepciones son raras y las pérdidas de rendimiento al utilizar Nanite con ellas son mínimas, así que recomendamos no preocuparse demasiado por los casos en los que Nanite no debería estar activado si Nanite es compatible con el caso de uso.
Actualmente, Nanite no es compatible con algunos casos de uso. Consulta la sección Características compatibles de esta página para obtener más información.
Activar la compatibilidad de Nanite con las mallas
Nanite se puede activar en la geometría compatible de las siguientes formas:
- Al importar
- Al utilizar editores de mallas individuales
- Selección por lotes en el explorador de contenido
La conversión de la geometría a Nanite necesita cierto tiempo de procesamiento para cada malla. En proyectos grandes, el uso de una caché de datos derivados (DDC) compartida resulta especialmente útil si hay muchos recursos de Nanite. Consulta la documentación de la DDC compartida para obtener más información.
Importar una malla estática
Al importar una malla destinada a ser utilizada con Nanite, activa la casilla Compilar Nanite.
Se recomienda desactivar la propiedad Generar UV de mapa de luz cuando no se utilice la iluminación precalculada con Lightmass.
Cuando esta propiedad está activada, la geometría altamente detallada añade un tiempo considerable a la importación y compilación de datos de malla estática. La propiedad también añade un canal UV adicional, el cual incluye una cantidad importante de datos para mallas muy densas. En caso de que tu proyecto no requiera hacer un baking de la iluminación, no hace falta que asumas ninguno de los dos costes.
Activar Nanite en los recursos
En los casos en los que ya tengas el proyecto rellenado con contenido en el que quieras activar Nanite, dispones de dos opciones: activar recursos por lotes utilizando el explorador de contenido, o activar recursos individuales a través de sus propios editores.
Activar Nanite en mallas por lotes
Para los lotes de recursos de malla estática a los que deseas activar Nanite, utiliza el explorador de contenido para seleccionarlos todos. Haz clic con el botón derecho y selecciona Nanite > Activar en el menú contextual.
Activar Nanite en mallas individuales
Abre el editor de cualquier malla compatible con Nanite, como las mallas estáticas y las colecciones geométricas (mallas de fractura basadas en la física del caos) y activa Nanite en el panel Detalles.
En el Editor de mallas estáticas, busca la opción Configuración de Nanite y marca la casilla Activar compatibilidad con Nanite.
En el Editor de colecciones geométricas, localiza la sección Nanite y marca la casilla Activar Nanite.
Características compatibles de Nanite
Esta sección detalla la mejor forma de utilizar Nanite en un proyecto de Unreal Engine, con información sobre lo que es y lo que no es compatible y las posibles limitaciones.
Geometría
Nanite se puede activar en mallas estáticas y colecciones geométricas.
Una malla con 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 de geometrías
- Pintor de follaje
- Césped de paisaje
Nanite ofrece una capacidad limitada 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, tanto si es dinámica como estática. Esto implica mover cualquier posición de una malla de Nanite de un modo más complejo de lo que se puede expresar en una sola multiplicación de matriz 4x3, aplicada uniformemente a toda la malla.
La deformación está limitada con:
- (Beta) Desplazamiento de la posición del mundo en materiales
- Los cuadros delimitadores utilizados para los clústeres de oclusión no actualizan ni expanden sus cuadros delimitadores en función de la deformación. Esto quiere decir que cada vez que una superficie se desplaza hacia el exterior, de forma que cubriría el lugar donde antes estaba, existen muchas posibilidades de que se ocluya y se vea rota.
- El follaje que utiliza el desplazamiento de posición del mundo (WPO) es menos problemático ya que el follaje está lleno de agujeros y no puede realmente ocluirse a sí mismo.
La deformación no es compatible con:
- Animación del esqueleto
- Morph Target
- Mallas de splines
Las mallas con Nanite no son compatibles actualmente con:
- Profundidad o plantilla personalizadas
- Pintado de vértices en instancias
- Esto significa específicamente colores pintados por instancia mediante el modo Pintura de mallas del editor, pero Nanite sí admite colores de vértices en la malla original.
La cantidad máxima de instancias que pueden estar presentes en la escena está bloqueada a 16 millones de instancias, incluyendo todas las instancias que se transmiten, no solo las activadas para su uso con Nanite. Solo las instancias retransmitidas se contabilizan en el total.
Las tangentes por vértice no se almacenan desde la malla estática cuando se activa para Nanite. En cambio, el espacio tangente se deriva implícitamente en el sombreador de píxeles. Los datos de tangentes no se guardan para reducir el tamaño de los datos. Esta diferencia en el espacio tangente al utilizar este enfoque podría causar discontinuidades en los bordes. No obstante, este problema en particular no ha demostrado ser significativo, y hay planes para ofrecer compatibilidad con las tangentes de vértice en una futura versión.
Materiales
Nanite es compatible con materiales cuyo modo de fusión esté definido como Opaco y Enmascarado. Cuando se detecta un tipo de material que no es compatible, se asigna un material predeterminado a la malla con Nanite activado y se coloca una advertencia en el Registro de salida con información adicional.
Notas adicionales sobre las características de los materiales:
- Las mallas con Nanite pueden recibir pegatinas proyectadas sobre sus superficies, pero no son compatibles con Mesh Decals, que requiere que los materiales utilicen un modo de fusión translúcido.
- La casilla Estructura alámbrica no es compatible.
- El nodo Interpolador de vértices y las UV personalizadas son compatibles, pero se evaluarán tres veces por píxel.
Renderizado
Las siguientes características de renderizado no son compatibles actualmente:
- Filtrado de objetos específico de la vista con:
- Radio mínimo de pantalla
- Selección a distancia
- Forward Rendering
- Renderizado estéreo para realidad virtual
- Pantalla dividida
- Antialiasing de muestreo múltiple (MSAA)
- Canales de iluminación
- Trazado de rayos contra mallas de Nanite
- La malla alternativa se utiliza de forma predeterminada para las mallas con Nanite activado. Disminuye el parámetro Error relativo alternativo en el Editor de mallas estáticas para utilizar más triángulos de la malla de origen.
- (Experimental) La compatibilidad inicial con el trazado de rayos nativo de mallas de Nanite se activa con la variable de consola "r.RayTracing.Nanite.Mode 1". De esta forma, se conservan todos los detalles y se utiliza mucha menos memoria de la GPU que con las mallas alternativas sin errores.
- Algunos modos de visualización aún no son compatibles con la visualización de mallas de Nanite.
Ten cuidado con algunos modos de visualización en el Editor de mallas estáticas al visualizar geometría muy detallada. La visualización de 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 estas especificaciones, utilizando los controladores más recientes con DirectX 12 con Shader Model 6 (SM6):
- NVIDIA: Tarjetas de la generación Maxwell o posteriores
- AMD: Tarjetas de la generación GCN o posteriores
- Se admiten todas las versiones más recientes de Windows 10 (anteriores a la versión 1909.1350) y Windows 11 compatibles con SDK DirectX 12 Agility.
- Windows 10 versión 1909. El número de revisión debe ser superior o igual a .1350.
- Windows 10 versión 2004 y 20H2. El número de revisión debe ser superior o igual a .789.
- DirectX 12 con Shader Model 6.6 Atomic o Vulkan (VK_KHR_shader_atomic_int64)
- Controladores gráficos más recientes
PlayStation 4 y Xbox One también son compatibles con Nanite, pero actualmente la compatibilidad en estas plataformas se considera experimental. Cabe esperar que el rendimiento de Nanite en estas plataformas con contenidos de muy alta fidelidad no cumpla los requisitos de un juego comercializable.
Malla alternativa de Nanite y configuración de precisión
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 con todos los detalles.
Esta configuración se encuentra en el panel Detalles del Editor de mallas estáticas, en la sección Configuración de Nanite.
La configuración de Nanite incluye las siguientes propiedades:
Propiedad | Descripción |
---|---|
Activar compatibilidad Nanite | Permite utilizar esta malla con Nanite y generar una malla alternativa en situaciones donde no se pueda utilizar Nanite. |
Conservar zona | Permite que las mallas de Nanite que perderían superficie debido a la simplificación redistribuyan esa superficie perdida entre los triángulos restantes dilatando los bordes de los límites abiertos. Esto es muy útil para el follaje, donde las hojas tienden a convertirse en triángulos y cuadriláteros disjuntos debido a la simplificación. El efecto de esta configuración es aumentar la escala de cada hoja. Para las cintas de geometrías, como las briznas de hierba, tiene el efecto de hacerlas más gruesas. Esta configuración debe ser activada en todas las mallas de follaje y nada más. |
Precisión de posición | Elige la precisión que esta malla debería utilizar al generar la malla de Nanite. Auto 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 el espacio en disco. |
Residencia mínima | Establece el tamaño de byte de memoria que esta malla debería mantener siempre en memoria, y hace que el resto se transmita. Los valores más altos requieren más memoria, pero para algunas mallas, esto puede reducir los problemas de pop-in de transmisión. |
Mantener porcentaje de triángulos | El porcentaje de triángulos a mantener de la malla de origen. Disminuye este porcentaje para optimizar el tamaño en disco. |
Reducir error relativo | Establece la cantidad máxima de error relativo que se permite eliminar para la malla de Nanite. Se eliminan todos los detalles de la malla de origen cuyo impacto visual sea inferior a esta cantidad de error relativo. El error relativo no tiene un 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. |
Porcentaje de triángulo alternativo | Establece el porcentaje de triángulos que permanecen al reducir la malla de origen para Nanite. Es la representación gruesa (o malla alternativa) que se utiliza cuando no se pueden utilizar los datos de Nanite con todo detalle, por ejemplo, en plataformas que no son compatibles con el renderizado de Nanite, o cuando no resulta práctico utilizar los datos de Nanite, como en el caso de las colisiones complejas. |
Error relativo alternativo | Establece la cantidad máxima de error relativo que se permite eliminar para la malla alternativa. Se eliminan todos los detalles de la malla alternativa generada cuyo impacto visual sea inferior a esta cantidad de error relativo. El error relativo no tiene un tamaño unitario y es relativo al tamaño de la malla. |
Nombre del archivo de importación de origen | La ruta del archivo utilizado para importar una malla de alta resolución que se utilizará con Nanite. La versión de alta resolución de la malla se utiliza en lugar de LOD0 por los sistemas que pueden beneficiarse de una geometría más detallada, como Nanite y Modelado geométrico en Unreal Engine. |
Precisión de vértice
Nanite cuantiza las posiciones de los vértices de la malla para maximizar la densidad de memoria y minimizar el espacio en disco. El tamaño de paso de cuantización es una potencia de dos que se puede seleccionar para que coincida con los requisitos de mallas individuales mediante la propiedad Precisión de posición. De forma predeterminada, Auto elige la precisión adecuada según el tamaño de la malla y su densidad de triángulos. Puedes anularlo manualmente seleccionando un tamaño de precisión para mejorar la precisión u optimizar el espacio en disco.
La cuantización es una forma de compresión con pérdidas. La compresión con pérdidas resulta especialmente complicada cuando se trabaja con piezas de malla modulares u otras mallas que comparten límites. Especialmente cuando esos límites tienen que alinearse perfectamente para no introducir agujeros o grietas en la geometría.
A fin de garantizar la coherencia, la cuantización se realiza en coordenadas de objeto sin normalizar centradas en el origen de la malla. De este modo se garantiza que la cuantización nunca cause fisuras 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.
Reducción de datos
En ocasiones es necesario reducir la cantidad de datos que almacena Nanite para optimizar el tamaño de disco. Nanite incluye configuraciones que te permiten reducir los datos de detalle de una malla de Nanite almacenada en cualquier momento durante la producción, lo que implica que puedes sobrepasar la calidad de forma segura desde el principio y ajustarla en consecuencia más adelante.
Para reducir los datos detallados, tendrás que utilizar las propiedades Mantener porcentaje de triángulos y Reducir error relativo. Puedes pensar en ellos como una opción de pre-decimación antes de ser almacenados como una malla de Nanite. En el caso de Nanite, el detalle no tiene por qué ser uniforme en toda la malla. Se eliminan primero los datos menos significativos y es más parecida a la compresión con pérdidas.
Utiliza Mantener porcentaje de triángulos para establecer el porcentaje de triángulos a mantener de la malla de origen.
Utiliza Reducir error relativo para establecer la cantidad máxima de error relativo que se permite al reducir los datos de la malla de origen. Cualquier triángulo que, de eliminarse, incurriría en un error relativo inferior a esta cantidad se elimina. Dicho de otro modo, todos los detalles con un impacto visual inferior a este valor se recortan. El error relativo no tiene un tamaño unitario y es relativo al tamaño de la malla.
Por defecto, ambas propiedades están configuradas de forma predeterminada para que no se recorte nada y Nanite almacene todos los triángulos de la malla de origen.
Es importante recortar los datos para reducir el tamaño en disco (es decir, el tamaño de la descarga), y no para mejorar el rendimiento. Para más información, consulta la sección Tamaño de datos.
Malla alternativa
Muchas partes de Unreal Engine necesitan acceder al búfer de vértices tradicional facilitado por las mallas renderizadas tradicionalmente. Cuando se activa Nanite para una malla estática, se genera una representación gruesa (llamada malla alternativa) de la malla altamente detallada a la que se puede acceder y que se utiliza donde los datos de Nanite no pueden estar. La malla alternativa es la malla generada que se utiliza cuando el renderizado de Nanite no es compatible. También se utiliza en situaciones donde no sería ideal utilizar la malla de detalles completos, por ejemplo, cuando se necesita una colisión compleja, utilizar mapas de luz para la iluminación baked, y para las reflexiones de trazado de rayos de hardware con Lumen.
La propiedad Porcentaje de triángulo alternativo representa el porcentaje de triángulos de la malla de origen original que se utilizan para generar la malla alternativa. Puedes especificar el porcentaje de triángulos a mantener entre 0 y 100 por ciento, donde los porcentajes más grandes conservan más detalles de la malla original.
La opción Error relativo alternativo establece la cantidad máxima de error relativo que se permite al eliminar detalles de la malla de origen. Cualquier triángulo que, de eliminarse, incurriría en un error relativo inferior a esta cantidad se elimina, siendo los detalles de menor impacto visual los primeros en desaparecer. El error relativo no tiene un tamaño unitario y es relativo al tamaño de la malla.
Por ejemplo, si quisieras que la malla no tuviera ningún tipo de decimación, tendrías que utilizar un Porcentaje de triángulo alternativo de 100 y un Error relativo alternativo de 0.
En la comparación que se muestra a continuación, está la malla de Nanite altamente detallada creada a partir de la malla de origen original que se compara con la configuración predeterminada de una malla alternativa de Nanite generada.
Utiliza el Error relativo alternativo para especificar cuánto detalle original se conserva de la malla de origen, y el Porcentaje alternativo para establecer cuánto detalle se utiliza.
En la comparación que se muestra a continuación, la malla alternativa mantiene el 100% del porcentaje de triángulos de la malla alternativa, pero ajusta el Error relativo alternativo para utilizar más triángulos de la malla de origen. Al ajustar estos valores, puedes utilizar los detalles de Nanite para los triángulos de Nanite en el visor como un indicador al cambiar sus valores.
Visualización de la malla alternativa
En el Editor de mallas estáticas, puedes alternar entre la malla de Nanite completamente detallada y la malla alternativa de Nanite utilizando la opción Nanite alternativa de los visores en el menú desplegable Mostrar. Como alternativa, puedes utilizar la tecla de acceso rápido Ctrl + N para alternar rápidamente entre las dos opciones de visualización.
Utilizar los LOD de malla alternativa personalizados para mallas de Nanite
La malla alternativa se utiliza para las características del motor, como colisiones complejas por polígono, trazado de rayos, baking de luz, etc. También se utiliza para plataformas que no son compatibles con Nanite. Al generar la malla alternativa, una malla con Nanite activado siempre utiliza la ranura LOD0 de la malla de origen para generar automáticamente la malla alternativa. No obstante, a veces conviene utilizar una malla alternativa especificada manualmente, o una serie de LOD tradicionales, en vez de una generada automáticamente.
Este nivel de control te permitiría utilizar Nanite en un proyecto pero también controlar directamente la geometría vista en reflexiones trazadas por rayos, o en plataformas que no son compatibles con Nanite.
Para especificar una malla alternativa personalizada o utilizar una serie de LOD, sigue los pasos que se indican a continuación:
- Establece el Porcentaje de triángulo alternativo a 0 para que la malla alternativa sea lo más pequeña posible, ya que será ignorada cuando se utilice este planteamiento.
- Añade uno o más niveles de detalle (LOD) a la malla utilizando este procedimiento tradicional de configuración de los LOD.
- Utiliza el desplegable Importar LOD para Importar LOD de nivel 1 desde la sección Configuración de LOD.
- Establece el Mínimo de LOD a 1 en la sección Configuración de LOD. De este modo, se ignora la malla alternativa generada por Nanite.
La colisión compleja es un caso especial. Utiliza la propiedad LOD para Colisión en Configuración general para especificar qué LOD se debería utilizar para la colisión. Se puede usar cualquier LOD para la colisión, incluido el LOD0.
Es posible que este método en particular no sea viable para hacer que los proyectos de Nanite sean automáticamente compatibles con plataformas que no son compatibles con Nanite, y debe ser probado y evaluado para tu proyecto.
Nanite maneja de forma eficiente una gran cantidad de instancias, pero si Nanite está desactivado, podría haber una cantidad abrumadora de llamadas de trazado para el proceso de renderizado tradicional. Puedes comprobar la viabilidad de esto en tu proyecto mediante "r.Nanite 0" para activar y desactivar la compatibilidad con Nanite.
Consulta la sección Variables y comandos de consola de esta página para obtener más información.
Trabajar con contenido activado para Nanite
En la mayoría de los casos, Nanite se escala extremadamente bien dentro de la resolución de pantalla. Para conseguirlo, se basa en dos técnicas: el nivel de detalle preciso y la eliminación selectiva de oclusión (occlusion culling). Normalmente, esto significa que, independientemente de la complejidad geométrica de los datos de origen en la escena, el número de triángulos que Nanite intenta trazar realmente en la pantalla es coherente y proporcional al número de píxeles.
Nanite se basa en el principio de diseño de que no tiene sentido dibujar muchos más triángulos que píxeles.
No obstante, existen algunos casos de contenido que rompen las técnicas que Nanite utiliza para escalar, pero esto no significa que no se deba utilizar en absoluto para este contenido, o que no se renderice más rápido que el proceso de renderizado tradicional. Solo significa que, para este tipo de contenido, ya no se les aplica el escalado con píxeles (y no la complejidad de la escena). Utiliza las características de Creación de perfiles que ofrece Unreal Engine para controlar este tipo de situaciones cuando se produzcan.
Geometría de agregados
La geometría de agregados es aquella geometría que tiene muchas partes inconexas que se convierten en un volumen en la distancia, como el pelo, las hojas de los árboles y el césped. Este tipo de geometría rompe el nivel de detalle y las técnicas de oclusión de Nanite.
Nanite es intrínsecamente una estructura jerárquica de nivel de detalle que se basa en la capacidad de 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ías de agregados que desde lejos parecen más una nube parcialmente opaca que una superficie sólida.
Por ello, es más probable que Nanite determine que no puede reducir la geometría de agregados de forma tan agresiva como lo haría con las superficies sólidas convencionales, resultando así en el trazado de más triángulos para el mismo número de píxeles cubiertos.
Otra optimización que agrega rupturas de geometría es la eliminación selectiva de oclusiones (Occlusion Culling). Aunque es muy precisa, su granularidad no es por píxel. La geometría llena de agujeros, y lo que es peor, capas y capas de geometría llena de agujeros, provoca un sobredibujo excesivo, ya que es necesario acumular muchas capas de profundidad antes de que esa zona de la pantalla bloquee todo lo que haya detrás. Una forma de verlo es considerar una región de 8x8 píxeles en la pantalla y la cantidad de capas de profundidad que hay que dibujar antes de rellenar cada píxel. Un sobredibujo excesivo significa que para el mismo número de píxeles cubiertos, Nanite intenta dibujar más triángulos ocasionando un renderizado más lento.
El follaje es el caso más obvio que causa problemas con la oclusión, pero aún así, esto no significa que Nanite no se debería utilizar en mallas con follaje. Consulta la sección Follaje con Nanite que aparece más abajo para obtener más información.
Es conveniente experimentar con diferentes casos de uso y ver qué funciona bien para tus proyectos. Utiliza herramientas de creación de perfiles para confirmar el buen rendimiento de Nanite con este tipo de mallas.
Superficies estrechamente apiladas
La eliminación selectiva de oclusiones (occlusion culling) con mallas tradicionales hace que los flujos de trabajo de kitbashing sean casi imposibles a gran escala por sus limitaciones prácticas. La naturaleza detallada de la eliminación selectiva de oclusiones con Nanite permite utilizar este tipo de flujos de trabajo durante el desarrollo con menos preocupaciones.
Tal y como se explica en la sección Geometría de agregados anterior, el sobretrazado puede deberse a que las superficies ocultas estén muy cerca de las superficies visibles situadas debajo de ellas. Si una geometría está enterrada muy por debajo de la superficie visible, Nanite la detecta y la elimina de forma bastante barata, hasta el punto de que en la mayoría de los casos puede considerarse sin coste alguno. Sin embargo, cuando existe geometría apilada que está muy próxima entre sí cerca de la superficie superior, Nanite no puede determinar cuál está arriba o abajo, provocando que ambas se dibujen a la vez.
Este problema concreto con la eliminación selectiva es el peor escenario posible, en el que Nanite no distingue qué superficie está en la parte superior, y simplemente dibuja todas las capas en su lugar. Este tipo de imprecisiones se escalan con el tamaño de la pantalla y la distancia, por lo que si bien 10 centímetros pueden separar capas y verse bien cuando se está más cerca de la superficie, las distancias más alejadas pueden hacer que la diferencia de distancia sea menor que un píxel, lo que provocaría un sobredibujo.
En el ejemplo que se muestra a continuación, si la cámara se mueve para mirar hacia abajo en la zona donde el personaje está de pie, la visualización de sobretrazado de Nanite muestra cómo se están renderizando estas superficies apiladas. Las zonas más iluminadas indican que se está produciendo más sobretrazado en esas zonas que en otras.
La Visualización de sobretrazado es la forma más eficaz de encontrar problemas de sobretrazado. Aunque cabe esperar cierta cantidad de sobretrazado, una cantidad excesiva provocará un aumento en los costes de eliminación selectiva y rasterización de Nanite, y el escalado de Nanite independientemente de la complejidad de la escena será menos efectivo en el proceso.
Normales facetadas y de bordes duros
Un problema que se debe tener en cuenta es cuando se importan mallas con mucho detalle que tienen normales facetadas, es decir, que la normal entre dos polígonos diferentes no se ha suavizado. Este problema es frecuente y fácil de pasar por alto, y conviene tener cuidado para evitarlo, ya que una cantidad reducida de vértices compartidos en una malla puede resultar significativamente más cara, tanto en rendimiento de renderizado como en tamaño de datos.
Lo ideal sería que la cantidad de vértices de una malla fuera inferior a la cantidad de triángulos que tiene. Si la proporción es de 2:1 o superior, lo más probable es que haya un problema, sobre todo si esto resulta en un recuento elevado de triángulos. Una proporción de 3:1 significa que la malla es completamente facetada y que cada triángulo tiene sus propios tres vértices, y ninguno de ellos se comparte con otro triángulo. En la mayoría de los casos, esto se debe a que las normales no coinciden debido a que no están suavizadas.
Por lo tanto, un mayor número de vértices significa más datos que almacenar. También conlleva más trabajo de transformación de vértices, y las proporciones superiores a 2:1 hacen que el renderizado sea más lento. El uso intencionado en el modelado de superficies rígidas no debería causar ningún problema, y no hay ninguna razón para no utilizarlas. No obstante, las mallas muy densas con un 100% de facetas accidentales 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 de la DCC que tienen límites de normales duros que podrían ser lógicos en mallas de menos polígonos, pero pueden añadir un gasto innecesario con Nanite.
Por ejemplo, en las dos mallas que aparecen a continuación, la malla de la izquierda tiene las normales facetadas mientras que la de la derecha tiene las normales suavizadas. Al compararlas mediante la visualización de triángulos de Nanite, se aprecian diferencias notables en el número de triángulos utilizados por Nanite para dibujarlas. La facetada de la izquierda dibuja muchos más triángulos que la suavizada de la derecha.
Mallas con Nanite y normales facetadas (izquierda) y suavizadas (derecha) | Visualización de triángulos de Nanite de mallas facetadas (izquierda) y con normales suavizadas (derecha) |
Haz clic en la imagen para verla a tamaño completo. | Click image for full size. |
Follaje utilizando Nanite
El follaje que utiliza Nanite se considera en fase Beta y se está investigando y desarrollando activamente. Esta sección ofrece algunas orientaciones sobre el uso 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 reducirse con la distancia. Estos casos son una forma particular de Geometría de agregados donde cada parte disjunta (una hoja o brizna de hierba) tiene aristas abiertas en su límite. La activación de Conservar zona resulta útil para evitar esta reducción cuando Nanite está activado. Cuando Nanite simplifica la geometría en la distancia reduciendo el número de triángulos, eventualmente necesita empezar a eliminar algunos de estos elementos disjuntos por completo. Si Nanite no dispone de más información, el resultado parecerá más delgado porque ha habido una gran pérdida de superficie. Conservar zona redistribuirá esa zona perdida entre los triángulos restantes dilatando los bordes abiertos de los límites. La dilatación para las formas simétricas como las hojas tiene el mismo efecto que escalarlas. En los casos de formas no simétricas como cintas, por ejemplo briznas de hierba, tiene el efecto de hacerlas más gruesas.
Se recomienda utilizar la opción Conservar zona para todas las mallas de follaje, pero no para las mallas que no son de follaje.
La visualización del clúster de Nanite proporciona una vista más clara de cómo Conservar zona redistribuye la zona perdida.
A continuación se ofrecen algunas recomendaciones a la hora de utilizar y crear recursos de follaje teniendo en cuenta Nanite. Todavía estamos probando y aprendiendo cuáles son los mejores planteamientos. De momento, hemos visto que el follaje utilizando Nanite debe ser creado de forma diferente que antes, pero si juegas con sus puntos fuertes puedes obtener resultados más rápidos y de mayor calidad con Nanite.
- Utiliza Conservar zona (activada en el Editor de mallas estáticas).
- Utiliza geometría en vez de tarjetas con máscara.
- Los materiales con máscara son más costosos que los opacos. Probablemente, los resultados más rápidos se obtienen si no se utilizan en absoluto.
- El método tradicional de tarjetas (muchos elementos se representan con una sola tarjeta) con Nanite puede ser más lento que sin Nanite. No esperes que activar Nanite en el follaje basado en tarjetas suponga siempre una mejora de rendimiento.
- Los píxeles con máscara cuestan casi tanto como los píxeles dibujados. El sobredibujo ya es un problema con los agregados en Nanite. Si se utiliza un material con máscara, la visualización de sobretrazado de Nanite no te informará de todo en términos de coste. El sobretrazado es un concepto complejo en este caso y la visualización solo muestra un aspecto concreto del mismo.
- La geometría de follaje ha demostrado ser más rápida con Nanite que con los enfoques por tarjeta, tanto con tarjetas de Nanite como sin ellas. También se ve mejor.
- El paquete Megascans: Grass disponible en Unreal Engine Marketplace ofrece buenos ejemplos para realizar pruebas. El paquete ofrece tanto geometría con máscara y formada por muchos polígonos, en la que cada elemento es independiente, como tarjetas con máscara y formadas por pocos polígonos, en las que muchos elementos están representados por una sola tarjeta.
- Al utilizar el Desplazamiento de la posición del mundo (WPO), cuantos más vértices, mayor coste. La lógica de WPO debe ser limitada y supervisada.
- Los problemas explicados en la sección Geometría de agregados de esta página siguen siendo aplicables. Los bosques densos (como en los ejemplos anteriores) se renderizarán mucho más despacio que la misma escena con todas las mallas sustituidas por formas sólidas del mismo número de triángulos.
Flujos de trabajo híbridos de contenido con y sin Nanite
Las siguientes secciones destacan los flujos de trabajo que puedes utilizar en tus proyectos con Nanite que necesiten ser compatibles también con características y plataformas que no sean Nanite sin duplicar activos.
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 Nanite a través del Explorador de contenido o del Editor de mallas estáticas.
Desde el Explorador de contenido, puede utilizar el menú contextual haciendo clic con el botón derecho del ratón 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 desea importar.
Como alternativa, puedes utilizar el Editor de mallas estáticas para importar una malla de alta resolución mediante la configuración de Nanite en el panel Detalles. Haz clic en Importar y navega hasta el archivo que quieras importar.
Mediante este flujo de trabajo, la malla estática ya existente y su cadena de nivel de detalle (LOD) se convierten en la Malla alternativa en vez 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 tiene en cuenta la configuración No permitir Nanite en los Actores de la malla estática en las escenas y se explica más adelante en la sección Opciones de componentes de malla estática.
Flujos de trabajo de materiales
Existen dos modos para mejorar los flujos de trabajo con materiales de Nanite y no Nanite: mediante el uso de un nodo en el grafo de materiales para romper las rutas lógicas, o mediante el uso de un material de anulación que solo se utiliza para renderizar con Nanite.
Nodo de cambio de pasada de Nanite
El nodo Cambio de pasada de Nanite permite definir un comportamiento especializado en un grafo de material cuando se renderiza con Nanite.
Utiliza la entrada Predeterminada al renderizar en pasadas que no sean Nanite, para manejar el material como se haría normalmente. Utiliza la entrada Nanite para cualquier lógica de material que quieras simplificar o que se renderice específicamente a pasadas de Nanite. Por ejemplo, cuando un material utiliza una característica no compatible con Nanite, podrías 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 materiales. Al establecer un material de anulación, todas las mallas activadas para Nanite que tengan asignado el material o la instancia de material utilizarán en su lugar el material de anulación de Nanite referenciado. Esto quiere decir que puedes crear materiales específicos para los flujos de trabajo de Nanite en vez de gestionar la lógica directamente dentro del grafo de materiales utilizando el nodo Cambio de pasada de Nanite.
En las instancias de material, la ranura de material de anulación de Nanite se establece de forma forzada de forma predeterminada en Ninguna para que la configuración de la anulación en un material principal no provoque que se herede automáticamente en ninguna de las instancias secundarias de ese material.
En el ejemplo que se muestra a continuación, la malla estática de la estatua tiene activado Nanite y se le ha aplicado una instancia de material. La instancia de material tiene su Material de anulación de Nanite establecido con algunos cambios de color simples para fines demostrativos. El Actor de malla estática de la izquierda muestra el Material de anulación de Nanite ya que la malla se está renderizando con Nanite. El Actor de malla estática de la derecha muestra el mismo material hasta que se establece No permitir Nanite en el actor, desactivando el Material de anulación de Nanite para mostrar el material base no 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 activadas para Nanite deben utilizar su representación Nanite utilizando la configuración No permitir Nanite en actores de escena individuales. Esto quiere decir que puedes mezclar actores Nanite y no Nanite que utilicen el mismo recurso de malla estática.
El ejemplo que aparece a continuación muestra un único recurso de malla estática activada para Nanite, donde la representación de malla de la izquierda corresponde a Nanite y la de la derecha tiene activada la opción No permitir Nanite.
Terreno de paisaje
Esta característica es experimental.
Para utilizar Nanite con tu terreno de paisaje, selecciónalo y utiliza el panel Detalles para marcar la casilla que aparece al lado de Activar Nanite.
Existen dos formas para compilar la representación de malla de Nanite a partir de los datos del paisaje:
- Pulsa el botón Recompilar datos en el panel Detalles del paisaje, en la sección Nanite.
- Utiliza el menú Compilación para seleccionar Compilar solo Nanite.
En función del tamaño del paisaje, o del número de mosaicos, la generación de la representación Nanite puede tardar un momento. Cuando finalice, podrás comprobarlo en los modos de visualización de Nanite.
Las siguientes variables de consola resultan útiles a la hora de trabajar con paisajes activados por Nanite:
- "Landscape.LiveRebuildNaniteOnModification" activa la recompilación de la representación de Nanite cuando se produce una modificación. (El valor predeterminado es 0)
- "Landscape.RenderNanite" establece si el paisaje se debe renderizar con Nanite o no. (El valor predeterminado es 1)
Los paisajes activados para Nanite tienen las siguientes limitaciones:
- Al utilizar la modificación en vivo de paisajes con Nanite ("Landscape.LiveRebuiltNaniteOnModification 1"), hace que el esculpido de paisajes sea casi inutilizable ya que recompila la representación de Nanite de todos los actores del paisaje en cada fotograma.
- La resolución máxima de la malla de Nanite es la misma que la de LOD0 para paisaje. No se debe esperar un aumento de la resolución utilizando Nanite sobre un paisaje normal. En su estado actual, se trata puramente de una optimización en tiempo de ejecución.
- El guardado de actores de paisaje con Nanite activado, cuando la malla de Nanite no ha sido actualizada, es más lento ya que las mallas de Nanite tienen que ser compiladas antes de ser guardadas.
Aspectos técnicos:
- Actualmente, los paisajes de Nanite se retransmiten además de la retransmisión habitual de datos de paisajes porque tanto los datos de Nanite como los que no son de Nanite son necesarios en tiempo de ejecución, siendo estos últimos necesarios para las texturas virtuales en tiempo de ejecución, el renderizado del agua, etc. Esto supone que los datos se deben retransmitir dos veces (un conjunto de datos con la retransmisión de Nanite y otro con la retransmisión de texturas) y residir en la memoria cuando Nanite está activado.
- El rendimiento en tiempo de ejecución mejora con el renderizado de Nanite, sobre todo en lo que se refiere a las pasadas de sombra, pero no se debe esperar ninguna mejora visual (o degradación), ya que los datos de origen son los mismos.
- Se espera que el nivel jerárquico de detalle (HLOD)/la retransmisión se comporte de forma idéntica a como lo hace un paisaje que no sea Nanite.
Al editar paisajes activados para Nanite, se recomienda mantener desactivada la recompilación en vivo de las mallas de Nanite ("Landscape.LiveRebuiltNaniteOnModification 0"). El renderizado de paisajes se basa en paisajes que no sean de Nanite hasta que la malla de Nanite se recompile (ya sea al guardar o al usar Compilar solo Nanite / Compilar todos los paisajes en el menú Compilación) y se actualice, en cuyo caso usará esa versión para el renderizado. Como no debería existir ninguna diferencia visual importante entre los paisajes de Nanite y los que no son de Nanite, esto significa que el rendimiento en el editor mientras se utiliza el paisaje que no sea de Nanite no es representativo del rendimiento en tiempo de ejecución en tu proyecto.
Rendimiento del contenido normal
Con fines de comparación, se han tomado los siguientes tiempos de GPU de la demostración técnica de Unreal Engine 5 Lumen en el mundo de Nanite en una PlayStation 5:
- Resolución media de renderizado de 1400p submuestreada 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 de Nanite
- Prácticamente sin coste de CPU, ya que funciona al 100% en la GPU
- ~2 ms para evaluar los materiales de todas las mallas de Nanite
- Coste de CPU bajo con 1 llamada de trazado por material presente en la escena
Si consideramos estos tiempos de GPU juntos, son aproximadamente 4,5 ms en total lo que sería equivalente al paso previo de profundidad de Unreal Engine 4 más el paso base. Esto hace que Nanite resulte ideal para proyectos de juegos a 60 FPS.
Cabe esperar este tipo de resultados de los contenidos que no sufren los problemas de rendimiento mencionados en las secciones anteriores. Los recuentos de instancias muy elevados y la gran cantidad de materiales únicos también pueden provocar un aumento de los costes y es un aspecto del desarrollo de Nanite en el que se está trabajando activamente.
Tamaño de datos
Teniendo en cuenta el microdetalle que Nanite es capaz de alcanzar, podría suponerse que esto implica un gran aumento de los datos de geometría, lo que se traduce en mayores tamaños de paquetes de juego y descargas para los jugadores. No obstante, la realidad no es tan grave. De hecho, el formato de malla de Nanite es considerablemente más pequeño que el formato de malla estática estándar debido a la codificación especializada de malla de Nanite.
Por ejemplo, utilizando la muestra de Unreal Engine 5 de Valley of the Ancients, las mallas de Nanite tienen una media de 14,4 bytes por triángulo de entrada. Esto significa que una malla de Nanite media de un millón de triángulos ocupará ~13,8 megabytes (MB) en disco.
Si comparamos una malla tradicional formada por pocos polígonos y su mapa de normales con una malla de Nanite formada por muchos polígonos, veremos algo parecido a lo siguiente:
Malla formada por pocos polígonos
Tamaño del paquete comprimido de malla estática: 1,34MB |
Malla de Nanite
Tamaño del paquete comprimido de malla estática: 19,64MB |
No obstante, el tamaño del paquete comprimido no es el tamaño total del recurso. También hay que tener en cuenta las texturas exclusivas que solo utiliza esta malla. Muchos de los materiales utilizados por las mallas tienen sus propias texturas únicas compuestas por texturas diferentes de Normales, BaseColor, Metálico, Especular, Rugosidad y Máscara.
Este recurso en particular utiliza solo dos texturas (BaseColor y Normal) y por lo tanto no ocupa tanto espacio en disco como uno con muchas otras texturas únicas. Por ejemplo, el tamaño de la malla de Nanite con ~1,5 millones de triángulos es inferior (19,64 MB) al de una textura de mapa de normales 4k.
Tipo de textura | Tamaño de textura | Tamaño en disco |
---|---|---|
BaseColor | 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 formada por pocos polígonos: 31,04MB
- Malla formada por muchos polígonos: 49,69MB
Puesto que la malla de Nanite ya es muy detallada, podemos intentar sustituir el mapa de normales único por una normal de detalle de mosaico que se comparta con otros recursos. A pesar de que, en este caso, se produce cierta pérdida de calidad, es bastante pequeña y, desde luego, mucho menor que la diferencia de calidad entre la versión formada por pocos polígonos y la versión formada por muchos polígonos. Por lo tanto, una malla de Nanite de 1,5M de triángulos puede tener mejor aspecto y ser más pequeña que una malla formada por pocos polígonos con un mapa de normales 4K.
Tamaño total comprimido de la malla y las texturas de Nanite: 27,83MB
Se pueden realizar multitud de experimentos con la resolución de las texturas y los mapas normales de detalle, pero esta comparación en concreto pretende demostrar que los tamaños de los datos de las mallas de Nanite no son muy distintos de los datos con los que los artistas ya están familiarizados.
Por último, podemos comparar la compresión de Nanite con el formato estándar de malla estática utilizando el high poly, donde ambos son idénticos en LOD0.
Malla estática formada por muchos polígonos
Tamaño del paquete comprimido de malla estática: 148,95MB |
Malla de Nanite
Tamaño del paquete comprimido de malla estática: 19,64MB |
Si comparamos la compresión de Nanite anterior con un tamaño de 19,64MB es 7,6x más pequeña que la compresión estándar de malla estática con 4 LOD.
La compresión de Nanite y el tamaño de los datos son aspectos clave que se mejorarán en futuras versiones de Unreal Engine.
Consejos generales sobre el tamaño de datos
Los sistemas Nanite y Texturas visuales, junto con las rápidas unidades SSD, han reducido la preocupación por los costes de ejecución de la geometría y las texturas. El mayor cuello de botella es ahora cómo hacer llegar estos datos al usuario.
El tamaño de los datos en disco es un factor importante a la hora de decidir cómo se distribuyen los contenidos (en soporte físico o descargándolos a través de Internet), y la tecnología de compresión tiene un límite. El promedio de ancho de banda de Internet de los usuarios finales, el tamaño de los soportes ópticos y el tamaño de los discos duros no han aumentado al mismo ritmo que el ancho de banda y la latencia de acceso a los discos duros, la potencia de cálculo de las GPU y la tecnología de software como Nanite. Hacer llegar esos datos a los usuarios está siendo todo un desafío.
El renderizado eficiente de mallas muy detalladas es menos preocupante con Nanite, pero el almacenamiento de sus datos en disco es ahora el aspecto clave que hay que tener bajo control.
Modos de visualización
Nanite incluye varios modos de visualización para inspeccionar los datos en la escena actual.
En el visor Nivel, en el menú desplegable Modos de visualización, coloca el cursor sobre Visualización de Nanite y selecciona una opción.
La visualización Descripción general muestra la escena renderizada en el centro de la imagen con visualizaciones de Nanite seleccionadas alrededor de la pantalla como referencia.
Puedes elegir entre los siguientes modos de visualización de Nanite:
Visualización de Nanite | Descripción |
---|---|
Máscara | Visualización que marca la geometría de Nanite (verde) y no Nanite (rojo). |
Triángulos | Muestra todos los triángulos de las mallas de Nanite en la escena actual. |
Clústeres | Muestra representaciones en color de todos los grupos de triángulos que se están renderizando en la vista de escena actual. |
Primitivas | Visualización que colorea todos los componentes del mismo color para todas las instancias de una malla estática de instancias (ISM). |
Instancias | Visualización que aplica un color diferente a cada instancia de la escena. |
Sobretrazado | Muestra la cantidad de sobretrazado que se está produciendo para la geometría de la escena. Los objetos más pequeños que se apilan estrechamente crean más sobretrazado que los más grandes. |
ID de material | Muestra colores separados para cada ID de material de las mallas individuales de Nanite. |
Mapa de luz UV | Visualización que muestra las coordenadas UV de las superficies de la malla de Nanite. |
Evaluar WPO | Colorea las geometrías activadas por Nanite que utilizan el desplazamiento de la posición del mundo (verde) frente a las que no (rojo). |
Nanite dispone de un modo de visualización Avanzado que permite opciones de visualización adicionales en el menú Visualización de Nanite. Estas visualizaciones resultan útiles para los programadores que están depurando o creando perfiles de distintos aspectos de bajo nivel de Nanite.
Activa este modo de visualización avanzada con la variable de consola "r.Nanite.Visualize.Advanced 1".
Variables y comandos de consola
Las siguientes estadísticas y variables de consola están disponibles para su uso en la depuración y configuración de Nanite.
El renderizado de Nanite se puede activar y desactivar globalmente en tiempo de ejecución utilizando la variable de consola "r.Nanite 0". La desactivación de Nanite es una buena forma para emular las plataformas que no son compatibles.
Modos de renderizado Nanite alternativos
Nanite ofrece modos de renderizado de malla alternativos para cuando Nanite está desactivado o no es compatible con una plataforma. Puedes controlar qué modo se utiliza mediante la variable de consola "r.Nanite.ProxyRenderMode".
- 0 es el modo por defecto y pasa a renderizar mallas alternativas, o LOD controlados por el espacio en pantalla, si están configurados. Esto incluye el reconocimiento de LOD mín. en las propiedades del Editor de mallas estáticas (descritas en la sección Mallas alternativas más arriba).
- 1 desactiva todo el renderizado de mallas activadas para Nanite.
- 2 funciona de forma similar al modo 1 pero permite la visualización Mostrar > Nanite alternativo en el Editor de mallas estáticas para renderizar un Nanite alternativo.
Los modos de renderizado alternativo 1 y 2 resultan útiles para escenas que tienen muchas más instancias que las que se podrían admitir sin Nanite. Estos permiten abrir la escena en el editor en plataformas no compatibles con Nanite.
Por ejemplo, en el proyecto de muestra de Unreal Engine 5 de Valley of the Ancients, si se desactiva Nanite, se producirán decenas de miles de llamadas de trazado regulares, dificultando la apertura del mapa en una plataforma no compatible.
Comando de estadísticas de Nanite
El comando Nanitestats añade una superposición de estadísticas de eliminación selectiva de Nanite en la parte superior derecha de la ventana.
Los argumentos del comando se utilizan para indicar las estadísticas que Nanite muestra en pantalla. Si no se proporciona ningún argumento, se utilizará la vista principal.
Utiliza "Nanitestats List" para ver todas las vistas disponibles en la salida de depuración:
- Principal
- VirtualShadowMaps
También podrás ver otras estadísticas disponibles para "ShadowAtlas" y "CubemapShadows" cuando estén disponibles. Selecciona una vista introduciendo el comando seguido del nombre de la lista de estadísticas que deseas ver. Por ejemplo, puedes introducir "NaniteStats VirtualShadowMaps".
Para las vistas que utilizan la eliminación selectiva de oclusiones en dos pasadas, las estadísticas están divididas en depósitos separados para la pasada principal y la pasada subsiguiente.
Controlar el tamaño del grupo de retransmisión de Nanite
Controla la cantidad de memoria dedicada a mantener los datos de retransmisión de Nanite con la variable de consola "r.Nanite.Streaming.StreamingPoolSize". Si se utilizan grupos más grandes, se reduce el trabajo de E/S y descompresión al desplazarse por la escena, pero a costa de un mayor consumo de memoria.
Si el grupo no es lo suficientemente grande como para contener todos los datos necesarios para una vista, es posible que se produzca una paginación excesiva (thrashing) de la caché en la que la retransmisión nunca se estabilice, ni siquiera para una vista estática.
Esta variable de consola no se puede modificar en tiempo de ejecución y se debe especificar en un archivo de configuración (.ini).
Establecer la cantidad máxima de clústeres en una sola pasada
Puedes especificar la cantidad máxima de clústeres candidatos y visibles utilizados en una sola pasada con la variable de consola "r.Nanite.MaxCandidateClusters" y "r.Nanite.MaxVisibleClusters". Estos valores se utilizan para determinar el tamaño de los búferes intermedios y sus valores por defecto se han elegido para que funcionen en los escenarios de renderizado más comunes.
No existe ningún mecanismo para redimensionar dinámicamente ninguno de estos búferes, ni para reducir la calidad de forma automática en caso de desbordamiento, lo que puede ocasionar artefactos de renderizado por ser demasiado pequeños para la complejidad de la escena, y manifestarse normalmente como geometría ausente o parpadeante. Cuando se producen este tipo de artefactos, utiliza "Nanitestats" para determinar límites prudenciales para los candidatos y los clústeres visibles. Más concretamente, fíjate en las estadísticas de ClustersSW y ClustersHW. El coste de memoria de un clúster candidato es actualmente de 12 bytes y el de un clúster visible es de 16 bytes.
Esta variable de consola no se puede modificar en tiempo de ejecución y se debe especificar en un archivo de configuración (.ini).