Blender: ladrillos con adaptive subdivision/microdisplacement
En este tercer tutorial para Blender (actualizado a la versión 2.93) sobre la creación de un muro 3D a partir de una foto ("Curso de Blender: de una foto a una pared 3D"), veremos cómo crear los ladrillos del muro usando la Adaptive Subdivision, que también se llama Adaptive Displacement, o Micropolygon displacement, o Microdisplacement, o Tesselation, tantos nombres se debe a que en Blender esta funcionalidad no corresponde a un solo comando, como en el caso del "Displace Modifier", sino a un conjunto de configuraciones a realizar (por lo tanto no se ha asignado un nombre oficial), tanto porque en la literatura técnica algunas funciones se han denominado de diferentes formas, como porque este método no tiene una sino dos características interesantes: adaptabilidad y micropolígonos.
Subdivisión/Desplazamiento Adaptativo:
En el tutorial anterior https://www.graphicsandprogramming.net/esp/tutorial/blender/modelado/blender-landrillos-modificador-displace creamos una pared de ladrillos con el modificador "Displace", que usaba un número igual de vértices/polígonos para crear los ladrillos a lo largo de la pared, pero en un caso más complejo, con una pared más larga, podríamos estar interesados en ver más claramente, con más detalle, los bloques más cercanos, mientras que los ladrillos más lejanos también se pueden hacer con menos vértices, como están más lejos y menos visibles. Esta función se realiza a través de la Subdivisión Adaptativa: como puede ver en la figura
la parte del muro más cercana a la Camera, en la parte inferior, utiliza más vértices para representar los objetos más cercanos, mientras que los más alejados están formados por menos vértices, con reflejos adecuados y sombras que se hunden a menor resolución.
Micropolígonos:
Otra característica fundamental del Microdesplazamiento son los micropolígonos, que permiten agregar detalles a una malla, solo durante la fase de renderizado, a partir de una imagen. Desde este punto de vista los mapas utilizados recuerdan algo a los mapas de relieve, que añadían pequeños detalles sensibles a la luz usando el material, solo que en este caso en el renderizado la malla realmente se verá deformada, como si estuviéramos usando un modificador de "Displace". En Blender también podemos elegir el tamaño de los micro-polígonos (desde 0.5 px hacia arriba) obviamente cuanto más grandes sean, más gruesa será la perturbación resultante de la malla.
Creando ladrillos con el microdesplazamiento:
Usemos un ejemplo similar al del tutorial anterior, con respecto al modificador "Displace": creemos un plano centrado, importando la imagen "diffuse_map.jpg" que representa la pared, llamando al complemento con "File > Import > Images as Planes"
Luego importamos la lámpara del ejemplo del tutorial anterior, o presionamos las teclas "Shift+A" y luego elegimos "Light > Sun", creamos una lámpara "Sun" con Strength:4.5 con posición (X:-2.88183 m, Y:-1.41398 m, Z:2.8909 m) y rotación (X:48.7941°, Y:-1.17007°, Z:297.408°).
Luego creamos una Camera, dejando los valores predeterminados y con posición (X:1.17253 m, Y:-2.66012 m, Z:-0.016343 m) y rotación (X:90°, Y:0°, Z:22.2°).
Procedamos ahora con la construcción de los ladrillos del muro, en 4 pasos:
1. Durante años, el microdesplazamiento se ha clasificado entre las "características experimentales" y funciona solo con el motor de renderizado Cycles, por lo que en la pestaña "Render Properties" de la "Properties Window" configuramos "Render Engine:Cycles" y "Feature Set:Experimental"
2. Seleccione el plano en "Object Mode", haga clic en "Shading" en la parte superior para acceder al espacio de trabajo de materiales, donde están presentes los nodos premiamos las teclas "Shift+A" y agregamos con "Texture > Image Texture" el mapa de displacement "displacement_map.jpg". Aún presionando las teclas "Shift+A" creamos el nodo "Vector > Displacement", que regula la intensidad del voladizo, que colocamos entre la textura y el puerto de "displacement" de la "Material Output"
De esta forma conectamos el mapa desde el que leer los datos de desplazamiento.
Para controlar mejor los resultados de desplazamiento, desvinculemos la textura "diffuse" del sombreador "Principled" por ahora.
3. En el paso anterior vinculamos el mapa de desplazamiento a el "Material Output", pero su puerto de "displacement" fue utilizado solo por las "bump map" para simular pequeños detalles en la superficie; ahora queremos cambiar su funcionalidad, por lo que accedemos a la pestaña "Material Properties" y en "Settings > Surface > Displacement" cambiamos la opción de "Bump Only" a "Displacement Only" (solo "Displacement" porque queremos usar esta función solo para desplazamiento)
4. Seleccionamos el plano y le asociamos un modificador "Subdivision Surface", que se utiliza para ajustar la tasa de subdivisión de los micro polígonos, en el cual marcamos la opción "Adaptive Subdivision" para activar la subdivisión que cambia según la distancia de la Camera (y "Simple" para mantener los bordes de la parte superior sin cambios).
El parámetro "Dicing Scale" le permite cambiar la escala de definición del microdesplazamiento tanto para la vista previa "Rendered" en el 3D Viewport como para el Rendering real (para trabajar fácilmente en otras partes de la escena, ahorrando recursos computacionales). Por ejemplo
por defecto se establecen los valores 1px para el "Render" y 8px para el "Viewport", que son las dimensiones de los micro-polígonos de los que hablamos antes, por lo que en "Render" se usarán micro-polígonos más pequeños, mientras que en "Viewport" más grande, facilitando así los cálculos durante la vista previa.
Estos valores predeterminados se pueden cambiar en la pestaña "Render properties" en el subpanel "Subdivision",
donde, eventualmente, puede establecer valores más pequeños para el "Render", pero no menos de 0.5, o dar valores más grandes a "Viewport" si tiene problemas de recursos.
En el subpanel "Subdivision" vemos otros tres parámetros, como "Offscreen Scale", que especifica cuál debe ser la definición de las partes de una malla que están fuera de la vista de Camera. Para valores altos de "Offscreen Scale", las partes que están fuera de la vista se representarán ahorrando recursos; por ejemplo, al girar la Camera y establecer el valor de "Offscreeen Scale" en 25, se guardarán las partes encerradas más alejadas de la vista,
mientras que para valores bajos, por ejemplo 1, las partes más ocultas de la vista de Camera están más definidas.
El parámetro "Max Subdivisions", en cambio, establece un techo en la definición de la malla: aunque para una cierta distancia es posible realizar más divisiones que el parámetro ingresado, no realiza ninguna. De hecho, si comparamos la situación con el valor por defecto 12 con un valor de 5 para "Max Subdivisions", notamos que incluso si nos acercamos a la Camera el número de subdivisiones no aumenta, pero en cierto punto se detiene.
En el último parámetro "Dicing Camera" también podemos insertar una Camera de referencia para el cálculo de las subdivisiones, de modo que no se creen artefactos durante las animaciones.
Volviendo a la realización de nuestro muro, como en el tutorial sobre el modificador "Displace" insertamos, como "Environment texture" en las "World Properties", la imagen hdr "neurathen_rock_castle_2k.hdr"
Dado que nuestra escena es simple y con pocos vértices, para poder observar nuestro objeto más fácilmente también damos un tamaño de micro-polígonos igual a 1px en la viewport.
Entramos en el modo de vista "Rendered" y notamos que los ladrillos sobresalen demasiado
Luego vamos al espacio de trabajo "Shading" y en el nodo "Displacement" disminuimos el valor de "Scale" llevándolo a 0.015
obteniendo un resultado más acorde a nuestros deseos
Al presionar la tecla 3 en el teclado numérico en la viewport, miramos la pared lateral y notamos que los ladrillos están en relieve pero se movieron "dentro" de la malla, mientras que queremos que sobresalgan hacia afuera.
luego cambiamos el valor de "Midlevel" (en nuestro caso lo establecemos en cero)
para nivelar los ladrillos.
Desde la vista de Camera (obtenida presionando la tecla 0 en el teclado numérico) ya podemos ver una interesante pared de ladrillos.
Ahora reconectemos la textura de la "diffuse map", cambiemos el valor de "Specular" a 0.177
y obtenemos
Obteniendo, como en el caso del modificador "Displace", una buena forma para los ladrillos del muro.
La subdivisión adaptativa conlleva beneficios ya que te permite ahorrar en memoria, permitiéndote renderizar más rápido y crear escenas más complejas con los mismos recursos de hardware, optimizando los vértices con la distancia de la Camera, con una malla que permanecerá ligera durante el modelado, posponiendo los detalles a la fase de renderizado. Por otro lado, todavía tiene algunas fallas:
- Se puede usar con el motor de renderizado Cycles, pero no con Eevee.
- Al mostrar los relieves solo en el renderizado, el microdesplazamiento no se puede utilizar para objetos destinados a la impresión 3D (un plano con un Desplazamiento Adaptativo asociado, en la Solid view solo hay un plano, sin los relieves añadidos con este método, por lo que dará lugar a cualquier otro software donde se exportará)
- En la pila de modificadores, el "Subdivision Surface" adaptativo para que funcione bien debe estar en la parte inferior, para que sea el último modificador utilizado antes de renderizar; si se mueve primero perderá algunas de sus propiedades: consideremos como ejemplo una "secuencia de asteroides"
hecho a partir de este objeto (un cubo al que ya se había aplicado un modificador de "Subdivision Surface" no adaptable)
con configurada la versión experimental de Cycles, material con la opción "Surface > Displacement:Displacement Only" y material con una textura "Noise Texture" con el nodo "Displacement"
y el modificador "Subdivision Surface" adaptable después de un modificador "Array"
el resultado será lo que quieras
mientras que si arrastramos el modificador "Subdivision Surface" encima del modificador "Array", haciéndolo actuar así antes, se transformará "mágicamente" en un modificador no adaptativo, perdiendo todas sus propiedades indicadas anteriormente.
Una última observación: si se crean instancias, hay que recordar colocar la Camera delante del objeto original.
Guardamos el archivo como "adaptive_subdivision_microdisplacement.blend".
Puede descargar los archivos del proyecto aquí:
displacement_map.jpg
diffuse_map.jpg
adaptive_subdivision_microdisplacement.blend
world hdri
Para este tutorial sobre la adaptive subdivisión es todo; hemos visto que es una herramienta muy útil, aunque en ocasiones tiene limitaciones y comportamientos no deseados. Esperamos que en el futuro se mejore y se convierta también en un estándar para Blender.
Nos vemos en el próximo tutorial, donde veremos cómo darle a nuestro muro un material PBR (Physically Based Rendering)
para hacerlo lo más realista posible. ¡Happy Blending!
Volvé al curso "Curso de Blender: de una foto a una pared 3D"