<< к оглавлению...

Сокращение использования оперативной памяти при рендеринге тяжёлых
(и ненасытных памятью) сцен.

В данной теме даются несколько рекомендаций, которые могут помочь Вам отрендерить тяжёлую сцену или изображение действительно больших размеров в 3d studio max. Довольно распространённый метод работы со сценой, когда промежуточный, тестовый рендеринг делается в разрешении 640x480, затем Вы доходите до момента, когда нужно отрендерить сцену в разрешении 2048 (или больше) пикселей. Нажимаете Render, и... бумс! получаете ошибку нехватки памяти и аварийное завершение работы max-а. Мягко говоря – неприятно...
Вот несколько вещей, которые стоит попробовать (чтобы предотвратить такое) :

1) Перезагрузка: Перед запуском нового рендеринга, перезагрузите систему,
чтобы очистить все дополнительные процессы, которые скопились в оперативной памяти пока вы работали со сценой.

2) Закрыть все другие приложения: Кажется вполне очевидным, но удивительно, как много оперативной памяти могут занимать другие мелкие приложения. Например, iTunes сжирает около 0.1 Гб ОЗУ, хотя по общему представлению – такого рода приложения не должны забирать такое количество памяти.

3) Отключить vfb: Виртуальный буфер кадра ("Virtual Frame Buffer" (vfb)), который теперь называется "Rendered Frame Window" занимает значительный объём памяти. Для того, чтобы видеть ход рендеринга, Вы возможно отдаёте от 200 до 300 Мб ОЗУ, особенно, если рендерите изображение размерами 2000-3000 пикселей. Перейдите в настройки рендера и отключите галочку Rendered Frame Window. Если Вы используете сторонний рендер-движок, например, Brazil, убедитесь, что Вы также отключили кадровый буфер. Затем установите сохранение рендера в файл (в разделе Render Output). Сами понимаете, сколько памяти Вы можете освободить при этом.

4) Использование сетевого рендеринга: Даже для статичных кадров, даже если у Вас всего один компьютер, используя backburner или другую систему сетевого рендеринга можно освободить достаточный объём памяти, поскольку Вам не нужно будет полностью загружать max, чтобы отрендерить сцену. Так, например, я обычно настраиваю мой компьютер и как manager и как server: захожу в max, устанавливаю сетевой рендеринг (netrender), убедившись, что включена галочка "Initially Suspended", затем закрываю max, иду в Monitor и запускаю (инициализирую) поставленную в очередь работу (если Вы забудете включить инициализацию, Ваш компьютер будет загружать 2 копии сцены: одну для сетевого рендеринга, другую – копию сцены, которая уже открыта в max-е, что не очень хорошо). За более подробной информацией об использовании backburner-а или любой другой системы сетевого рендеринга, которую Вы выбрали, обратитесь к руководству пользователя.

5) Рендеринг из командной строки: Чтобы отрендерить свою сцену, Вы также можете воспользоваться рендерингом из командной строки. Подробней об этом: в файле справки max-а: Command Line Rendering.

6) Переходите на 64-битную версию max: Начиная с 9 версии max-а, max выпускается в двух видах: 32-х и 64-битная версии. Чтобы использовать 64-битную версию max-а, нужен компьютер (точнее – процессор), поддерживающий выполнение 64-битных команд и 64-битная ОС, например winXP64 или Windows Vista (Windows7) 64. Такая версия max-а может использовать намного больший объём ОЗУ, по сравнению с обычной 32-битной системой. И Вы можете добавить 4 Гб, 8 Гб (или на сколько у Вас хватит средств и сколько поддерживает Ваша материнская плата) оперативной памяти. В общем, столько, сколько требуют Ваши тяжеловесные сцены, в отличии от стандартного максимального объёма в 2-3 Гб, которые могут использовать 32-битные системы. Одна деталь: пока не все плагины скомпилированные для 32-битной версии max-а перекомпилированы для 64-битного max-а, однако этот процесс продвигается, так что, перед переходом (на 64-битную версию), убедитесь в том, что все необходимые Вам плагины имеют также и 64-битные версии.

7) Отключите отображение (bitmap-)карт в окнах мах-а: Это не снижает расход памяти при сетевом рендеринге, но если Вам нужно выполнять интерактивный рендеринг внутри max-а, вполне возможно, что немалая часть памяти съедается картами, которые отображаются в окнах просмотра Вашей сцены (я, например, однажды очень удивился, когда заметил, что почти пол-гигабайта ОЗУ использовались для отображения немалого количества карт больших размеров в превью-окнах). Для отключения: зайдите в меню Views и нажмите опцию "Deactivate All Maps". С версии max 2008, доступ к этой опции слегка изменили, теперь это делается так: открываем Views, и далее: Show Materials In Viewports As, Standard Display.

