Blender para perdidos en el espacio

Blender para perdidos en el espacio

El modificador Booleano.

Los modificadores son procesos predefinidos en Blender que permiten como su propio nombre indica hacer modificaciones complejas de varios tipos, (alterar, generar, deformar y simular) en la geometría de las mallas y otras clases de objetos según los casos, (no todos los modificadores pueden aplicarse a todos los tipos de objetos ni en todos los modos). Estas modificaciones tienen la particularidad de que no son destructivas, es decir, no alteran la estructura original de la malla, sólo su apariencia, mientras no se apliquen. Si queremos que los cambios sean permanentes y modifiquen la malla tenemos que aplicar el modificador, pero hasta que esto no ocurra la topología de la malla sigue intacta.

Se accede a ellos desde la ventana Properties, (que está a la derecha de la pantalla, debajo de la ventana Outliner,) en el panel Object Modifiers, representado por una llave inglesa, resaltada en azul cuando está seleccionado, pulsando en el desplegable Add Modifier.

Descripción.

El modificador Booleano es un modificador incluído en el grupo Generate del desplegable Add Modifier al que se accede como se ha explicado en el párrafo anterior o también desde la Barra Espaciadora buscando el texto add modifier y pulsando la tecla N cuando sale el cuadro desplegado con los modificadores disponibles. Pertenece a este grupo porque genera una nueva topología para el objeto al que se aplica el modificador, resultante de realizar una de las 3 operaciones booleanas disponibles, (intersección, unión o diferencia) en función de la topología de otro objeto de tipo malla existente previamente. De estos dos objetos, el objeto sobre el que se aplica el modificador se transforma, y el otro, el objeto destino, es el que se elige en las opciones del modificador, sirve para determinar la topología de la nueva malla modificada pero permanece intacto.

Mientras no se aplique el modificador la malla original también permanece intacta y los resultados que se obtendrían al aplicarlo sólo se ven el el Modo Objeto. Cambiando el Viewport Shading, (que es el desplegable que está a la derecha del desplegable de Modo Objeto en la cabecera de la ventana 3D), a Fireframe se ven más claro los cambios que hace en la malla con cada operación booleana, pero sólo en Modo Objeto. Igualmente, aunque se puede añadir en otros modos, sólo se puede aplicar en Modo Objeto.

Aplicar el modificador a un objeto es hacer definitivos los cambios, la malla original deja de existir y toma una nueva forma, en función de la operación realizada y del otro objeto implicado. Esto se consigue pulsando el botón Apply en las opciones del modificador con lo que ya no existe el modificador, sólo la nueva malla. Todas las operaciones que se hagan después se harán sobre la nueva topología. Esto es importante cuando se aplican varios modificadores, no es lo mismo aplicarlo sobre la malla original que sobre la malla ya modificada una vez que se ha aplicado el modificador, es decir, un orden diferente produce resultados diferentes, o incluso un orden inadecuado puede provocar errores en el programa, como por ejemplo cuando se usan como objeto destino, objetos que previamente se han usado como origen para otro modificador booleano sin haber aplicado los cambios.

Operaciones.

Entendiendo las mallas como un conjunto de puntos definidos en un espacio, es lógico que se les puedan aplicar operaciones de conjuntos como la unión, la intersección y la diferencia, respecto a otro conjunto que sería la malla destino, obteniendo como resultado un nuevo conjunto que sería la malla modificada. Hay que tener claro el papel de las normales en las operaciones booleanas porque en realidad la misma malla representa dos objetos diferentes en función de hacia donde apunten las normales, es decir, el exterior del objeto lo marcan las normales. Cuando hacemos una operación booleana con un objeto con las normales invertidas es como si hicieramos la operación con el complemento de ese conjunto de puntos, o lo que es lo mismo, con todos los puntos del espacio que no están definidos en la malla, y el resultado lógicamente es muy diferente, aunque a simple vista no se aprecie si no se hacen visibles las normales. Por ejemplo si hacemos la unión de dos cubos con las normales de ambos apuntando hacia dentro parecerá que está haciendo la intersección de ambos por como muestra la malla, pero al estar las normales invertidas, en realidad el exterior del objeto sería lo que hay dentro de él. Esto pudiera parecer confuso porque los resultados no serán los esperados si no hemos cambiado las normales conscientemente, ya que en realidad no estaremos haciendo la operación con el objeto que creemos, sino con su complementario. Con unos diagramas de Venn o similar se ve mas claro. veremos algún ejemplo más abajo.

Hay una diferencia importante con las operaciones de conjuntos, y es que no se cumple la propiedad conmutativa estrictamente, en cuanto a la topología de la malla resultante, su volumen si que es igual pero su topología puede ser diferente, en Blender, no es lo mismo unir A con B que unir B con A. Por ejemplo, si unimos A con B, siempre el primer objeto al que nos refiramos, en este caso el objeto A, es al que se le aplica el modificador con la operación booleana a realizar, pero no se crea un objeto nuevo, su malla se modifica en función de la topología de la malla del objeto B. Como cada operando tiene una función diferente el orden es importante, por las diferencias que se producen en la malla resultante, que son mayores cuanto más complejas sean y más diferencias existan entre las dos mallas.

