NOTA: En este segundo reto he experimentado bastante para comprender realmente cómo funcionan las UVs, y de qué manera afectan al baking de los normales cuando se tiene un modelo high poly y su versión optimizada. Los primeros mapas de UVs no están hechos con la intención de “realizarlos bien”, sino de probar y experimentar qué ocurría en el proceso de baking si los planteaba de distintas maneras. He querido incluir esta parte de experimentación en el documento ya que ha sido parte de mi proceso de aprendizaje, pero quería dejarlo explicado por adelantado ya que al ser un proceso experimental, es inherentemente algo caótico en comparación con la manera tradicional de hacerlo.
Software empleado
- Blender para el proceso de UVs (seams, desplegado, recolocación…) y para comprender el funcionamiento del baking. El baking final se ha realizado en Substance Painter, pero al ser un proceso automatizado quise primero plantearlo manualmente en Blender para entender cómo funciona.
- Substance Painter para el baking final de los normales y el texturizado de ambos modelos. A nivel de hardware, se ha usado una tableta gráfica para pintar las texturas sobre los modelos.
Experimentación inicial: UVs y Baking
Como mencioné en la nota inicial, puesto que quería comprender realmente cómo funciona el baking de normales de modelos high-poly a sus modelos optimizados, probé a realizarlo en blender, sin buscar documentación previamente ya que así es como mejor aprendo en estos casos. La primera prueba de baking fue realizando un mapa de UVs con más seams de lo necesario: al dividir el modelo en tantas partes, pude ir viendo en fragmentos más pequeños qué partes se mostraban correctamente y cuáles no, para detectar qué hacía que funcionase bien o mal el bake.
El primer mapa de normales obtenido fue este, ya que inicialmente no realicé un cage manualmente, sino que añadí una “extrusión” de 0.05 en el modelo optimizado en la opción de baking:

Al ver todos los errores en el mapa (las zonas anaranjadas y verdosas, en vez de azuladas), comprobé si tenía los normales correctamente, y al ver que sí estaban bien, fui fijándome en qué diferencias había en las partes que tenían bien el proceso de baking y aquellas que no. Observé que el principal error era que el modelo high poly, al ser del mismo tamaño del low poly, solapaba y la mayoría de detalles se traducían “invertidos”, como se puede ver en el mapa. Quise corregirlo haciendo un cage, concepto que no conocía previamente pero aprendí al ver las opciones de baking en blender, y gracias a este breve vídeo comprendí lo que era y para qué servía.
El proceso de hacer el cage manualmente en blender es algo tosco en modelos humanoides y con este tipo de detalles, ya que al escalar uniformemente un duplicado del modelo low poly, inevitablemente hay detalles que quedan fuera del cage, y hay que revisar y corregir manualmente las zonas que queden solapadas o mal alineadas.
Tras ir revisando y arreglando las zonas poco a poco, realicé varios bakes de los normales hasta que llegué al siguiente resultado:

Sigue teniendo errores y artefactos, pero es en zonas muy complejas de arreglar correctamente sin que solapen partes del bake, como el interior de la coleta o el interior de la armadura del pecho, cuya geometría solapa en ciertos puntos con la del propio cuerpo.
Una vez ya entendido cómo funcionaba y cuánto se iban a marcar los seams en el modelo, realicé una prueba de qué ocurriría si realizase lo contrario. Es decir, si en vez de realizar seams de más en el mapa de UV, hiciese seams de menos. Principalmente quería comprobar si habría los mismos errores, o si se corregirían o empeorarían. Aquí se puede ver el resultado:

El resultado es relativamente similar a la prueba anterior en cuanto a cómo se muestra en el modelo, solo que al haber menos seams (principalmente en el cuerpo), hay menos artefactos relacionados con la iluminación, pero hay más “zonas erróneas” o que se muestran invertidas.
Decidí para el texturizado dejar preparado algo intermedio, sabiendo que podría modificar las UVs más tarde si lo veía apropiado y se mantendrían las texturas igualmente en Substance Painter, gracias a su opción de “Update Mesh”. Mientras el nombre del modelo y su geometría sea la misma, se puede actualizar el mapa de UVs en Substance Painter y el propio programa adapta las texturas al nuevo mapa de UVs, simplemente hay que repetir el baking de normales, pero es un proceso bastante sencillo y rápido en Substance Painter, que además guarda la configuración una vez ya lo has realizado antes.

UV map en este momento de Player 1

UV map en este momento de Player 2
Como se puede observar, ambos mapas tienen varias islas o zonas separadas que tienen menos de 10 quads. Esto fue porque quise separar zonas que tenían un cambio de ángulo brusco, y al ser modelos relativamente detallados fue algo que tuve en cuenta en varias zonas de ambos personajes, como en los giros de la armadura del pecho, en la zona de la ingle, o en los codos y rodillas, junto a otros detalles. Esto es algo que más adelante corrijo, pero en este momento de la práctica quise dejarlo preparado de esta manera por si fuera necesario, ya que no había trabajado con Substance Painter antes y no sabía cómo iba a reaccionar a los seams y a los cambios bruscos de ángulo en el modelo.
Baking de normales
El baking de los normales en Substance Painter fue bastante sencillo: Creé un nuevo proyecto con el modelo low poly, y en “configuración de conjunto de texturas” di a generar mapas de malla. Ahí se abre una interfaz y se escoge el modelo high poly para cargar como referencia de los normales. La configuración del baking en ambos modelos fue con un tamaño de salida de 2048 píxeles (el mismo tamaño que el mapa de UVs y el resto de texturas), aplicando difusión y con una distancia frontal y trasera máxima de 0,01.

Aquí se puede ver el cage que genera Substance Painter
Una vez ajustado, se hace clic en el botón azul de “hacer el bake a texturas seleccionadas” y una vez terminado, quedó sin ningún error, siendo este el resultado:


He de confesar que el resultado me impresionó, y tuve que comprobar que el modelo que salía en pantalla fuera el low poly y no el original, porque estaba sorprendida con la calidad del detalle y lo integrado que quedaba.
Texturizado de los modelos
En primer lugar, tuve en todo momento al frente el dibujo original de ambos personajes a la hora de hacer el texturizado, para hacerlo lo más fiel posible en cuanto a colores y formas, pero teniendo la libertad creativa de añadir manchas, detalles, óxido, y distintos aspectos relacionados con el brillo y el metal.
En el proceso de texturizado, en ambos modelos seguí un orden similar pero con cada una probé distintas máscaras, efectos y materiales.
El primer paso fue pintar los colores base en distintas capas con el material paint roll, apliqué modo espejo para agilizar el proceso y en este primer paso me fui familiarizando con el funcionamiento de las herramientas básicas de Substance. Una vez tenía los colores base, uní todas las capas de colores en una carpeta y fui probando materiales, materiales inteligentes y máscaras para ver cómo funcionaba cada uno y qué aspecto creaba.
En el caso de Player 1, la organización de capas es la siguiente:

En primer lugar añadí a la carpeta de colores pintados un blending mode “vivid light”, que altera los tonos y brillos ligeramente haciendo que los tonos morados tengan un brillo y subtono azulado que me gustó. Al tener este blending mode, usé como base un smart material tipo Machinery, y modifiqué los colores originales para que fueran más coherentes.
Encima de Machinery y colors añadí el smart material Iron Forged Old cambiándolo de normal a soft light, y también modifiqué (es decir, añadí en algunas zonas y borré en otras) detalles, cambié la opacidad de algunas capas y experimenté con los blending modes, cambiándolo de normal a multiply en las capas de dirt y dust.
Encima de este material, creé una capa a la que añadí detalles con el material carbon fiber, principalmente las gafas y las rodilleras, y encima añadí otra capa llamada Buttons and seams details, en la que añadí detalles con texturas que afectan al normal map, como botones, clavos y cables. La “opacidad” de la capa está al 0%, pero no es que no sea visible, sino que le he retirado el color y así simplemente afecta al normal map.
Posteriormente, añadí una capa para ajustar ligeramente los colores y la luminosidad, que es material metálico con una propiedad de relleno, cubriendo así todo el personaje. Puse su blending mode en division, y fui alterando el color de la capa hasta que di con el aspecto que me gustaba.
Finalmente, añadí una capa cuyo única propiedad es la de emisión, y pinté las luces del personaje. Como vi que el color que había escogido para esta capa era ligeramente más brillante y verdosa de lo que quería, añadí una máscara de ajustes para los niveles. Tras este proceso, el resultado es el siguiente:

Para Player 2, el proceso fue similar pero quise probar otra forma distinta de aplicar los colores. La organización de las capas es la siguiente:

Lo primero que hice fue pintar los colores base, pero en vez de dejarlos en una carpeta separada, añadí un smart material Machinery y sustituí la capa de paint que contiene por la carpeta de colores que hice, poniéndola en blending mode overlay. De esta manera, los colores se ven con la textura de metal base, y se aplican los detalles de suciedad, polvo y óxido encima de esta carpeta directamente.
Además de Machinery, quise darle un efecto distinto a este personaje, con un metal más brillante y más corrosión. Por eso, añadí un smart material Steel Medieval Stylized con blending mode value en 29%. Esto lo que hace es añadir las texturas, respetando y adaptándolas a los tonos de la carpeta Color que tiene debajo.
Encima, añadí Iron Forged Old igual que en Player 1, con blending mode soft light, a un 48% esta vez.
Posteriormente, añadí la capa de emisión, la capa de detalles con el material carbon fiber (llamada Eye mask aquí) y algunos detalles de suciedad pintados a mano en Dirt details. El resultado final es el siguiente:

Corrección final de UVs
Tras terminar el texturizado, comprobé que se importase bien a Sketchfab y que no hubiera errores que no hubiera detectado, y posteriormente modifiqué por última vez las UVs. De esta manera, tenía ya un modelo texturizado y sin errores, y podía probar a dejar las UVs como consideraba que sería más óptimo, y si no funcionaba bien podría simplemente usar la versión anterior, que era funcional pero algo menos limpia en UVs.
A continuación se pueden ver los mapas de UVs finales con una textura de tipo UV checker en los personajes:


Y a continuación están los modelos finales, texturizados, y con estas nuevas UVs que resultaron ser perfectamente funcionales. Se importaron a Substance Painter sin ningún problema y simplemente tuve que hacer un nuevo bake de las texturas, que es algo prácticamente automatizado por el propio software.


Modelos finales en sketchfab:
Personaje 1
Personaje 2
Como conclusión, hasta el momento esta ha sido mi parte favorita de la asignatura. Me ha encantado el proceso de aplicar texturas y de pensar en el posprocesado y las partículas que podré añadir en el futuro cuando se integre en Unity, y a raíz de estas dos primeras prácticas he acabado buscando por curiosidad cuáles son las ramas en videojuegos que están relacionadas con el 3D y he acabado descubriendo que me encantaría aprender y especializarme en Technical Art.
Las texturas de ambos modelos están en el PDF entregado a través del aula virtual.
Debatcontribution 0el Media para videojuegos – R2 – Texturas
No hi ha comentaris.
Heu d'iniciar la sessió per escriure un comentari.