La texturización virtual de transmisión es una forma alternativa de transmitir texturas en tu proyecto desde el disco. La texturización virtual de transmisión tiene varias ventajas, junto con algunas desventajas, en comparación con la transmisión de texturas basada en un MIP existente en Unreal Engine.
La transmisión de texturas tradicional basada en MIP realiza un análisis sin conexión del uso de UV del material y, a continuación, en tiempo de ejecución, decide qué niveles de MIP de una textura cargar en función de la visibilidad y la distancia del objeto. Este proceso puede suponer limitaciones debido a que los datos de transmisión que se toman en cuenta son todos los niveles de MIP de textura.
Cuando se utilizan texturas de alta resolución, cargar un nivel MIP superior de una textura puede tener una sobrecarga significativa de rendimiento y memoria. Además, la CPU toma decisiones de transmisión de textura basadas en MIP donde utiliza la visibilidad y el cribado de objetos según la CPU.
La visibilidad es más conservadora (lo que significa que es más probable que el sistema cargue algo que no) para evitar que los objetos aparezcan a la vista. Así, si es visible aunque sea una pequeña parte del objeto, se considerará visible todo el objeto. El objeto cargado, incluida cualquier textura asociada que pueda ser necesaria para transmitirlo.
En cambio, el sistema de texturización virtual solo transmite las partes de las texturas que UE requiere para la visibilidad. Para ello, divide todos los niveles de MIP en teselas/repeticiones de tamaño pequeño y fijo. La GPU determina a cuál de las teselas visibles acceden todos los píxeles visibles en la pantalla. Esto significa que, cuando UE considera que un objeto es visible, se lo comunica a la CPU, que carga las teselas necesarias en una memoria caché de la GPU. Independientemente del tamaño de la textura, el tamaño fijo de la tesela de las SVT solo tiene en cuenta las que son visibles. La GPU de teselas calcula la visibilidad utilizando búferes de profundidad estándar, lo que hace que las solicitudes de texturización virtual de transmisión solo se produzcan para partes visibles que afectan a los píxeles.
Cómo habilitar la texturización virtual
En Configuración del proyecto, en Motor > Renderización > Texturas virtuales, marca la casilla situada junto a Habilitar compatibilidad con texturas virtuales.
[
] Haz clic en la imagen para verla a tamaño completo.
En la categoría Editor > Importación de texturas > Texturas virtuales, en Configuración del proyecto, puedes especificar un tamaño de textura mínimo que tener en cuenta en la texturización virtual de transmisión de las texturas recién importadas. Si una textura tiene ese tamaño mínimo, Transmisión de texturas virtuales se habilitará automáticamente para ese recurso de textura.
Para obtener más información sobre estos ajustes, consulta la página Referencia de texturización virtual.
Cómo convertir texturas y materiales
Habilitar texturas virtuales para tu proyecto significa que las texturas y los materiales requieren configuración para funcionar correctamente; la textura debe habilitar la compatibilidad con Transmisión de texturas virtuales, y las muestras de textura del material se requieren para utilizar un tipo de muestreador virtual en lugar de uno no virtual.
Elige una de las opciones que tienes a continuación para configurar correctamente las texturas y los materiales y usarlos con la texturización virtual de transmisión.
Opción de menú de conversión
-
Selecciona en el explorador de contenido un recurso de textura que quieras convertir para utilizar la texturización virtual de transmisión.
-
Haz clic con el botón derecho para abrir el menú contextual y selecciona Convertir en textura virtual.
Esta opción de menú también te permite convertir una textura virtual en una textura normal.
-
En la ventana Convertir en se muestran las texturas que has seleccionado y los materiales que hacen referencia a ellas.
-
Haz clic en Aceptar para iniciar el proceso de conversión.
Durante el proceso de conversión, los recursos de textura tendrán habilitado Transmisión de texturas virtuales en los ajustes de su editor de texturas. Los materiales que hacen referencia a las texturas seleccionadas convertirán los nodos Texture Sample para usar el tipo de muestreador virtual en lugar del tipo de muestreador no virtual.
Conversión manual
- Abre el Editor de texturas de un recurso de textura dado al hacer doble clic en él en el explorador de contenido.
-
En el panel Detalles, en Textura, habilita Transmisión de texturas virtuales.
Si habilitas esta opción sin utilizar la opción de menú de conversión anterior, se invalidarán inmediatamente los materiales existentes que hagan referencia a una textura convertida. Debes abrir cualquier material que haga referencia a la textura infractora y configurar el nodo Texture Sample para que utilice el tipo de muestreador virtual correcto. Por ejemplo, una textura virtual debe utilizar el tipo de muestreador Color virtual en lugar de Color.
Cuando encuentres un nodo Texture Sample que no utilice el tipo de muestreador correcto, UE mostrará un mensaje de error en el panel Estadísticas y a lo largo de la parte inferior del nodo, así:
- El mensaje de error identifica el tipo de muestreador incorrecto para la expresión de muestra de textura VT asignada.
- Cambia el tipo de muestreador de la muestra de textura a uno de los tipos virtuales.
- La muestra de textura VT se renderiza correctamente, indicada por «VT» en la esquina inferior derecha de la expresión.
Cuando añades una textura virtual a un grafo de material, UE asigna automáticamente el tipo de muestreador virtual. Sin embargo, si conviertes la expresión en un parámetro de muestra de textura que puedas utilizar en instancias de material, ten en cuenta que el material base aplica el tipo de muestreador virtual a todas las instancias subordinadas. Recuerda que no puedes asignar una textura virtual a una ranura de parámetro de textura que no sea ya de tipo virtual en el material base.
Compatibilidad con UDIM
U-Dimension (o «UDIM») es una convención de nomenclatura de texturas que habilita varias imágenes de textura para asignarlas a regiones UV separadas en un modelo de malla estática o malla esquelética. Cuando se utilice la convención de nomenclatura UDIM, UE importará grupos de archivos de imagen como un único recurso de textura virtual.
La compatibilidad con texturas virtuales para UDIM es beneficiosa por un par de motivos:
- Funciona con muchas texturas separadas pequeñas en lugar de con texturas extremadamente grandes.
- Cada imagen UDIM puede tener una resolución diferente, lo que permite texturas virtuales con densidad de píxeles no uniforme.
Por ejemplo, si importas una textura virtual UDIM compuesta por cuatro archivos de imagen (dos de 2048 x 2048 y dos de 128 x 128) dispuestos en un patrón de 2 x 2, la textura virtual muestreará lógicamente estas imágenes como una única textura de 4098 x 4098. UE estirará las imágenes de 128 x 128 para que rellenen la misma área que las imágenes de 2048 x 2048 sin que ello afecte al uso de disco o memoria en tiempo de ejecución. Hacer que las texturas de 128 x 128 rellenen la resolución de una textura de 2048 x 2048 no consumirá memoria en este caso.
Para obtener más información sobre el proceso de trabajo de UDIM, consulta el tutorial El proceso de trabajo de UDIM de Foundry.
Empieza a utilizar texturas UDIM con texturización virtual en tus propios proyectos usando esta convención de nomenclatura:
BaseName.####.[Admitir formato de imagen]
Por ejemplo:
MyTexture.1001.png
Cuando UE importa una imagen que coincide con esta convención de nomenclatura, busca en la carpeta fuente otras imágenes que coincidan con el mismo BaseName, seguido de un número de coordenada diferente. En cada imagen localizada, el número de cuatro cifras definirá la ubicación a la que UE debe asignar la imagen. Al importar texturas tradicionales, la asignación se produce a los UV de malla en el intervalo de 0-1, pero la imagen UDIM realiza la asignación a un espacio 0-1 de UV en función de su coordenada UV definida.
Durante la importación, las texturas UDIM se invertirán verticalmente, porque, al muestrear los UV en Unreal Enigne, las coordenadas de la esquina superior izquierda son (0,0). Los UV de mallas que utilizan texturas UDIM también se ajustarán durante la importación para que funcionen correctamente con la orientación de la textura UDIM importada. De este modo, una vez importados en el motor, los UV usados para muestrear UV como la textura anterior en un material tendrían el siguiente aspecto:
Rendimiento y coste
Mide el rendimiento y el coste de las texturas virtuales de tu proyecto mediante las siguientes secciones:
Texturización virtual de estadística
Abre la consola con la tecla de acento grave (`) e introduce los siguientes comandos para habilitar su información estadística:
Utiliza stat virtualtexturing para ver detalles del coste de escena de texturización virtual en milisegundos (ms) y contadores de tablas de páginas.
Utiliza stat virtualtexturememory para mostrar los contadores de memoria relacionados con el uso de texturización virtual en la escena actual.
Visualización de texturización virtual de transmisión
Utiliza el comando de consola r.VT.límite 1 para dibujar una cuadrícula de visualización de MIP en los materiales que utilicen texturas virtuales de transmisión.
Utiliza r.VT.límite 0 para ocultar la cuadrícula cuando ya no la necesites.
Búsquedas y pilas de materiales
Muestrear una textura virtual del material cuesta más que muestrear una textura tradicional. Puedes dividir el coste de la textura virtual en dos categorías:
- Se producen búsquedas para cada textura virtual que el proyecto muestrea en el grafo de material.
- Las pilas combinan las texturas virtuales cuando el proyecto utiliza los mismos UV y la fuente del muestreador.
Las texturas virtuales siempre serán más caras que el muestreo de texturas tradicionales. Siempre habrá al menos dos cargas de textura y algunas instrucciones matemáticas. Sin embargo, parte de ese coste se amortiza al combinar las pilas (hasta 8) para las muestras de texturas virtuales que utilizan los mismos UV y la misma fuente de muestreador.
En este sencillo ejemplo de material, UE muestrea dos expresiones de muestras de texturas virtuales mediante los UV predeterminados. Se añade una búsqueda de texturas virtuales por cada búsqueda de esa textura muestra y, como ambas utilizan un único UV, se combinan en una única pila de texturas virtuales:
Sin embargo, si el proyecto utiliza UV diferentes, el coste aumenta con dos cargas de la pila de texturas virtuales:
El primer ejemplo utiliza tres cargas de textura en total: dos búsquedas y una pila. Como las muestras de texturización virtual utilizan los mismos UV, UE combina sus pilas para guardar una carga de textura. En el segundo ejemplo, hay un total de cuatro cargas de textura: dos búsquedas y dos pilas. Las muestras de texturas virtuales utilizan UV diferentes para el color base y las muestras de texturas normales, lo que significa que no se pueden combinar en una sola pila.
Otras notas de material
- UE divide las texturas virtuales de transmisión en teselas de tamaño fijo para cada textura, sin importar su tamaño. También limita el MIP de resolución más baja por el tamaño de la tesela. En muchos casos, esto no supondrá un problema; sin embargo, las texturas con mucho ruido o un alto nivel de detalle pueden mostrar aliasing o efecto muaré debido a la falta de MIP de baja resolución. Ten en cuenta que esto también plantea un coste potencial de rendimiento de la GPU, aunque puede ser difícil de medir en la práctica.
Limitaciones
En general, las texturas virtuales son intercambiables con las texturas normales, con la salvedad de que existen algunas limitaciones y un coste añadido:
- Las dimensiones de textura deben ser una potencia de 2, pero UE no requiere que sean cuadradas por naturaleza. Sin embargo, utilizan la memoria de forma más eficaz en la implementación actual.
- El filtrado trilineal entre MIP se admite de forma estocástica. Cuando se utiliza el antialiasing temporal (TAA), es casi idéntico al filtrado trilineal normal, pero puede introducir algo de ruido visible en algunos casos.
- UE limita la compatibilidad con el filtrado anisotrópico por el tamaño del ajuste Límite de teselas. El valor predeterminado de 4 permite un filtrado anisotrópico menor del típico para las texturas, pero aumentar este valor aumenta el uso de memoria.
- La transmisión de texturización virtual es reactiva por naturaleza, lo que significa que la CPU no sabe que debe cargar una tesela de texturización virtual determinada hasta que ya la ha requerido un fotograma renderizado. Por tanto, a medida que la Cámara se mueve por la escena, pueden mostrarse algunos elementos emergentes, sobre todo cuando se cargan teselas de texturización virtual de mayor resolución.