Para los ejemplos de esta página vamos a usar dos objetos primitivos, un cuadrado de 6 caras y un cilindro de 34, y vamos a trabajar desde la Vista Top (sólo en dos dimensiones: X e Y), en Modo Objeto para que se aprecien los cambios sin aplicar el modificador y mostrando los objetos en Wireframe para que se vean claramente los cambios en la topología de la malla. Así, a la izquierda de la imagen sólo veremos un cuadrado y un círculo uno de ellos amarillo (al que se le aplique el modificador) y otro naranja. Rayaremos con líneas oblicuas la superficie de cada objeto como si se tratara de un diagrama de conjuntos, en el que el plano gris del fondo representa el espacio. En la parte derecha de las imágenes habrá una vista de como muestra Blender la malla modificada. El objeto que nombremos en primer lugar será al que le apliquemos el modificador y le llamaremos objeto A, y el otro será el objeto B que sirve para calcular la nueva malla y no varía su topología.

Ejemplos de unión.

Unión del cubo con el cilindro.

union cubo con cilindro ambos con normales hacia fueraLa unión de dos conjuntos A y B es el conjunto que contiene todos los elementos que pertenecen al menos a uno de ellos, es decir que pertenecen a A, o que pertenecen a B, o a ambos. En Blender unir la malla A con la malla B significa añadir a la malla A todos los puntos de la malla B que no formaran parte ya de ella. En este caso hemos unido el cubo con el cilindro, el cubo es el objeto A, y los dos objetos tienen las normales apuntando hacia el exterior, es decir los objetos son lo que hay dentro de sus mallas, es el caso más común. La unión sería todo lo que aparece rayado al menos una vez a la izquierda de la imagen. A la derecha se muestra la nueva malla del cubo.

Unión del cilindro con el cubo.

union cilindro con cubo ambos con normales hacia fueraEn este caso se une el cilindro con el cubo y ambos tiene las normales apuntando hacia el exterior como en el ejemplo anterior. Pero en este ejemplo el cilindro es el objeto A y se usa la topología del cubo para calcular su nueva malla. Es el cilindro el que cambia, lo contrario de lo que ocurría en el ejemplo anterior. Por eso aunque se usan los mismos objetos, las normales son idénticas y se hace la misma operación que en el ejemplo Unión del cubo con el cilindro, con el mismo resultado, (la superficie rayada es la misma, como se ve a la izquierda de las imágenes de los dos ejemplos), el objeto modificado y el que modifica son distintos y la malla obtenida también, (como se ve a la derecha de las imágenes). Es un ejemplo claro de lo que comentabamos de que el orden de los operandos es importante y que no se cumple estrictamente la propiedad conmutativa en cuanto a la topología de la malla modificada.

Unión del cubo con el cilindro con normales invertidas ambos.

union cubo con cilindro ambos con normales hacia dentroEn este ejemplo todos los parámetros son iguales que en el ejemplo Unión del cubo con el cilindro, excepto por las normales que las hemos volteado en los dos objetos y ahora apuntan hacia el interior. Esto implica que vamos a hacer la operación con sus complementarios, recordemos que el complementario de un conjunto A es el conjunto que contiene todos los elementos que no están contenidos en A. En la parte izquierda de la imagen hemos rayado lo que sería cada objeto, como se ve es justo todo lo que hay fuera de cada malla. La unión como ya hemos dicho son todos los puntos que pertenezcan al menos a uno de los dos objetos, todo lo que tenga alguna raya, en este caso todo menos la mitad izquierda del cilindro. Como se ve en la malla de la parte derecha de la imagen parece que hubiera hecho la intersección y que el objeto resultante fuera justo esa mitad, pero como las normales estaban hacia el interior el objeto es lo que hay fuera de esa malla.

Ejemplos de intersección.

Intersección del cilindro con el cubo.

interseccion del cilindro con el cuboLas condiciones son las mismas que en el ejemplo Unión del cilindro con el cubo (la parte izquierda de la imagen es igual), pero esta vez hacemos la intersección. La intersección de dos conjuntos A y B está formada por los elementos que pertenecen simultaneamente a los dos conjuntos. En Blender se restan de la malla A los puntos que no pertenezcan a la malla B. A la izquierda de la imagen, el semicírculo con doble rayado representaría la intersección, que es la parte que tienen en común ambos objetos. A la derecha de la imagen se ve la malla modificada del cilindro. Si como hemos visto en los ejemplos de la unión, cambiáramos el orden de los objetos e hiciéramos la intersección del cubo con el cilindro, la malla resultante sería diferente.

Intersección del cubo con cilindro.

