Introducción. Siempre me gustaron los castillos. Cuando comencé a modelar en 3D use una herramienta llamada “Ray Dream Designer” y el primer tutorial que hice fue haciendo un castillo. Era un pequeño y plano castillo, de texturas pobres, sin ventanas, etc. Lo que siempre me molestó de ese castillo fueron las planas y pobres texturas de las paredes, quizás si hubieran sido de distintos tonos de blanco y con piedras esquineras modelandolo. Los castillos de verdad tienen cada roca a la vista, rocas inexactas y rocas de distintos tamaños, etc. De lejos la textura era muy bien apreciable pero no podías acercarte a ellas sin sentir vergüenza. También es difícil desmontar algunos bloques o agregarle daño de batallas. Siempre soñé con construir un castillo apegado al escrutinio pero las herramientas a la mano no bastaban, no pensaba construirlo bloque por bloque!

Renuncié a mi sueño por un tiempo, poniendo mi vista en nuevos programas y eventualmente saltando a Blender. Con la extensión del lenguaje phyton mi sueño resurgió. Si la computadora podía hacer todo el trabajo duro entonces yo solo tendría que encargarme del diseño general y ver nacer mi trabajo. Busqué para ver si alguien ya había hecho esto antes pero no pude encontrar nada cercano a lo que quería. Esto me confundió, pues parecía un problema simple para resolver. Más de 600 líneas de código después descubrí porque no era tan simple como yo pensaba.

Lo que sigue es mi primera incursión en la escritura phyton y los resultados. Una sección de cómo usar los scripts viene primero seguido de una corta historia de la codificación y algunas cosas que aprendí en el proceso. Aun no estoy muy satisfecho con los scripts, pero resultan muy útiles y espero que sean muy útiles también para ustedes.

Usando auto albañilería. Vamos directo a la diversión. Si no lo tienes descarga la versión más reciente y ubícala en tu carpeta de scripts (normalmente blender/.blender/scripts). Para iniciar un script, abre una ventana de Scripts y elige scripts>wizards>automasonry, deberías llegar a ver algo como esto.

Taller de 3D : Escritura de albañileria automatica-escritura-de-albanileria-automatica-en-blender-imagen-1.jpg


Es el GUI inicial. Si presionas en “Make this wall” acabaras con algo como en la figura 2.

Taller de 3D : Escritura de albañileria automatica-escritura-de-albanileria-automatica-en-blender-imagen-2.jpg


Si no lo consigues necesitas instalar Phyton. Si eso no funciona necesitare arreglar el script. La encarnación actual te permite crear paredes con o sin ventanas rectangulares, puertas y crestería. El script genera dos objetos mallas, una pared y una lechada.

Todos los botones y opciones contienen ventanas repentinas explicadoras así que puedes sentirte libre de usar el programa sin tener que leer todo este tedioso tutorial.

Si no te crees tan audaz aquí hay una explicación de todas las opciones del GUI.

Taller de 3D : Escritura de albañileria automatica-escritura-de-albanileria-automatica-en-blender-imagen-3.jpg


Crea esta pared: Este botón genera la pared que conforma la opción que has seleccionado. Si hay una curva seleccionada la longitud de la pared se ajustara a la longitud de la curva y tendrá a la curva como un padre. Esto significa que todas las características de la curva serán aplicadas a la pared en si. Si la curva es cerrada el script asumira que se trata de un círculo perfecto. Si la curva no es un círculo entonces esa no será la longitud correcta.

Muro: Este ajuste gobierna el tamaño en general de la pared en la unidad blender. La altura de la pared no incluye la cresta (ver Crenels).

Straight edges/Offset edges: Basicamente si quieres hacer una pared de loop cerrado usa offset de lo contrario straight.

Stones: esto controla el tamaño de las piedras. Depth también ajustara el espesor de la pared. Las piedras pueden exceder estos límites en los bordes, para hacer que todo calce, o debido al ajuste del peso de las rondas. Estos ajustes se deben a la línea central de la lechada, por lo tanto una larga Grout W reducira el tamaño de las rocas.

