Mental ray для 3ds max. Часть 5. Запекание текстур (render to texture)


Использование запекания текстур, или рендер в текстуры (render to texture, texture baking), становится все более востребованным видом рендеринга. Возможность эта не так уж и нова, повышение интереса к ней вызвано появлением в последнее время доступных и рабочих средств в популярных пакетах моделирования, а также - расширением функциональных возможностей самого метода.

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

Именно это различие между "субъективностью" точки наблюдения и объективностью свойств трехмерной сцены - освещения, материалов, геометрии, существующих вне зависимости от того видим мы их или нет, и лежит в основе идеи запекания текстур. Общая суть проста - рассчитать все свойства объектов трехмерной сцены вне зависимости от их видимости через камеру один раз и затем показывать их, а не рассчитывать, по мере необходимости.

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

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

Запекание текстур может быть успешно использовано:

  • для ускорения рендеринга трехмерных сцен, как с анимацией, так и статичных. Современные программные средства рендера в текстуры достаточно изощренны и позволяют рассчитывать довольно сложные свойства материалов и освещения, включая и глобальное. Фактически, набор доступных к запеканию свойств ограничивается только возможностями самой программы рендеринга
  • для использования в рендерах свойств материалов и освещения, не поддерживаемых программой рендеринга. Например, можно запечь фотонные карты с помощью mental ray и использовать текстуры с фотонным освещением при рендеринге в scanline или raytracer 3ds max
  • для более совершенного представления сцен в видовых окнах программ моделирования. Видовые окна 3ds max не поддерживают отображение теней от объектов. Запекание теней в текстуры позволяет увидеть их в видовом окне

Запекание с mental ray

В mental ray запекание в текстуры появилось, начиная с версии 3.0. Механизм запекания реализуется парой шейдеров: основным шейдером mib_lightmap_write и каким-либо шейдером - сэмплером поверхности, который рассчитывает цвет точек поверхности.

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

В режиме vertex mode шейдером выполняется подготовительная работа для расчетов. Собираются данные о геометрии объекта - трехмерных координатах вершин всех треугольников, образующих его поверхность, нормалях вершин и назначенных вершинам текстурных координатах. По этим данным и заданным в настройках параметрам запекаемого изображения (разрешению и формату) создается растровая карта, в которой каждой вершине по текстурным координатам назначен определенный пиксел запекаемого изображения.

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

В режиме mesh mode шейдер mib_lightmap_write вызывается непосредственно при рендеринге. В этом режиме основной шейдер снова вызывает сэмплер, на сей раз для расчета каждого пиксела запекаемой карты, кроме вершинных пикселов, которые уже посчитаны. В результате получается качественная и точная растровая карта, каждый пиксел которой рассчитан сэмплером по соответствующей точке поверхности объекта.

Таким образом, запекание текстур в mental ray требует предварительного создания текстурных координат для поверхности и шейдера - сэмплера, который рассчитывает цвет точек поверхности объекта. Сэмплер должен передаваться основному шейдеру в качестве параметра. Такая модульная структура призвана облегчить написание пользовательских шейдеров запекания - программировать нужно только процедуру расчета цвета поверхности, а основной шейдер можно использовать во всех случаях без изменений. Исходники шейдеров запекания можно найти на публичном ftp - сервере mental images. Шейдеры запекания содержатся в библиотеке base.dll, декларируются в base.mi и по умолчанию скрыты. Очень рекомендую открыть их, отредактировав base.mi.

Вплоть до релиза mental ray 3.4, в библиотеке представлено только два шейдера запекания - основной универсальный шейдер mib_lightmap_write и один шейдер - сэмплер mib_lightmap_sample, который может рассчитывать освещенность поверхности объекта: прямую освещенность, освещение от caustic и фотонных карт, final gathering. То есть, все виды освещенности - как прямую, так и global illumination. Результатом запекания будут растровые карты освещенности, падающей на поверхность объекта. Кроме этого сэмплера, других в библиотеке нет, поэтому mib_lightmap_sample установлен шейдером по умолчанию для mib_lightmap_write. Именно поэтому процесс запекания текстур в mental ray именуется как light mapping - создание карт освещенности.

Для того чтобы инициализировать процесс запекания в 3ds max средствами mental ray, необходимо предварительно создать для поверхности объекта текстурные координаты и затем назначать шейдер mib_lightmap_write в слот Light Map материала объекта. После этого запекание текстур (light map) для поверхности, которой назначен такой материал, будет выполнено автоматически во время рендеринга.



Интерфейсы шейдеров
mib_lightmap_write и mib_lightmap_sample

Поскольку, кроме mib_lightmap_sample, в библиотеке mental ray других сэмплеров нет, возникает вполне логичный вопрос - что еще, кроме карт освещенности, можно запекать средствами самого mental ray? Правильный ответ - ничего, кроме карт освещенности. Для появления новых возможностей нужно программировать дополнительные шейдеры - сэмплеры.

