Как облегчить сцену в 3d max
Перейти к содержимому

Как облегчить сцену в 3d max

  • автор:

Как облегчить сцену в 3d max

Работа с тяжёлыми 3D сценами требует тщательного планирования и технических решений. Дэн Грувер познакомит вас с основами решения подобных задач.

«Планирование рабочего процесса» не самая вдохновляющая фраза, но это ключевая часть повышения эффективности. 3ds Max предлагает несколько встроенных методов предназначенных для работы с масштабными сценами, один из которых это «привязка к внешнему файлу» (referencing external files) — XReferencing. Его суть в разделении сцены на отдельные файлы, работающие независимо, и дальнейшее объединение их в главном файле в «живом» режиме — это схоже с разделением визуализации на проходы, для последующей настройки финального изображения в программе для пост-обработки. А также множество людей могут работать с одной и той же сценой одновременно, это один из главных плюсов этого метода.

Одной из главных вещей, которую вы должны знать о XReferencing файлах, это то, что содержимое этих файлов никогда не хранится в главном файле (также как, например, проходы рендеринга не хранятся в композиционном файле Nuke, в отличие от Photoshop), таким образом, данный метод предлагает эффективное хранение данных, что является вторым преимуществом.

XRef Scene (File > XRef Scene) это один из главных способов сделать подобное. Все объекты из одной сцены собираются вместе, и загружает в другую. В такой сцене нельзя ничего редактировать и она может собираться вместе только как группа. Вы можете выбрать ключевые части сцены, для игнорирования которые можно исключить из прилинковки, а остальные объекты вы сможете изменять только в плане выбора слоёв. Текущая сцена загружается в память каждый раз. Это идеальный способ подключить файл .max, который содержащий множество экземпляров или прокси объектов (листву, массовку, уличную фурнитуру), а также главную камеру (чтобы избежать случайного перемещения).

Ещё одним способом ссылки на элемент является XRef Object, однако это более хитрый способ — вы выбираете одиночный объект для вставки, и объект загружается только в память. Что же дальше? Вы можете выбрать прокси вьюпорта для этого объекта (из любого файла .max). Вы также можете перемещать этот объект куда пожелаете. Это значит, у вас должен быть файл .max, заполненный высоко-полигональной фурнитурой, а также другой файл, с низко-полигональными версиями этой же самой фурнитуры. К примеру, вы можете использовать XRef Object, чтобы вставить высоко-полигональную софу, но загрузив при этом только низко-полигональную версию, в качестве прокси во вьюпорте. С этим способом вьюпорт будет работать быстрее, и будет подгружать только низко-полигональный объект в память. Однако, когда вы будете визуализировать сцену, в память будет загружена высоко-полигональная версия для рендеринга.

Главным недостатком такой системы, является то, что она не работает при большом количестве объектов: вам нужно подключать каждый объект по отдельности, а потом отдельно применять прокси вьюпорта для каждого из них. Поэтому XRef Scene — идеальное решение для одиночных высокополигональных объектов, таких как украшения комнат и зданий.

Контейнеры появились сравнительно недавно в 3ds Max, и пока ещё сырые и вызывают вылеты программы при их использовании. Однако они имеют множество опций и являются неплохим компромиссом между двумя предыдущими методами. В связи с такого рода проблемами, если вы начали проект, используя контейнеры, а затем столкнулись с какой-то проблемой, переключиться на другой метод не так уж сложно.

Прокси объекты существуют во многих движках визуализации, однако я остановил свой выбор на опциях V-Ray: V-Ray Proxies являются ссылками на меш и текстурной информации, а также анимации. Меш подгружается только во время визуализации, а анимация может сохранять каждый кадр в отдельном файле, что делает его более эффективным для памяти и сети. Однако данное решение тоже не идеально, оно не имеет своего шейдера — вам придётся применят материал уже в главном файле.

Решение о том, какой метод лучше выбрать для каждого отдельного проекта может быть разным. Если над проектом работает много людей, то вам придётся разделить сцену на объекты, а если вы работаете один, то это не обязательно делать. Лучшее решение это комбинировать несколько методов.

Совмещение V-Ray прокси и объектов XRef

Смешанные методы

Это скрипт (Vrmesh), доступный на моём сайте, который должен помочь совместить два вида методов — V-Ray прокси с объектами XRef, что должно оптимизировать вьюпорт и ускорить рендеринг.

Вывод скрипта

Скрипт пройдётся по всей сцене и сгенерирует файл .max с оригинальными объектами, соединит всё вместе одним V-Ray прокси, а затем разместит их низко-полигональные версии по всей сцене.

Прокси вьюпорта

В главной сцене используются XRef объекты, для подключения в объекты V-Ray прокси. Затем выделяется низко-полигональная версия как вьюпорт прокси. Это даёт быстрый вьюпорт, эффективный рендеринг и простое управление.

Дэн Гувер 3d художник фрилансер из Лондона А также технический директор в индустрии 3d анимации.

Как облегчить сцену в 3d max

