Render.ru

Автоматизация рендеринга batch render при помощи скрипта

ElNinho

Пользователь сайта
Рейтинг
2
#1
В ходе работы над очередным проектом возникла потребность в автоматизации рендеринга.
Суть:
1. Нужно отрендерить, к примеру, 4000 кадров анимации. В процессе рендеринга batch render иногда вылетает, то есть пишет например, что на 500-ом кадре rendering completed, хоть в настройках стоит рендерить до кадра №4000.

2. В связи с этим возникла мысль написать скрипт. Он должен будет:
1) Проверить, идет ли процесс рендеринга (это можно делать, например, после каждого отрендеренного кадра).
2) Если не идет, то взять список файлов, уже отрендереных, найти в нем последний.
3) Узнать его номер и сравнить со значением end frame в render globals.
4) Если они равны, то все ок, если нет, то поставить в start frame это значение, а end frame оставить без изменений.
5) Запустить рендер снова.

Итак:

1. Какой командой можно проверить, идет ли а данный момент рендеринг?
2. Список файлов из папки легко берется командой getFileList. Он засовывает список имен в массив.
3. Далее в массиве легко находим последний элемент и с помощью команды endString выясняем номер последнего посчитанного кадра.
4. Сравниваем, как я уже говорил в 4).
5. Запускаем, если все условия выполняются.

Итог: нужен ответ на вопрос №1.
 

tadpole

Знаток
Рейтинг
24
#2
тебе поможет ответ на вопрос номер 0 - рендери из командной строки, вылеты конечно бывают, но на моей памяти было раза 2 и то по причине сбоев железа.
И даже в этом случае есть прога ( не помню как наз. )которая запускает процессы в зависимости от загрузки проца. Делаешь несколько бат.файлов, и выставляешь в этой проге в очередь, есль один вылетит , запустится второй.
 

ElNinho

Пользователь сайта
Рейтинг
2
#3
tadpole сказал(а):
тебе поможет ответ на вопрос номер 0 - рендери из командной строки, вылеты конечно бывают, но на моей памяти было раза 2 и то по причине сбоев железа.
И даже в этом случае есть прога ( не помню как наз. )которая запускает процессы в зависимости от загрузки проца. Делаешь несколько бат.файлов, и выставляешь в этой проге в очередь, есль один вылетит , запустится второй.
Для рендеринга из командной строки нужен ментал стендалон. А это целое дело...
И даже тогда мне в любом случае мне нужно знать, на каком кадре закончился рендер. А писать это все средствами бата - изврат. Тем более, что в процессе рендеринга проц не всегда на 100 процентов загружен. Так что такой вариант неприемлем.

Спасибо.
 

Shadowman

Активный участник
Рейтинг
16
#4
Tadpole, я так понял, имел ввиду запуск обычного батча из командной строки(кот. описан в хэлпе): render -r mr(если менталом) -cam name -im name scene.mb
Довольно действенная штука.
И не надо стэндалона..., если конечно сцена не ого-го.
 

tadpole

Знаток
Рейтинг
24
#5
я имел ввиду то,что имел в виду, ничего левого ля этого не нужно, разрешаешь себе изменять расширения файлов ( в винде это опция заблокирована по умолчанию) создаешь блакнотом обычный текстовый файл, в не пишешь - render -r mr -cam persp -s 1 -e 400 "C:/( имя твоего бат файла).mb"

pause

сохраняешьо изменения, и меняешь расширение этого файла с .txt на bat

после этого кликаешь по этому файлу и у тебя начнается рендер, безо всякой майи. Настройки рендера, ес- но, нужно делать в самой программе.
 

ElNinho

Пользователь сайта
Рейтинг
2
#7
tadpole сказал(а):
в процессе рендера проц всегда загружен на 100 процентов.
Вначале рендеринга (когда например какие-то первичные вещи считает) - нет. А дальше уже да. В общем, когда много кадров подряд рендерит, то есть маленькие перерывы в загрузке.
 

ElNinho

Пользователь сайта
Рейтинг
2
#8
tadpole сказал(а):
я имел ввиду то,что имел в виду, ничего левого ля этого не нужно, разрешаешь себе изменять расширения файлов ( в винде это опция заблокирована по умолчанию) создаешь блакнотом обычный текстовый файл, в не пишешь - render -r mr -cam persp -s 1 -e 400 "C:/( имя твоего бат файла).mb"

pause

сохраняешьо изменения, и меняешь расширение этого файла с .txt на bat

после этого кликаешь по этому файлу и у тебя начнается рендер, безо всякой майи. Настройки рендера, ес- но, нужно делать в самой программе.
Спасибо, разбираюсь, надеюсь поможет. Кстати, в хелпе к "консольному" рендеру есть инфа, которой достаточно для ответа на "вопрос №1".
 

ElNinho

Пользователь сайта
Рейтинг
2
#9
tadpole сказал(а):
тебе поможет ответ на вопрос номер 0 - рендери из командной строки, вылеты конечно бывают, но на моей памяти было раза 2 и то по причине сбоев железа.
И даже в этом случае есть прога ( не помню как наз. )которая запускает процессы в зависимости от загрузки проца. Делаешь несколько бат.файлов, и выставляешь в этой проге в очередь, есль один вылетит , запустится второй.
Не помог хваленый способ рендера из командной строки. Один раз вылетало просто (ну приходишь и видишь, что не запущен такой процесс, как mayabatch), пару раз тупо типа все нормально, но на 98-99 процентах очередного кадра тупой зависон. Причем памяти жрет 1.5 Гб, а процессор вообще не трогает (0% используется). Какие будут мысли у народа?
 