Существует еще один способ: в качестве сэмплеров можно использовать любой материальный шейдер mental ray. В этом случае основной шейдер будет в нужное время вызывать материальный шейдер для каждой точки поверхности и записывать возвращаемый им цвет в запекаемую текстуру.

Этот способ не совсем корректен, поскольку использовать материальные шейдеры напрямую в качестве сэмплеров нельзя, так как они используют в расчетах данные о положении камеры и BRDF - двунаправленную модель расчета освещения (падающее освещение - отраженное освещение). Использование материальных шейдеров будет совершенно корректным только в случае, если для конечного результата положение камеры несущественно. Например, этот подход позволяет запечь blend- материалы 3ds max, запекание которых штатными средствами "макса" (render to texture) все еще затруднительно, или ambient occlusion, или процедурные карты.

Использование материальных шейдеров является недокументированной возможностью mental ray, использовать этот метод "можно, но осторожно". Назовем этот способ запекания "способом №1"

Кроме средств mental ray в 3ds max предусмотрены штатные инструменты запекания в текстуры - render to texture (меню Rendering > Render To Texture, клавиатурное сокращение "0" на основной раскладке), сокращенно - RTT. RTT совместно с mental ray прекрасно запекает большинство "родных" материалов 3ds max, хотя есть и исключения -blend и материалы, реализованные с помощью mental ray Connection. Запекаются также и многие материальные шейдеры mental ray, прежде всего те, которые видны в редакторе материалов и снабжены приставкой "3ds max". Будем называть штатный RTT "способом №2".

Существенным недостатком RTT является некорректная работа с материалами, чьи свойства определяются шейдерами через mental ray Connection. При запекании таких материалов RTT воспринимает их как стандартный материал 3ds max, полностью игнорируя закладку mental ray Connection в его свойствах. В итоге, запекание дает совершенно неправильный результат. При этом даже оригинальный материал, по которому выполняется запекание, повреждается. В качестве выхода из этой ситуации можно либо воспроизвести материал на основе mental ray material, тогда RTT будет правильно его обрабатывать, либо использовать способ №1 запекания материала шейдером mib_lightmap_write.

Типичная процедура запекания материала при помощи шейдера mib_lightmap_write состоит из следующих шагов.

1. Создаем текстурные координаты объекта. Для проверки карты имеющихся координат нужно воспользоваться модификатором Unwrap UVW. Требуется, чтобы карта координат была удобна для редактирования и содержала как можно меньше швов, потому что редактировать координаты после запекания придется вручную.
Дело в том, что из-за особенностей шейдера mib_lightmap_write, после запекания будут видны места стыков отдельных областей текстурных координат и тем явственнее, чем меньше разрешение запекаемой карты. Для устранения швов нужно отмасштабировать текстурные координаты - уменьшить их, чтобы обеспечить перекрывание на стыках. Делать это нужно уже после запекания. Штатный 3ds max RTT лишен этого недостатка, он имеет возможность управления перекрыванием швов еще на этапе настройки запекания (эта возможность называется padding и будет рассмотрена чуть позже). Другим важным условием, предъявляемым к карте текстурных координат, является отсутствие наложений (перекрывание) отдельных областей текстурных координат друг на друга.



Пример достаточно удачных текстурных координат



Неудачные текстурные координаты - множество швов и несвязанных координатных областей. Редактировать их будет довольно сложно

2. Удобнее всего для работы создать новый mental ray material и использовать его в качестве контейнера запекаемого материала. Удобнее, потому что придется копировать запекаемый материал в сэмплер поверхности mib_lightmap_write.

3. В слот Light Map назначаем шейдер mib_lightmap_write. В слоте Texture задается название, формат файла и разрешение запекаемой карты. Примечание: при рендеринге можно получить сообщение об отсутствии карты, которую вы указали. Это сообщение можно спокойно проигнорировать. В UV Generator (3dsmax) определяем, как использовать созданные ранее текстурные координаты.

4. В слоте Surface Sampler по умолчанию назначен Lightmap Sample (base). Если нужно посчитать карту освещения, оставляем его. Если же нужно запечь какой-нибудь материал, назначаем вместо Lightmap Sample сначала Material to Shader и в его слот "material" копируем материал, который нужно запечь.

5. При необходимости, в слот Surface, через Material to Shader можно еще раз скопировать запекаемый материал, хотя это необязательно.

6. Теперь настраиваем сам рендер и выполняем рендеринг. По завершении запеченная растровая карта будет находиться по указанному в настройках пути.

7. Можно создать новый материал, назначить его диффузным свойствам запеченную растровую карту, материал - объекту и отредактировать текстурные координаты (швы).