В данной теме даются несколько рекомендаций, которые могут помочь Вам отрендерить тяжёлую сцену или изображение действительно больших размеров в 3d studio max. Довольно распространённый метод работы со сценой, когда промежуточный, тестовый рендеринг делается в разрешении 640×480, затем Вы доходите до момента, когда нужно отрендерить сцену в разрешении 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Мб на диске. И допустим, Вашей целью является использовать как можно меньше памяти (хотя стоит отметить: чем меньше используется памяти, тем медленнее будет рендеринг).

  • Установка большего размера значения файла подкачки (Page Size), означает (условно),
    что файл подкачки будет делиться на несколько больших файлов вместо множества
    мелких файликов. Изменение этого значения не сильно влияет на расход памяти, я бы
    установил это значение на наибольшее возможное , чтобы большие изображения
    (для текстурных карт) не разбивались на слишком маленькие части файлов подкачки.
  • Чем меньше значение Bitmap Size Threshold, тем больше файлов содержатся в подкачке.
    Так как при большом количестве файлов, превышающих это значение, они будут
    перемещены в файл подкачки. Таким образом, для меньшей загрузки
    (оперативной) памяти, устанавливайте небольшое значение этой величины.
  • Уменьшение значения Memory Pool означает то, что бóльшая часть информации будет
    располагаться на диске, а меньшая – в оперативной памяти. И чтобы уменьшить расход
    оперативной памяти, устанавливайте для этой величины небольшие значения.

Также обратите внимание, что для изменения настроек может потребоваться перезапуск. Так что, если вы изменили данные настройки, сохраните файл, и перезапустите 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 для удаления таких неиспользуемых текстурных координат, тем самым освобождая ещё часть памяти.

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

Уменьшаем количество полигонов модели в 3d max

Бывает так, что нам нужно упростить модель. Делается это, например, чтобы облегчить сцену, оптимизировать работу с объектом, или же модель изначально была создана в сторонних программах, или автор модельки при экспорте задал наивысшее число полигонов. В уроке рассмотрим 3 модификатора: Optimize, ProOptimizer, Multires.

Совет: нажмите клавишу «7», чтобы во вьюпорте отображалась информация о количестве полигонов и вершин объекта.

Модификатор Optimize

poly1

Выделяем нашу модель. Заходим в Модификаторы, в раскрывшимся списке выбираем Optimize.
Задаем нужные значения в опциях модификатора.

  • Fase Thresh — отвечает за разбиение граней;
  • Edge Thresh — разбивает ребра;
  • Max Edge Len — задает максимальную длину ребра;
  • Auto Edge — включает режим автоматической оптимизации;
  • Bias — задает количество полигонов.

Играя со значениями этих параметров мы уменьшаем количество полигонов. В режиме Realistic (Shift+F3) визуально оцениваем нужную гладкость модели.
Конвертируем модель в Editable Poly (ПКМ по вьюпорту — Convert to. ), переходим в Object Properties и смотрим параметр Faces (вкладка General). Он показывает количество полигонов модели. С помощью Optimaze можно сократить число полигонов на несколько тысяч без потери качества модели.

poly2

Модификатор ProOptimizer

Там же в Modifier List находим модификатор ProOptimizer. Рассмотрим на примере любимого чайника с намеренно завышенным числом сегментов. Применяем к объекту модификатор. Жмем рассчитать (Сalculate). Указываем на сколько в процентах мы хотим упростить объект (Vertex %) или задаем определенное количество вершин (Vertex Count). Чуть ниже мы видим статистику, где указано количество полигонов до и после модификации.

poly3

poly4

Конвертируем чайник в Editable Poly. Модификатор применился. Сравним два чайника: исходный и с примененным модификатором. Видим, что визуально модель не изменилась, но число полигонов на втором объекте в разы ниже.

Модификатор Multires

Также применяем модификатор через Modifier List. Жмем Generate. Задаем параметры нашего чайника.

  • Vert Percent — процентная доля вершин;
  • Vert Count определяет количество вершин;
  • Fase Count показывает нам число вершин после оптимизации;
  • Max Fase — до оптимизации.

poly5

Это три простых способа оптимизировать модель без потери качества с помощью стандартных модификаторов 3д макс. Пробуйте и у вас обязательно все получится!
Делитесь с друзьями статьей и ищите остальные ну ооочень полезные советы в нашей группе Вконтакте.

Как облегчить сцену в 3d max

Группа: Пользователи
Сообщений: 2 697
Регистрация: 25/04/2009
Из: Taunusstein
Пользователь №: 69 603

Ребята, может есть у кого идеи как можно облегчить работу в тяжолой сцене?
Сцены делить не желательно, они уже поделены. В одной сцене около 30 лямов поликов, но самое сложное что очень много мелких деталей, причем инстансных. Мои стандартные методы влияют слабо:
Отключил текстуры,
перевел в меш,
раскидал по слоям

Все равно работа даже с одним обьектом — тормоза нериальные.
Может ещё что можно сделать?

Banshee

Просмотр профиля

призрак в машине

Группа: Участник
Сообщений: 2 904
Регистрация: 27/07/2002
Из: Челябинск
Пользователь №: 453

Pomidoroff

Просмотр профиля

Группа: Пользователи
Сообщений: 2 697
Регистрация: 25/04/2009
Из: Taunusstein
Пользователь №: 69 603

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

Сообщение отредактировал Pomidoroff — 14/11/2014, 12:02

Yehat

Просмотр профиля

Группа: Пользователи
Сообщений: 4 068
Регистрация: 01/10/2005
Из: Moscow
Пользователь №: 16 680

Какая версия макса? Есть ли импортированные чертежи в сцене?

Если есть много инстансов (типа тысячи штук в группе), то надо зааттачить в один меш, иначе они туго вертятся вне зависимости от того, сколько там полигонов.
Именно этот момент очень хорошо понимаешь, когда моделишь штучную мебель с гвоздями или люстры с тысячами бирюлек )))

Сообщение отредактировал Yehat — 14/11/2014, 13:16

харумскарум

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *