Ayer publiqué un nuevo modelo 3D de Tanya Degurechaff (enlace) y en la entrada de hoy quisiera compartiros los trucos que he aprendido la semana pasada mientras la modelaba.
1.- Usar el modificador de "skin" sobre simples vértices para crear líneas con profundidad.
Este descubrimiento ha sido muy valioso para mí. Para contextualizar, deseaba recrear el marco dorado de estilo clásico que aparece en las portadas de “Diario de Guerra: Saga of Tanya The Evil”. Inicialmente, intenté hacerlo con un plano simple en el que delineaba el contorno del marco mediante extrusiones ("extrudes"), lo cual resultó ser un proceso muy lento, ineficaz y depresivo. Con esta técnica rudimentaria, podía dedicar diez minutos sin obtener avances significativos. Para haceros una idea, os comparto aquí la portada que quería usar de inspiración, donde se ve el nivel de complejidad de dicho marco dorado (que rodea toda la composición).
Después consideré la posibilidad de utilizar nurbs path y curves, una técnica que suelo emplear para la creación del cabello de los personajes. Sin embargo, esta opción añadía una complejidad excesiva al modelado. Finalmente, encontré una solución óptima y sencilla: Crear una ruta de vértices a la que posteriormente aplicaría un modificador “Skin” para generar volumen. Este método resultó mucho más eficiente: siguiendo el contorno, colocaba un vértice, aplicaba una extrusión, colocaba otro vértice y repetía el proceso. De esta manera, en poco más de una hora, el marco estaba terminado.
Es importante destacar que la estructura del marco en el manga presenta una mayor complejidad, ya que los nudos poseen profundidad (permitiendo distinguir con facilidad los puntos de entrada y salida del trazo) y, además, presenta tramos con un trazo más fino o grueso. Si bien esta característica podría replicarse mediante la técnica de vértices y el modificador “skin” (jugando con la coordenada del eje Y y combinando con Control+A para cambiar el grosor del trazo), opté por mantener una estructura plana con trazos uniformes para simplificar el proceso, considerando que, en la composición final, el marco no adquiere una relevancia que justifique una inversión de tiempo excesiva.
2.- El motor EEVEE permite efectos muy buenos para aplicar estilos de dibujo.
Una de las principales diferencias entre los motores de renderizado EEVEE y Cycles es que EEVEE es menos realista y permite jugar con la vista, implementando nodos como el "Convert Shader to RGB" que no funciona en Cycles (el cual ofrece iluminaciones más realistas al estar basado en el trazado de rayos). De hecho, jugando con los nodos puedes simular cierto nivel de celshading sin tener que crear un objeto de contorno negro con normales invertidas.
Pero claro, no es tan sencillo como pillar un nodo de Color Ramp, te toca experimentar con los nodos de "Geometry" y jugar con las normales para luego alterar el displacement del material final. Aquí os dejo, como ejemplo, todos los nodos que tuve que emplear únicamente para el color del pelo:
3.- Ponerle al iris y a las cejas un material de emisión queda genial en escenas oscuras.
De esta forma podemos ver los ojos del personaje incluso si no hay iluminación.
4.- Los motores de juegos o Sketchfab se parecen más al motor Cycles que al EEVEE.
Como he dicho antes, EEVEE es un motor muy genial para implementar efectos de dibujo, pero en cuanto subes tu modelo a sitios como a Sketchfab o lo exportas a un formato como GLB/GLTF o FBX para utilizarlo en algún juego, te encuentras con que los materiales, una vez importados a Unity/Unreal/Godot, no se parecen a los que estabas empleando en Blender. El principal problema suele estar en nodos como el "Shader to RGB", que no son compatibles fuera de EEVEE.
Mi modelo renderizado en EEVEE antes de adaptar los materiales para funcionar con Cycles.
Mi modelo visto en Cycles antes de que adaptara los materiales.
Esto sería un ejemplo de "se ve bien en Blender, pero feo en Unity/Godot/Unreal".
Mi modelo con los materiales adaptados a Cycles.
Dicho esto, si tienes pensado exportar tu modelo, vale la pena dedicarle tiempo a ver cómo quedan tus materiales en el motor de Cycles.
En mi caso la adaptación pasó por identificar todos los materiales que hacían uso del "Shader to RGB" y reemplazarlo generalmente por un "Diffuse BSDF", salvo si éste estaba siendo usado como factor para un Color Ramp, que en ese caso un "Geometry> Normal", "Geometry> True Normal" o "Geometry> Tangent" me daba mejores resultados.
5.- "Hornear" texturas para que tu modelo se vea igual en Blender que en Sketchfab o en cualquier juego.
Cada juego o motor suele tener su propio sistema de luces. Si quieres hacer que una escena se vea exactamente igual sin tener muchas complicaciones de cabeza, con el motor Cycles puedes hacer un "bake" de las texturas. Es decir, imprimir el resultado final del material aplicado en tu modelo en un fichero de imagen de textura. Es decir, la textura resultante contendrá los datos de iluminación y color conforme los estas viendo ahora mismo. No es complicado, pero sí muy tedioso. Si el material a "hornear" está en objetos complejos (con miles de vértices), esto puede durar más de diez minutos, dependiendo de tu tarjeta gráfica. En objetos normales, sin mucha complejidad, este proceso suele ser casi instantáneo.
Primero tienes que asegurarte que el objeto tenga unas UV bien definidas. Para ello basta con seleccionarlo, irte a la pestaña de edición de UV y si ves que las caras no parecen bien posicionadas en la textura fuente, puedes probar a recrearlas con UV > Smart UV Project. Recomiendo encarnizadamente revisar las UV antes de empezar con el "bake". Si no está familiarizado con el concepto, las UV pueden entenderse como un “mapa” de vértices utilizado para la texturización de superficies. En otras palabras, describen cómo se proyectan las caras de un objeto en un plano bidimensional, o cómo se asigna cada área del archivo de textura a una cara específica del objeto. En términos generales, puede entenderse como un mapa.
UV por defecto que propone Blender para la cabeza de mi modelo, con los modificadores sin aplicar.
Ese vértice rebelde puede dar problemas en determinados motores de juegos.
UV tras pasar por Smart UV Project, con los modificadores sin aplicar.
UV recalculado con "Smart UV Project" con los modificadores ya aplicados.
Para "bakear" el proceso es muy sencillo. Una vez tu material está adaptado para funcionar en Cycles, le añades un nodo de "Texture Image" y creas una imagen con un tamaño que sea una potencia de 8 (por ejemplo 512x512, 1024x1024, 2048x2048, 4096x4096...). Acto seguido, en la pestaña de "Render", en el motor Cycles te saldrá una opción de "Bake" en el que puedes indicar todos los datos que se tienen que exportar en la textura resultante (luz directa, indirecta, brillo, transiciones, etc) y le das a "Bake".
Cabe destacar que si tu material está siendo usado por varios objetos, tendrás que cambiar la "Texture Image" en cada objeto que vayas a "bakear". De misma forma, motores como el de Sketchfab no te permiten materiales con múltiples texturas, por lo que lo más sencillo será que dupliques el material a cada vez que "bakees" un objeto y lo renombres para recordar qué textura va en qué material.
6.- Copiar modificadores con "Control+L".
Esto es algo bastante práctico que no sabía que se podía hacer. Para daros contexto, los peinados de mis personajes suelen tener muchos vértices. En Blender parece liviano porque utilizo una mezcla de nurbs curves + nurbs paths, pero una vez los convierto en malla estos atrapan un volumen exagerado de vértices. A esto sumadle que el peinado de Tanya puede constar perfectamente de unos 50 mechones, lo que puede dar lugar a más de 600.000 vértices en el modelo sin optimizar sólo para el cabello.
Lógicamente yo no puedo publicar un modelo con medio millón de vértices sólo en el pelo. La solución lógica parece que pasa por convertir todos los mechones a malla, unirlos en un único objeto con Control+J (o hacer uso de modificadores de boolean de tipo unión) y aplicarles un modificador de "Decimate" para aplanar las caras. Claro, esto sobre el papel parece una buena idea, pero te acaba deformando la hermosa caballera y encima ésta sigue teniendo un número considerablemente alto de vértices (si lo bajo a 400.000 vértices se ve feísimo).
Así que opté por otra técnica: ¿Qué pasa si aplico un decimate, por separado, a cada mechón? Pues esto fue lo que salvó el pelo de Tanya en el modelo final. Resulta que si en Blender seleccionas varios objetos y pulsas Control+L, te sale un menú desplegable donde una de las opciones es "Copy Modifiers" y que lo que hace es, como suena, copiar TODOS los modificadores del objeto seleccionado al resto. Y bueno, si éste último objeto seleccionado no tiene ningún modificador, te borrará todos los modificadores de todos los objetos seleccionados (lo cual también puede ser práctico).
De esta forma, a base de copiar y pegar modificadores, podía hacer de forma fácil que los mechones que eran poco visibles tuvieran un factor de decimate elevado y de paso ser menos agresivo con los decimates de los mechones del flequillo, haciendo que el pelo de Tanya pasara de 600.000 vértices a 100.000 sin que se apreciara una caída drástica de calidad. Se podría optimizar aún más, pero para Sketchfab ya era un valor aceptable y decidí dejarlo así.