Saltar al contenido principal

Arte 3D - PG - Unity - Shader graph

Descripción General

En esta guía podrás revisar una explicación general de como crear un shader haciendo uso del shadergraph de Unity mediante algunos ejemplos prácticos

Alcances

Principalmente, se cubren conceptos básicos y shaders simples pero útiles con el objetivo de poder crear o modificar efectos no tan complejos

Iniciando con Shadergraph(estrella azul)

A continuación una explicación muy rápida de como crear tu shader

Para empezar a desarrollar tu shader crea un nuevo elemento de shadergraph haciendo clic derecho en tu carpeta y después en: Create - Shader Graph - URP - Lit Shader Graph

image-20250718-134738.png

Al hacer eso se generará un shader base URP en la carpeta que podrás modificar. Así mismo, si abres la flechita encontrarás el material base de tu shader ya configurado con todos los elementos que contenga el efecto que creaste. Renombra el shader y su material de una manera que refleje el resultado final que estás buscando.

image-20250718-141150.png

Nomenclatura Shaders: SH_NombredeShader Guardalo en la siguiente ubicación Assets > _Project > Shaders

!Listo! Haz doble clic sobre el shader y te deberá abrir en automático una ventana de Shader graph que se ve así:

image-20250718-141839.png

Elementos principales de la ventana Shader graph

En esta sección una mini explicación de para qué funcionan las partes principales de la interfaz

Nombre del Elemento¿Para qué sirve?Imagen de Referencia
BlackboardLos elementos que crees aquí se podrán ver desde el inspector de Unityimage-20250722-150354.png
Master StackEs el nodo final de tu shader. Lo que se conecte a esta parte es lo que se verá reflejado en tus materiales visualmente.image-20250718-143506.png
Internal InspectorEs un mini inspector con las propiedades de los nodos o settings del shader. Mismo concepto que el inspector normal pero para shadersimage-20250718-143710.png

Ejemplos aplicados en proyecto

A continuación algunos shaders que se usaron en proyectos anteriores, se mencionarán algunos nodos que fueron de utilidad para los objetivos de las simulaciones

Shader Vista de Microscopio (TransfrVR: Clinical Laboratory Technician)

Shader para hacer transiciones entre dos texturas y lograr un efecto de desenfoque en microscopio

MicroscopeView-20250718-155501.gif

Planeación:

  • Transición entre dos Texturas
  • Atributos que puedan ser animados
  • Atributos de fácil acceso para el artista 3D y programador sin la necesidad de modificar el shader
  • Viñeta en la textura para dar el efecto del obturador
  • No debe tener reflejos
  • No debe tener Ambient Occlusion

Construcción del Shader

Atributos del Material

Estos son los atributos que necesito controlar delsde el material. A continuación una tabla con el nombre del atributo y el input que se necesita

image-20250718-162113.png

ObjetivoNombre del AtributoInputImagen de referencia en Unity
Tener una textura A con la que inicia el materialBaseColor_1Sample Texture 2Dimage-20250718-162202.png
Tener textura B que reemplazará poco a poco la textura ABaseColor_2Sample Texture 2Dimage-20250718-162250.png
Animación de Transición de Textura A a B con un slider de 0 a 1Transition_SliderFloat (Slider)image-20250718-162637.png
Animación del Obturador. Cambia el tamaño de la viñeta circularShutterFloat (Slider)image-20250718-162913.png

Nodos del shader

Estos son los nodos que se aplicarán para hacer este shader

Nombre del Nodo¿Qué hace el nodo?Imagen de nuestro Shader
Sample Texture 2DCrea un espacio “vacío” de textura en el cual puedes ingresar información de una imagen 2Dimage-20250718-165858.png
LerpHace una transición entre dos entradas (En este caso 2 texturas) que se puede manipular mediante valores específicos que van de 0 a 1 Siendo 0 una influencia completa de la primera textura (En la entrada A del nodo) Siendo 1 una influencia completa de la segunda textura (En la entrada B del nodo)image-20250718-170003.png
ElipseCrea una forma básica de círculo o elipse Usa valores de 1 o 0 (Blanco y Negro) Puede modificar el tamaño de la elipse Puede funcionar como una máscaraimage-20250718-170104.png
MultiplyComo su nombre lo dice, hace una operación de multiplicación. Puede funcionar tanto con números, como con texturas o vectores (En este caso lo usaremos para una textura)image-20250718-170303.png
FloatCrea un espacio que toma un valor en específico y admite un número con puntos decimalesimage-20250718-170336.png