8) Включить "Сохранять память" (Conserve Memory): Если используете Scanline-рендер, зайдите в раздел диалогового окна Render: Renderer, Memory Management, и включите "Conserve Memory". В файле помощи описание этой опции немного расплывчато, но утверждается следующее: "При включённом состоянии, рендеринг использует меньше памяти за счёт небольшого увеличения времени на расчёт. Размеры освобождаемой при этом оперативной памяти варьируются от 15 до 25 процентов. Время расчёта может увеличиться, примерно на 3-4 процента."

9) Битмап-подкачка: Зайдите в Customize, Preferences, Rendering, Bitmap Pager, и включите эту опцию, попробуйте разные значения настроек. Эта опция может значительно уменьшить количество памяти, необходимой для сцен с bitmap-картами больших размеров, или при рендеринге очень больших изображений. Настройки в этом разделе иногда напоминают колдовство (и мне кажется, что на самом деле это так и есть), вот некоторая базовая информация (учитывая её можно понять как это работает), которую я нашёл после нескольких тестов и бесед с некоторыми разбирающимися в этом вопросе людьми: Скажем, у Вас есть сцена с сотней bitmap-карт. У всех bitmap-карт разное разрешение и размеры, предположим, в пределах 100Кб и 11Мб на диске. И допустим, Вашей целью является использовать как можно меньше памяти (хотя стоит отметить: чем меньше используется памяти, тем медленнее будет рендеринг).

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

10) Уменьшить размеры бакетов (Buckets): При использовании рендер-движков, базирующихся на бáкетах (bucket based renderer) таких как Brazil или Mentalray, попробуйте уменьшить размер бакета. Меньший размер бакета означает, что в памяти будет размещаться меньший объём информации, для того, чтобы отрендерить этот бакет. В результате этого, рендеринг может быть немного медленней, но это также и уменьшает требования к памяти, особенно при использовании высоких значений сэмплинга (high sample rates).

11) Настройки в окне Strips Setup: Это свойство позволяет рендерить изображение по кусочкам, и полезно для рендеринга очень больших картинок. Сначала, запустите сетевой рендер, и когда появится диалоговое окно Network Job Assignment, включите Options → Split Scan Lines, затем нажмите Define для настройки. Для более подробной информации об этой опции и как она работает – см. файл помощи (искать "Strips Setup Dialog").

12) Уменьшите количество полигонов: А теперь, может самое время задаться вопросом: оптимизировали ли Вы количество полигонов в своей сцене? Понятное дело: какой восторг и наслаждение Вы испытывали, когда моделировали каждую мельчайшую деталь, скажем, модели автомобиля. А на самом деле, будет ли виден тот аккуратно смоделированный болтик при рендеринге? Вам действительно необходим цилиндр с 30-ю сторонами для объекта, находящегося вдалеке, с высотой 2 пикселя? Найдите время, чтобы проанализировать Вашу сцену и решить на чём можно сэкономить (в плане количества полигонов), возможно, Вы удивитесь тому, что можете обнаружить.

13) Уменьшите размеры Bitmap-карт: В том же духе, что и рекомендация №12: Вам на самом деле нужна карта размером 4000 пикселей для объекта, высота которого на экране равна 10-ти пикселям? Всегда сохраняйте резервные копии карт с высоким разрешением, никогда точно не знаешь где они могут пригодиться; но вместо считывания всей карты с разрешением 4000 в max-е, попробуйте сделать версию этой же карты размером в 1000 или 512 пикселей, и посмотрите насколько сильно заметна визуальная разница. При этом несомненно одно: разницу в расходовании памяти Вы заметите точно.

14) Удаление ненужных текстурных координат (Mapping Coordinates): UV-раскладки занимают память (несомненно ;-), и если у вас 10000 полигональных объектов с 3 или 4 UV-раскладками (т.е. Вы назначили некоторое количество модификаторов UVWMapping или UVWUnwrap, в которых задано больше одного map-канала), а для материала объекта не нужны такие UV-раскладки, Вы впустую теряете очень много памяти. Воспользуйтесь, например, утилитой Remove UVs Utility для удаления таких неиспользуемых текстурных координат, тем самым освобождая ещё часть памяти.

Надеюсь, некоторые из этих советов помогут Вам при рендеринге "тяжеловесных сцен".


оригинал статьи : http://www.neilblevins.com/cg_education/reducing_memory/reducing_memory.htm
перевод и адаптация: Александр Ергашов /© 2009-2012/

<< к оглавлению...