Читайте также:
|
|
Материалы 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, должен быть выполнен ряд обязательных условий:
Пример. Соберем и настроим материал, аналогичный SSS Fast Skin Material.
1. mental ray Connection > Surface назначаем SSS Fast Render Shader (mi). Настраиваем значения параметров этого шейдера следующим образом:
Рассеивающие слои первого шейдера воспроизводят свойства среднего и заднего рассеивающего слоев 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:
Остальные значения оставляем по умолчанию.
Возвращаемся к mental ray Connection и слоту Light Map назначаем SSS Lightmap Write (mi) со следующими значениями параметров:
Преимущество использования этого параметра в том, что можно просчитать и сохранить карту освещенности в файл один раз и затем открывать этот файл только для чтения (опция Open as read-only есть у слота lightmap шейдера SSS Fast Render), то есть карта освещенности будет считываться из файла, а не пересчитываться. Для этого перед первым расчетом устанавливаем Write to file = 1, после расчета и записи карт освещения в файл — Write to file = 0. Можно даже попробовать удалить SSS Lightmap Write после создания файлов с картами освещения — это гарантированно избавит нас от пересчета.
Карту 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).
Часть 5. Запекание текстур (render to texture)
Использование запекания текстур, или рендер в текстуры (render to texture, texture baking), становится все более востребованным видом рендеринга. Возможность эта не так уж и нова, повышение интереса к ней вызвано появлением в последнее время доступных и рабочих средств в популярных пакетах моделирования, а также - расширением функциональных возможностей самого метода.
При обычном способе рендеринга расчет изображения выполняется либо через камеру, либо "от лица" наблюдателя. Эта схема настолько привычна, что представить себе рендеринг в отсутствии наблюдателя довольно сложно. Получаемое через камеру статичное изображение является мгновенным снимком трехмерной сцены, выполненным из одной единственной точки наблюдения в каждый отдельный момент времени. Однако, вне зависимости от того, видим ли мы заднюю сторону объекта через камеру или нет, она все равно освещена, имеет материал, рельеф и так далее. При изменении положения камеры мы сможем увидеть то, что ранее было скрыто от наблюдения, а то, что мы только что видели, станет невидимым.
Именно это различие между "субъективностью" точки наблюдения и объективностью свойств трехмерной сцены - освещения, материалов, геометрии, существующих вне зависимости от того видим мы их или нет, и лежит в основе идеи запекания текстур. Общая суть проста - рассчитать все свойства объектов трехмерной сцены вне зависимости от их видимости через камеру один раз и затем показывать их, а не рассчитывать, по мере необходимости.
Такой подход - "один раз посчитать, чтобы много раз показывать", на первый взгляд сулит немало преимуществ. Прежде всего - экономия времени на расчетах и настройках.
На самом деле не все так просто. Только очень небольшой класс расчетов может быть выполнен корректно и полностью за один раз. В качестве позитивного примера могу назвать фотонные карты и radiosity. Большинство других расчетов в принципе не может быть выполнено однократно в полном объеме. Например, отражения и преломления света поверхностями объектов основываются на относительном положении наблюдателя, объекта и источника освещения. Исключение из этой схемы наблюдателя делает такой расчет некорректным. Поэтому, истинные отражения и преломления запечь нельзя, и для их рендера в текстуру используются разные хитрости.
Запекание текстур может быть успешно использовано:
Дата добавления: 2015-10-28; просмотров: 160 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Шейдеры группы miss_fast | | | Запекание с mental ray |