- •Часть 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 тенями
- •"Лабораторная крыса"
1. Построение Grid сетки в растровом пространстве изображения
Все типы поверхностей в сцене (полигонального, NURBS и других типов) преобразуются к представлению треугольниками. Это так называемая триангуляция или тесселяция. Тип используемой триангуляции для FG – Grid, относительно равномерная сетка треугольников, то есть все треугольники вдоль одной изолинии поверхности имеют приблизительно одинаковый размер. Особенность Grid - триангуляции в том, что она выполняется с учетом изолиний поверхности и если в каком-то месте поверхности требуется более детальная сетка высокой плотности, то вставляется целая полоса треугольников нужного размера от края до края поверхности вдоль изолиний.
Результат этой стадии можно увидеть в логе mental ray (Rendering>mental ray message window) сразу после записей «computing final gather points», нечто вроде:
RCFG 0.2 info : depth #finalgather points RCFG 0.2 info : 0 3846 RCFG 0.2 info : ray type number RCFG 0.2 info : eye 12700
Для сцены с одним простым объектом легко можно заметить, что количество FG-точек и eye-лучей на этой стадии зависит от геометрии сцены, а не от разрешения изображения (которое в данном случае составляло 640x480 пикселей при фиксированном значении aa 1 луч на каждый пиксел).
2. Предварительная стадия расчета fg
Среди видимых в камеру вершин треугольных сеток всех поверхностей, построенных на предыдущем этапе, производится отбор тех из них, вторичная освещенность которых будет рассчитываться методом Монте-Карло. Так, если посмотреть на листинг лога mental ray message window, приведенный чуть выше, можно увидеть, что среди всех точек пересечения eye-лучей в количестве 12 700 было отобрано только 3 846 FG-точек.
Правило отбора точек состоит в следующем. Для каждой новой точки выполняется поиск "подходящих" ближайших точек, освещенность которых уже рассчитана методом Монте-Карло. Если такие точки есть, освещенность данной точки не вычисляется, а интерполируется. Если нет ни одной "подходящей" точки, освещенность данной точки рассчитывается методом Монте-Карло.
Определение того, является ли ближайшая точка "подходящей" для интерполяции основывается на так называемой величине ошибки интерполяции. Данная величина, вообще, должна задаваться как один из настроечных параметров рендера. Однако в mental ray явная настройка ошибки интерполяции недоступна, и более того, она скрыта от пользователя и является внутренним параметром mental ray.
Сам механизм интерполяции освещения носит название irradiance gradient (градиент освещения) и предложен Gregory J. Ward etc. в статье "A ray tracing solution for diffuse interreflection" в 1998, а впоследствии усовершенствован им же в сотрудничестве с Paul S. Heckbert в статье "Irradiance Gradient".
Смысл метода состоит в следующем. Для каждой точки, которая рассчитывается методом Монте-Карло, помимо собственно освещенности точки, рассчитывается градиент, или скорость изменения освещения в данной точке. Математически градиент является частной производной функции освещения по координатам на поверхности и имеет как величину, так и направление.
Различают два вида градиентов освещения. Градиент смещения характеризует изменение освещения в зависимости от величины смещения от рассчитанной точки вдоль поверхности. Его величина тем больше, чем ближе к данной поверхности расположены другие объекты.
Второй градиент – градиент вращения, характеризует скорость изменения освещения от величины кривизны поверхности. Он тем больше, чем больше кривизна поверхности.
Знание величин градиентов освещения в данной точке позволяет интерполировать величину освещения при некотором небольшом смещении из такой точки вдоль поверхности любой кривизны, при этом оценка освещения характеризуется величиной ошибки интерполяции. При заданной постоянной величине ошибки, точки, по которым выполняется интерполяция, будут располагаться на поверхностях с разной плотностью. Плотность точек будет выше в тех местах, где объекты ближе расположены друг к другу и где кривизна поверхности больше. Для плоскости, например, распределение интерполяционных точек будет равномерным, с постоянной плотностью.
Интересно то, что информация о сэмплирующих FG-лучах, используемых для расчета интегралов освещения методом Монте-Карло, может быть успешно использована и для расчета обоих типов градиентов освещения. В самом деле, каждый сэмплирующий луч характеризуется координатами пересечения с другой поверхностью, величиной освещения в точке пересечения и углом относительно нормали в точке поверхности, откуда он был испущен. Учитывая, что для FG - расчета одной точки используется до нескольких тысяч лучей, понятно что этой информации вполне достаточно, чтобы оценить изменение освещения в сцене для каждой FG - точки. Я не буду описывать сам механизм таких расчетов, поскольку он довольно специализирован и не связан непосредственно с обсуждаемой темой, а тем, кто интересуется данным вопросом, рекомендую обратиться к вышеуказанным статьям.
Таким образом, расчет освещения FG точки дает, помимо освещения, еще и значения градиентов освещения в этой точке. Это и позволяет интерполировать освещенность других точек поверхности в зависимости от их расстояния до данной FG - точки. Предельное расстояние, на котором может использоваться интерполяция, зависит от задаваемой величины ошибки интерполяции. Оно получило название радиуса влияния FG - точки.
Очевидно, что у различных FG - точек радиусы влияния будут разными и зависит это от особенностей геометрии конкретной сцены.
Результатом предварительной стадии FG - расчетов является набор выбранных точек, освещенность которых рассчитана методом Монте-Карло. В идеале, такого набора вполне достаточно, чтобы интерполировать освещение в любой точке поверхности, видимой в камеру, с заданной величиной ошибки. Координаты FG - точек, их рассчитанная освещенность и величины градиентов освещения сохраняются в базу данных того же типа, что и фотонная карта (kd-tree) для последующего использования (интерполяции) при рендере. Расчет освещения FG - точек выполняется с учетом величины accuracy (Final Gather Samples в 3ds max), задаваемой в настройках FG. Величина accuracy определяет максимальное количество сэмплирующих лучей для расчета освещения методом Монте-Карло. Точки, полученные на этом этапе на диагностическом рендере в 3ds max 7 отображаются как точки зеленого цвета.