17 años en Internet

15 febrero 2023

[Blender] Aplicando celshading a un modelo


 

    Motivado por los distintos trabajos que la comunidad va subiendo a Sketchfab (https://twitter.com/Hamster_ruso/status/1625553038134894593), últimamente he estado jugando con varias técnicas de celshading en Blender y bueno, los que me sigáis en Sketchfab (https://sketchfab.com/hamster_ruso) habréis notado que en los últimos días he ido actualizando algunos de mis últimos trabajos.

 

    Para quien no sepa de qué va la cosa, el celshading (aka "sombreado plano") es una técnica que simula trazos de rotulador para dar aspecto de dibujo animado. En caso de Hana Uzaki (aka "Uzaki Chan"), el celshading que he aplicado es bastante chapucero, pero a base de practicar y practicar estos días he ido perfeccionando mi técnica y la verdad es que ahora mismo estoy bastante contento con el resultado de mi Rimur Tempest y de mi Clare (Claymore). Y básicamente en esta entrada quisiera explicaros el proceso que ha día de hoy estoy siguiendo.

    Para entender por qué el truco funciona, hay que comprender el funcionamiento de los motores gráficos. Digamos que un polígono tiene como mínimo 3 vértices, con ello somos capaces de hacer un plano simple triangular. Ahora bien, un plano tiene dos caras, la frontal y la de atrás y para definir cual es la frontal nos inventamos el concepto de normal, un vector perpendicular al plano que nos sirve para definir la orientación de éste (https://es.wikipedia.org/wiki/Vector_normal). Muchos motores gráficos (como es el caso del motor de Sketchfab), aplican una técnica de "backface culling" por defecto, que consiste en pintar sólo los planos cuya normal apunta a la cámara (es decir, que tienen una desviación de un rango X con la normal de la cámara). Todos los planos que no coinciden con el algoritmo del motor, se marcan como "culled" (aka "sacrificado"), lo que significa que el motor pasa de pintarlos. De esta forma, si duplicamos el modelo e invertimos las normales, realmente estaríamos viendo lo que no tendríamos que ver. Por ejemplo, si a un cuerpo humano real le invirtiéramos las normales, podríamos ver los órganos de éste. Este efecto puede aplicarse dentro de un shader en determinados juegos para ver, por ejemplo, el interior de un  muro o volver transparente un objeto que tapa la cámara o al prota

    Teniendo en cuenta estos conceptos, podemos entender el celshading "básico" como cubrir a tu modelo con una capa de chocolate a la que le invertimos las normales, de forma que ves el interior de esta capa y los bordes que la delimitan. Existen otras técnicas, pero son más complejas (por ejemplo, los chicos de Arc System Works realmente definen planos negros y los escalan dinámicamente).

    Como ejemplo de partida voy a pillar mi versión de Hana Uzaki sin celshading y vamos a aplicarle el mismo efecto que le he dado a Clare y a Rimur. Básicamente éste es el modelo en bruto, sin shaders (en viewport display = Material preview mode):

 

    Para empezar y ser mínimamente ordenados, creo una nueva colección vacía que nombro como CelShading:



    Acto seguido, con la ayuda del botón "control", selecciono todos los objetos que deseo que tengan efecto de celshading. Es importante saber filtrar bien qué interesa que tenga o no el efecto: Por ejemplo, yo suelo seleccionar todo menos los ojos, las pestañas y las cejas.


    Con todos los objetos seleccionados, pulsamos "Mayúscula + D" para crear un duplicado. Si os fijáis, los objetos "originales" desparecen de vuestra selección pero os aparecen marcadas las copias, así que simplemente arrastro esas copias y las dejo en la colección de "CelShading".



    Una vez arrastradas y teniéndolas aún seleccionadas, las convierto en mallas haciendo uso de las opciones "Object> Convert> Mesh" (disponible únicamente desde la vista de layout). Esto lo que hará es aplicar TODOS los modificadores. Si como yo os gusta hacer uso de "nurb paths" para crear mechones de cabello, también os convertirá esos nurb paths a malla.


    Seleccionamos todos los objetos de la colección (es probable que aún los tengáis seleccionados) y pulsamos "Control + J". Esto lo que hará es unir todos los objetos en uno solo. En mi caso el objeto final se llama "Bracelet.001" simplemente porque fue el primer objeto que seleccioné, mi consejo es que lo renombréis a "Celshading" para evitar líos.



    Ahora que tenemos un único objeto para gestionar el celshading, borramos de él todos los materiales y creamos uno nuevo de color negro.


 

    Dentro de las características del nuevo material, nos vamos a "Viewport Display", desplegamos "Settings" y activamos la opción de "Backface Culling". En mi caso me gusta dejar el Blend Mode en "Opaque" y el Shadow Mode en "None".


   Veréis que Blender empieza a liarse y nos muestra una versión oscura de nuestro modelo.

    Editamos el objeto "Celshading", seleccionamos todas las caras, pulsamos "Alt + E" y se nos abrirá un menú desplegable. Seleccionamos "Extrude Face Along Normals" y engrandecemos la figura ligeramente hasta que veamos que el modelo está casi totalmente de color negro. Básicamente, a mayor tamaño, más agresivo será el efecto de celshading. Si te gusta modelar de forma realista, mi consejo es que el efecto sea pequeño (apenas agrandes la figura), pero si modelas efecto cartoon, seguramente te convenga un efecto agresivo (incrementa bastante la figura).




   Sin soltar la selección, hacemos clic derecho para abrir el menú contextual y seleccionamos "Separte > Selection". Esto lo hacemos porque el "extrude" realmente no es un escalado, si no que hemos creado un duplicado de las caras y hemos desplazado sus vértices por distancia partiendo de la normal de los planos. En pocas palabras, lo hacemos para no tener el doble de polígonos.


    Si os fijáis ahora tendremos dos objetos de "Celshading". Podéis borrar el objeto "Celshading" original y continuar trabajando con la copia. De hecho, editamos la copia, seleccionamos todas las caras y pulsamos "Mayúscula + N" para invertir las normales de los polígonos. Es importante que en la ventana de "Recalculate Normals" marquéis "Inside", por que si no no estaremos invirtiendo las normales.


    Y ya está:


    Por último tened en cuenta que ahora mismo el efecto de celshading está duplicando el número de polígonos del modelo, por lo que es muy aconsejable aplicarle un modificador de "Decimate" para reducirlos de forma drástica. En la práctica dejar un ratio de 0.2 (aka "20%") me suele dar buenos resultados.


 

   También es recomendable borrar todos los datos y bloques ligados a posibles objetos huérfanos que hayamos podido crear. Recordemos que para este proceso hemos duplicado y borrado muchos objetos. Para ello basta con irse a "File> Clean up" y pinchar en las 4 primeras opciones: Unsuded Data-Blocks, Recursive Unused Data-Blocks, Unused Linked Data-Blocks y Recursive Unused Linked Data-Blocks. Sabréis que funciona porque Blender os avisa con una popup (os pide confirmación para purgar) y además el fichero final pesará bastante menos.

No hay comentarios:

Publicar un comentario

Si te ha gustado la entrada o consideras que algún dato es erróneo o símplemente deseas dar algún consejo, no dudes en dejar un comentario. Todo feedback es bienvenido siempre que sea respetuoso. También puedes contactarme vía Twitter @Hamster_ruso si lo consideras necesario.