Пример: запекание материала типа blend.
RTT в паре с mental ray запекает этот материал неправильно - вместо смешивания материалов, запекается только один из них. Для примера использован простой blend материал с двумя смешиваемыми текстурами и маской falloff, управляющей смешиванием.



Схема запекаемого blend-материала

После запекания RTT в паре со scanline-рендером 3ds max получаем совершенно правильный результат:



Blend - материал, запеченный scanline



Запеченная текстура

Если этот же материал запечь при помощи RTT и mental ray, получим:



RTT + mental ray:
рендер с запеченным blend-материалом



Запеченная текстура

Эта ошибка относится к некорректной работе RTT и происходит только при запекании, рендер blend-материала в камеру выполняется корректно. Чтобы mental ray смог правильно запечь "бленду", воспользуемся способом №1.

Для этого создаем новый mental ray материал, назначаем mib_lightmap_write в слот Light Map. Переходим на закладки mib_lightmap_write, в слоте Texture указываем путь, имя и тип файла, разрешение (я выбрал 512х512, потому что карты большего размера в видовом окне max не отображаются) и цветовую модель (8 бит на канал даст обычное RGB изображение). Затем нажимаем кнопку Coordinates и настраиваем параметры генератора текстур. Поскольку текстурные координаты были уже созданы ранее при помощи Unwrap UVW, необходимо только проследить, чтобы MapSlotType=0 (текстура, а не окружение), MapChannel имел значение номера канала, который назначен для текстурных координат, Blur=0. Выходим из генератора "наверх" и нажимаем кнопку Surface Sampler. Для параметра Surface по умолчанию назначен Lightmap Sample (base), нажимаем кнопку справа и из списка выбираем Material to Shader. Теперь перетягиваем запекаемый blend-материал на кнопку material в Material to Shader. На вопрос отвечаем "Instance", если нужно сэкономить память, или "Copy".



Копируем перетягиванием
запекаемый материал в сэмплер поверхности

Эту же операцию копирования можно повторить и для слота Surface материала mental ray. Тогда при рендере мы будем видеть рассчитываемое изображение. Если этого не сделать, объект будет черным при рендере, но на запекаемую текстуру это не повлияет, а время сэкономит.

Теперь настраиваем освещение. Если нужно получить цветную текстуру без теней и освещения (diffuse map), отключаем все источники в сцене и тени от них, в Rendering>Environment>Ambient ставим белый цвет ("включаем" ambient - освещение). Что касается настроек рендера, нужно везде у растровых карт уменьшить до минимума Blur, значение суперсэмплинга 4/4. Теперь назначаем созданный материал объекту и рендерим. Запеченная текстурная карта будет находиться там, где мы указали в настройках. Вот что получилось:



Рендер с текстурой, запеченной
из blend-материала при помощи mental ray



Запеченная текстура теперь выглядит правильно

Если источники света не выключать, то запечется такая текстура:



Текстура с освещением

То есть, вместе с цветом текстуры рассчиталось и запеклось освещение.

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

Описанный метод запекания не документирован и официально не поддерживается (и даже не упоминается) в документации mental ray или 3ds max. Поэтому, используйте его на свой страх и риск. Хочется особо подчеркнуть, что для полноценного запекания материальных шейдеров все же требуется программировать специальные полноценные сэмплеры.

Теперь рассмотрим более подробно штатные средства рендера в текстуры, RTT в 3ds max, или способ №2. Дело того стоит, поскольку в некоторых ситуациях без него никак не обойтись, к тому же, он серьезно автоматизирует и упрощает весь процесс запекания.

RTT (Render To Texture) в 3ds max 7.5

Запекание текстур давно стало стандартной возможностью 3ds max и доступно через основное меню программы Rendering > Render To Texture ("горячая кнопка"- цифра "0" на основной раскладке клавиатуры). Начиная с шестой версии 3ds max, рендер в текстуры может быть выполнен с использованием mental ray. А начиная с версии 7.5, запекание с mental ray действительно работает в 3ds max. Недостатки все еще есть - некорректная работа с материалами, реализованными при помощи mental ray Connection, неправильное запекание blend и некоторые другие. Однако в большинстве случаев проблемы поддаются решению. Остается надеяться, что в последующих релизах 3ds max RTT будет избавлен от мелких недочетов и станет совершенным инструментом.

Процесс рендера в текстуры в общем случае состоит из следующей последовательности операций:

  • подготовить и настроить сцену - моделлинг, назначение материалов, постановка и настройка освещения, создание текстурных координат
  • выбрать и выделить объект, для которого будет выполняться запекание текстур
  • открыть интерфейс настроечных параметров панели Render To Texture (меню Rendering > Render To Texture) и выполнить настройку параметров рендеринга
  • запустить расчет рендеринга в текстуры, нажав кнопку Render внизу той же панели



Интерфейс RTT

