Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Mental ray 3.3 для 3ds max.docx
Скачиваний:
9
Добавлен:
01.09.2019
Размер:
9.59 Mб
Скачать

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]