tadpole

Знаток
Рейтинг
24
#10
хе, у тебя явные проблемы с железом. Памяти всегда много жерет.Напиши конфиг.Если ты написал в коце заветное слова pause , то в конце всегда пишет почему произошел обрыв рендера.
 

tadpole

Знаток
Рейтинг
24
#11
на вопрос №1 не надо никакой команды, достаточто открыть диспетчер задач, и посмотреть загрузку проца.
 

ElNinho

Пользователь сайта
Рейтинг
2
#12
tadpole сказал(а):
на вопрос №1 не надо никакой команды, достаточто открыть диспетчер задач, и посмотреть загрузку проца.
На 6 компах не может быть проблем в железе. Компы такие: 1 (сервер) Core E4300@3Ghz+Gigabyte 965P-DS4 +2Gb RAM;
и 5 тачек Pentium E2160@3Ghz+Gigabyte 965P-DS3+2Gb RAM

БП у всех - 400 Вт чифтек.

Разгон - не причина сбоев, т.к. проверял и сняв разгон.

Что касается "вопроса №1" - я-то знаю, как определить загрузку проца. Мне нужно сделать так, чтобы и скрипт это знал. Какой командой это можно сделать?
 

Миша Ершов

Модератор форума
Рейтинг
314
#13
ElNinho сказал(а):
Мне нужно сделать так, чтобы и скрипт это знал. Какой командой это можно сделать?
Такой команды нет.

Можно:
1) Написать простецкий плагин, который возвращал бы информацию о том, запущен ли процесс. И потом поставить его на post render framе. После каждого кадра производилась бы проверка на наличие процесса, а также подсчитывался текущий кадр. И если процесс не запущен и номер меньше нужного, то рендер запускается опять.
Я пока не знаком с питоном, но может быть у него есть такие возможности.
2) найти программу для сетевого рендеринга, которая сможет возобновлять прервавшийся процесс. Может быть на highend3d.com даже будет.

ps пришла такая извращенная идея - писать всю статистику из script editor'a в файл, и после каждого кадра проверять на наличие там надписи rendering completed :-D Только я не помню что-то как прочитать последнюю строку из файла. =)
 

ElNinho

Пользователь сайта
Рейтинг
2
#14
Миша Ершов сказал(а):
Цитирую ElNinho:Мне нужно сделать так, чтобы и скрипт это знал. Какой командой это можно сделать? Такой команды нет.

Можно:
1) Написать простецкий плагин, который возвращал бы информацию о том, запущен ли процесс. И потом поставить его на post render framе. После каждого кадра производилась бы проверка на наличие процесса, а также подсчитывался текущий кадр. И если процесс не запущен и номер меньше нужного, то рендер запускается опять.
Я пока не знаком с питоном, но может быть у него есть такие возможности.
2) найти программу для сетевого рендеринга, которая сможет возобновлять прервавшийся процесс. Может быть на highend3d.com даже будет.

ps пришла такая извращенная идея - писать всю статистику из script editor'a в файл, и после каждого кадра проверять на наличие там надписи rendering completed :-D Только я не помню что-то как прочитать последнюю строку из файла. =)
Все почти как я и думал. А насчет последней строки из файла:) - это легко делается даже с помощью МЕЛа. Там достаточно средств для работы с файлами и строками. Но это, ИМХО, извращение.

Кстати, на post render frame не пойдет, т.к. кадр досчитывается (100%), далее начинается новый (пишет 0%), и только тогда пишет о вылете. То есть рендеринг следующего кадра запускается. Так что тут надо как-то иначе подходить.

На highend3d оно-то может и есть:) но там столько хлама, что трудно будет найти. Но все ж я попробую. Спасибо за советы.
 

ElNinho

Пользователь сайта
Рейтинг
2
#16
tadpole сказал(а):
дак а че он пишет про вылет то? у меня так было, когда оператива кончалась...
Пишет фатал еррор по памяти. Но меня смущает другое - если фатал еррор случается во втором кадре, то почему его нет в первом. То есть, какой бы кадр я не поставил - всегда один он отрендерит, а дальше уже нет. Пробовал все способы по жесткому тюнингу bsp, метод grid помогает, но только кадр считает около 30 минут (вместо 3:30). По проведенным исследованиям виноват FG, т.к. если поставить freeze, то все работает на ура. Сейчас использую предложенный в хелпе способ, когда там считают ФГ в каждом 10-ом кадре (в один файл), а потом включают freeze, и все дела.

В общем, кустарно я решил проблему, но хотелось бы решить системно.

Просто в предыдущей сцене подобного плана геометрии было в 3 раза больше (около 12 млн), и все счиатлось и не жужжало, а тут жалкие 4 млн. и не очень большая територия. Конечно, все деревья и авто - инстансы.
 

ElNinho

Пользователь сайта
Рейтинг
2
#18
tadpole сказал(а):
дак разбей сцену по слоям
Не, слои - это целое дело.

На помощь пришел mental ray stand alone. Кушает все и не давится, при этом памяти использует 600 Мб (в то время как майский 1.6-1.7Г6 и умирал). Но все же интересно было бы узнать ответ на вопрос №1:).
 
Сверху