interseccion del cubo con el cilindroComo comentábamos en el ejemplo anterior hacer la intersección del cubo con el cilidro da como resultado una topología diferente en la malla modificada (parte derecha de la imagen), como también vimos en los ejemplos de la unión. Curiosamente esta topología es idéntica a la que se muestra en la parte derecha de la imagen del ejemplo Unión del cubo con el cilindro con normales invertidas ambos, excepto por una sutil diferencia que no se aprecia en la imagen, las normales están en sentidos opuestos. En este caso las normales apuntan hacia el exterior y el objeto es lo que hay dentro de la malla aunque por la topología no pueda saberse, pero hay que tenerlo presente porque podría causar otros problemas.

Intersección del cilindro con el cubo con normales invertidas ambos.

interseccion del cilindro con el cubo con normales hacia dentro ambosPara este ejemplo las normales de los dos objetos apuntan hacia el interior y se ha hecho la intersección del cilindro con el cubo. La intersección es la parte en común, la superficie que aparece rayada dos veces en la parte izquierda de la imagen. También es el conjunto complementario del que se muestra a la izquierda en el ejemplo Unión del cilindro con el cubo, es decir todo lo que no aparece rayado en ese ejemplo. La representación que hace Blender de la malla es la misma en los dos ejemplos pero con las normales invertidas, aunque eso no se aprecia en la imagen. Es la misma situación que comentabamos en el ejemplo Unión del cubo con el cilindro con normales invertidas ambos y en general siempre que intervengan objetos con las normales volteadas puesto que la operación se hará con su complementario.

Ejemplos de diferencia.

Diferencia del cilindro con el cubo.

diferencia del cilindro con el cuboLa diferencia es la operación contraria a la intersección. La diferencia de dos conjuntos A y B es el conjunto que contiene todos los elementos de A que no pertenecen a B. En Blender se restan de la malla A los puntos que pertenecen a B, al contrario que en la intersección. En la representación de la parte izquierda de la imagen, se corresponde con lo que está rayado sólo de amarillo. La malla modificada a la derecha de la imagen, es justo la mitad opuesta del cilindro del ejemplo Intersección del cilindro con el cubo como es lógico, ya que son operaciones contrarias.

Diferencia del cubo con el cilindro con normales invertidas ambos.

diferencia del cubo con el cilindro con normales hacia dentro ambosEn este ejemplo cambiamos el orden de los operandos con respecto al ejemplo anterior y volteamos las normales para que apunten hacia el interior. El resultado de la operación es el mismo (parte rayada sólo de amarillo a la izquierda de las dos imágenes) y la topología de la malla también, a la derecha de las imágenes, pero con las normales invertidas. El objeto modificado es distinto, recordemos que a la derecha, mostrabamos la malla del objeto al que se le aplica el modificador que en este caso es el cubo, aunque la forma de la malla puede llevar a confusión, al ser la misma que en el ejemplo anterior, pero en distinto objeto.

Resumen.

Como se ha dicho es un modificador muy potente, pero conviene tener claros unos cuantos puntos para obtener los mejores resultados con él:

Recomendaciones.

Puede resultarnos útil leer algo sobre el álgebra de Boole y la teoría de conjuntos para entender las 3 operaciones que hace el modificador: unión, intersección y diferencia, o al menos jugar un poco con el modificador en un fichero de prueba, observando el comportamiento en diferentes situaciones. Si se quiere profundizar más en el tema, se puede echar un vistazo a la librería Carve, escrita en C++ y que es la que actualmente procesa los algoritmos que realizan las operaciones booleanas y resuelve antiguos problemas, (de velocidad o con caras no planas por ejemplo). Cuando vayamos a aplicarlo en un trabajo real, para no llevarnos sustos conviene hacer una copia de los objetos a los que vayamos a aplicar el modificador para tener un respaldo de nuestro trabajo frente a posibles desastres. Es una buena práctica aplicable en muchas ocasiones no sólo en el uso de este modificador. Conviene repasar con cuidado que todas las normales de cada objeto apunten en el mismo sentido y que se va a aplicar el modificador sobre bucles de caras cerrados, sin huecos. También es importante el orden en que se aplica, es buena idea aplicarlo lo antes posible y de forma independiente, sin mezclar con otros modificadores y sobre todo antes de aplicar las texturas y mapas UV que deberían aplicarse cuando la topología de la malla esté terminada para que se adapten perfectamente.

Al aplicar este modificador puede que la topología de la nueva malla no sea muy límpia y que se obtengan muchos vértices innecesarios, polígonos que no sean de cuatro lados, o demasiado irregulares en cuanto al tamaño, cosas de este tipo que a la larga pueden causar otros problemas. Conviene tenerlo en cuenta porque a veces no es la mejor solucción, sólo conviene usarlo si nos va a ayudar y a ahorrar trabajo, no al revés, por ejemplo con mallas muy complejas en las que hacer estas operaciones a mano sería imposible o al menos muy trabajoso, pero también, cuanto mas irregular sea la malla y mas concavidades tenga peor será el resultado. Se puede combinar con otros modificadores como Decimate para intentar dar una solucción a esos problemas.