Решение проблем с оперативной памятью в V-Ray и 3dsMax

Очень часто возникают проблемы связанные с недостатком оперативной памяти при работе с 3dsMax и V-Ray. Если при рендере ваш компьютер начинает тупить, и не просто тупить, а тупить наглухо, а то и вылетать, это серьезный повод нажать Ctrl+Alt+Delete, но не для того чтобы перезагрузить машину или снять эту ненавистную задачу, а для того, чтобы посмотреть сколько оперативной памяти расходует ваше «корыто» на рендер сцены. Причем не простой памяти, а виртуальной.

image001.jpg










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

Что происходит с машиной во время нехватки оперативной памяти? А происходит следующее, исчерпав всю оперативную память, программа начинает обращаться к разделу жесткого диска, который отведен специально для того, чтобы хранить временную информацию, получаемую от программы. Так называемый файл подкачки будет расти до тех пор пока не упрется в свой порог. Чтобы узнать размер файла подкачки, кликаем правой кнопкой по значку «Мой компьютер», выбираем вкладку «Свойства» -> «Быстродействие», кликаем на кнопку «Параметры» -> выбираем вкладку «Дополнительно» - «Виртуальная память» - Общий объем файла подкачки на всех дисках: укажет искомую величину.

При нехватки оперативной памяти скорость вашего рендера будет зависеть только от того, насколько быстро сможет обмениваться информацией ваш жесткий диск с программой. Процессор при всем этом будет, дай Бог, работать на 10 процентов. Типичный случай на картинке.

image003.jpg






















И обратное, если ваша сцена загружает процессор полностью, но не берет всю оперативную память, не пугайтесь, значит сцене больше не нужно, быстрее рендер все равно не станет. 

Сразу оговорюсь, на всякий случай. Win32 не поддерживает работу с более чем 2,7Gb оперативной памяти, так что если у вас Win32 и 4Gb оперативы, как это бывает у многих, 1.3 гига будут простаивать.

Так как апгрейд компа дело суетливое и не ежеминутное, мы пойдем по более рациональному пути - оптимизация сцены.

Чтобы понять, как оптимизировать сцену, нужно сначала разобраться в том, какие основные факторы могут влиять на использование оперативной памяти?

  1. Загруженность сцены высокополигональными объектами. 
  2. Загруженность сцены текстурами высокого разрешения и их дубликатами. 
    2.1 Отображение текстур во вьюпорте. 
  3. Копирование объектов при помощи Copy. 
  4. Настройки дисплейсмента в сцене. 
  5. Глубина просчета сцены и настройки рендера. 
  6. Сложение оперативной памяти BackBurner Server и Vray Spawner. 


1. Загруженность сцены высокополигональными объектами. 

Это такие объекты как деревья, машины, классическая мебель; объекты в которых полигонов довольно много - 300-400 тысяч и их самих немало. Такие объекты имеет смысл переводить в Vrayproxy. Заменять более-менее похожие объекты дубликатами. И вообще следить за наполняемостью сцены и полигонажем.

Так как в последнее время очень мало какие объекты моделируются, в силу того, что базы даже бесплатных моделей просто космического масштаба, следите за тем, какие объекты вы добавляете в сцену. Если вы видите, что на объекте очень много фасок и вы в своем кадре этого просто не увидите – не мучайте ваш компьютер, сделайте несколько кликов и прооптимизируйте модель. Поверьте, в будущем это сохранит вам много времени и нервов.

Как перевести объект в Vrayproxy объект? Правый клик на объекте, который вы хотите перевести в прокси и дальше по картинкам, 

image004.jpg   image005.jpg























где
a. путь к будущему прокси файлу.
b. имя этого прокси файла.
c. если поставить эту галочку, текущий объект автоматически заменится на проксиобъект.


2. Загруженность сцены текстурами высокого разрешения и их дубликатами. 

Тут я хотел бы сказать про количество и объемы этих самых текстур. Всегда следите за форматом и размером текстуры, зачастую размер в 8000х8000 пикселей в формате png не оправдан и занимает много места в той самой оперативной памяти. Ориентируйтесь по кадру, как близко будет видна эта текстура и, исходя из этого, оптимизируйте ее размер.

