Texturizado estocástico procedimental en Unity

¿Has probado alguna vez a utilizar texturas en mosaico para cubrir grandes superficies o añadir detalles a tus mallas? Si es así, probablemente esté familiarizado con el patrón de repetición visible que aparece rápidamente con valores de embaldosado más altos. En Unity Labs hemos desarrollado una nueva técnica de texturizado que evita este problema, el texturizado estocástico procedimental.
Las texturas enlosables son una herramienta útil para añadir detalle a tus escenas 3D. Sin embargo, cuando se desea texturizar grandes áreas o conseguir superficies muy detalladas utilizando texturas enlosables y mapas de detalle, los patrones de enlosado se hacen visibles. Este efecto se ilustra en la parte izquierda de la siguiente imagen. Normalmente, para reducir los patrones de repetición se necesitan texturas más grandes u ocultar la repetición visible con objetos adicionales. En esta entrada de blog, proporcionamos un plugin que resuelve este problema para texturas con apariencias estocásticas, como óxido, musgo, corteza, etc. Su impacto se muestra en la parte derecha de la siguiente imagen.

Descargue el plugin aquí.
Dada una textura de entrada, el plugin generará proceduralmente una textura infinita que coincida con la apariencia de la entrada. Para ello, aprovechamos una función de mezcla de texturas de última generación que opera sobre una versión modificada de la textura de entrada, que sólo requiere tres muestras de textura por fragmento, y recuperamos una pequeña tabla de consulta. Dado que el plugin evita la necesidad de utilizar mosaicos, permite cubrir superficies más grandes con texturas más pequeñas y mayores niveles de detalle sin artefactos de repetición.
El plugin proporciona una variante del shader Estándar, que se incluye en un paquete de Unity. Una vez que haya importado el paquete, seleccione el shader StandardStochastic para su material. La interfaz es la misma que la del sombreador estándar, con la adición de dos nuevos controles en la parte superior, correspondientes a los dos pasos de configuración necesarios:


El menú Stochastic Inputs permite especificar en cuál de las texturas de entrada se desea activar nuestra técnica (puede establecerse en Everything, o en texturas específicas, por ejemplo, albedo y/o normal map).
El botón Aplicar precalcula los datos para las entradas estocásticas seleccionadas y actualiza el material, finalizando el proceso. Para cada textura de entrada, este paso genera dos texturas intermedias situadas en la misma carpeta.
Algunas observaciones adicionales:
- Dado que las texturas intermedias existentes se cargan cuando se detecta que saltan los tiempos de generación, cualquier modificación de la textura original requiere borrarlas ambas antes de volver a pulsar el botón Aplicar para forzar su regeneración.
- Al cambiar entre los shaders Estándar y EstándarEstocástico, los parámetros se transfieren de un lado a otro.
- También se proporciona un sombreador StandardStochastic (configuración Especular) para los materiales que utilizan el flujo de trabajo Especular.
Los siguientes ejemplos muestran el prototipo trabajando con diferentes materiales utilizando texturas de entrada pequeñas (256²).



Esta técnica sólo es compatible con texturas estocásticas y casi estocásticas enlosables, como las texturas que se asemejan al ruido aleatorio cuando se ven desde lejos y los materiales de aspecto típicamente natural sin formas geométricas precisas.

Se trata de un prototipo de investigación; no está en desarrollo activo. Por lo tanto, no garantizamos el mantenimiento ni la asistencia, pero no dudes en plantear cualquier pregunta o sugerencia en este hilo del foro de Unity. Actualmente estamos trabajando en una implementación de ShaderGraph para shaders personalizados y compatibilidad con los nuevos pipelines de renderizado. Esté atento a las actualizaciones en el hilo del foro.
¿Tienes curiosidad por saber cómo funciona el plugin? Consulte nuestros dos trabajos de investigación publicados recientemente sobre el tema, en los que se basa nuestro plugin:
- Papel: Ruido por ejemplo de alto rendimiento utilizando un operador de mezcla que preserva el histograma - Eric Heitz y Fabrice Neyret, HPG 2018
- Capítulo técnico: Texturas estocásticas procedimentales por mosaico y mezcla - Thomas Deliot y Eric Heitz, GPU Zen 2
- Consulte nuestros otros trabajos de investigación en Unity: Publicaciones de Unity Labs
El código suministrado con el plugin incluye comentarios que remiten a secciones específicas del capítulo técnico.