Cuerpo del Shader

Una explicación paso a paso del desarrollo de este shader

Nota:

Haz clic en las imágenes si no se alcanza a ver en la miniatura

image-20250722-150526.png

PasoImagen de nodos
1Crea los atributos que quieres que el usuario modifique y pueda ver desde el inspector en el material de Unity: - En el blackboard selecciona “+” - Aparecerá una lista con los tipos de entrada que recibirá tu material - En este caso utilizaremos: Texture 2D (2 Para Texturas) y Float (2 Para Sliders) - Nombra los atributos de manera intuitiva - En la imagen puedes ver un ejemploimage-20250718-174820.png
2Crea los espacios 2D para nuestras texturas: - Haz clic derecho en tu espacio de trabajo y selecciona “Create Node” - Te debe aparecer un menú con los nodos que puedes generar - Escribe “Sample Texture 2D” en la barra de búsqueda - Esto te creará un nodo de Textura vacío como el de la imagen - Como necesitamos dos texturas repite el proceso para la segunda texturaimage-20250721-204914.png
3Conexión de las texturas al nodo vacío: - Arrastra el nodo de BaseColor_1 al espacio de trabajo - Acomoda BaseColor_1 cerca de los nodos de “Sample Texture 2d” - A la izquierda del nodo identifica el cuadrito que dice “None(Texture)” - Conéctalos haciendo clic en el circulito de colores del nodo BaseColor_1 y arrastrando al circulito de colores que ahora dice “None(Texture)” - Repite el proceso para el nodo de BaseColor_2image-20250718-174648.png
4Añade la interacción para el cambio entre las Texturas BaseColor_1 y BaseColor_2 con el nodo Lerp - Haz clic derecho sobre el espacio y elige Create Node - Escribe Lerp y selecciona para generarlo cerca de tus Nodos de Textura. - Podrás ver que el nodo de Lerp tiene 3 letras para conectar nodos (A, B y T). Para este paso usaremos A y B - A es la textura de la que partirá tu material para la transición (Textura Base) - B es la textura con la que terminará la transición - Conecta la textura de BaseColor_1 con A - Conecta la textura de BaseColor_2 con Bimage-20250722-150737.png
5En este paso configurarás el shader para que el usuario pueda animar los valores para el cambio entre la textura A y la B - Arrastra el nodo de Transition_Slider cerca de tu nodo Lerp - Conecta el nodo de Transition_Slider al circulito con la T - T es el valor que determina la intensidad de cada Textura Siendo 0 completamente Textura A Siendo 1 completamente Textura B - Ahora selecciona el nodo de Transition_Slider - Si observas el Graph Inspector notarás que muestra la configuración de tu nodo - Scrollea hasta poder ver el atributo de Mode - Da clic en la pestaña adyacente (Actualmente llamada Default) y cambia la opción a Slider - Listo tu nodo ahora es un slider - Hasta este punto ya tienes un mini shader que cambia entre dos texturas de BaseColorimage-20250718-175426.png
6Ahora vamos a generar la viñeta con forma de círculo para representar que el usuario está viendo a través de un microscopio - Haz clic derecho en tu espacio de trabajo y selecciona Create Node - Escribe y selecciona “Ellipse” lo que te creará un nodo base de elipse - Para esta situación en específico solo usaremos las conecciones de Width y Height. Que justo controlan que tan ancho y alto es la elipse que se generaráimage-20250722-150856.png
7En este paso configuraremos el shader para que el usuario pueda animar el tamaño de la elipse y dar el efecto de obturación - Arrastra el nodo de Shutter cerca del nodo Elipse - Conecta el nodo Shutter a los espacio de Width y Height al mismo tiempo. Esto debido a que queremos que nuestra viñeta sea siempre un círculo - Haz clic sobre el nodo Shutter y observa el Graph Inspector - Cambia el modo de Default a Slider (Scrolleando hasta abajo y localizando la pestaña de Mode)image-20250718-175620.png
8Merge final de nuestras dos partes del shader (Transición de Textura y Viñeta) para que ambas se visualicen en nuestro material - Haz clic derecho en el espacio de trabajo y selecciona Create Node - Escribe Multiply y Selecciona para crear un nodo de Multiplicar - Coloca el nodo de Multiply cerca de los nodos Lerp y Ellipse - Con este nodo determinaremos que queremos que se vea y que no de nuestra textura base - Podrás ver que tanto el nodo de Lerp como el nodo de Ellipse tienen un circulito llamado “Out”, como su nombre lo dice este contiene la salida de nuestros nodos - Conecta la salida del nodo Lerp al circulito llamado A del nodo Multiply - Conecta la salida del nodo Elipse al circulito llamado A del nodo Multiply - En este caso no importa cual de los dos nodos se conecte a la sección A y cual a la B, pero por cuestiones de limpieza lo conectaremos de esta manera - Listo ya con esto los nodos que creaste generan el efecto que queremos de Vista de microscopio, solo falta conectarlo al Master Stackimage-20250718-180253.png
9Conecta el nodo de Multiply al Master Stack. - Arrastra el circulito de Out del nodo Multiply al circulito de Base Color del Master Stack - Revisa la siguiente sección para más información del Master Stackimage-20250722-000124.png

