UNITY Materiales
Sumario
Introducción
- Mas información en este enlace.
- Los materiales van a estar asociados a figuras 3D.
- Los materiales van a:
- Guardar la textura asociada a el material creado, que después será aplicado a un Mesh (objecto 3D). Esta sería la textura sin ningún tipo de fuente de luz aplicada al material.
- Guardar la información necesaria para determinar como una fuente de luz va a reflejarse sobre el Mesh (son los Normal Vector, lo veremos después).
- Características del material que hacen que la luz se refleje de forma diferente (haciendo que el material adapte características como transparencia, metálico,...)
- Pensemos en el mundo real.
- Un objeto metálico refleja la luz de forma diferentes a un trozo de madera.
- Un cristal permite ver lo que está a través de él...
- Todas estas características físicas son modelizadas haciendo uso de materiales.
- Un aspecto importante a tener en cuenta cuando trabajamos con materiales es la luz que se va a aplicar sobre el material.
- El material debe 'reaccionar' a la iluminación de una forma adecuada. Por ejemplo, un material metálico debe de dar esa apariencia cuando la luz lo ilumine.
- La luz debe de estar configurada para mostrar los materiales de la forma mas fidedigna posible. La configuración de la luz sobre el material está determinada por una serie de parámetros que veremos a continuación.
Creando un material
- Vimos anteriormente en esta Wiki cómo podíamos asociar una textura a un modelo 3D.
- Comenté que para hacerlo solo teníamos que arrastrar la textura al modelo y que aparecía una propiedad denominada Shader en la que se guardaba la imagen de la textura.
- Realmente lo que hacemos con esa operación es crear un material en el que guardamos la textura que va a visualizar el modelo 3D.
- Existen una variedad muy grande de tipos de 'Shader' cada una con una propiedades ya fijadas y que son aplicables a diferentes objetos.
- Específicos para utilizar en dispositivos móviles los cuales pueden tener tarjetas gráficas que no podrían emplear todas las propiedades de los otros Shaders.
- Específicos para modelizar árboles (trees) empleados por Unity para crear árboles.
- Específicos para modelizar sistemas de partículas, como llamas.
- Específicos para modelizar un cielo
- Específicos para aplicar a los gráficos 2D (Sprites)
- Específicos para aplicar sobre los elementos gráficos que conforman el UI (User Interface)
- .......
- En este punto nos vamos a centrar en los Standard Shader que puede emplearse para modelizar objetos reales del mundo 3D.
- Este tipo de Shader permite la combinación de diferentes propiedades y mapas que nos van a permitir modelizar de una forma muy realista las propiedades de los materiales al aplicarse una luz sobre ellos.
- Además, este tipo de shader hace uso de Physically Based Shading (PBS) que permite simular la iteración entre la luz y los materiales de una forma totalmente realista.
Rendering Mode
- Más información en este enlace con ejemplos de cada uno de los modos de renderizado.
- Opciones posibles:
- Opaque: Cuando queramos que el material parezca sólido y tenga un color (o textura) que se refleje en toda la superficie. Será la opción escogida normalmente. No tiene transparencias.
- Cutout: Hace uso del canal Alfa, para que a partir de un determinado valor, todos los puntos con un valor alfa inferior al indicado serán invisibles. Este efecto se puede emplear para hacer que los bordes de los objetos están más definidos.
- Fade: En este modo, se emplea para hacer desaparecer/aparecer objetos como una animación.
- Transparent: Utilizado sobre materiales que queramos que parezcan plásticos o cristales. Se basa en el uso del canal Alfa de la textura.
Propiedad Albedo
- Más información en este enlace.
- Guarda la información:
- Del color del objeto 3D sin aplicar ningún efecto de luz al mismo.
- Guarda la textura que va a visualizar el modelo 3D sin aplicar ningún efecto que haga que el material se comporte de forma diferente al aplicar una luz sobre él.
- Nota:
- Recordar que estamos usando una luz de 'tipo ambiental' sobre nuestro proyecto.
- Ahora vamos a hacer uso de una textura previamente descargada en un ejemplo anterior de la Wiki.
- Vamos a cambiar la propiedad Albero y asociarle una de las texturas que disponemos:
- La propiedad Albedo también tiene una propiedad color que:
- Si tenemos una textura asociada, lo que va a hacer es 'tintarla' del color elegido.
- Si no tenemos una textura asociada, coloreará el Mesh del color elegido.
Propiedad Metallic
- Más información en este enlace.
- Sirve para darle un aspecto 'metálico' al material.
- Esto implica que la luz se va a reflejar más cuanto más 'metálico' sea el material.
- Utiliza como fuente de datos el canal R (Red).
- Quiero esto decir que a la imagen le aplicará el efecto metal sobre los tonos 'Rojos' de la misma.
- Lo podemos ver si mantenemos el ratón sobre la propiedad 'Metallic' como se ve en la siguiente imagen:
- Desde Gimp podemos ver la información que tiene este canal:
- Un ejemplo de uso:
- Este modo trabaja junto al parámetro Smoothness para determinar el nivel de reflectividad de la luz, el cual tiene el efecto de hacer que las imágenes reflejadas aparezcan más o menos definidas:
- Indicar que el 'reflejo' solo afecta al entorno, normalmente al SkyBox.
- Podéis cambiar el SkyBox por otro siguiendo esta entrada de la Wiki.
- Para cambiar cual es el entorno a reflejar por parte de los materiales que tengan la propiedad Metallic-Smoothness debemos:
Emission
- Más información en este enlace.
- La propiedad Emission aplicada a los materiales nos va a permitir que la figura 3D que tenga asociado este material, 'emita' luz, como si tuviera su propia fuente de luz.
- Efectos que se pueden conseguir con esta propiedad son los de 'ojos rojos' en la oscuridad, material reflectante que brilla de noche, figuras como estrellas pegadas en una pared,...
Ejemplo de uso: Ojos rojos a un zombie
- En este caso he optado por modificar los ojos del Mesh. Podríamos dejar los que tiene, crear dos esferas muy pequeñas y situarlas en los ojos...
- Descargamos el modelo FBX de un Zoombie: https://www.turbosquid.com/3d-models/free-x-model-zombie/1012761
- Lo importamos como ya vimos anteriormente en la Wiki. Recordar que hay que extraer las texturas por el bug de la versión 2018. Si os aparece bien no haría falta hacer ese paso.
Propiedades de los materiales aplicados a Standard Shader
- Más información en este enlace y en este enlace.
- Existen diferentes tipos de 'Mapas' que se aplican sobre los materiales que van a estar asociados a objetos para 'provocar' diferentes tipos de efectos.
- Van a modificar la forma en como la luz se va a reflejar en los materiales.
- Para nosotros un 'mapa' no es más que una imagen (en forma de textura, es decir, 2D) que en base a la información que guarda hará que los 'puntos' reflejen' la luz de diferente forma dando lugar a diferentes efectos (por ejemplo, no se refleja de la misma forma un objeto metálico que uno de madera).
- En este punto vamos a ver alguno de estos mapas.
- En este vídeo se explica como crear varios tipos de mapas haciendo uso del programa Gimp.
Normal Map
- Más información en este enlace.
- Alguna de las imágenes de esta sección han sido obtenidas del manual de Unity.
- Este mapa representa la forma en como los rayos de luz se reflejan sobre la superficie de un objeto.
- Si no disponemos de él, Unity hará uso del Mesh empleado para el diseño del objeto3D y hará que la luz se refleje siguiendo dicho modelo:
- Estaréis pensando: Vale, ¿ pero en qué me influye a mi el reflejo de la luz sobre una figura 3D ? ¿ Cual puede ser la aplicación práctica ?
- Imagináis que tenéis un muro hecho con piedras.
- La figura 3D que representa el muro es plana, como un cubo alargado o cualquier otra combinación de figuras 3D que podemos tener en un programa de diseño 3D.
- Si aplicamos sobre dicha figura una textura de piedras, tendremos algo parecido a esto:
- Como podemos apreciar, las piedras aparecen 'planas' sobre la superficie.
- Esto es así ya que el modelo 3D no 'incorpora' este tipo de detalle. Hacerlo supondría tener que dibujar muchos más triángulos con el consiguiente coste de CPU-Memoria.
- Gracias a los 'Normal Map' podemos 'simular' que las piedras realmente tienen un volumen 3D, como en la siguiente imagen:
- Otro efecto que podemos conseguir haciendo uso de los Normal Map es el de incluir formas sobre una superficie, sin necesidad de modelizarlas en el modelo 3D.
- Veamos un ejemplo:
- Debemos de tener claro que esas formas no existen realmente no existen en el modelo. Lo que hace Unity es aplicar una fuente de luz sobre el objeto 3D y los rayos reflejados sobre la superficie del Normal Map hacen que parezca que esas formas existen. Si nos acercáramos mucho al modelo veríamos que realmente no existen en el 3D.
- Nota:Lo que se hace normalmente es tener un modelo 3D con un nivel de detalle altísimo sobre el que se extrae el 'Normal Map'.
- Después se realiza otro modelo más sencillo (sin tanto nivel de detalle) y sobre dicho modelo se aplica el 'Normal Map' extraído del paso anterior.
- 'Normal Map' es un tipo de Bump Maps, el cual es una técnica de programación para dar un aspecto rugoso a superficies.
- Dentro de Bump Maps tenemos dos tipos de mapas:
- Normal Maps , el cual es el visto hasta ahora. Cada pixel de esta textura indica la dirección que tiene que seguir la luz cuando se refleja sobre su superficie.
- Height Maps, guarda la misma información que el anterior pero de forma diferente. En este tipo de mapa se usa una textura en blanco y negro, la cual indica la elevación que tiene que tener cada pixel en la textura.
- En las propiedades de Unity podéis comprobar que disponemos de un segundo Normal Map.
- Este mapa se utiliza como 'complemento' al mapa anterior para dar un nivel de detalle mucho más preciso cuando estemos muy cerca del objeto 3D.
- Podéis descargar ejemplos de texturas junto con su 'normal map' desde https://3dtextures.me/
Ejemplo de uso: Aplicando un Normal Map existente
- Descargar la textura y el normal map de este sitio web.
- Modelo realizado por João Paulo.
Ejemplo de uso: Creando un Normal Map con Unity
- Unity permite a partir de una textura generar un Normal Map asociado.
- Para ello solo tenemos que duplicar una textura existente (por ejemplo la que aplicamos a la propiedad Albedo) e indicar que es del tipo 'Normal Map', basada en las escalas de grises.
- De esta forma, los tonos hacia el negro estarán 'hundidos' mientras que los tonos hacia el blanco 'sobresaldrán' en la textura asociada.
- Al aplicar los cambios, veremos que se genera un Normal Map.
- Normalmente se recomienda no aplicar un valor de Bumpiness superior a 0.02, pero todo dependerá del efecto que queramos conseguir.
Ejemplo de uso: Creando un Normal Map con GIMP
- Vamos a ver un ejemplo haciendo uso del programa GIMP.
- Existen en Internet multitud de páginas que muestran como crear un Normal Map en Gimp.
- Un ejemplo es este vídeo.
- Instrucciones concretas de cómo crear un Normal Map en este enlace.
- Para poder crear un Normal Map debemos descargarnos un 'plugin' para Gimp deste este enlace.
- Recursos a descargar:
- El archivo de textura de madera desde: https://3dtextures.me/2018/04/27/old-wood-001/.
- Solo descargar la textura. El enlace del mismo es https://meocloud.pt/link/985fb169-076e-4842-adc3-a30a32948ccd/Old_Wood_001_SD/.
- La imagen que vamos a emplear para crear el Normal Map. Es una imagen creada con GIMP, podéis crear una propia personalizada: Media:Unity3D_normalmap_ej_1.png
- Lo que vamos a obtener será lo siguiente:
Como se comenta en este enlace es necesario realizar un ajuste antes de guardar el Normal Map. Debemos ir a la sección de canales y desmarcar el canal azul (no aparece el texto).
Specular Map
- Más información en este enlace.
- Vídeo que explica como crear un 'Specular Map' con Gimp.
- Este tipo de mapa consigue que la superficie iluminada tenga más brillo y esté mas concentrado el lugar donde se refleja la luz, pasando a tener una franja de luz más estrecha.
- Para activarla tenemos que cambiar el tipo de shader a Standard Specular Setup, apareciendo una nueva sección.
- Este parámetro obtiene su información de los canales RGB (Red Green Blue). Podemos verlo si ponemos el ratón sobre dicha propiedad en la ventana Inspector:
- Este modo trabaja junto al parámetro Smoothness para determinar el nivel de reflectividad de la luz, el cual tiene el efecto de hacer que las imágenes reflejadas aparezcan más o menos nítidas. En caso de aplicarlo sobre un material que no refleje el efecto será el de que la luz esté mas concentrada en el punto donde refleje o que se distribuya por toda la superficie:
- Este parámetro obtiene su información del canal Alfa. Podemos verlo si ponemos el ratón sobre la propiedad Specular en la ventana Inspector:
- Nota: Este tipo de ajuste se realiza también manejando la opción 'Metallic-Smoothness' que vimos anteriormente.
- Unos artistas prefieren una forma y otros creen que tienen mayor control con la otra.
Ejemplo de uso: Cristal no transparente
- Lo que voy a hacer es aplicar un 'Specular Map' a un muro y el mapa inverso al mismo muro, con el parámetro Smoothness sin modificar su valor.
- Podemos comprobar como en el primer caso la luz 'se refleja' en la parte interna (la de color azul) mientras que la externa apenas refleja la luz.
- Recursos necesarios:
- Imagen que va a conformar la textura a aplicar al muro:Media:Ejemplo_Specular_textura.jpg
- Esta imagen fue realizada con Gimp.
- Imagen especular de la textura anterior:Media:Ejemplo_Specular.jpg
- Imagen especular inversa de la textura anterior:Media:Ejemplo_Specular_inversa.jpg
- Imágenes obtenidas siguiendo los pasos de este vídeo: https://www.youtube.com/watch?v=X0Zr_nHwj3Q
Occlusion Map
- Más información en este enlace.
- Establece como se refleja la luz indirecta
- Utiliza el Canal G (Green) para determinar como se refleja la luz indirecta (podemos verlo si ponemos el ratón sobre dicha propiedad en la ventana Inspector):
- La luz indirecta es la que proviene de la luz ambiente y de la luz reflejada por otros objetos.
Ejemplo de uso: Un cristal transparente
- Más información en este enlace.
- En este ejemplo vamos a hacer que un material tenga una transparencia.
- El efecto a conseguir es el siguiente:
- Como podemos apreciar existe una esfera detrás del muro. En el medio del mismo tenemos una zona que es transparente y que nos permite ver la esfera.
- Recursos necesarios:
- Textura con el canal alfa. Se ha optado por hacer que el color azul sea el que indique el grado de transparencia. Media:Ejemplo_Transparencia_Textura.zip.
- Dentro del zip hay una textura en formato tga que es el formato que aconseja Unity para guardar transparencias. También valdría el formato .png. Ya expliqué el color alfa anteriormente en esta Wiki.
- Partimos de que ya tenemos hecho el ejercicio Specular Map de esta wiki.
Ejemplo de uso: Un espejo
- La forma más lógica de hacerlo sería empleando um plano que tuviera un material Metallic y Smoothness a 1.
- Sobre él habría que aplicar un ReflectionProbe.
- Podemos consultar como ajustar el ReflectionProbe para tener un menor impacto en el rendimiento del juego en este enlace.
- El objeto ReflectionProbe puede 'guardar' una imagen estática de lo que tiene que reflejar la cual puede ser 'puesta a mano' o guardada en base a los objetos que le rodean en el mundo real en el momento de que se ejecute el juego (realtime) o que se actualice en cada frame.
- En el ejemplo siguiente se han ajustado:
- Objeto Reflection Probe:
- Type: RealTime
- Refresh Mode: Every Frame.
- Time Slicen: Individual Face
- Resolution: 512 (al menos)
- Modificamos el plano 'Cliping Planes' la propiedad 'far' para que solo refleje hasta una cierta distancia.
- Objeto que va a reflejar (lo que vendría ser el espejo)
- Shader Type: Standard
- Metallic: 1
- Smothness: 1
Importando un modelo
- Con lo que llevamos visto hasta ahora seguro que eres capaz de importar un modelo y asociar los diferentes mapas y texturas al mismo.
- Inténtalo con este modelo: https://opengameart.org/content/rocks-0
- Nota: Recuerda que ya vimos en esta wiki como importar un modelo.
-- Ángel D. Fernández González -- (2018).