Unity incorpora un nuevo tipo de asset llamado como Procedural Materials. Estos son esencialmente lo mismo que los Materials estándar excepto que las texturas que utilizan se pueden generar en tiempo de ejecución en vez de estar pre-definidas y almacenadas.
El código script que genera una textura de manera procedimentalmente típicamente tomara menos espacio en el almacenamiento y transmisión que una imagen bitmap por lo que los Procedural Materials pueden ayudar a reducir tiempos de descarga. Adicionalmente, el script de generación se puede equipar con parámetros que se pueden cambiar con el fin de variar la propiedades visuales del material en tiempo de ejecución. Estas propiedades pueden ser cualquier cosa desde variaciones de color al tamaño de los ladrillos en una pared. No solamente esto significa que muchas variaciones se pueden generar de un solo Procedural Material pero también que el material se puede animar en una base de frame-por-frame. Muchos efectos visuales interesantes son posibles - imagine un persona que gradualmente se vuelve en piedra o un ácido que daña una superficie a medida que lo toca.
El sistema de Procedural Material de Unity se basa alrededor de un estándar de la industria llamado Substance, desarrollado por Allegorithmic.
Los Procedural Materials actualmente son soportados completamente para los objetivos de construcción Standalone (Windows, Mac, Linux), Android e IOS, Playstation 4 y Xbox One. La generación de Procedural Material se basa en el CPU, y funciona en todas las configuraciones de hardware en estas plataformas.
Para todas las demás plataformas (consolas, WSA, WebGL, Tizen), Unity va a pre-render (“bake”) a estas en materiales ordinarios durante la construcción. Aunque esto niegue los beneficios de tiempo de ejecución de la generación procedimental, todavía es útil para crear variaciones en materiales básicos en el editor.
Un Procedural Material se proporciona como un archivo Substance Archive (SBSAR) que puede importar como cualquier otro asset (arrastrar y soltar directamente a la carpeta Assets o utilizar Assets->Import New Asset…). Un asset Substance Archive contiene uno o más Procedural Materials y contiene todos los scripts e imágenes requeridos por estos. Los archivos SBS sin compilar no se soportan.
Aunque son implementados diferentes, Unity maneja los Procedural Material como cualquier otro Material. Para asignar un Procedural Material a un mesh, por ejemplo, usted puede arrastrar y saltarlo a un mesh exactamente como lo haría con cualquier otro Material.
Cada Procedural Material es un script personalizado que genera un tipo particular de material. Estos scripts son similares a los Unity scripts en el sentido que pueden tener variables expuestas para la asignación en el inspector. Por ejemplo, “Brick Wall” Procedural Material puede exponer las propiedades que le permiten a usted configurar el número de cursos de ladrillos, los colores de los ladrillos y el color del mortar. Esto potencialmente ofrece unas variaciones de material infinitas de un solo asset. Estas propiedades se pueden configurar desde un script en tiempo de ejecución de la misma manera que las variables públicas de un script MonoBehaviour
Los Procedural Materials también pueden incorporar una textura compleja de animación. Por ejemplo, usted puede animar las manos del reloj o cucarachas corriendo por un piso.
Los Procedural Materials pueden funcionar con cualquier combinación de texturas generadas procedimentalmente Adicionalmente, las imágenes bitmap incluidas se pueden filtrar y modificar antes de su uso. A diferencia de un material estándar, un Procedural Material puede utilizar imágenes vector en la forma de archivos SVG que permite texturas independientes de la resolución.
Las herramientas de diseño disponibles para crear Procedural Materials desde cero, utilizan edición basado en nodos similar a los que se encuentran en herramientas artísticas. Esto hace que la creación sea accesible a artistas que pueden tener un poco o ninguna experiencia programando. Como un ejemplo, aquí hay una captura de pantalla del Substance Designer de Allegorithmic que muestra un “brick wall” Procedural Material bajo construcción:
Ya que los Procedural Materials de Unity se basan en producto Substance que es un estándar de industria, los Procedural Material assets ya están disponibles de fuentes de internet, incluyendo la Asset Store propia de Unity. El Substance Designer de Allegorithmic se puede utilizar para crear Procedural Materials, pero hay otras aplicaciones (Apps de modelado 3D, por ejemplo) que incorporan la tecnología de Substance y funciona bien con Unity.
Los Procedural Materials inherentemente tienden a utilizar menos almacenamiento que imágenes bitmap. No obstante, el cambio es que son basados alrededor de scripts y ejecutar esos scripts para generar materiales requiere algo de recursos de CPU y GPU. Entre más complejos sean sus Procedural Materials, mayor será su sobrecarga en tiempo de ejecución.
Los Procedural Materials soportan una forma de almacenamiento en caché dónde el material es solamente actualizado si sus parámetros han cambiado desde que últimamente fue generado. Además a esto, algunos materiales pueden tener muchas propiedades que teóricamente se pueden cambiar y solamente algunos tendrán que cambiar en tiempo de ejecución. En tales casos, usted puede informarle a Unity acerca de las variables que no cambiarán para ayudarle a que almacene en caché tantos datos como sean posibles de la generación previa del material. Esto a menudo ayudará el rendimiento significativamente.
Los Procedural Materials se pueden referir a variables ocultas en todo el sistema como el tiempo que ha pasado o la cantidad de instancias de Procedural Materia (estos datos pueden ser útiles para animaciones). Los cambios en los valores de estas variables todavía pueden obligar a un Procedural Material que se actualice incluso si ninguno de los parámetros definidos explícitamente cambiaron.
Los Procedural Materials también se pueden utilizar puramente como conveniencia en el editor (ie, usted puede generar un material estándar al configurar los parámetros de un Procedural Material y luego “baking”). Esto va a quitar la sobrecarga de tiempo de ejecución de la generación del material pero naturalmente, los materiales baked no se pueden cambiar o animar durante el gameplay.
Ya que la complejidad del Procedural Material puede afectar el rendimiento de tiempo de ejecución, Allegorithmic incorpora características de profiling en su herramienta de Substance Player. Esta herramienta está disponible para ser descargada de manera gratis desde la página web de Allegorithmic.
El Substance Player utiliza el mismo motor de rendering optimizado al que está integrado en Unity, por lo que Su medición de rendering es más representativa del rendimiento en Unity que la de Substance Designer.