
- •Часть 1. Метод фотонных карт. Final Gathering
- •1. Испускание фотонов
- •2. Трассировка фотонов
- •3. Создание фотонной карты
- •4. Использование фотонной карты при рендеринге
- •Параметры настройки фотонных карт в mental ray для 3ds max, закладка Indirect Illumination
- •Оценка освещения точки поверхности по заданному количеству фотонов
- •Окно настроек фотонных карт
- •Настройка глубины трассировки для фотонов
- •1. Построение Grid сетки в растровом пространстве изображения
- •2. Предварительная стадия расчета fg
- •3. Рендеринг
- •Диагностический рендер fg-расчета. Радиус 10см, fg Samples 1000
- •Интерфейс настройки параметров fg-расчета
- •Часть 2.
- •Интерфейс шейдера Ambient/Reflective Occlusion в 3ds max
- •Сцена освещена двумя стандартными точечными источниками света (omni light)
- •Шейдер ао назначен диффузным свойствам материалов
- •Все тени в сцене рассчитаны ambient occlusion
- •Настройка ambient свойств материала для использования ао
- •Источник света проявляет диффузные характеристики поверхности
- •Ambient occlusion в режиме 1, учитывается цвет окружения
- •Шейдер ambient occlusion назначен точечному источнику света. Другого освещения в сцене нет
- •Простой reflective occlusion с картой отражения на параметре Bright – шейдер "видит" затеняющую геометрию, но не может построить правильные отражения – вместо них мы видим черные пятна
- •Пример диаграммы более сложного материала, позволяющего получить отражения с помощью reflective occlusion
- •Материал с Reflective occlusion, позволяющий получить отражения
- •Еще один пример материала для reflective occlusion
- •Источник света – Skylight, расчет освещения выполнен при помощи Final Gather, время вычислений – 2 часа 15 минут
- •Часть 3. Физическая модель подповерхностного рассеяния в mental ray – sss Physical Material
- •Шейдер miss_physical
- •Скриншот тестовой сцены
- •Слева-направо: камера под углом 90, 45 и 35 градусов к нижней грани
- •Слева - направо: depth 1, 10, 20, 100
- •Слева - направо: depth 1, 10, 20, 100
- •Слева - направо: depth 1, 10, 20, 100
- •Сцена 1. Молоко в стеклянном стакане
- •Сцена 2. Горящая цилиндрическая свеча
- •Сцена 3. Кубическая свеча
- •Часть 4. Упрощенная модель подповерхностного рассеяния sss Fast
- •Рассеянный задней поверхностью свет освещает переднюю поверхность
- •Материал miss_fast_simple_phen
- •Вверху — объект со стандартным материалом (Blinn), внизу — с материалом sss Fast Material
- •Вид интерфейса sss Fast Material по умолчанию в 3ds max Вид интерфейса sss Fast Material со всеми открытыми слотами свойств
- •Для шейдера bump использована растровая карта
- •Рассеяние без и с использованием ambient occlusion (нижнее изображение)
- •Применены растровые карты для bump, overall diffuse coloration и specular
- •Расчет освещения с final gathering, вверху — indirect off, внизу — indirect on
- •Шейдеры группы miss_fast
- •Диаграмма построения материала
- •Стандартный материал (phong) с картами для цвета, отражений и рельефа
- •Материал кожи со значениями по умолчанию
- •"The Final Battle". Автор: Max Kor
- •Создание собственных материалов sss Fast
- •Часть 5. Запекание текстур (render to texture)
- •Интерфейсы шейдеров mib_lightmap_write и mib_lightmap_sample
- •Пример достаточно удачных текстурных координат Неудачные текстурные координаты - множество швов и несвязанных координатных областей. Редактировать их будет довольно сложно
- •Blend - материал, запеченный scanline Запеченная текстура
- •Запеченная текстура
- •Копируем перетягиванием запекаемый материал в сэмплер поверхности
- •Рендер с текстурой, запеченной из blend-материала при помощи mental ray Запеченная текстура теперь выглядит правильно
- •Текстура с освещением
- •Интерфейс rtt
- •Секция параметров General Settings
- •Секция параметров Objects to Bake
- •Секция параметров Output
- •Секция Baked Material
- •Секция Automatic Unwrap Mapping
- •Сцена с caustic-эффектом, рассчитанным по фотонной карте
- •Настройки для запекания caustic фотонной карты
- •Запеченная фотонная карта
- •Рендер с запеченной в текстуру фотонной картой
- •Редактирование вершин Cage
- •Карта нормалей
- •Модель с Normal bump map
- •Высокополигонный источник и низкополигонный объект - цель
- •Часть 6.
- •Сетка модели Рендер сцены с источниками света
- •Две поверхности, на которых будет выращен мех
- •Модификатор Hair and Fur, секция Selection
- •Отображение в видовом окне сгенерированных модификатором волосков
- •Окно редактора Style Hair
- •Окно предварительного просмотра Style Hair
- •Секция параметров Frizz
- •Влияние параметров Frizz
- •Рендер в режиме mp Prim c Shadow map
- •Рендер в режиме mp Prim с ray trace тенями
- •"Лабораторная крыса"
Часть 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) для поверхности, которой назначен такой материал, будет выполнено автоматически во время рендеринга.