Saltar al contenido principal

Arte 3D - PG - Unity - Shader Vertex paint

Desde la versión 6000.3, Unity dejo de dar soporte y no es posible acceder a la herramienta de Polybrush. La opción sería adquirir este Add-on

https://assetstore.unity.com/packages/tools/painting/realblend-mesh-painting-creation-352952

Al manejar un shader y editor propio, habría que hacer pruebas para saber qué información de esta ficha se puede rescatar.

Descripción General

Explicaremos cómo usar un shader creado por “Academia A3D” que nos permite pintar con Vertex Color desde Unity. Los videos y archivos originales se encuentran aquí:

https://youtu.be/I5lYUE8Bbuo?si=a0qpGT1Z6Y1e_XnQ ¿Qué es vertex paint en este método?

En este método de Unity, vertex paint es una técnica donde se usan los canales R, G, B y A como máscaras para controlar la mezcla de texturas desde un Texture2DArray.

Cada canal de color se interpreta como un valor de peso o influencia sobre una capa distinta de materiales.

¿Cómo funciona?

  • Se cargan varias texturas (albedo, normal, etc.) como capas dentro de un Texture2DArray.
  • El shader usa los canales RGBA del color de vértice como máscaras para indicar cuánto de cada capa se debe mostrar.
  • Se pueden pintar directamente estos valores sobre el modelo con una herramienta de pincel en Unity.

¿Para qué sirve?

Este enfoque permite:

  • Pintar mezclas de materiales directamente sobre la geometría sin usar texturas personalizadas ni mapas UV complejos.
  • Crear superficies más naturales y variadas (como terreno, paredes desgastadas, etc.).
  • Mantener todo optimizado en un solo shader, sin cambiar de materiales.

INTRODUCCIÓN AL SHADER:

[Video no disponible: VP_01.mp4 — removido durante la migración. Las áreas correspondientes ya fueron notificadas.]

🆘 🆘 🆘 CONSIDERACIONES IMPORTANTES A TENER EN CUENTA ANTES DE IMPLEMENTAR ESTE MÉTODO:

Unity no modifica directamente el mesh contenido en un archivo FBX. En su lugar, genera una instancia temporal del mesh en memoria. Para conservar cambios como el vertex paint, es necesario guardar esta instancia como un archivo .asset. Esto crea una copia física del mesh dentro de tu proyecto.

Una vez guardado como .asset, este nuevo mesh ya no estará vinculado al FBX original. Por lo tanto, si posteriormente realizas cambios al FBX (como reexportarlo desde programa de modelado), esos cambios no se reflejarán en el .asset guardado, ya que se trata de una copia independiente.

Recomendaciones para tu flujo de trabajo:

  1. Haz el vertex paint en fases finales. Considera dejar el pintado final de vértices para cuando tu geometría ya esté aprobada y no vaya a sufrir grandes modificaciones. Si lo deseas, puedes hacer una prueba rápida de pintura en versiones intermedias (considerar esto como otra tarea), sin invertir mucho tiempo, y realizar el trabajo de texturizado más detallado y pulido en la versión final.
  2. Importa tu FBX sólo con las piezas que serán pintadas. Esto te permitirá trabajar de forma más controlada, ahorrar tiempo y evitar errores innecesarios al guardar los .asset.

En el siguiente video se muestra este proceso de forma visual, junto con los pasos recomendados para mantener un flujo de trabajo limpio y eficiente:

[Video no disponible: Vp_02.mp4 — removido durante la migración. Las áreas correspondientes ya fueron notificadas.]

🔎 INFORMACIÓN COMPLEMENTARIA DEL VIDEO:

1. ¿Cómo conservar los Vertex Colors?

  • Usar el script “SavertexPaintedMesh” que duplica el Mesh actual que tiene vertex paint, lo guarda como un archivo .asset dentro del proyecto y reasigna ese nuevo mesh al objeto seleccionado.

2. ¿Cuándo y por qué es importante guardar el mesh?

  • Cuando se quiere que los vertex colors persistan, por ejemplo, si se usan en shaders personalizados.

  • Si el modelo pintado está en un prefab, es necesario guardar el mesh como asset para que:

    • Se mantenga al instanciar el prefab en otras escenas.
    • No se pierda al cerrar Unity o al actualizar el FBX.

3. ¿Qué pasa si actualizo el FBX?

  • Si pintaste vértices sobre un objeto importado y luego reemplazas el archivo FBX por una nueva versión, los vertex colors se perderán.

4.¿Puedo seguir pintando después de guardar como .asset?

  • Sí, pero:

    • El mesh guardado como .asset ya es independiente del FBX.
    • Si lo pintas de nuevo, deberías volver a correr el script para guardar los nuevos cambios.
    • No se actualiza automáticamente en el prefab a menos que lo reemplaces tú.