После этого рендер выполняет расчет выбранного элемента визуализации объекта - это могут быть тени, освещение, прозрачность и так далее, и записывает результаты расчетов как текстуру в файл на диске. Если текстурные координаты создаются при запекании, в стеке объекта появляется новый модификатор Automatic Flatten UVs, который создает новые текстурные координаты для наложения просчитанной карта на объект. Создается и назначается объекту Shell материал, который хранит оригинальный материал и новый, с запеченной текстурой, и определяет, какую текстуру мы будем видеть в окне, а какую - при рендере. Всеми этими процессами можно управлять при помощи настроек.

Рассмотрим подробно предназначение настроечных параметров панели Render to texture.

Секция параметров General Settings.
Эта секция параметров определяет настройки отображения процесса расчетов, пути сохранения файлов, а также выбор и настройку рендера для запекания.



Секция параметров General Settings

Группа параметров Output.

Path - позволяет указать каталог, куда будут записываться все файлы просчитанных карт. По умолчанию - это папка Images каталога, где установлен 3ds max.

Skip Existing Files - Если для объекта просчитывается несколько разных карт и часть карт уже просчитана раньше, то галочка в этом боксе позволяет избежать повторного расчета уже готовых карт.

Rendered Frame Buffer - при просчете карта отображается во frame buffer, как при обычном рендере. Эта возможность работает только со scanline. Текстура отображается в VFB, разложенная частями по областям текстурных координат. Если текущий назначенный рендер - mental ray, вместо него появляется окно, отображающее состояние выполнения расчетов (progress bar).

Группа Render Settings.
Render Settings - позволяет загрузить набор готовых настроек рендеринга. Создание собственных настроек выполняется через панель рендера.

Setup - вызывает панель рендера и позволяет назначить текущий рендер, а также настроить его и сохранить настройки в файл при необходимости.

Network Render - активирует сетевой рендеринг. При запуске расчетов появляется диалоговое окно Network Job Assignment, где и выполняются настройки сетевого рендера.

Секция параметров Objects to Bake
Эта секция управляет свойствами запекания объектов - именно здесь определяется, что собственно будем рендерить в текстуру, какой канал будет использоваться для текстурных координат, имена и форматы файлов для создаваемых текстур.



Секция параметров Objects to Bake

В самом верху свитка находится список выбранных для запекания объектов. В списке отображается имя объекта (Name), выбранный канал для текстурных координат объекта (Object Channel) и значение параметра Padding - величины наложения друг на друга краев разных групп текстурных координат при сшивке в пикселах.

Группа Selected Object Settings.

Enable - если галочка установлена в этом боксе, настройки Channel и Padding действительны для отдельного выбранного объекта, нескольких выделенных объектов или для всех подготовленных к запеканию объектов (объектов, настройка запекания текстур для которых была выполнена ранее, но сам рендер еще не выполнялся).

Padding - при рендере в текстуры поверхности объекта должны быть назначены текстурные координаты. Если это не сделано предварительно, то операция может быть выполнена во время запекания при помощи модификатора Automatic Flatten UVs. Этот модификатор представляет собой не что иное, как Unwrap UVW в режиме Flatten Mapping с настройками, задаваемыми в секции Automatic Mapping панели Render To Texture. При проектирование все текстурные координаты разбиваются на группы так, чтобы минимизировать искажения текстур при проецировании. Чтобы сшить такие куски текстурных координат в единую карту без заметных швов и используется параметр Padding. Значение Padding определяет в пикселах величину перекрывания границ отдельных групп текстурных координат при сшивке. Величину Padding нужно увеличивать, если после рендера на запеченной текстуре видны швы.

Группа Projection Mapping.
Эта группа предназначена для создания Normal bump map. Normal bump map - новая возможность 3ds max, позволяющая при помощи текстуры детализировать поверхность низкополигонного объекта по образу высокополигонного. Отличается от bump map тем, что позволяет закодировать не только высоты поверхности, но и направления нормалей. Работу с Normal bump map рассмотрим подробнее чуть позже.

Enabled - при создании Normal map будет использован модификатор Projection. Если его отключить, вместо Normal map будет создана обычная карта bump map.

Список Modifier для выбранного в видовом окне объекта показывает список имен уже назначенных ему модификаторов Projection. Пуст, если работа с объектом выполняется впервые.

Средство выбора Pick позволяет выбрать объект - источник высокого разрешения для генерации Normal map, то есть объект, с которого модификатор Projection будет "срисовывать" нормали. Нажатие на Pick отображает окно Select Objects, в котором по имени выбирается источник.

Options - окно свойств модификатора Projection, содержащее различные настройки проекции нормалей в карту. Если в этот момент выбран Individual (в самом низу панели Objects to Bake), настройки действуют на выделенный объект. Если стоит All Selected или All Prepared, настройки применяются ко всем выделенным или всем подготовленным к запеканию объектам.