Resultado final del shader (Master Stack)

Esta sección muestra las conexiones finales de nuestro shader en el Master Stack

Ahora se conectará la información final para que se pueda visualizar en nuestro material

Al ser un shader simple en el cual el objetivo era modificar solamente el espacio de color. Solo se debe conectar la salida de nuestros distintos nodos a la parte de Fragment - Base Color

image-20250718-170653.png

Nota

A pesar de no haber modificado mediante nodos los demás atributos de nuestro material, es necesario escribir el valor base que Unity estará tomando para visualizar de manera general.

En este caso: No se necesitan propiedades metálicas, de smoothness, emission y tampoco de AO, por lo tanto, no se verán como atributos en el material pero debemos configurarlos en el shader. Por lo tanto los valores respectivos se ponen en.

  • 0 para Metallic
  • 0 Smoothness
  • Color HDR en negro para Emissive
  • 1 para Ambient Occlusion

Listo, has creado un shader de principio a fin

Enlaces de descarga

Se encuentra en la librería de shaders de Unity Cloud de área

Archivos Adjuntos

Unity - Manual: Shaders in URP (Infromación general de shaders URP en Unity 6)

Node Library | Shader Graph | 6.9.2 (Libreria con información más específica de cada nodo)

Comentarios

Recuerda seguir las buenas prácticas y nomenclaturas Inmersys en la creación de tus shaders. Los nodos pueden llegar a complicarse algo rápido y pueden volverse confusos o pesados. El seguir buenas prácticas agiliza el ritmo de trabajo y mantener shaders optimizados evita que termines con materiales pesados.

Cada material que crees con tu shader tendrá las mismas propiedades base, por lo que puedes seguir estos puntos básicos para optimización de shaders:

  • Disminuye la cantidad de operaciones necesarias (Si algo es redundante, elimínalo)
  • Evita el uso de Transparencias
  • Evita el uso de operaciones booleanas
  • Si es posible no uses tantas texturas dentro del shader

Ventajas

  • La creación de Shaders mediante Shadergraph es mayormente visual y no necesita conocimientos de programación
  • Shadergraph proporciona gran compatibilidad con los dispositivos que Unity soporta
  • Es un flujo de trabajo no destructivo
  • Los shaders son muy versátiles y pueden dar efectos interesantes
  • Se pueden crear efectos que enriquezcan la interactividad de un prop.

Desventajas

  • Puede que shadergraph o el flujo de trabajo con nodos no sea la herramienta de trabajo preferida del Artista 3D o Programador. Dependiendo de la situación puede haber opciones más óptimas o cómodas para cada persona.
  • La complejidad va aumentando exponencialmente. Revisar tiempos con líder de proyecto

Ubicación Proyecto

La ubicación del proyecto en el servidor.

Elaboró

Leo Espinoza