воскресенье, 22 февраля 2009 г.

Укрощение строптивого рендера

Все началось оттого, что вчера я приобрел еще два гига памяти и добавил к существующим, получив в итоге четыре гигабайта оперативной памяти. Сегодня я перекапывал винт и нашел настроенную сцену от Evermotion, которую решил отрендерить. Запустив макс я загрузил сценку и начал рендер. Макс аварийно завершился (далее упал). Я взглянул на настройки VRay. Использовалась связка Light Cache + Quasi-Monte Carlo. Количество сабдивов в Light Cache - 800. Просмотрел свиток System, установил тип памяти Dynamic и лимит в 3000 Мб. Стоял Statick. Также уменьшил Max. tree depth установив значение с 60 в 24. Запустил рендер. Он упал при расчете Light Cache и при загрузке памяти ~ 1500 Мб. Я смог просчитать Light Cache только снизив сабдивы до 400.

Тогда я вспомнил про boot.ini. Дело в том что:
В 32-bit Windows:
Объем виртуального адресного пространства 4Гб, распределено:
2Гб - user mode (пользовательский режим), 2Гб
- kernel mode (режим ядра).
Т.е. приложению (процессу) доступно примерно 2ГБ виртуального адресного пространства в независимости от количества установленной физической памяти. Размер виртуальной памяти в режиме пользователя можно увеличить до 3Гб используя ключи в boot.ini.

Чем я и воспользовался, правда ключ /userva= я не использовал, у меня и так все получилось, как я и хотел. Более точное предназначение этих ключей можно узнать в гугле, я же хочу рассказать что же происходило дальше.

Подправив boot.ini таким образом что он выглядел так:

[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional RU" /noexecute=optin /fastdetect /usepmtime/3GB


я перезагрузился. После этого я начал рендерить и сделал несколько скриншотов. Вкратце скажу, что все получилось, я прошел этот порог в 1500 Мб на приложение и отрендерил ту картинку. Самый затратный по памяти процесс в данном случае был рассчет Light Cache.
При 800 сабдивах требовалось выделить около 1600 Мб.

На этом скриншоте идет рендер с настройками в 1500 сабдивов Light Cache (помните, даже 800 была проблема!) Обратите внимание, сколько на данном этапе потребляется памяти!


Опаньки, что творится! Достигнув определенного предела отображения в максе (см. строчку Memory Used: ) я с удивлением заметил, что там память показывается отрицательным числом, причем она увеличивается (близиться к нулю) В менеджере задач все отображается верно и на этом этапе рендера макс потребляет 2,22 Гб оперативки 


Расчет Light Cache почти закончен, но макс падает, видно окошко дебаггера за диспетчером задач. Память достигла 2,43 Гб, а виртуальная - 2,748 Гб. В принципе, виртуальное адресное простанство закончилось (не забываем про другие приложения), поэтому макс упал. Но это уже слишком загнанные настройки, я специально хотел завалить макс. Memory Used: показывает -1720 Мб. Это просто какой-то прикол =)


Кстати, вот конфигурация машины:
Intel Q6600 4x2.4 Ghz 1066 Mhz
Asus P5K-PRO p35
Kingston 2x2 Gb
Ge-Force 8600 GT

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