Галочка в Object Level заставляет 3ds max выполнять проекцию на уровне объекта.

Установка галочки в Sub-Object Levels выполняет проекцию выбранного в настоящий момент подобъекта или их группы.

Put to Baked Material - позволяет выбрать, какая проекция объекта или его подобъектов будет запекаться в текстуру (выбрать можно только одну возможность, другая будет исключена).

Ниже перечисленные опции применимы только в случае, если в текстуру запекаются подобъекты:

  • Full Size - каждый из выбранных подобъектов будет запекаться в карту заданного размера. Например, если размер карты задан 128х128 и для запекания выбраны четыре грани куба, то каждая грань запекается в текстуру 128х128.
  • Proportional - заданный размер normal map делится между всеми подобъектами пропорционально. Возвращаясь к предыдущему примеру, четыре грани, если они одинакового размера, будут запечены в карту 128х128, то есть, размеры карты для одной грани составят не более 64х64. Множитель Proportional Multiplier на Geometry Selection модификатора Projection (в стеке объекта) может изменить размер карты проекции, его значения лежат в диапазоне от 0 до 2, 1 стоит по умолчанию.




Full Size и Proportional взаимно исключают друг друга.

Группа Mapping Coordinates.
Позволяет определить источник текстурных координат, если они уже есть у объекта, или создать новые текстурные координаты при запекании.

Use Existing Channel, в качестве источника будет использован канал с ранее подготовленными текстурными координатами.

Channel, позволяет выбрать номер канала с готовыми текстурными координатами.

Use Automatic Unwrap позволяет создать набор новых текстурных координат, использует модификатор Unwrap UVW с автоматическим проектированием координат в режиме Flatten Mapping.

Clear Unwrappers - удаляет модификатор Automatic Unwrap из стека объекта, если он был назначен, и удаляет текстурные координаты. Если использовались готовые текстурные координаты, Clear Unwrappers оставляет их неизменными.

Кнопки в самом низу панели Objects to Bake позволяют выбрать, какой объект запекается.

  • Individual, позволяет выбирать объект индивидуально и устанавливать для него типы карт запекания и целевые слоты для них в новом материале
  • All Selected отображает список всех выделенных в видовом окне объектов
  • All Prepared, список объектов для запекания отображает все объекты, у которых атрибуты visible = on, unfrozen = on и есть модификатор Automatic Unwrap в стеке, независимо от того, выделены они или нет в видовом окне

Секция параметров Output
В этой секции определяются параметры самих запекаемых.



Секция параметров Output

В самом начале секции находится окно списка карт Output List, отображающее имена карт, выбранные для запекания элементы рендеринга, размеры карт и слот будущего shell - материала, куда карты будут назначены.

Под элементами рендеринга в 3ds max понимается совершенно конкретный перечень допустимых для расчета элементов, куда входят:

  • Diffuse, рассчитывается и запекается только диффузный цвет материала. Опции: Lighting, Shadows - расчет освещения и теней, каждую можно отключить
  • Specular, расчет и запекание только зеркальных подсветок материала. Опции: Lighting, Shadows
  • Shadows, расчет и запекание теней, опций нет
  • Lighting, расчет и запекание только освещения, то есть только карт освещенности, падающей на поверхность объекта. Если поверхности объекта назначена текстура или процедурный материал, они в запекании не участвуют. Опции: Shadows, Direct Light (прямое освещение), Indirect Light (непрямое или глобальное освещение). Карты освещения могут быть использованы в DirectX шейдере Lighting map для отображения карт в видовом окне (окне проекций 3ds max). В этом случае источников освещения в сцене может и не быть. Карты освещения также можно использовать при рендеринге, назначив их в карту самосветимости материала объекта или свойствам Ambience и Ambient некоторых шейдеров mental ray. Таким образом, можно использовать запеченные карты для определения освещения объекта при рендеринге от фотонных и caustic - карт и final gathering, а также - от прямого освещения
  • Normals, рассчитываются и запекаются карты нормалей Normal bump map. Опции: Normal map и Height Map, или карта высот, запекается в альфа-канал. Height Map - новая возможность mental ray, позволяет эффективно воспроизвести при рендеринге геометрию по растровым Height Map, или картам высот
  • Alpha, рассчитывается и запекается альфа - канал, опций нет
  • Height, карта высот, опций нет. Карта высот представляет собой карту относительных высот поверхности объекта в оттенках серого цвета. Может быть использована как карта для слота displacement нового материала
  • Blend, сложная карта, представляющая собой смесь различных элементов рендеринга, любой из которых можно отключить: Lighting, Diffuse, Specular, Reflection, Shadows, Ambient, Self-Illumination, Refraction
  • Complete, то же, что и Blend, но кроме теней отключить ничего нельзя