Следите за тем, чтобы одинаковые текстуры не «тянулись» из разных мест. Проверяйте пути с помощью Asset Tracking (Shift+T). Когда работаете над большим проектом - это часто бывает актуальной проблемой.

2.1 Отображение текстур во вьюпорте.

Когда текстур в проекте много, и все они у нас большого размера, отображение их во вьюпорте может просто «положить» сцену, поэтому советую отключать отображение текстур во вьюпорте, по крайней мере в финальных сценах. И сделать это надо до сборки сцены.

image006.jpg


3. Копирование объектов при помощи Copy.

Самый излюбленный косяк всех, как показывает практика. Если вы сделали прокси-объект, или просто нужно рассадить в сцене много одинаковых объектов делайте это посредством Instance, увидите, как это положительно повлияет на расход оперативной памяти.

Даже если вы все сделали верно, но все равно оператива вылезает, и сцена упорно не хочет считаться, проверьте ваши инстансы, вы случайно можете их сбить и нарушить эту иерархию. Для того, чтобы сделать из Copy объектов Instance объекты есть специальные скрипты.


4. Настройки дисплейсмента в сцене. 

С настройками по умолчанию, VrayDisplaycementMod в 3D режиме жрет кучу оперативы, тем более все мы любим текстуры Arroway, но никто не любит их оптимизировать под ракурсы. Так что к этому режиму нужно подходить с осторожностью и хелпом под мышкой.

Edge length - Длина ребра - определяет качество дисплейсмента. Каждый треугольник оригинального меша подразбивается на некое количество треугольников. Большее количество треугольников означает более высокую детальность дисплейсмента, увеличение времени просчета и использование большего количества оперативной памяти. Меньшее количество треугольников означает меньшее количество деталей, более быстрый просчет и меньшее количество используемой памяти. Смысл параметра Edge length зависит от значения параметра View-dependent.

View-dependent - Зависимость от вида - когда опция включена, параметр Edge length определяет максимальную длину ребра треугольника в пикселях. Значение 1.0 означает, что самое длинное ребро каждого треугольника будет около одного пикселя длиной при проекции на экран. 

image007.jpg 


5. Глубина просчета сцены и настройки рендера.

Во вкладке System есть параметры, которые помогут нам сократить количество расходуемой памяти.
Настройте raycaster settings: уменьшите Max. levels, увеличьте Min. leaf size, увеличьте Face/level коэффициент.(Vray Help).
Параметр Max. tree depth - высокие значения приведут к тому, что Vray возьмет больше памяти, но просчет будет быстрее. Более низкие значения этого параметра соответственно наоборот, но рендер будет занимать большее количество времени. К критических случаях я ставлю аж 40.

Также можно выставить в Default geometry -> Dynamic memory, позволит машине переварить все ваши прокси.

image008.jpg












6. Сложение оперативной памяти BackBurner Server и Vray Spawner. 

Начну с истории из жизни, чтобы было понятно о чем я говорю:
Была подготовлена сцена для рендера, послал задачу на стойку, стойка у нас состоит из десяти 4-х ядерных и десяти 8-ми ядерных, т.е. ожидаемый эффект - время на задачу у одной половины должно было быть меньше примерно в два раза, чем у другой.

Прихожу с утра смотрю статистику, все машины выдавали время на задачу в 2 часа. В чем может быть проблема, ведь машины разные и не могут выдавать одинаковое время? Проблемы как раз была в нехватки оперативной памяти, т.е. все машины были ограничены скоростью винчестеров, а они у них схожие.

Почему такое произошло, ведь сцена готовилась к рендеру и все было замерено, никаких вылетов оперативной памяти быть не должно? Дело в том, что обычно я работаю так: днем рендерю с помощью других машин, соответственно везде запущен Vrayspawner, а ночью посылаю задачи на стойку. Т.е. на каждой машине запущены BackBurner Server и Vrayspawner.

Проблема кроется в том, что Vray не выгружает данные из Vrayspawner и когда загружается задача через BackBurner Server мы получаем выкидыш по оперативной памяти. Т.е. оперативная память с BackBurner Server и Vrayspawner складываются. Поэтому перед отправкой задачи на стойку лучше перегружать Vrayspawner. В новой версии Vray 1.5 sp4 появилась галочка перегружать vrayspawner после окончания рендера.