Bevel: El tamaño del bisel. Si se reduce a cero las piedras tendrán esquinas cuadradas lo que es perfecto para reducir el conteo poly-count.

Grout W: la anchura de la lechada, bastante sencillo.

Página 21:

Grout D: La distancia de la lechada con la superficie de las piedras. Esto se refiere a la profundidad, por lo que si hay una gran variedad en profundidad de la lechada será bastante atrás en las piedras más gruesas.

Row Weight: Esta opción ajusta en como el peso de las piedras afecta a la anchura de las mismas en aquella ronda. Valuaciones positivas son normales (piedras cortas, piedras anchas) pero valuaciones negativas son validas también (piedras cortas, piedras estrechas) Usualmente la ajusto en 0.0 y 1 dependiendo de la aplicación.

Door y Window: Ambas son casi lo mismo. Apaga y prende una ventana o puerta presionando su etiqueta correspondiente. La posición de la puerta es desde su origen hasta el centro de la puerta. La altura y anchura se ajustaran como esperes. Los espacios de las ventanas serán centrados entre los bordes, y los bordes de la puerta (en caso de haberlos). La cima de la ventana se ajustara a la altura de la puerta aun si las puertas están apagadas. Esto significa que los dinteles de ambas tendrán la misma altura (generalmente cierto en arquitectura). El botón Angled bascula un ángulo a lo largo de los lados de la puerta/ventana, como estaría presente en una flecha de castillo. Generalmente las puertas no tienen ángulos así, pero los dejé como opción solo en caso de que los quieras.

Crenels: La cresta corona de las paredes. Tamaño, anchura y espacio de trabajo son lo contrario a las ventanas, ajustando el tamaño a las porciones de las rocas, no a las aperturas. Las cestas son siempre anguladas, aunque agregare una opción para controlar esto en el futuro.

Exit: Este botón enciende a los albañiles y te permite hacer el trabajo por tu cuenta. Muy útil si ya terminaste de crear las estructuras de piedra.

El script es muy rápido así que puedes crear paredes muy largas si lo deseas, creo que la de la figura 3 tomó treinta minutos apróximadamente.

Taller de 3D : Escritura de albañileria automatica-escritura-de-albanileria-automatica-en-blender-imagen-3-bis.jpg


Algunas técnicas. Aquí tengo algunos trucos que descubrí. Sospecho que los usuarios más laboriosos podrán descubrir muchos más.

Caminos: crea un pasillo alto, pared sin ventanas, puertas o cresta y ponlo para seguir una curva en axis Z. Resulta un pasillo, calle o carretera, ver la figura 4.

Taller de 3D : Escritura de albañileria automatica-escritura-de-albanileria-automatica-en-blender-imagen-4.jpg


Haz de soporte: las crestas también pueden ser usadas para sostener hazes de castillos de múltiples historias, estructuras de defensa, etc. Ver figura 5.

Taller de 3D : Escritura de albañileria automatica-escritura-de-albanileria-automatica-en-blender-imagen-5.jpg


Multipared: puedes construir una pared en múltiples segmentos, esto permite distintos tipos de puertas y ventanas juntos. El ejemplo anterior de los hazes juntando dos tipos de paredes una sobre otra.

Sub surf: este script automáticamente valúa todos los bordes a 0.5 lo que resulta en un buen resultado de subsurf.

Mezcla de texturas: renderiza el valor Z de la pared en una vista isométrica y guardalo como textura. Ahora puedes usar esto como un boteo o una textura para pared de pocos pixeles. Usando Offset Edges y los recortes correctos permiten un azulejo perfecto.

Deformador de curva múltiple: a menudo las paredes son cónicas o curvadas. Aplicando una curva deformadora Z-axis sobre una X-axis, pueden conseguirse muchos efectos de pared. Esto puede ser usado para conseguir paredes más realistas (ver el perfil curvo del ejemplo de caminos) o paredes más caricaturescas.

Espero que este script cumpla los sueños de muchos de ustedes de castillos más realistas, paredes de ladrillos, caminos, texturas, torres, y cualquier otra cosa que quieras hacer. Quedare impresionado si me haces saber lo que has logrado. Hazme saber si te encuentras con alguna falla y trataré de corregirla a la brevedad.