5. ¿Cuándo conviene copiar el vertex paint a otro mesh?

  1. Cuando tienes múltiples instancias del mismo modelo. Por ejemplo, si duplicaste un objeto y necesitas que varias versiones compartan el mismo pintado de vértices sin tener que pintarlas todas a mano.
  2. Cuando hiciste cambios menores en la geometría del modelo. Si retopologizaste o hiciste una corrección pequeña que no afecta la posición de los vértices, puedes querer conservar el vertex paint original aplicándolo al nuevo mesh.
  3. Cuando quieres probar variaciones sin perder el trabajo hecho. Puedes tener un modelo base con vertex paint y copiarlo a otras versiones para hacer pruebas de shaders, iluminación o comportamiento sin pintar todo desde cero cada vez.
  4. Para hacer LODs (niveles de detalle) con el mismo pintado. Si tus LODs comparten la misma topología o al menos el mismo orden de vértices, puedes copiar el vertex paint del LOD0 a los demás.
  5. Cuando trabajas en equipo. Si tú pintaste un modelo y otro miembro del equipo necesita usar ese mismo pintado en otra escena o variación del modelo.

COPIADO DE VERTEX PAINT:

[Video no disponible: Vp_03.mp4 — removido durante la migración. Las áreas correspondientes ya fueron notificadas.]

Proceso de Desarrollo

Creación de nuestros mapas - Texture Array

Substance Painter:

[Video no disponible: VP_04_01.mp4 — removido durante la migración. Las áreas correspondientes ya fueron notificadas.]

Substance Designer:

[Video no disponible: Vp 04.mp4 — removido durante la migración. Las áreas correspondientes ya fueron notificadas.]

Substance Designer cambio de resolución:

[Video no disponible: VP_05.mp4 — removido durante la migración. Las áreas correspondientes ya fueron notificadas.]

✨ UNITY - SHADER ✨

Como se menciona en el video, habría cambios en el orden de los parámetros para que fuera más intuitivo aquí vemos el antes y después:

Untitled.png

También se ajustó el parámetro de “Base color” que afecta todo el mapa.

Unity_rd8OoJXgOS.png[Video no disponible: Shaderp01.mp4 — removido durante la migración. Las áreas correspondientes ya fueron notificadas.][Video no disponible: Shader P02.mp4 — removido durante la migración. Las áreas correspondientes ya fueron notificadas.][Video no disponible: Shader P03.mp4 — removido durante la migración. Las áreas correspondientes ya fueron notificadas.]

EJEMPLO DE PROYECTO INMERSYS

[Video no disponible: Vp 08.mp4 — removido durante la migración. Las áreas correspondientes ya fueron notificadas.]

Enlaces de descarga

Comentarios

Tareas recomendadas cuando implementarás este flujo:

  • Texturizado - Vertex Paint - Pruebas (considera que crearás unas texturas rápidas en substance painter o si te sirven algunas otras que existan para ver cómo funcionan en tu objeto, las exportarás en substance designer y harás el pintado en unity)

    • En esta fase no es necesario que tu modelo tenga UVs, ya que el pintado por vértices no los utiliza. Sin embargo, es importante que el modelo final sí cuente con un mapeado UV correcto, tanto por buenas prácticas como para poder realizar correctamente el bake de iluminación u otras tareas que sí los requieran.
  • Texturizado - Vertex Paint - Creación de texture arrays - Polish

  • Texturizado - Vertex Paint - Pintado final en unity

Ventajas

1. Flexibilidad artística sin mapas UV extra

  • Puedes pintar directamente sobre los vértices para mezclar materiales o texturas.
  • Ideal para variaciones locales como suciedad, desgaste, humedad, etc., sin crear múltiples texturas ni UVs adicionales.

2. Optimización en tiempo de ejecución

  • Las 2D Texture Arrays permiten mantener múltiples texturas en un solo asset de GPU.
  • Se reduce el número de llamadas a drawcalls al evitar múltiples materiales o materiales con distintos tiling.

3. Edición rápida dentro de Unity

  • No necesitas regresar al DCC (Maya, Blender) para hacer cambios menores de look, puedes pintar directamente en Unity.

4. Reutilización de materiales

  • Puedes usar un mismo shader/material en muchas instancias y solo variar el vertex paint para obtener looks diferentes.

5. Ideal para entornos modulares

  • Puedes tener mallas modulares y pintar diferentes combinaciones sin necesidad de duplicar materiales o texturas.

Desventajas

1. Podrías depender de la densidad de vértices

  • Mientras más detalle quieras, más subdivisión necesita el modelo.
  • En geometría de baja densidad, el pintado se verá impreciso o limitado.

2. Mayor complejidad técnica

  • Requiere conocimiento de shaders, manejo de texture arrays y herramientas de vertex paint.
  • El flujo puede ser menos intuitivo para artistas que no están familiarizados con este enfoque.

3. No se guarda en el FBX por defecto

  • Unity no guarda el vertex paint directamente en el FBX; necesitas convertir el mesh en un .asset y mantener ese flujo controlado.

4. Puede dificultar la iteración

  • Si haces cambios a la geometría, puedes perder el vertex paint o tener que rehacerlo o copiarlo otra vez (como con tu script).

5. No es ideal para todos los tipos de materiales

  • Es perfecto para blends tipo terreno, metal corroído, musgo, etc., pero no tanto para materiales muy específicos o con detalles finos que requieren mapas dedicados.

Elaboró

Cassandra Rodríguez