1. Пользоваться форумом на планшетах и телефонах стало удобнее благодаря Tapatalk

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

Тема в разделе "Maya", создана пользователем ElNinho, 15 июл 2007.

Модераторы: Dark™, Skif
  1. ElNinho

    ElNinho Пользователь сайта

    С нами с:
    06.10.2006
    Сообщения:
    23
    Симпатии:
    0
    Баллы:
    2
    В ходе работы над очередным проектом возникла потребность в автоматизации рендеринга.
    Суть:
    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.
     
  2. tadpole

    tadpole Знаток

    С нами с:
    12.08.2005
    Сообщения:
    712
    Симпатии:
    1
    Баллы:
    24
    тебе поможет ответ на вопрос номер 0 - рендери из командной строки, вылеты конечно бывают, но на моей памяти было раза 2 и то по причине сбоев железа.
    И даже в этом случае есть прога ( не помню как наз. )которая запускает процессы в зависимости от загрузки проца. Делаешь несколько бат.файлов, и выставляешь в этой проге в очередь, есль один вылетит , запустится второй.
     
  3. ElNinho

    ElNinho Пользователь сайта

    С нами с:
    06.10.2006
    Сообщения:
    23
    Симпатии:
    0
    Баллы:
    2
    Для рендеринга из командной строки нужен ментал стендалон. А это целое дело...
    И даже тогда мне в любом случае мне нужно знать, на каком кадре закончился рендер. А писать это все средствами бата - изврат. Тем более, что в процессе рендеринга проц не всегда на 100 процентов загружен. Так что такой вариант неприемлем.

    Спасибо.
     
  4. Shadowman

    Shadowman Активный участник

    С нами с:
    10.04.2006
    Сообщения:
    129
    Симпатии:
    0
    Баллы:
    16
    Tadpole, я так понял, имел ввиду запуск обычного батча из командной строки(кот. описан в хэлпе): render -r mr(если менталом) -cam name -im name scene.mb
    Довольно действенная штука.
    И не надо стэндалона..., если конечно сцена не ого-го.
     
  5. tadpole

    tadpole Знаток

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

    pause

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

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

    tadpole Знаток

    С нами с:
    12.08.2005
    Сообщения:
    712
    Симпатии:
    1
    Баллы:
    24
    в процессе рендера проц всегда загружен на 100 процентов.
     
  7. ElNinho

    ElNinho Пользователь сайта

    С нами с:
    06.10.2006
    Сообщения:
    23
    Симпатии:
    0
    Баллы:
    2
    Вначале рендеринга (когда например какие-то первичные вещи считает) - нет. А дальше уже да. В общем, когда много кадров подряд рендерит, то есть маленькие перерывы в загрузке.
     
  8. ElNinho

    ElNinho Пользователь сайта

    С нами с:
    06.10.2006
    Сообщения:
    23
    Симпатии:
    0
    Баллы:
    2
    Спасибо, разбираюсь, надеюсь поможет. Кстати, в хелпе к "консольному" рендеру есть инфа, которой достаточно для ответа на "вопрос №1".
     
  9. ElNinho

    ElNinho Пользователь сайта

    С нами с:
    06.10.2006
    Сообщения:
    23
    Симпатии:
    0
    Баллы:
    2
    Не помог хваленый способ рендера из командной строки. Один раз вылетало просто (ну приходишь и видишь, что не запущен такой процесс, как mayabatch), пару раз тупо типа все нормально, но на 98-99 процентах очередного кадра тупой зависон. Причем памяти жрет 1.5 Гб, а процессор вообще не трогает (0% используется). Какие будут мысли у народа?
     
  10. tadpole

    tadpole Знаток

    С нами с:
    12.08.2005
    Сообщения:
    712
    Симпатии:
    1
    Баллы:
    24
    хе, у тебя явные проблемы с железом. Памяти всегда много жерет.Напиши конфиг.Если ты написал в коце заветное слова pause , то в конце всегда пишет почему произошел обрыв рендера.
     
  11. tadpole

    tadpole Знаток

    С нами с:
    12.08.2005
    Сообщения:
    712
    Симпатии:
    1
    Баллы:
    24
    на вопрос №1 не надо никакой команды, достаточто открыть диспетчер задач, и посмотреть загрузку проца.
     
  12. ElNinho

    ElNinho Пользователь сайта

    С нами с:
    06.10.2006
    Сообщения:
    23
    Симпатии:
    0
    Баллы:
    2
    На 6 компах не может быть проблем в железе. Компы такие: 1 (сервер) Core E4300@3Ghz+Gigabyte 965P-DS4 +2Gb RAM;
    и 5 тачек Pentium E2160@3Ghz+Gigabyte 965P-DS3+2Gb RAM

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

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

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

    Миша Ершов Мастер

    С нами с:
    02.11.2003
    Сообщения:
    1.415
    Симпатии:
    2
    Баллы:
    325
    Такой команды нет.

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

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

    ElNinho Пользователь сайта

    С нами с:
    06.10.2006
    Сообщения:
    23
    Симпатии:
    0
    Баллы:
    2
    Все почти как я и думал. А насчет последней строки из файла:) - это легко делается даже с помощью МЕЛа. Там достаточно средств для работы с файлами и строками. Но это, ИМХО, извращение.

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

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

    tadpole Знаток

    С нами с:
    12.08.2005
    Сообщения:
    712
    Симпатии:
    1
    Баллы:
    24
    дак а че он пишет про вылет то? у меня так было, когда оператива кончалась...
     
  16. ElNinho

    ElNinho Пользователь сайта

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

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

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

    tadpole Знаток

    С нами с:
    12.08.2005
    Сообщения:
    712
    Симпатии:
    1
    Баллы:
    24
    дак разбей сцену по слоям
     
  18. ElNinho

    ElNinho Пользователь сайта

    С нами с:
    06.10.2006
    Сообщения:
    23
    Симпатии:
    0
    Баллы:
    2
    Не, слои - это целое дело.

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

Поделиться этой страницей