Escribiendo el script. Si aun estas leyendo esto puede que estés interesado en saber como el script fue programado. El código esta decentemente bien documentado, así que siéntete libre de jugar y experimentar con el. Aquí hay un pequeño fondo de cómo lo escribí y algunas lecciones que aprendí. Algunas cosas son buena programación básica, otras son más relacionadas a blender.

Antes de programar cualquier cosa debí aprender Phyton. En la escuela tomé un curso de computación, desde luego, y termine haciendo un poco de programación en mi tiempo libre, así que había algunos fondos que construir. Esencialmente, todos los lenguajes de programación y expresión de progresión lógica, y Phyton no es diferente. Trabajé en el tutorial de inicio de Phyton, escribí unas pequeñas aplicaciones para jugar con algunas características y ponerme cómodo con la sintaxis. A este punto comencé a introducir en blender algunas extensiones phyton. Mi primer scrip de blender tomó un objeto malla y creó cada posible polígono con las vértices existentes. No fue muy útil pero sí divertido. También descubrí que puedes pegar blender tratando de crear un objeto con muchos polígonos.

A este punto también examinaba muchos de los scripts de blender. Aquí están las dos primeras cosas que aprendí de las extensiones phyton.

Lección 1: has tu tarea. Esto es cierto en cada aspecto de la vida, y se aplica aquí también. Todos los tutoriales básicos de phyton fueron invaluables y me ayudaron a estructurar un eficiente script. Mirando los foros de blenderartisc.org también ayudó mucho. Si pones el esfuerzo en descubrir la forma correcta de hacer las cosas, alcanzaras tus metas muchos más fácil con el pasar del tiempo. Aprender Phyton antes de aprender el Phyton de Blender en verdad ayudó mucho.

Lección 2: Documenta tú código. Este es uno de los puntos más estresantes de la ciencia computacional, y también muy útil. Si alguien más quiere usar tú script no debería tener que lo que hace cada línea de código. Si creaste el script hace un mes o dos no recodaras todo lo que hace, créeme. Sé que es un lastre, sé que parece inútil. Por favor, oh por favor, documenta tú código. Cuando miraba documentación me ayudó inmensamente.

Una vez que termine unos pequeños mini-scripts en blender empecé en el marcador de pared. Desde que el script progresaba de hacer planos cuadros de pared a complejas paredes con puertas, ventanas y características varias, noté algunas otras cosas.

Lección 3: programar extensiones Phyton no es tan difícil como parece. Los cuadros de extensiones en Blender incluyen algunas herramientas muy bien avanzadas que vuelven elemental la extensión de programación. Si tienes la idea para un script, y le tienes confianza a tus dotes de programador debes intentarlo!

Lección 3 Corolaria: Pero es más difícil de lo que parece. Debes estar preparado para la frustración. Aunque sea agradable, el Phyton de Blender esta muy lejos de la perfección. La forma lógica en que funcionan las cosas es a veces ( aunque desalentadora, más no siempre) como trabajaran. Estate preparado para perseverar en los puntos más duros. Mientras trabajaba en los scripts tuve otras tres ventanas abiertas.

El Script de Phyton hace referencia (accesible desde el interior de Blender en el menú de ayuda) al paquete de ayuda del menú Phyton y a los Scripts de los foros de blenderartist.org. Estos 3, con mucha persistencia, podrán guiarte a través de tu temporada de problemas de scripting. Mientras el Script progresa de simple a complejo, me encontré a mi mismo descubriendo que mi arquitectura original era insuficiente o altamente ineficiente para lo que estaba tratando de lograr. Creo que reescribí cada función al menos una vez desde el principio. Inicialmente estaba usando el script “Bevel Center” para hacer el biselado, pero tuve que recodificar algunas partes para hacerlo funcionar desde una llamada exterior (lo que habría requerido descargar una alterada versión de “Bebel center” junto a “Auto Masonry”) y fue muy lento. Al final mordí mis balas y recodifique todos mis bloques de función básicas para incluir el biselado. Al principio del proyecto tenía tres formas de acercarme, las cuales abandone a los pocos días de comenzar a trabajar. Aquí esta mi cuarta lección.