Если элемент уже назначен для запекания выделенному объекту, он в списке доступных не появляется.

Расчет Reflection и Refraction в качестве отдельных элементов не предусмотрен, а автоматически генерируемые карты в составе Blend и Complete далеки от совершенства, так что их запекание представляет собой некоторую проблему. Связано это с тем, что обычно ray trace отражения и преломления рассчитываются относительно камеры, а при запекании нам нужно просчитать их без камеры. Поэтому, используются упрощенные методы, например, кубические и сферические карты отражения окружения. Кубические карты - стандартная возможность 3ds max, сферические карты окружения можно рассчитать, поместив панорамную камеру в центр объекта (шейдер камеры wraparound) или использовав ambient occlusion.

Для добавления элемента в список запекаемых карт нажимаем кнопку Add и выбираем элемент из появляющегося в диалоговом окне списка. Для удаления выделяем элемент и нажимаем Delete.

Группа параметров Selected Element Common Settings.
Позволяет разрешить или запретить запекание выделенного в списке элемента в текущей сессии (Enable), задавать название запекаемого элемента (Name), название и тип файла запекаемой карты (File Name and Type). Размер карты может быть определен вручную (указанием величины в Size), из готового набора размеров (кнопки с цифрами) или может определить размер карты автоматически (Use Automatic Map Size).

Target Map Slot определяет назначаемый запекаемой карте слот нового материала. Содержимое списка зависит от того, выполняется запекание в стандартный материал 3ds max или mental ray material. В последнем случае в списке будут перечислены доступные типы шейдеров для определения свойств материала.
Для стандартного материала 3ds max доступны для определения следующие свойства: Ambient Color, Diffuse Color, Specular Color, Specular Level, Glossiness, Self-Illuminations, Opacity, Filter Color, Bump, Reflection, Refraction, Displacement.

Группа параметров Selected Element Unique Settings.
Содержит список доступных для выделенного в данный момент элемента запекания. Содержание окна этой группы изменяется в зависимости от выделенного элемента.

Секция Baked Material
Определяет способ использования запекаемых карт для определения свойств нового материала.



Секция Baked Material

Output Into Source - запекаемая карта будет встроена в указанный слот старого материала (существующего материала объекта, выбранного для запекания) и заместит его соответствующие свойства. Откат (undo) для этой операции невозможен. Поддерживается корректная работа с материалами типа Multi/Sub-Object.

Save Source (Create Shell) - создается новый материал типа Shell и назначается запекаемому объекту. В новом материале возможно продублировать элементы структуры старого материала (Duplicate Source To Baked) или создать новый тип материала (Create New Baked).

Кнопка Update Baked Materials создает для выделенного объекта новый Shell материал и расставляет по слотам запеченные карты.

Кнопка Clear Shell Materials удаляет из объектов и замещает его либо оригинальным материалом, либо материалом с запеченными картами. Выбор позволяют осуществить опции Keep Source Materials или Keep Baked Materials.

Секция Automatic Unwrap Mapping
Настроечные параметры этой секции влияют на создание текстурных координат для карт.



Секция Automatic Unwrap Mapping

Автоматическое создание координат происходит, если в секции Objects To Bake выбрана опция Use Automatic Unwrap при создании нового набора координат. Объекту назначается модификатор Automatic Flatten Uvs. Модификатор можно использовать для редактирования текстурных координат, выбрав его в стеке объекта.

Группа параметров Automatic Unwrap Mapping

Rotate Clusters - позволяет вращать кластеры (группы текстурных координат) для минимизации используемого координатного пространства.

Threshold Angle - порог, максимальное значение разницы в углах между полигонами одного кластера. При превышении порога для новой группы полигонов создается новый кластер. Уменьшая величину порога можно минимизировать искажения проектирования на плоскость неплоских поверхностей, но при этом увеличится число кластеров.

Fill Holes позволяет вкладывать мелкие кластеры в пустые неиспользуемые пространства (дыры) внутри больших кластеров. Эта опция, также как и Rotate Clusters, минимизирует бесполезные потери координатного пространства.

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

Группа параметров Automatic Map Size.
Алгоритм рендеринга в текстуры может самостоятельно определить необходимый размер карты. Для этого в секции Output нужно включить Use Automatic Map Size. Параметры рассматриваемой группы позволяют дополнительно задать некоторые свойства расчетов размера карты. В автоматическом режиме размер карты вычисляется по общей площади поверхностей всех выделенных объектов и затем умножается на величину Scale, после чего создается квадратная текстурная карта с вычисленной размерностью.

Scale - масштабирующий множитель для расчета размерности текстуры по общей площади. По умолчанию имеет значение 0.01.

Nearest power of 2 - округляет длину и ширину текстуры к значениям, кратным степеням двойки.

