20 декабря 2015 г.

Распределенный рендеринг сцен в Blender

Периодически запускаю Blender для 3D моделирования. Пока я, конечно, еще совсем зеленый, до супруги мне далеко.
Больше всего мне, равно как и любому пользователю блендера без NVIDIA, не нравится ждать, пока сцена медленно отрендерится на CPU или OpenCL. Само собой, мне хочется утилизировать все процессорные мощности, имеющиеся под рукой.

Блендер из коробки не поддерживает распределенный сетевой рендеринг. Поэтому я написал свою реализацию этого функционала. Встречайте eager-rendering.

В пакете имеются два файла: шелл-скрипт и питон-скрипт. Шелл-скрипт, собственно, занимается управлением процессами и распределяет задачи по хостам. Питоновый используется внутренним интерпретатором блендера во время рендеринга.
Сам рендеринг производится частями. Скрипт разбивает сцену на 64 тайла. Серия тайлов рендерится на первой свободной локальной или удаленной машине. Принцип работы следующий:
  1. eager.sh после запуска создает на локальной и удаленных машинах временные директории, куда будут складываться отрендеренные тайлы.
  2. Монтирует по sshfs временную директорию удаленного сервера.
  3. Генерирует номера начального и конечного тайлов с определенным шагом и запускает рендеринг на первой машине из списка хостов, который включает и локальную машину.
  4. Ждет, пока локальная или удаленная машина отрендерит серию тайлов, отсылает следующую серию тайлов первой освободившейся машине, повторяет пока не опустошит массив тайлов.
  5. Перекидывает отрендеренные тайлы с удаленных машин на локальную.
  6. Склеивает все тайлы в финальное изображение с помощью магии ImageMagick.
Как это выглядит в жизни:



Что планируется в будущем:
  • поддержка более одного удаленного хоста;
  • определение наличия GPU, патчинг blend-файла и запуск дополнительного процесса рендеринга на GPU;
  • приоритеты машин (более мощные / менее мощные);
  • определение сложности тайла для отправки его соответствующей машине;
  • автоматическая подстройка количества тайлов в серии в зависимости от приоритета.

1 комментарий:

  1. Явообще похоже еще не родилась чтоб понять, о чем ты тут пишешь))

    ОтветитьУдалить