Lección 4: Se capaz de reconsiderar tus avances. Aunque esto signifique empezarlo todo de cero. Cada cierto tiempo da un paso atrás y di a ti mismo 2¿Esta bien esta manera de seguir o existe una manera más favorable?”. Si quieres hacer un buen script siempre opta por la manera favorable. A veces las cosas no resultaran como esperas, pero es mejor que no intentarlo para nada.

Aun tengo muchas ideas en mente para desarrollos futuros. También pienso que debere reescribir muchas estructura cuando vuelva al proyecto (en línea con lección 4). Sin embargo, cuando el script estuvo ya casi por terminar era hora de:

El GUI: escribir el GUI puede ser la parte más divertida o descorazonadora del proceso dependiendo en que tan bien manejes tus variables. Si agradablemente escribiste funciones y variables de comando, el GUI debería ir sobre ruedas. Escribir un GUI en Blender es muy fácil, y en verdad finaliza el Script. Por otro lado no te sientas obligado a incluir cada característica en el GUI si no esta bien soportado o no es confiable. Hay muchas características en AutoMasonry que son perfectamente funcionales en el código pero no en GUI. Si tu código esta bien documentado los códigos maestros podrán usarlo de cualquier manera y no incluir todas sus características en el GUI le evitara dolores de cabeza a los usuarios principiantes.

Mejoras futuras. Quisiera mejorar este script en muchas direcciones. Desafortunadamente mi tiempo es absorbido por otros proyectos actualmente. Aquí presento algunas mejoras que me gustaría agregar, si ustedes tienen otras en mente haganmelas saber:

Arcos: Actualmente las puertas y ventanas son de cima plana. Me gustaría agregarles a ambas arcos puntiagudos y redondeados. Esto requerira significante recodificación de la arquitectura básica del script, pero pienso que lo vale.

Defectos: no todas las rocas son perfectas. Algunas rocas deberían tener esquinas faltantes, o trizaduras. Una versión anterior (mientras usaba Bevel Center) podía romper esquinas pero no he agregado esta opción a su conversión de biselado interno. Agregar grietas seria mucho más difícil pero creo que es posible.

Grout: Ahora mismo la lechada no es más que un segundo puesto de bloques debajo de las piedras. En superficies curvas esto crea problemas con la lechada en la que algunas subsuperficies ayudan pero no reparan.


Un verdadero algoritmo de piedra de lechada también requerida una mayor revisión del código, pero también creara un trabajo mejor terminado y permitira biselar la lechada.

Más robustos puestos para puertas y ventanas: actualmente el GUI para puertas y ventanas es muy limitado. El script puede aceptar cualquier configuración de puerta o ventana, pero no puedo descubrir una forma de simplificar la interface. Si hay una forma de hacerlo que alguien me lo haga saber.

Ajustes persistentes: la capacidad de guardar los ajustes en un archivo volvería más fácil el ajuste de opciones. También volvería más fácil la creación de múltiples paredes con “offset edges” que hagan malla una con otra, o angular esquinas con bordes inter cerrados. Esto también requiere una profunda revisión de código.

Así que básicamente, cuando me vea con un par de semanas libres, reescribiré el script de una mejor manera. Cuando lo haga incluiré cualquier mejora que me envíen al tiempo. Alternadamente, si alguien se siente audaz, lo invito a hacerle cambios al script por su cuenta. Estaré feliz de aprender todas las mejores que puedan hacerle, seguro hay muchas.

Espero que con este script muchos hagan realidad sus sueños de castillos realistas, paredes de ladrillos, caminos, texturas, torres, y cualquier otra cosa que se te ocurra. Estaré emocionado de saber en que lo están usando. Si te cruzas con alguna falla o desperfecto, hazmela saber a la brevedad.

Taller publicado en Blender Art Magazine por Paul Spooner y traducido para foro3d.com