Мы рассмотрели основные факторы, которые влияют на расходование оперативной памяти при рендере сцен в 3dsMax и Vray. Но этими шестью пунктами, конечно, не ограничивается настройка рендера, можно копать глубже и глубже в поисках причин «затыка» просчета. 


Вот некоторые советы, которые могут также помочь:

1. И самое простое, что можно сделать непосредственно перед рендером на одной машине - это закрыть и открыть заново 3dmax. Это позволить вам очистить буфер 3dmax от всех Undo и остальной пакости, которая остается не выгруженной из памяти после работы со сценой.

2. Включить Bitmap pager. Делается это так: «Customize» -> «Preferences» -> вкладка «Rendering» внизу справа есть заветный флажок. Он поможет вам при рендере больших изображений, изображений с использованием большого количества и больших текстур. Включая эту опцию, программа создаст на вашем диске файл подкачки, где будет хранить часть оптимизированных текстур.

3. Также живой Motion Blur и Depth of View повысит потребление оперативной памяти. Выход - переводить эти эффекты на постэффект. В этом случае для MB вам понадобиться пасс Vray_Velocity и для глубины резкости Vray_ZDepth, включить эти пассы можно во вкладке Render Elements.

4. При наличии большого количества прокси объектов и тяжелой геометрии часто выручает связка Brutforce+LC, сцена более стабильна, если лайткэш просчитался и сцена не упала - повезло, хоть медленно, но отрендерится. Объясняется это тем, что в случае связки Irrmap и LightCache вся информация о свете храниться в буфере компьютера, что тоже занимает место в оперативной памяти.

5. Отсутствие стандартных и рейтрейс материалов. Часто на этом подводят модели библиотек из эвермоушн. Желательно после каждого мерджа непроверенной модели проходиться по ней Vray-mtl converter'ом. Да и вообще желательно любую модель, которая попадает к вам в сцену проверять, объединять в один объект, давать осмысленное название и проверять все материалы.

6. Фильтрация текстур. Summed area фильтр занимает больше памяти чем Pyramidal фильтр. Но смотрите при этом на финальное изображение или анимации, может появиться мелкий шум.

7. Каналы текстурных координат, каждый канал маппинга занимает примерно столько же памяти сколько и не сама геометрия. Старайтесь избегать большого количества каналов, во многих объектах можно обойтись стандартным маппингом.

8. Алгоритмы антиалиасинга в Vray требует определенное количество памяти для хранения данных. Это количество может быть довольно большим, в зависимости от выбранного размера бакет-региона и уровня сэмплирования. Для уменьшения этого количества:
а. уменьшите размер бакет-региона.
b. замените метод сэмплирования image sampler. Например, Adaptive QMCsampler использует меньше памяти чем Adaptive subdivision sampler.


Когда создаете сцену важно отдавать себе отчет в том, на что способна ваша машина. И конечно же для комфортной работы лучше иметь 8 гигабайт оперативной памяти, это позволит вам некоторое время не думать о ее нехватке.

На этом все. Быстрого рендера вам.

Автор статьи:
Леонид Куров
icq: 202843575
skype: leonid_kurov
mail: leonid.kurov@gmail.com

Возврат к списку

Сергей Гаранин | 5 Ноября 2010, 06:11
Спасибо за статью, много полезного узнал, был один проект, который вываливался, тоже голову ломал из-за этого...
Leonid Kurov | 6 Ноября 2010, 12:11
Рад, что пришлось по вкусу.
Анатолий | 8 Ноября 2010, 12:11
Как новичок в 3 д максе понял не много , зато есть к чему стремиться , спасибо
Игорь Иванов | 24 Ноября 2010, 01:11
У кого стоит win32 и 4 Гиги оперативы или больше, можно использовать RAMdisk plus, она позволяет использовать незадействованную память в качестве жесткого диска. В 3дмаске вряд ли пригодится а, например, в фотошопе, если этот диск назначить в качестве scratch диска, прирост будет офигенный.
Мария | 28 Ноября 2010, 12:11
Спасибо большое за подробное разъяснение! в процессе работы столкнулась с еще одной проблемой: от переведенных в прокси деревьев нет теней(подскажите, пожалуйста,из-за чего случилась эта проблема и как с ней бороться?
Никита Горячев | 28 Ноября 2011, 08:11
Я думаю что самый лучший вариант это замена железа, ИМХО