диффузный цвет материала что это
Дмитрий Амоти
Блог обо мне для меня
Работа с материалами V-Ray, часть 1: настройка цвета Diffuse
Представляю вам первую часть подробного руководства по работе с V-Ray Material в 3ds Max. В нём будет изложена теоретическая основа самых важных характеристик материала, а затем на конкретных примерах показаны настройки и рекомендации по их использованию.
VRayMtl— это самый главный рабочий инструмент для создания материалов (можете называть их и шейдерами) в V-Ray. Для получения реалистичных результатов с довольно быстрым временем рендеринга 80% времени достаточно будет только его одного. Он оптимизирован для работы с остальными аспектами V-Ray (источниками света, GI, сэмплингом, и т.д.), а потому вместо стандартных материалов 3ds Max всегда следует использовать именно VRayMtl.
Главные составляющие VRayMtl
В целом, основными компонентами материалов в компьютерной графике являются:
Такие названия используются в V-Ray. В других рендерерах эти составляющие могут называться как-то иначе, но их назначение в значительной степени останется всё тем же.
Diffuse задаёт основной цвет материала; Reflection контролирует степень отражения света; Refraction управляет преломлением света при прохождении через прозрачный материал; а Bump используется для имитации искажений неровности на поверхности объекта.
За исключением Refraction, остальные три параметра должны присутствовать во всех материалах.
В этот раз речь пойдёт о первом из этих компонентов.
Diffuse
В сущности, чтобы понять, что такое Diffuse, можно просто принять его за естественный цвет объекта. Например, по-вашему, какого цвета помидор? Красного, не так ли? Так что диффузный цвет помидора — красный.
Реализм и неоднородность
Но постойте-ка! Большинство объектов окрашены сразу в несколько цветов. Даже у помидора есть светло-зелёный пятачок в месте его соединения с плодоножкой. А сам красный цвет поверхности помидора не одинаков и разнится во всех его местах, так что снизу он может быть розоватым, а сверху — слегка зеленоватым. В большинстве случаев для передачи этих цветов следует использовать текстурную или процедурную карту. Даже какой-нибудь простой синий шар из пластика уже спустя несколько дней, максимум недель, будет не безупречно синим после того, как покинет магазин и полежит в обычных условиях. В реальном мире всё пачкается или выцветает, выгорает.
Очевидным исключением из этого являются случаи, когда задача состоит в создании материалов, предназначенных для использования в студийных рендерах красиво оформленных товаров, где все они должны выглядеть такими, словно их только что достали из упаковочной коробки — чистыми, сияющими, идеальными. В таком случае в качестве Diffuse в VRayMtl можно использовать ровный сплошной цвет. Смотрите и решайте сами, каким должен быть материал под ваши нужды: лощённым и приукрашенным для студийной визуализации или же повидавшим виды для сцены, в которой нужна правдоподобность.
Настройка диффузного цвета для гаммы 2,2
ОК, так как же, собственно, настраивается этот Diffuse?
Можно либо использовать цвет, кликнув по образцу цвета (обведен зелёным прямоугольником на скриншоте), либо задать текстурную/процедурную карту, кликнув по маленькому квадратику рядом с цветовым образцом (выделен оранжевым). Также можно проскроллить вниз до свитка Maps (Карты) и назначить текстуру там. Подобным образом в V-Ray и не только работает большинство карт.
Если точность цветов не важна и вы просто прикидываете всё на глазок, то можно по-быстрому выбрать нужный цвет на палитре цветов 3ds Max. Проблемы начинаются, когда нужно, чтобы он совпадал с цветом из других программ, например, таких как Photoshop. При использовании гаммы 2.2 в 3ds Max даже, если значения по шкале RGB в обеих программах будут одинаковыми, то визуально результат всё равно будет различаться.
Данная проблема возникает из-за коррекции гаммы — тонов на изображении. В сущности, кривая гаммы делает RGB-значения в 3ds Max светлее.
Чтобы это исправить, в слот Diffuse надо кинуть карту VRayColor и всё делать через неё.
Задайте в цветовом образце значения RGB, которые вам показывает Фотошоп, а затем измените тип Gamma correction (Коррекция гаммы) на Specify (Указать) и в Gamma value (Значение гаммы) укажите её показатель равным 2.2.
Теперь цвет материала абсолютно совпадает с цветом, взятым из Фотошопа.
Метод может показаться немного мудрёным, как для задачи просто выбрать в 3ds Max требуемый цвет, но в настоящее время автоматического способа для этого не предусмотрено.
75-90% (в районе значений 190-230 по RGB). Наибелейший снег имеет альбедо всего лишь 90% (коэффициент отражательной способности поверхности). То же самое касается и чёрных объектов: только космические чёрные дыры поглощают в себя весь попавший на них свет, не отпуская его обратно, все остальные объекты хоть малую толику света да отражают. Даже у чернейшего угля величина альбедо составляет
4%. Использование цветов с завышенной белизной не только поставит крест на реалистичности визуализируемого изображения, но и повлечёт за собой увеличение времени рендеринга, поскольку свету придётся отскакивать от поверхности большее количество раз.
Для текстур из Фотошопа и цветов в VRayColor с применённой гамма-коррекцией диапазон значений в каналах RGB должен лежать в диапазоне от 10 до 230 единиц. При использовании обычной палитры цветов в гамме 1,0 диапазон трансформируется примерно в
1-205.
Если на изображении текстуры имеются более яркие или тёмные участки, то это легко исправляется при помощи инструмента Levels (Уровни) в Photoshop: просто переместите чёрный маркер яркости в виде треугольника на 10, а белый — на 230, как в примере, показанном ниже.
Применение растровых изображений Bitmap и понятие фильтрации
Попробуем применить откорректированную текстуру как карту Bitmap (Растровое изображение) в слоте Diffuse.
Итак, наблюдаем очередную проблему: обратите внимание на блюр — размытые области текстуры на модели.
Такое размытие вызвано фильтрацией текстур. Она применяется для устранения артефактов муара на мелких контрастных узорах путём размывания всей текстуры.
Понятно, что это совсем не то, что нам надо. Мы хотим красивые, чёткие рендеры. Решить эту проблему можно парой способов.
Можно уменьшить значение настройки Blur (Размытие) в свитке Bitmap Coordinates (Координаты растровой карты). Как правило, наиболее пригодны к использованию значения в районе 0.01-0.6.
Или, как вариант, можно вообще отключить фильтрацию в свитке Bitmap Parameters (Параметры растровой карты). Способ позволяет отображать текстуры максимально чётко, но он не столь универсален, как первый. Всё же в большинстве случаев лучше понижать значение Blur, так, чтобы оставалась возможность хотя бы немного контролировать мягкость текстуры.
Крайне важно не забывать уменьшать размытость или вовсе отключать фильтрацию для всех используемых в сцене текстур. Особенно это касается текстур в каналах Diffuse и Bump. Если этого не сделать, тогда отдельные части рендера будут выглядеть размытыми, не говоря уже о потере в мелких деталях на текстурах. Имейте в виду, что иной раз на выходе может получиться чересчур резкий эффект. В таком случае начинайте постепенно понижать значение Blur, пока текстура на рендере не будет выглядеть нормально.
Diffuse Roughness
У Diffuse есть ещё один параметр — Roughness (Шероховатость). Он управляет тем, насколько “плоской” будет смотреться игра светотени на материале объекта.
Существует не так уж и много материалов, где этот параметр может пригодиться: в качестве типичных примеров можно привести мел и пыль. Чем выше значение, тем более “плоским” будет материал. Прикидывайте сами на глаз, насколько материалам необходим этот Roughness.
Цвет Diffuse vs. Цвет Refraction/Reflection
Подводя итоги по теме Diffuse, нельзя обойти вниманием ещё один немаловажный момент. Иногда случается, что нельзя дать однозначный ответ, какого цвета перед нами материал. Такое происходит, когда материалы определяются не по их диффузному цвету, а по отражениям и преломлениям (рефракциям) на них.
Одними из наиболее распространённых примеров являются металлы и стекло. Для создания материалов с чрезвычайно высокими показателями отражаемости и преломления используйте диффузный цвет, приближенный к чёрному (1;1;1). Если материал должен выглядеть, будто он поизносился с течением времени, то можно чуточку прибавить светлоты, но старайтесь не выходить за пределы тёмно-серой области на шкале. Это всего лишь общие рекомендации — в ряде случаев для приведения в соответствие с фотореференсом может понадобиться придать металлу или стеклу лёгкий цветовой оттенок. Но всё же начинать лучше с почти чёрного, и делать светлее только мере надобности.
В качестве примера взглянем на скриншот внизу — на нём изображён материал золота. Слева показано, как НЕ НАДО делать: жёлтый цвет в Diffuse и в Reflection не добавляет золоту реализма. А вот справа в физическом смысле всё верно: в Diffuse установлен практически чёрный цвет, и жёлтый — в Reflection.
Шейдеры в Unity — это не сложно. Часть 2 — диффузный шейдинг
Будем разбираться в шейдерах
Всем привет! Благодарен всем за замечания и комментарии к предыдущей статье. Благодаря всем нам мы наполняем интернет доступными знаниями и это действительно круто.
Сегодня продолжаем разбираться с шейдерами, а именно с работой с освещением. Рассмотрим тип освещения Ламберта, познакомимся с диффузным шейдингом, и, как обычно, напишем и разберём AD шейдер (Ambient Diffuse).
Теория
Итак, начнём наше знакомство с типом освещения Ламберта (Lambertian reflectance).
Поглощение и отражение света
Перенося это всё на Unity, данный физический процесс можно разбить на следующие составляющие:
Источник света излучает свет
Свет падает на объект, отражаясь и рассеиваясь.
Отражённый свет попадает в камеру и мы получаем картинку.
В Unity источник света описывается точкой в пространстве, а мощность (или количественная величина света) описывается параметром освещённости (Intensity). Поскольку в модели освещения Ламберта угол обзора не имеет значения, мы будем видеть один и тот же цвет со всех сторон.
Возвращяясь к реальности, рассмотрим пример освещения участка с криволинейной поверхностью. Когда луч света падает на поверхность гладкого объекта, свет отражается. Так как лучи света парралельны, то в случае с гладким объектом отражённые лучи будут также параллельны. Это регулярное отражение называется однонаправленным отражением или зеркальным отражением света. Но гладкость объектов относительна, и, как правило, представляет собой шероховатую и неровную поверхность. В таком случае падающие лучи являются параллельными, а отраженные лучи будут рассеиваться во всех направлениях. Это явление является диффузным отражением света.
Отражение света на криволинейной поверхности
Как можно заметить, в участках с солнечными лучами, падающими под прямым углом, интенсивность света будет выше, в то время как на участках, где свет падает не прямолинейно, освещённость будет ниже. Тот же сценарий должен повториться и для диффузного шейдера.
Характеристики диффузного освещения:
Интенсивность освещённости пикселя не зависит от угла обзора.
Интенсивность освещённости зависит от угла падения света на поверхность.
Итак, нам нужно понять, что нужно для вычисления цвета каждого пикселя в каждой точке. В модели Ламберта поверхность объекта описывается как поверхность с идеальным отражением( возникает только диффузное отражение). Рассмотрим формулу для расчёта окружающего освещения:
Формула для расчёта направленного света:
Формула вычисления направленного света несколько отличается от вычисления окружающего света. При вычислении отражения окружающего света не имеет значение его направление, так как окружающий свет не имеет направления (точнее направлен на все стороны). Поэтому окружающий свет одинаков для каждой вершины. В случае вычисления направленного света его направление имеет значение. Рассеивание направленого света зависит от расстояния до нормали. Чем ближе к нормали, тем сильнее рассеивание. Интенсивность диффузного отражения направленного света соответствует закону косинуса Ламберта. Таким образом имеем формулу:
У меня нет цели нагружать статью огромным количеством теории. На мой взгляд, все базовые моменты были рассмотрены, поэтому предлагаю закончить с теорией и перейти к практике.
Практика
Итак, немного разобравшись в том, как работает свет в Unity, и в том, как нам его применять в шейдере, перейдём к написанию шейдера. Напомню, мы будем писать шейдер AD (Ambient diffuse)
Полный код шейдера
Далее при помощи ключевого слова CGPROGRAM мы объявляем раздел шейдера на языке GLSL. Мы будем использовать такие же наименования, как и в предыдущей главе, а это значит, что #pragma vertex vert объявляет в качестве вершинного шейдера функцию с именем vert, а #pragma fragment frag в качестве фрагментного шейдера функцию с именем frag. Строчкой #include «UnityCG.cginc» мы подключаем библиотеку со вспомогательными и наиболее полезными функциями. Кто хочут узнать больше про эту библиотеку, можно прочесть про неё вот тут.
Движемся по коду дальше и определяем скруктуру данных для фрагментного шейдера:
Более подробно расписано в документации. Далее следует объявить блок переменных, которые будут использоваться в шейдере. В нашем случае это:
Для вычисления нам необходимо будет вычислить следующие данные:
единичный вектор направление освещения;
нормаль в мировых координатах;
позицию в мировых координатах;
Получаем соответствующие вычисления:
Итак, все необходимые для вычисления данные получены, приступаем к рассчёту освещения. В первую очередь рассчитаем окружающее освещение:
Здесь для рассчёта окружающего света мы перемножаем интенсивность освещения и цвет. Далее рассчитываем диффузное освещение:
Здесь мы рассчитываем диффузное освещение по формулам которые были описаны выше в теории. Далее нам осталось сложить окрущающий и диффузный цвет:
Есть. Рассчёт освещения окончен. Для окончательного формирования выходной структуры данных нам осталось лишь передать uv координаты.
Есть. Шейдер написан. Осталось проверить его в Unity.
Походу что-то сломалось, не могу вставить гиф, посмотреть можно тут
Как можно видеть, шейдер отрабатывает корректно, интенсивность и цвет можно менять через переменные шейдера.
Также проверим работу шейдера с освещением:
Походу что-то сломалось, не могу вставить гиф, посмотреть можно тут
Как можно видеть, всё работает корректно, освещённость объекта меняется в зависимости от изменения параметров источника освещения.
На этом пока что всё. Спасибо за внимание. Знаю, статьи выходят не часто, но постараюсь исправиться и писать больше. Читаю все ваши комментарии, рад объективной критике и замечаниям.
Диффузный цвет материала что это
Опубликовано 08.09.2017 в 12:36. Автор Станислав Гадельшин
Если видео ниже не отображается, отключите блокировку рекламы на этом сайте и обновите страницу. Все уроки тут встраиваются с Youtube и почему-то блокировщики считают их рекламой.
Взаимосвязь diffuse color и level в Corona Renderer.
Это один из серии уроков, посвященный настройке материалов. Если вы только начинаете изучать 3ds Max, то для избежания путаницы просматривайте уроки именно в том порядке, в котором они идут ниже: — Настройка материалов в 3ds Max (введение); — Diffuse color (диффузный цвет); — Как работают свойства материалов в 3ds Max; — Reflection (отражения); — Refraction (преломления);
Diffuse color (диффузный цвет) — это просто цвет материала. Немного необычное название, особенно после обычных графических редакторов, в которых мы обычно оперируем CMYK или RGB палитрами.
Если перевести на человеческий язык, то слово «диффузный» означает «рассеянный». А рассеянный этот цвет потому, что в случае, когда речь идет о 3d, мы видим цвет, подсвеченный какими-либо источниками света. Без подсветки мы просто ничего видеть не будем. В 2d-графических редакторах свет не учитывается. Вот и получается, что в 3ds Max изначальный цвет рассеивается (становится диффузным).
Но есть несколько крайне важных нюансов, которые просто необходимо знать при настройке этого самого диффузного цвета.
Один из них — это параметр level. Когда я только перешел с VRay на Corona Renderer, это было первое, что вогнало меня в ступор. Что это такое? Зачем нужно? Как с этим жить? Давайте разберемся!
Параметр level (уровень) — это имитация Альбедо (характеристика диффузной отражательной способности поверхности). Определение я добросовестно скопировал из Википедии.
Если говорить просто, то level — это параметр, который отвечает за то, как предмет будет отсвечивать свой цвет на все вокруг. Догадываюсь, что и это не особо понятно, так что давайте рассмотрим на примере, а потом вернемся к матчасти.
Допустим, вы делаете визуализацию интерьера небольшой комнаты. Подняли геометрию, настроили освещение (у меня в примере только HDRI), сделали превью и получилось что-то вроде этого:
Все классно. Можно переходить к настройке материалов. Я обычно начинаю с материалов стен и пола. Стены я трогать не буду (для наглядности), а пол я захотел сделать насыщенного голубого цвета:
Отправил на просчет и…
…И вся наша комната получилась равномерно голубой. При этом цвета потолка, стен и всего остального я не трогал. И тут у многих начинается паника: «как же быть, ведь мне нужен именно такой пол, но чтобы остальные цвета были нормальными?».
Самое время вернуться к свойству параметра level (альбедо). Если верить Википедии, то максимальная отражающая способность (значение альбедо 90% или 0,9) у свежевыпавшего снега, а самая низкая у древесного угля — 0,04.
Это означает, что в 3ds Max значение level для снега надо выставить 0,9, а для угля 0,04 соответственно. Но в комнате на полу у нас же не снег и не уголь, а, допустим, матовое прорезиненное покрытие (отражения в свитке Reflection я полностью отключил, чтобы не смущать читателей лишними настройками).
Точного значения альбедо для него я не нашел, вычислять не было желания, поэтому спустя 4 пререндера методом подбора остановился на значении level равном 0,1. При таком значении все вокруг не становится слишком синим. Но голубоватые отсветы в интерьере от пола все же остаются, иначе тоже было бы совсем неестественно:
Другая беда — цвет пола на рендере теперь не соответствует тому, что мы задали в diffise color. Да и помещение стало сильно темнее (до этого светлый пол отражал больше света). Жесть, правда? Это еще один из многочисленных пунктиков, почему я не фанатею во всем от PBR-подхода при настройке материалов.
В итоге мы имеем 2 материала: один с нужным диффузным цветом, но завышенным level’ом. Второй — с нормальным уровнем, но искаженным цветом. Задача в том, чтобы эти два материала поженить.
Для этого есть специальный материал CoronaRaySwitchMtl.
Если перевести на русский, то это материал, «переключающий лучи». Если перевести на понятный русский, то этот материал может изменять лучи света, которые поглощаются и отражаются материалом.
А конкретно в данной ситуации для получения нужного результата надо сделать следующее: в слот Directly visible (то, что видим непосредственно) поставить материал с нужным цветом, а в слот Global illumination (глобальное освещение) поставить материал с нужным level’ом.
А если хотите, чтобы совсем не было синевы от пола в помещении, то можно в этот слот поставить просто светло серый материал (RGB 128, 128, 128. Level — 0,8). Именно так я и сделал на примере ниже.
В итоге наш CoronaRaySwitchMtl будет выглядеть так:
А рендер, соответственно, так (серый материал в Global Illumination):
Или так (синий материал с нужным level’ом в Global Illumination):
Хозяйке на заметку: level — это просто множитель. Так материал с абсолютно белым цветом (RGB 255, 255, 255) со значением level 0,5 выглядит так же, как и серый материал (RGB 128, 128, 128) со значением level 1.
Если с этим вопросом разобрались, то можно переходить к следующим урокам: — Reflection (отражения); — Refraction (преломления);
А если совсем ничего не понимаете или чувствуете существенные проблемы, тогда рекомендую сначала посмотреть бесплатный курс по 3ds Max «С нуля до профи.Light». и все сразу встанет на свои места!
V-RAY. Создание материалов.
Цель работы: Изучение основных приемов работы c визуализатором VRay.
Порядок выполнения
Данный урок заключается в последовательной реализации нижеследующего интерактивного диалога с системой 3d studio max.
ТЕОРЕТИЧЕСКАЯ ЧАСТЬ
Специальный материал VrayMtl поставляемый в составе V-Ray обеспечивает физически корректное освещение (распределение энергии) в сцене, более быстрый рендеринг, более удобные параметры reflection и refraction. В VrayMtl вы можете использовать различные текстуры, изменять параметры reflection и refraction, добавлять карты для bump и displacement, включать direct GI вычисление, и выбирать BRDF параметры.
Используйте VrayMtl где только возможно в сцене. Этот матерал специально оптимизирован для V-Ray и обычно GI и освещение расчитывается быстрее для VrayMtl чем для стандартных 3dsmax материалов.
Далее приводиться описание данного материала на рисунках 1, 2.
Рисунок 1. Свиток Basic Parameters.
1. Название материала
2. Специальный материал VrayMtl, поставляемый в составе V-Ray, обеспечивает физически корректное освещение (распределение энергии) в сцене.
3. Основные параметры
9. Данные кнопки используются для установки текстур или процедурных карт для выбранного свойства цвета.
Рисунок 2. Свитки BRDF, Options и Maps.
1. Настройки BRDF. The BRDF определяет тип блика материала. Имеет эсрсрект только если reflection color отличается от черного reflection glossiness меньше 1.0.
4. Свиток Option (Опции)
13. Свиток Maps Задает различные типы текстур используемые материалом.
15. Установка текстуры или карты