UNITY Materiales

De MediaWiki
Ir a la navegación Ir a la búsqueda

Introducción

  • Los materiales van a estar asociados a figuras 3D.
Los materiales van a:
  • Guardar la textura asociada al 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

  • Nota: Recordar que en el punto anterior de Texturas vimos como al arrastrar una textura a un objeto 3D se creaba un material el cual se asociaba a la figura 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.
Unity3d materials 46.jpg
  • 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)
  • Materiales a los que no se les aplican luces ni sombras, dentro de la sección Unlit.
  • .......



  • 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.

Unity3d materials 20.jpg

  • 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

  • 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


  • 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:

Unity3d materials 21.jpg


  • Desde Gimp podemos ver la información que tiene este canal:
Unity3d materials 23.jpg


  • Un ejemplo de uso:
Unity3d materials 24.jpg
Imagen obtenida desde este enlace



  • 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:
Unity3d materials 25.jpg
Imagen obtenida desde este enlace


  • Indicar que sólo 'reflejará' el entorno, el cual en Unity por defecto, se denomina SkyBox y es la imagen que tenemos en el horizonte.
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


  • 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


Unity3d materials emission 1.jpg
  • 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...



Lo importamos como ya vimos anteriormente en la Wiki. Recordar que hay que extraer las texturas.



Propiedades de los materiales aplicados a Standard Shader


  • 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).


Unity3d materials 10.jpg


  • 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


  • 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:
Unity3d normalmap 3.JPG
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:
Unity3d normalmap 4.JPG


  • 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.
Unity3d normalmap 17.JPG



  • En las propiedades de Unity podéis comprobar que disponemos de un segundo Normal Map.
Unity3d normalmap 18.jpg
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.




Ejemplo de uso: Aplicando un Normal Map existente

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

  • 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:
Solo descargar la textura. El enlace del mismo es https://meocloud.pt/link/985fb169-076e-4842-adc3-a30a32948ccd/Old_Wood_001_SD/.


Lo que vamos a obtener será lo siguiente:
Unity3d normalmap ej12.JPG






Specular Map


  • 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.
Unity3d materials 9.jpg


  • 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:
Unity3d materials 28.jpg



  • 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:
Unity3d materials 25.jpg
Imagen obtenida desde este enlace


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:
Unity3d materials 28.jpg


  • 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.
Unity3d materials 31.jpg
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:
Esta imagen fue realizada con Gimp.
Imágenes obtenidas siguiendo los pasos de este vídeo: https://www.youtube.com/watch?v=X0Zr_nHwj3Q




Occlusion Map

  • 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):
Unity3d materials 26.jpg


  • La luz indirecta es la que proviene de la luz ambiente y de la luz reflejada por otros objetos.
Unity3d materials 27.jpg
Imagen obtenida desde este enlace]



Ejemplo de uso: Un cristal transparente


  • En este ejemplo vamos a hacer que un material tenga una transparencia.
El efecto a conseguir es el siguiente:
Unity3d materials 41.jpg
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:
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.




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).