Proceso de renderizado por partes en Blender desde la línea de comandos.
Go to file
Braquistos 6812bad0ee Arreglados algunos typos. 2023-10-04 17:08:57 -06:00
.gitignore Creación del paquete inicial. 2023-10-03 18:49:03 -06:00
LICENSE.txt Creación del paquete inicial. 2023-10-03 18:49:03 -06:00
README.md Arreglados algunos typos. 2023-10-04 17:08:57 -06:00
armadoVisual.svg Creación del paquete inicial. 2023-10-03 18:49:03 -06:00
imgEmpalmar.py Creación del paquete inicial. 2023-10-03 18:49:03 -06:00
imgOriginal.png Creación del paquete inicial. 2023-10-03 18:49:03 -06:00
prueba.blend Creación del paquete inicial. 2023-10-03 18:49:03 -06:00
renderPartes.py Creación del paquete inicial. 2023-10-03 18:49:03 -06:00
renderiza.sh Creación del paquete inicial. 2023-10-03 18:49:03 -06:00

README.md

Renderizado por partes en Blender

Proceso de renderizado por partes en Blender desde la línea de comandos.

Contacto: braquistos@protonmail.com

Introducción y justificación

Hay ocasiones en que se hace necesario renderizar imágenes de salida muy grandes. En el proceso de renderizado Blender divide en celdas que va renderizando una tras otra si se utiliza CPU para hacerlo. Cuando el archivo a generar es muy grande también con el renderizado en GPU utiliza la misma estrategia. Al final, y en especial si se ha activado el denoise, Blender tiene que integrar la imagen juntando todas las partes y eso consume memoria de la principal (memoria RAM). Cuando es muy grande la imagen a renderizar estos requerimientos de memoria llegan a ser inaccesibles para el equipo con el que se cuenta.

La solución es utilizar la misma estrategia de renderizado por partes, pero de manera controlada desde afuera. Blender cuenta con una opción muy útil para renderizar una parte elegida. En el panel Output properties se encuentra la opción Render region, que activada permite renderizar solamente el área de un rectángulo previamente definida. Esta opción es de mucha utilidad en tiempo de edición del dibujo porque no hay que esperar a ver el renderizado de toda la imagen para ver sólo los resultados de una región específica. Para activar esta región y trazarla manualmente en vista de cámara se utiliza el atajo Ctrl+B y para deseleccionar se utiliza Ctrl+Alt+B.

De manera manual es impráctico e inexacto utilizar esta estrategia desde el entorno gráfico para renderizar por partes toda la imagen, pero es seguro que los altos requerimientos de memoria ya no son necesarios. Para automatizar el proceso lo ideal es hacerlo desde un script de Python para que renderice en forma secuencial celdas de un arreglo definidos por usuario haciéndolo desde la línea de comandos. Enseguida se tienen que unir todas las partes, lo cual es tedioso si se hace de forma manual en programas como Gimp, Krita o Photoshop. Aquí se presentan algunos scripts para automatizar ambos procesos, renderizado y armado de la imagen.

Requerimientos

  1. Blender, desde luego. El script aquí presentado funciona al menos para versiones de Blender 2.80 en adelante.

  2. Acceso a terminal o línea de comandos. Este requerimiento se da por defecto en Linux y en Mac OS. Para usar en Windows es conveniente instalar Cygwin porque contiene utilerías de GNU necesarias.

  3. Python 3. En principio Blender ya trae un intérprete de Python incluido como parte del paquete y con este debe ser suficiente para hacer el renderizado. Adicional a ello se requiere tener un intérprete de python independiente. Linux y Mac OS ya lo traen instalado por defecto, en tanto que en Windows hay que instalarlo por aparte.

  4. ImageMagick. Programas de edición de imágenes desde la terminal. Este se utilizará para armar y juntar las partes renderizadas. Algunas formas de instalar Imagemagick son las siguientes:

    a) Linux, Debian y derivados: apt install imagemagick

    b) Linux, Archlinux: pacman -S imagemagick

    c) Mac OS: brew install imagemagick

    d) Windows. Se selecciona como parte del paquete de programas elegidos durante la instalación de Cygwin, o en su defecto, consultar la documentación para instalar paquetes adicionales una vez que Cygwin se ha instalado.

Uso de los scripts

  1. Colocar los scripts renderiza.sh, renderPartes.py e imgEmpalmar.py en donde se ubica el archivo de Blender que se va a renderizar.

  2. Abrir con un editor de texto el archivo renderiza.sh y modificarlo de acuerdo a las necesidades.

    a) En un primer paso ejecutar el script con render=False para verificar que corra bien y para ver la cantidad de imágenes real que se van a generar y el tamaño de la retícula.

    b) Ejecutar el script con render=True para llevar a cabo el renderizado.

  3. Ejecutar para renderizar de la siguiente forma:

    $ ./renderiza.sh
    
  4. Una vez terminado el proceso de renderizado abrir el script imgEmpalmar.py y ajustar los parámetros. El tamaño de la retícula se obtiene del paso 2 con render=False en el script renderiza.sh.

  5. Para armar la imagen ejecutar como:

   $ ./imgEmpalmar.py

Ejemplo de práctica

Se incluyen en el paquete unos archivos con un ejemplo completamente desarrollado con fines de analizar su funcionamiento, de manera que no se trata de un render grande.

  1. Un archivo de nombre prueba.blend para probar. Está en la versión 3.5 de Blender.

  2. Si se renderiza desde el entorno gráfico se obtiene la imagen imgOriginal.png que servirá de referencia para hacer pruebas.

  3. El archivo armadoVisual.svg, que se puede abrir con Inkscape, trae el arreglo de ejemplo mostrado gráficamente.

  4. Las imágenes que se generan con renderiza.sh tendrán por nombre imagen001.png, imagen002.png, imagen003.png, imagen004.png, etc., hasta imagen045.png.

  5. Después de ejecutar imgEmpalmar.py se genera la imagen final armada de nombre imgArmada.png, que debe ser igual a la imagen de nombre imgOriginal.png.