13 окт. 2012 г.

Modo - рендер через командную строку

В modo 601 уже реализован сетевой рендер, но работает он весьма специфично. Распределение идет не по кадрам на каждую машину, а по отдельным кусочкам картинки.
В результате простой рендер фермы (пока машина-мастер готовит данные) достигает 50% и это весьма расточительно. В итоге 10 машин дают прирост не в 10 раз, а лишь на 20-40%
Однако стоит отметить, что это решение имеет очень выгодную лицензию. Когда вы покупаете 1 лицензию modo, в нее уже входит 50 лицензий на машины которые могут работать в slave режиме. Без активации программа так и запускается - предлагает запустить slave.

Но в modo есть еще одна замечательная штука - modo_cl.exe - а попросту говоря - консольное приложение которое понимает большое количество команд и может работать с тремя скриптовыми языками:

  • Lua
  • Perl
  • Python


Это обстоятельство позволяет сэкономить кучу времени на рендер...
Попробуем?


Пишем *.bat файл
_________________


"C:\Program Files\Luxology\modo\601_sp3\modo_cl.exe"<modo_command.txt>log.txt


pause


_________________

Если вам не нужен лог, то последние символы (>log.txt) сотрите, и вы сможете следить за процессом сразу в консоли.

Этот батник не запустится, если отсутствует файл с перечнем команд, которые мы перенаправляем в modo_cl. Чтобы этот файл появился, создаем его.

modo_command.txt
_________________

log.toConsole true
log.toConsoleRolling true
scene.open "z:\net_folder\scene.lxo" normal
pref.value render.threads auto
@ChangeRenderFrameRange.pl 1 5
@ChangeRenderOutputPaths.pl z:\net_folder\render_folder\file_name
render.animation {*}
app.quit
_________________

Думаю основные строчки ясны без комментариев, вот только строка @ChangeRenderFrameRange.pl 1 5 ссылается на Perl скрипт, который идет в стандартной поставке "modo601_Content", числа 1 и 5 задают диапазон кадров анимации, укажите свои.
Если речь идет о сетевом рендере, то мы заменим эти значения переменными и будем вызывать каждый раз разные. Например если в фильме 17000 кадров, то мы сможем разбить всю очередь на много мелких заданий и раздавать их разным машинам. Пока же я рассматриваю ручной запуск, до сетевых решений доберемся чуть позже.
То есть пока вы можете вручную запустить на каждой машине этот скрипт, указав разные диапазоны кадров, распределив задачи вручную.

Итог, который получился у меня:
Запуск из командной строки позволяет отказаться от UI и экономит кучу памяти. Тестовая сцена с UI отнимала до 13GB оперативки, консоль снизила нагрузку до 7GB - лихо ;-)
Кроме этого появилась возможность, пусть пока и в ручную, но распределить эффективно нагрузку и сократить максимально сроки визуализации.

Продолжение тут



2 комментария:

  1. прожку надо написать, что б руками батники не править

    думаю .net для винды самое то

    ОтветитьУдалить
  2. Возможно.
    Я искал быстрое и простое решение.

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