Min и Max - ограничители на допустимые минимальное и максимальное значение длины и ширины создаваемой карты, в пикселях. Значение Max не может превышать 2048.

Заканчивая обзор возможностей RTT в 3ds max, нужно отметить, что этот инструмент автоматизирует всю работу по запеканию текстур и очень удобен в использовании.

Пример: запекание caustic - фотонной карты.

Рассмотрим запекание фотонной карты на примере простой сцены с одним omni источником света и двумя объектами: кольцо с отражающим материалом, обеспечивающим фокусирование фотонов после отражения, и плоскость, на которой лежит кольцо с диффузным материалом. Фотонная карта для расчета каустики настроена, просчитана и сохранена, чтобы при рендере подгружаться из файла. Рендер сцены выглядит следующим образом:



Сцена с caustic-эффектом, рассчитанным по фотонной карте

Запекать нужно карту для плоскости, на которой лежит кольцо, поскольку каустика отражается на него. Выделяем плоскость и вызываем RTT. Выполняем следующие настройки параметров рендера в текстуры:



Настройки для запекания caustic фотонной карты

Для создания текстурных координат используется Automatic Unwrap с установками по умолчанию, поскольку плоскость довольно простой объект. В качестве элемента запекания выбрана LightingMap и включен расчет только непрямого освещения Indirect Light, поскольку запекается только фотонная карта. В качестве целевого слота выбран диффузный цвет нового материала (Diffuse Color).



Запеченная фотонная карта

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

После расчета карты, создан новый shell material, содержащий два материала. Первый материал предназначен для отображения каустики в видовом окне и для него просчитанная карта назначена в слот диффузного цвета. Второй материал предназначен для рендера и LigtingMap назначена в слот Self - Illumination, что позволяет использовать каустику независимо от диффузных свойств материала, благодаря чему их можно свободно менять, например, - назначать разные текстуры поверхности.

После небольшого редактирования текстурных координат получаем рендер с запеченной фотонной картой:



Рендер с запеченной в текстуру фотонной картой

Запекание фотонных карт глобального освещения выполняется аналогично, но может потребовать много времени для расчетов, особенно, если сцена велика по размеру. Запекание final gathering также вполне возможно, но время расчета рендера в текстуру будет намного больше времени рендера fg в камеру. Причина та же - при запекании нужно просчитывать fg для всех точек сцены. Ситуация усугубляется еще и тем, что для получения качества, сопоставимого с качеством рендера в камеру при запекании радиусы fg нужно уменьшать минимум в десять раз. Поэтому, запекание fg в текстуру является скорее задачей сетевого рендеринга. На одной рабочей станции выполнить расчет запекания fg за разумное время невозможно даже в простых случаях.

Создание и использование Normal bump map при помощи RTT и mental ray

Normal bump map относительно новая возможность 3ds max и представляет собой тип карты для получения детализации низкополигонных поверхностей по высокополигонным аналогам. Normal map является растровой картой, каждый пиксель которой своим положением и цветом кодирует положение и направление нормалей поверхности и высоту точек поверхности объекта относительно направления нормали.

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

Изначально Normal map появилась как средство детализации низкополигонных поверхностей для игр. Однако возможности этих карт настолько хороши, что они стали еще одним полноценным дополнением в арсенале инструментов моделирования. Например, Normal map можно эффективно использовать при моделировании мелких деталей лиц компьютерных персонажей. Использование традиционной полигонной техники в этом случае затруднительно, поскольку требует слишком большого количества полигонов. Применение Normal map позволяет эффективно интегрировать Zbrush и 3ds max, особенно при моделировании лиц компьютерных персонажей. Основная модель, не обязательно низкополигонная, может быть смоделирована в 3ds max и затем экспортирована в Zbrush в формате .obj. Используя мощные возможности Zbrush, модель редактируется и обогащается мелкими деталями. Затем готовая модель экспортируется назад в 3ds max и используется как источник детализации поверхности основной модели при помощи создания Normal bump map.

Пример создания и использования Normal bump map.
В 3ds max создана модель меча с текстурными координатами, количество полигонов модели около 17 тысяч.




Хотя модель является высокополигонной, их количества недостаточно для моделирования мелких узоров. Выполним экспорт модели в формате .obj, откроем ее в Zbrush, добавим деталей и экспортируем назад в 3ds max.




После обработки в Zbrush модель состоит из 141 тысячи полигонов и содержит множество мелких деталей. Создадим карту Normal bump map для исходной модели (цель) по этой высокополигонной модели (источник).
Прежде всего, нужно совместить в пространстве и точно выровнять обе модели. Цель должна быть чуть меньше источника, так чтобы контур цели целиком находился внутри контура источника. Поэтому, при необходимости нужно отредактировать положение вершин поверхности цели.




Затем выделяем объект - цель и вызываем панель интерфейса RTT. Настраиваем RTT следующим образом:




