Не вистачає пам’яті при рендері V-ray

Мене звуть Ілля aka iLyxa. Займаюся CG вже понад 5 років. Живу та працюю в Києві. У цьому уроці хочу розповісти про те, як виконати якісну візуалізацію в 3d Studio Max+VRay, коли ресурси комп'ютера не дозволяють цього.

Нещодавно, виконуючи візуалізацію інтер'єру кімнати, я зіткнувся з проблемою нестачі оперативної пам'яті, при рендері vray'ем. І знайшов рішення, яке надам вашій увазі зараз.

Сцена являла собою цікавим чином поєднані зал, вітальню та кухню. Все це займало понад 100 кв. Всі абсолютні меблі виконані в класичному стилі + на всіх вікнах були гардини та портьєри. Ще було 3 величезні люстри з сотнями дрібних скель і пару десятків лампочок на кожній.

РАЗОМ: 3 млн. полігонів та 2 млн. геометрії одночасно були присутні у сцені. Файл*.max займав близько 100 Мб у не стислому вигляді.

“UNHANDLED EXCEPTION: Memory allocation failure; …” багатьом знайоме повідомлення про помилку VRay. Мені пощастило його побачити тільки при рендері сцени з найпростішими налаштуваннями vray'я та при роздільній здатності картинки 320х240. Коли ставив щось більше – 3D Studio Max 9 SP2 просто закривався під час прорахунку Глобального освітлення або вже під час промальовування картинки, а повідомлення про помилку писалося в C:/vraylog.txt.

Залізо, на якому виконувався рендер:

Intel Core Quad Q6600 2.4 Ghz (це 4 ядра)

4 планки пам'яті по 1Gb DDR-II 800Mhz + 3Gb файл підкачування.

Відеокарта Asus GeForce 8600 GTS 256Mb

Windows XP 32bit L

На жаль, як пізніше з'ясувалося на практиці, Windows XP 32bit не може повноцінно використовувати оперативну пам'ять об'ємом понад 2,7Gb, тому мої 4 Гб оперативні пам'ятки просто гуляли.

Своє вирішення проблеми я опишу після, а спочатку: є кілька простих дій, які можуть вирішити проблему пам'яті.

Увімкнення опціїAutomatically create proxies автоматично створить на місці об'єкта, що експортується, його образ. Якщо об'єкт, який ви переводите в Проксі, складається з більш ніж 1 млн. полігонів, то помилка нестачі пам'яті ймовірно знову з'явиться.

Один із найпростіших способів вирішення проблеми –приховати (Hide) всі об'єкти сцени, які не потрапляють у поле зору камери. Неодноразово доводилося його використовувати, але без особливого задоволення, при рендері, наприклад 10 видів однієї сцени, потрібно було для кожної камери прибирати/додавати об'єкти сцени, стежити за поверхнями, що відбивають.

Наша проблема, якщо дивитися на неї прямо, полягає в тому, на старті рендеру сцени vray просить у windows виділити, наприклад 10Gb оперативної пам'яті, як у моєму випадку було, а це не можливо, тому і виникає помилка програми або якогось модуля. Буває помилка вискакує на різних етапах рендеру – прорахунки карт глобального освітлення, дисплейсу, фотонів, рейтрейс…

РозробникиVray передбачили рішення у такій ситуації -Dynamic Memory, але воно чомусь не працювало у мене нормально.

Я встановлював значення лімітDynamic memory limit, спостерігаючи через Диспетчер завдань за обсягом оперативної пам'яті, що використовується, до рендеру і в момент вильоту помилки або автоматичного закриття Max'a. Тепер vray запитує у операційної системи рівно стільки ресурсів, скільки йому потрібно на певному етапі і ми ставимо критичний ліміт. Не з усіма 3D сценами це працювало у мене, а коли працювало – рендер тривав вкрай повільно.

  • Працювати підWindows XP64 bit – не пробував, але досвідченітридешники на форумах пишуть, що це їх рятувало в даній ситуації.
  • Якщо способи, описані вище, не позбавили помилки, а вставляючи додаткові планки пам'яті вже нікуди:

    Отже, основна частина.

    Цей спосіб рендерингу не прискорив процес, але дозволив все ж таки отримати картинку 2500х1500 за наявності в сцені 3 млн. полігонів, при високих налаштуваннях якості прорахунку картинки.

      ЗапускаємоBackburner Manager. Він зазвичай встановлюється разом із установкою 3DS Max.

    Якщо з'явиться вікно налаштувань, просто натискаємо ОК, погоджуємося зі стандартними налаштуваннями.

    ЗапускаємоBackburner Server, там же у меню знаходиться.

    У налаштуваннях знімаємо позначку біляAutomatic Search і вводимо свій локальнийIP 127.0.0.1.

    Таким чином, на вашому комп'ютері запущено Менеджера, готового прийняти завдання на рендер від 3D Max, і відправити частину завдання на Сервер, для його обробки. Саме розбиття завдання 2500х1500 наприклад на частини дозволить практично будь-якому залізу обробити сцени підвищеної складності. Так само єBackburner Monitor для наочного стеження я за процесом, що відбувається (запускати за бажанням).

    Відкриваєте свою сцену в 3D Max, встановлюєте бажані налаштування рендера, і головне, відзначити в налаштуванняхNet Render, що дозволить відправити рендер завдання доBackburner Manager, а не виконувати його самостійно.

    УRender Output вкажіть, куди зберігати результат, обов'язково.

  • Тиснемо кнопкуRender, і переходимо до мабуть найважливіших налаштувань.
  • Забираємо відмітку біляAutomatic Search
  • Вписуємо свій IP127.0.0.1
  • Праворуч буде кнопкаConnect – виконуємо пошук та підключення до Менеджера.Справа з'явиться список доступних серверів.
  • !! Ставимо позначку біля Split Scan Lines. За кнопкоюDefine можна задати налаштування поділу зображення за висотою або за кількістю смуг. Вся велика картинка буде розділена на горизонтальні смуги заввишкиStrip Height, що дозволить вашому комп'ютеру обробляти смугу за смугою,без появи помилки та відмови :) А якщо помилка і виникатиме, просто збільште кількість ліній.
  • ТиснетеSubmit і можете спостерігати поступове промальовування сцени. Але я вважаю за краще спати поки йде рендер
  • Завдання повністю відправлене менеджеру, і тепер ви можете закрити свою сцену і 3DS Max.Backburner Server запустить ще один процес 3DS Max і згорне його автоматично до завершення Рендерингу.
  • Всі смуги зберігаються в ту папку, в яку ви вказали зберегтиRender Output, а потім зливаються в одну картинку після завершення процесу. Вуа-ля

    На цьому все!

    Сподіваюся, що цей урок дозволить отримати те, що раніше не було доступним. Питання лише часу.