среда, 20 апреля 2011 г.

Когда не хватает памяти при рендере

Сейчас рендерил экстерьерную сцену. Сцена простая(относительно), но комп старый и вылетал тупо. Нашел на рендер.ру урок, который решил проблему. Решил его закопипастить, чтобы потом не искать снова.

К сожалению, как позже выяснилось на практике, Windows XP 32bit  не может полноценно использовать оперативную память объемом более 2,7Gb, поэтому мои 4 Гб оперативки просто гуляли.
Свое решение проблемы я опишу после, а сначала: есть несколько простых действий, которые могут решить проблему с памятью.



  1. Как учил hrwraith в недавнем уроке (ссылка на урок), или немного иначе, нужно прописать в файле C:/boot.ini после примерно вот такой строчки «multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect»  добавить «/3GB /useuptime», без кавычек. Это позволит Windows не стеснятся и использовать больший объем оперативной памяти компьютера на процесс, после перезагрузки.
  2. Вторая рекомендация – не использовать карты и материалы Raytrace.
  3. Если объект сцены содержит в себе до 1 млн. полигонов, то его можно перевести в VrayProxy. Делается это так:
       
    Включение опции Automatically create proxies автоматически создаст на месте экспортируемого объекта его образ. Если объект, который вы переводите в Прокси состоит из более чем 1 млн. полигонов, то ошибка недостатка памяти вероятно снова появится.
  4. Один из простейших способов решения проблемы – скрыть (Hide) все объекты сцены, которые не попадают в поле зрения камеры. Неоднократно приходилось его использовать, но без особого удовольствия, при рендере, например 10 видов одной сцены, нужно было для каждой камеры убирать/добавлять объекты сцены, следить за отражающими поверхностями. 

  5. Наша проблема, если смотреть на нее прямо, заключается в том, на старте рендера сцены vray просит у windows выделить, например 10Gb оперативной памяти как в моем случае было, а это не возможно, поэтому и возникает ошибка приложения или какого-то модуля.  Бывает ошибка выскакивает на разных этапах рендера - просчеты карт глобального освещения, дисплейса, фотонов, рейтрейс …  
    Разработчики Vray предусмотрели решение в такой ситуации - Dynamic Memory, но оно почему-то не работало у меня нормально.

    Я устанавливал значение лимит Dynamic memory limit, наблюдая через Диспетчер задач за объемом используемой оперативной памяти до рендера и в момент вылета ошибки или автоматического закрытия Max’a. Теперь vray запрашивает у операционной системы ровно столько ресурсов, сколько ему нужно на определенном этапе и мы задаем критический лимит. Не со всеми 3D сценами это работало у меня, а когда работало – рендер длился крайне медленно.
  6. Работать под Windows XP 64 bit – не пробовал, но бывалые тридешники на форумах пишут что это их спасало в данной ситуации.
Если способы, описанные выше, не избавили от ошибки,  а вставляя дополнительные планки памяти уже некуда:
Итак, основная часть.
Этот способ рендеринга не ускорил процесс, но позволил всё таки получить картинку 2500х1500 при наличии в сцене 3 млн. полигонов, при высоких настройках качества просчета картинки.
  1. Запускаем Backburner Manager. Он обычно устанавливается вместе с установкой 3DS Max.

    Если появится окно настроек, просто жмем ОК, соглашаемся с стандартными настройками.
  2. Запускаем Backburner Server, там же в меню находится.
    В настройках снимаем отметку возле Automatic Search, и вводим свой локальный IP 127.0.0.1.

    Таким образом, на вашем компьютере запущен Менеджер, готовый принять задание на рендер от 3D Max, и отправить часть задания на Сервер, для его обработки. Именно разбиение задание 2500х1500 например на части позволит практически любому «железу» обработать сцены повышенной сложности.  Так же есть Backburner Monitor для наглядного слежение я за происходящим процессом (запускать по желанию).
  3. Открываете свою сцену в 3D Max, устанавливаете желаемые настройки рендера, и главное, отметить в настройках Net Render, что позволит отправить рендер задание к Backburner Manager, а не выполнять его самостоятельно.

     В Render Output укажите куда сохранять результат, обязательно.
  4. Жмем кнопку Render, и переходим к пожалуй самым важным настройкам.     
    1. Убираем отметку возле Automatic Search
    2. Вписываем свой IP 127.0.0.1 (Здесь у меня было единственное отклонение от инструкции. У меня VPN и адрес компа был тот. что дал провайдер. Тогда заработало.)
    1. Справа будет кнопка Connect – выполняем поиск и подключение к Менеджеру. Справа появится список доступных серверов.
    2. !! Ставим отметку возле Split Scan Lines. По кнопке Define можно задать настройки разделения изобращения по высоте или по кол-ву полос. Вся большая картинка будет разделена на горизонтальные полосы высотой Strip Height, что позволит вашему компьютеру обрабатывать полосу за полосой,без появления ошибки и отказа :)   А если ошибка и будет возникать, просто увеличьте количество линий.

    3. Жмете Submit и можете наблюдать постепенную прорисовку сцены. Но я предпочитаю спать пока идет рендер
  5. Задание полностью отправлено Менеджеру, и теперь вы можете закрыть свою сцену и 3DS Max. Backburner Server запустит еще один процесс 3DS Max и свернет его автоматически до завершения Рендеринга.
Все полосы сохраняются в ту папку, в которую вы указали сохранить Render Output, а потом сливаются в одну картинку, по завершению процесса. Вуа-ля



Комментариев нет:

Отправить комментарий