- •Часть 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 тенями
- •"Лабораторная крыса"
"The Final Battle". Автор: Max Kor
Статья автора работы: "The Making of The Final Battle"
Создание собственных материалов sss Fast
Материалы miss_fast_simple_phen (SSS Fast Material), и miss_fast_skin_phen (SSS Fast Skin Material) обладают богатыми возможностями. Но что, если возникнет необходимость в создании материала с четырьмя и более рассеивающими слоями? Или материала с какими-либо иными свойствами?
Один из способов решения проблемы — "сборка" шейдеров в редакторе материалов 3ds max на основе стандартного материала. Сделать это можно следующим образом.
1. Выбираем в редакторе материалов свободный стандартный материал и разворачиваем у него mental ray Connection.
2. Отключаем "замок" у слота "Surface" и назначаем ему SSS Fast Render Shader (mi). Мы создали два рассеивающих слоя у материала. Если требуется бОльшее количество слоев, то нужно воспользоваться слотом "Diffuse Illum" и снова назначить ему SSS Fast Render Shader (mi). В результате материал будет иметь 4 рассеивающих слоя. Если необходимо нечетное количество слоев, то вклады от любого слоя или слоев можно отключать, обнуляя их вес. Каскадируя SSS Fast Render Shader (mi) через слот Diffuse Illum можно построить материал с любым количеством слоев.
3. Возвращаемся к mental ray Connection и, нажав слот Light Map (группа Advanced Shaders), выбираем из появившегося списка Material/Map Browser шейдер SSS Lightmap Write (mi). Этот шаг необходим для того, чтобы генерировались карты lightmap и depthmap.
Примечание. Для того чтобы иметь возможность собирать собственный материал SSS Fast, должен быть выполнен ряд обязательных условий:
в качестве активного рендера должен быть установлен mental ray;
в Preference на закладке mental ray должно быть разрешено использование расширений: Preference > mental ray > General > Enable mental ray Extensions = on (установлена галочка в чекбоксе);
нужно открыть шейдера SSS Fast, отредактировав subsurface.mi
Пример. Соберем и настроим материал, аналогичный SSS Fast Skin Material.
1. mental ray Connection > Surface назначаем SSS Fast Render Shader (mi). Настраиваем значения параметров этого шейдера следующим образом:
Overall diffuse color = белый цвет;
Unscattered diffuse weight = 1, это необходимо, поскольку через слот Diffuse Illum будет подключен еще один SSS Fast Render Shader;
Front surface scatter color = (RGB 242, 128, 51), что соответствует цвету второго рассеивающего слоя материала Fast Skin;
Front surface scatter weight = 0,4;
Front surface scatter radius = 25 мм;
Back surface scatter color = (RGB 178, 26, 26);
Back surface scatter weight = 0,5;
Back surface scatter radius = 25 мм;
Back surface scatter depth = 25 мм
Рассеивающие слои первого шейдера воспроизводят свойства среднего и заднего рассеивающего слоев SSS Fast Skin.
Теперь идем к слоту Specular Illum и назначаем ему SSS Specular Reflection for Skin (mi). Для его параметров устанавливаем те же значения, что и у параметров зеркальных отражений SSS Fast Skin (группа 2-Layer Specularity and Reflections).
Далее, слоту Diffuse Illum назначаем еще один (второй) шейдер SSS Fast Render Shader (mi) и настраиваем его параметры таким образом, чтобы воспроизвести свойства диффузного не рассеянного освещения и рассеяния от первого слоя Fast Skin:
Diffuse Illum назначаем шейдер SSS Lambert Gamma (mi);
Overall diffuse color = белый цвет;
Unscattered diffuse weight = 0,3;
Front surface scatter color = (RGB 255, 217, 153), что соответствует цвету первого рассеивающего слоя материала Fast Skin;
Front surface scatter weight = 0,5;
Front surface scatter radius = 8 мм;
Back surface scatter weight и radius = 0, вклад от этого слоя нам не нужен;
Остальные значения оставляем по умолчанию.
Возвращаемся к mental ray Connection и слоту Light Map назначаем SSS Lightmap Write (mi) со следующими значениями параметров:
Light map group = любое имя, оно будет использоваться для передачи карт освещения между шейдерами, например, "A";
Write to file = 0, если используется автоматическое создание и передача карт освещения и запись карт в файл не производится, 1 и 2 — если нужна запись карт в файлы, тогда во всех слотах шейдеров Lightmap нужно явно указывать имя и путь файла.
Преимущество использования этого параметра в том, что можно просчитать и сохранить карту освещенности в файл один раз и затем открывать этот файл только для чтения (опция Open as read-only есть у слота lightmap шейдера SSS Fast Render), то есть карта освещенности будет считываться из файла, а не пересчитываться. Для этого перед первым расчетом устанавливаем Write to file = 1, после расчета и записи карт освещения в файл — Write to file = 0. Можно даже попробовать удалить SSS Lightmap Write после создания файлов с картами освещения — это гарантированно избавит нас от пересчета.
Scatter Bias = 0,12;
Sampler уже имеет назначенный SSS Lambert Gamma (mi), его параметры оставляем по умолчанию
Карту bump следует подключать через первый шейдер, во втором шейдере ее можно просто отключить (установить None).
Материал готов к работе. Его схема выглядит следующим образом:
Схема собранного из шейдеров SSS Fast материала, реализующего функциональность SSS Fast skin
Помимо возможности создания произвольного числа рассеивающих и зеркальных слоев, преимущества построения собственного материала состоят в том, что все настроечные параметры шейдеров доступны для редактирования. Более того , мы можем заменять шейдеры misss_fast_shader (SSS Fast Render Shader), misss_skin_specular (SSS Specular Reflection for Skin), misss_lambert_gamma (SSS Lambert Gamma) и bump shader своими собственными . Например, замена misss_lambert_gamma на шейдер Illum Phong в шейдере SSS Lightmap Write позволит экспериментировать с рассеянием зеркальных отражений. Замена шейдера этого же типа в Diffuse Illum misss_fast_shader позволяет реализовать иную схему расчета диффузного не рассеянного освещения, например, при помощи "оборачивающего" шейдера JS_wrapmaterial или Illum Phong и так далее.
Серьезным недостатком такого способа является разбросанность настроечных параметров, нужно знать и постоянно помнить, где находится довольно большое количество параметров.
В качестве альтернативы можно декларировать собственный материал, создав интерфейс для настроечных параметров, аналогично тому, как это сделано для miss_fast_simple_phen и miss_fast_skin_phen. Это позволит сгруппировать в одном месте настроечные параметры, сделав удобным их редактирование. В качестве примера файл subsurface_mod.mi содержит SSS Fast Cascade Material, который аналогичен SSS Fast Skin, но позволяет каскадировать произвольное число misss_fast_shader, то есть определять произвольное число рассеивающих и зеркальных слоев.
Все же удобнее заранее определиться с количеством рассеивающих и зеркальных слоев и декларировать материал с интерфейсом настроечных параметров, соответствующий числу слоев. Например, можно построить более сложный материал кожи с четырьмя рассеивающими слоями (дополнительный слой для вен и артерий) и тремя зеркальными слоями (третий слой для подсветок bump).
Таким образом, мы имеем полный набор мощных и гибко настраиваемых материалов и шейдеров, позволяющих эмулировать свойства подповерхностного рассеяния большинства реальных материалов. Эти материалы быстры в расчетах, предсказуемы в поведении и легко управляемы, что позволяет использовать их широко и повсеместно.
Сочетание материалов и шейдеров группы miss_physical и группы SSS Fast позволяет решать самый широкий спектр задач, связанных с расчетом подповерхностного рассеяния.
Ссылки на дополнительную литературу по теме:
1. "The Making of The Final Battle"
2. Stiven Stahlberg "Human skin shading"
3. Форум "Skin shading"
4. Форум "misss tests", посвященный вопросам использования SSS Fast Skin в Maya. Особенно интересна 22 страница форума, где обсуждается применение карт для различных свойств кожи компьютерного персонажа Hulk.
Файлы:
1. subsurface_mod.mi — отредактированный оригинальный subsurface.mi, в нем открыты все шейдеры и все их свойства, содержит исправленный материал miss_fast_simple_phen (SSS Fast Material) и нестандартный материал SSS Fast Cascade Material для каскадирования произвольного числа слоев. Для использования это файл нужно поместить в папку 3dsmax7\mentalray\shaders_standard\include\ и переименовать его в subsurface.mi, перед этим не забудьте сделать резервную копию оригинального subsurface.mi.
2. файл сцены test.max с тестовым объектом и примерами материалов SSS Fast Cascade Material, настроенных как miss_fast_simple_phen (SSS Fast Material) и miss_fast_skin_phen (SSS Fast Skin Material).