Настройки:

  • устанавливаем галочку в Projection Mapping > Enabled, тем самым разрешаем использование Projection Modifier
  • отключаем Sub-Objects Level, оставляем только Object Level, поскольку Normal map создается для всего объекта целиком
  • выбираем Use Existing Channel и номер канала текстурных координат объекта - цели. При создании текстурных координат нужно соблюдать обязательное условие - они не должны перекрывать друг друга
  • в Output добавляем (кнопка Add) элемент Normal Map и в качестве целевого слота назначаем Bump либо Displacement
  • размер карты 4096х4096 - чем больше разрешение карты, тем точнее передача деталей
  • в группе Select Element Unique Settings выбираем Normal Bump и Height Map. Height Map выводится в альфа - канал изображения, поэтому нужно следить за тем, чтобы формат файла поддерживал 4 канала, например, это может быть .tga или .tif, но не .jpg. Эту карту можно использовать для displacement
  • в секции Baked Material выбираем Output into Source, запекаемая Normal map будет помещена в слот Bump исходного материала
  • возвращаемся к группе Projection mapping и нажимаем кнопку Pick. В появившемся диалоговом окне выбираем имя высокополигонного объекта - источника нормалей. В результате объекту - цели будет назначен projection modifier, который добавляется в стек объекта, а вокруг объекта появится Cage - контейнер, охватывающий поверхность объекта - источника

При создании Normal map Cage играет ключевую роль. Он предназначен для проектирования полигонных нормалей объекта - источника на поверхность объекта - цели. Поэтому, от точности его настройки зависит качество и точность Normal map. Для редактирования Cage нужно в стеке цели выбрать модификатор Projection, развернуть его подобъекты и выбрать Cage.




Cage рассчитывается по геометрии объекта - цели и состоит из полигонов и вершин, количество которых зависит от геометрии цели - чем больше полигонов у поверхности цели, тем больше полигонов у Cage и точнее может быть выполнено проектирование нормалей. Назначение модификатора Projection автоматически генерирует вокруг объекта - цели Cage, который почти всегда требует ручного редактирования.

Для этого в параметрах нужно выставить галочку у Display > Shaded, это позволит отображать в видовом окне Cage как полупрозрачную поверхность, что облегчает ее редактирование. Далее нажимаем Reset для того чтобы отменить автоматические настройки охвата модели, Cage плотно охватит поверхность цели. Используем регулятор Push > Amount для придания новой формы и величины смещения поверхности Cage относительно поверхности источника. Основная задача - как можно более точно воспроизвести формой Cage форму высокополигонного источника, при этом источник должен полностью попасть внутрь Cage, пересечения недопустимы. Если пересечения все же есть, то перейдя в режим редактирования вершин Cage, перемещаем их в местах пересечения участков поверхности источника и Cage.



Редактирование вершин Cage

После завершения редактирования Cage можно считать подготовительную работу законченной. Возвращаемся в панель RTT и нажимаем Render.
После завершения рендеринга в слоте Bump материала исходного объекта появится запеченная карта.



Карта нормалей

Растровая карта нормалей может быть открыта для просмотра и редактирования в Adobe Photoshop. Редактирование легче всего выполнять по каналам. Красный и зеленый цвет кодируют направление нормалей, синий - глубину, или величину смещения точек поверхности вдоль направления нормалей.
Запекание Normal map не всегда выполняется идеально. Иногда удобнее и быстрее "вычистить" незначительные артефакты в растровом редакторе, чем выполнять повторную тонкую настройку Cage и рендеринг.

Устанавливаем для Bump Amount =100, скрываем высокополигонный объект и выполняем рендеринг.



Модель с Normal bump map

Сгенерированную Normal bump map можно дополнительно использовать и в слоте Displacement, это позволяет добавить деталей на краях объекта, хотя и замедляет рендер.



Высокополигонный источник и низкополигонный объект - цель

Таким образом, рендер в текстуры в 3ds max с использованием mental ray является гибким многофункциональным и вполне рабочим инструментом, знание и умение работать с которым позволяет существенно расширить возможности рендеринга и создания новых материалов. А появление Normal bump map превращает запекание текстур в полноценный инструмент моделирования, владеть которым должен каждый, кто работает с 3d. И хотя RTT не лишен недостатков, они не принципиальны. Будем надеяться, что в последующих релизах 3ds max эти недостатки полностью исчезнут.

Дополнительно

iXBT BRAND 2016

«iXBT Brand 2016» — Выбор читателей в номинации «Процессоры (CPU)»:
Подробнее с условиями участия в розыгрыше можно ознакомиться здесь. Текущие результаты опроса доступны тут.

Нашли ошибку на сайте? Выделите текст и нажмите Shift+Enter

Код для блога бета

Выделите HTML-код в поле, скопируйте его в буфер и вставьте в свой блог.