что такое diffuse текстура
Карта Diffuse (Albedo) из текстуры в Photoshop CC 2019
Растровые « Diffuse maps » (Карты рассеянного цвета) [1] используются при настройке 3d-материалов, чтобы задать собственный цвет поверхности объекта, когда этот цвет должен быть не однородным. Часто, для придания 3d-материалам большей реалистичности, карты « Diffuse » для них делают из фотографий реальных материалов (так называемых текстур). Однако прежде, чем такая текстура будет положена в слот для « Diffuse map » (Карты рассеянного цвета) [2], необходимо убедиться в отсутствии на ней «помех» в виде теней [3]. Если же таковые на текстуре все же присутствуют, то от них надо избавляться. Существует множество программ для преобразования текстур в различные текстурные карты, например, CrazyBump и PixPlant. Но в данном уроке о том, как сделать карту « Diffuse » из текстуры в Photoshop…
Карта Diffuse из текстуры в Photoshop
Чтобы из текстуры получилась карта « Diffuse », пригодная для использования при текстурировании 3d-модели, достаточно в Photoshop выполнить всего четыре простых действия:
Видео к уроку
Материалы к уроку
Исходная текстура щебня на texturelib.com : Перейти
Фрагмент полученной диффузной карты щебня (файл формата PSD, 12.12 MB): Скачать
Примечания
Похожие уроки
В компьютерной графике часто используются фотографии текстур. Но получить идеальный снимок поверхности не так просто. Одной из самых распространенных проблем, с которой приходится сталкиваться при работе с такими изображениями, является то, что поверхность на фото может быть освещена неравномерно. И в данном уроке о том, как выровнять тон текстуры в Photoshop…
Мрамор очень разнообразен. Образцы мрамора из разных месторождений отличаются по рисунку, по цвету, по структуре. В данном уроке представлен алгоритм создания в Photoshop текстуры мрамора розового цвета со светлыми прожилками и зернистыми вкраплениями. Но, экспериментируя с настройками фильтров и корректировок, выбирая другие режимы наложения для слоев, таким же образом можно делать самые разнообразные текстуры мрамора…
В уроке приводится пример создания средствами Photoshop текстуры ложковой кладки со смещением на 1/2 кирпича из красного кирпича с рифленой поверхностью на сером растворе. Но, используя разные исходные изображения, экспериментируя с настройками заливок, корректировок и эффектов, аналогичным способом в Photoshop можно делать реалистичные текстуры самых разнообразных кирпичных кладок…
Бесшовные текстуры незаменимы, когда приходится иметь дело с компьютерной графикой, в особенности трехмерной. Но подобрать подходящую текстуру для своего проекта и без того бывает непросто, а бесшовную — и подавно. Зачастую намного быстрее сделать найденную текстуру бесшовной самостоятельно. И в данном уроке собрано сразу несколько способов создания бесшовных текстур в Photoshop…
При полном или частичном копировании материалов сайта наличие прямой ссылки на источник материала обязательно
При копированиии материалов, содержащих ссылки на скачивание со сторонних ресурсов, обязательно сохранение оригинальных ссылок
Использование материалов сайта в коммерческих целях категорически запрещено
Шейдеры в 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.
Походу что-то сломалось, не могу вставить гиф, посмотреть можно тут
Как можно видеть, шейдер отрабатывает корректно, интенсивность и цвет можно менять через переменные шейдера.
Также проверим работу шейдера с освещением:
Походу что-то сломалось, не могу вставить гиф, посмотреть можно тут
Как можно видеть, всё работает корректно, освещённость объекта меняется в зависимости от изменения параметров источника освещения.
На этом пока что всё. Спасибо за внимание. Знаю, статьи выходят не часто, но постараюсь исправиться и писать больше. Читаю все ваши комментарии, рад объективной критике и замечаниям.
Learn OpenGL. Часть 2.4. — Текстурные карты
Ранее мы обсуждали возможность каждого объекта иметь уникальный материал, чтобы по-разному реагировать на свет. Это отлично подходит для того, чтобы придать каждому объекту уникальный вид относительно других объектов на сцене. Но этого все еще не дает нам большой гибкости в настройке внешнего вида объекта.
Текстурные карты
В предыдущем уроке мы определили материал для целого объекта, но в реальном мире объекты обычно состоят не из одного, а из нескольких материалов. Представьте себе машину: ее внешний корпус блестящий; окна частично отражают окружающую среду; у машины также есть матовые покрышки, а еще есть сверкающие обода (сверкающие, если вы хорошо моете свою машину). Так вот, каждый объект имеет разные свойства материала для каждой своей части.
Итак, наша система материалов из предыдущего урока не подходит для более или менее сложных объектов, по этому нам нужно расширить ее, введя диффузную и бликовую карты. Это даст нам возможность влиять на диффузный (и, косвенным образом, на фоновый, так как это почти всегда одно и то же) и бликовый компоненты объекта с большей точностью.
Диффузные карты
Все, что нам нужно — это способ установить диффузный цвет для каждого фрагмента объекта. Что может повлиять на значение цвета, основываясь на позиции фрагмента?
Припоминаете? Это — текстуры, которые мы интенсивно обсуждали в одном из предыдущих уроков. Карты освещения – всего лишь другое название того же принципа: используя изображение, нанесенное на поверхность объекта, мы можем делать выборки цвета для каждого фрагмента. В сценах с освещением это обычно называется диффузной картой (как правило ее так называют 3D художники), так как текстурное изображение представляет все диффузные цвета объекта.
Для демонстрации диффузных карт мы будем использовать изображение деревянного контейнера с железной рамкой:
Имейте в виду, что sampler2D это, так называемый, непрозрачный тип данных. Это значит, что мы не можем создать экземпляр такого типа, мы можем только определить его как uniform. Если мы попытаемся использовать этот тип не как uniform (например как параметр функции), то GLSL выведет странные ошибки. Это правило также распространяется и на любую структуру, которая содержит непрозрачный тип.
Обратите внимание, что нам снова нужны текстурные координаты во фрагментном шейдере, по этому мы объявляем дополнительную входящую переменную. Затем мы просто делаем выборку из текстуры, чтобы извлечь значение диффузного цвета фрагмента:
Также не забудьте установить фоновый цвет материала таким же, как и диффузный:
Это все, что нам нужно для использования диффузной карты. Как вы могли заметить, в этом нет ничего нового, но это дает впечатляющий рост визуального качества. Чтобы это заработало, нам нужно добавить текстурные координаты к данным вершин и передать их в качестве вершинного атрибута во фрагментный шейдер, загрузить текстуру и связать ее с соответствующим текстурным блоком.
Обновленные вершинные данные можно найти здесь. Теперь они включают в себя позиции вершин, векторы нормалей и текстурные координаты для каждой вершины куба. Давайте обновим вершинный шейдер, чтобы он мог принимать текстурные координаты, как вершинный атрибут и передавать их во фрагментный шейдер:
Удостоверьтесь, что обновили вершинные атрибуты обоих VAO (прим. переводчика: имеются ввиду VAO текстурированного куба и VAO куба-лампы), так чтобы они совпадали с новыми вершинными данными, и загрузили изображение контейнера в текстуру. Перед тем, как нарисовать контейнер нам нужно присвоить переменной material.diffuse предпочтительный текстурный блок и связать с ним текстуру контейнера:
Используя диффузную карту, мы снова получили огромный прирост детализации и теперь, с добавленным освещением, наш контейнер действительно начал блистать (в буквальном смысле). Вероятно, теперь он выглядит вот так:
Вы можете найти полный исходный код приложения здесь.
Бликовые карты
Мы снова можем воспользоваться текстурной картой, только теперь для зеркальных бликов. Это значит, что нам нужно создать черно-белую (или цветную, если хотите) текстуру, которая определит силу блеска каждой части объекта. Вот пример бликовой карты:
Так как контейнер большей частью состоит из дерева, а дерево — это материал, который не дает бликов, то вся «деревянная» часть текстуры закрашена черным. Черные части вообще не блестят. Поверхность стальной рамки контейнера имеет переменную силу зеркального блеска: сама сталь дает довольно интенсивные блики, в то время как трещины и потертости – нет.
Технически, дерево тоже имеет зеркальные отражения, хотя и с намного более низкой силой блеска (свет сильнее рассеивается), но в образовательных целях, мы сделаем вид, что дерево никак не реагирует на зеркальный свет.
Используя инструменты, такие как Photoshop или Gimp, довольно просто превратить диффузную текстуру в бликовую. Достаточно просто вырезать некоторые части, сделать изображение черно-белым и увеличить яркость/контрастность.
Сэмплинг бликовых карт
Карта зеркальных отражений — это самая обычная текстура, по этому код ее загрузки очень похож на загрузку диффузной карты. Удостоверьтесь, что вы правильно загрузили изображение и сгенерировали текстурный объект. Так как мы используем новую текстуру в том же фрагментом шейдере, нам нужно использовать другой текстурный блок для карты бликов. Давайте свяжем эту текстуру с соответствующим текстурным блоком перед визуализацией:
И, наконец, нам нужно провести выборку карты бликов, чтобы получить соответствующую интенсивность блика для каждого фрагмента объекта:
Используя карту бликов, мы можем с чрезвычайной точностью определить, какие части объекта дают зеркальные блики, и установить соответствующую их интенсивность. Таким образом, карта бликов дает нам дополнительный уровень контроля поверх диффузной карты.
Вы также можете использовать в бликовой карте цвета, которые определяют не только интенсивность блика, но и его цвет. Однако в реальности, цвет блика в значительной степени (а в большинстве случаев и полностью) зависит от источника света, поэтому использование цветных карт бликов не даст реалистичных результатов (вот почему эти изображения обычно черно-белые — нас интересует только интенсивность блика).
Если вы запустите приложение, то увидите, что материал контейнера очень похож, на деревянный контейнер с железной рамкой:
Вы можете найти полный исходный код приложения здесь.
Используя диффузные и бликовые карты, мы можем добавить огромное количество деталей в относительно простые объекты. Мы можем добавить еще больше деталей, используя другие текстурные карты, такие как карты нормалей/рельефа и/или карты отражений, но их мы прибережем для следующих уроков. Покажите ваш контейнер друзьям и семье и помните, что однажды наш контейнер может стать еще более привлекательным, чем сейчас!
3d_shka
Модели 3D, Poser, 3DsMax, Archicad, Artcam, Zbrush
ДНЕВНИК ПРОРОКА МАНЬКИНА
Введение в текстурные карты
Это руководство даёт базовой понимание назначения и особенностей некоторых типов текстурных карт.
Diffuse map (основной / диффузный цвет)
Слот в 3DS Max: Diffuse color.
Технически эта карта представляет собой диффузное отражение и цвет поверхности объекта. Простыми словами – это базовый цвет объекта. Эта карта используется в качестве основной текстуры объекта.
Пример диффузной карты.
Specular map (карта зеркальности)
Слот в 3DS Max: Specular color.
Карта передаёт интенсивность и цвет бликов на поверхности объекта. Другими словами, она определяет «глянцевость» и цвет световых отражений.
Пример бликов на объектах в реальной жизни. Эти белые пятна света на помидорах – не что иное, как блики.
Пример бликов на фасаде здания. Обратите внимание, что в зависимости от уровня серого интенсивность бликов меняется. Особенно это заметно при перемещении освещения над поверхностью различных «материалов».
Для демонстрации работы карт бликов я применил к этому цилиндру карты бликов с различными уровнями серого, от черного, до белого, и простую диффузную карту. Более светлые области дают сильные блики, более тёмные области слегка отсвечивают, а чёрная область вообще не даёт бликов.
В карте бликов вашего объекта глянцевые материалы должны быть белыми или светло-серыми, матовые материалы – чёрный или тёмно-серый. Обратите внимание, что использование цветов в карте бликов, даёт эффект цветового тонирования. Это полезно для некоторых материалов, таких как автомобильная краска, золото или бронза.
Материалы, которые должны быть окрашены в белый цвет (глянцевые):
Материалы, которые должны быть окрашены средним уровнем серого цвета (средний уровень бликов):
Материалы, которые должны быть окрашены в тёмно-серый или черный цвет (матовые):
Реалистичные карты бликов основываются на физических свойствах материалов.
Reflection map (карта отражений)
Слот в 3DS Max: Reflection.
По принципу своего действия, карты отражения похожи на карты бликов. Уровень отражения зависит от яркости карты, и аналогичным же образом, карта работает с цветами. Цветная карта отражений будет полезной в случае тонированных стёкол.
Материалы, которые должны быть окрашены белым (зеркальные отражения):
Материалы, которые должны быть окрашены в серый цвет (от высоко до умеренно отражающих):
*Если имеющиеся в вашем распоряжении текстуры окон достаточно хороши, я рекомендую использовать средние уровни серого для карты отражения – в этом случае отражения не будут полностью скрывать диффузную текстуру.
Материалы, которые следует окрашивать чёрным (не отражающие):
Реалистичные карты отражений основываются на физических свойствах материалов.
Отражения на окнах.
Self illumination map (карты самосвечения)
Слот в 3DS Max: Self-Illumination.
Эта карта позволяет задать свечение различных частей объекта, например, освещённых окон в ночное время. Карта самосвечения, смешиваясь с диффузной картой, оказывает влияние на диффузный базовый цвет. Если окна на диффузной карте будут иметь в основном синий оттенок, а карта самосвечения, наложенная на них, будет жёлтого оттенка, то получившееся свечение будет зеленоватым.
Так работает карта самосвечения.
Пример карты самосвечения.
Normal map (карта нормалей)
Слот в 3DS Max: Bump.
Карты нормалей (как и карты рельефности, bump map) используются для имитации неровностей и повышения детализации поверхности без увеличения количества полигонов.
Этот вид карт довольно сложно создать вручную. Сделать это можно в 3DS Max, но для того, чтобы получить достойные результаты, нужен некоторый опыт. Нашим выбором будет использование средств, предоставляемых NVIDIA – бесплатный плагин для Photoshop NVIDIA Texture Tools. Есть также некоторые другие программные средства, такие как Crazybump или Pixplant2, но плагин от NVIDIA бесплатен и даёт лучшие результаты.
Шаги по созданию простой и реалистичной карты нормалей
Обесцветьте изображение и маскируйте весь объект и те области, для которых не требуется эффект неровности, например, стекло или любая другая гладкая поверхность. Используйте белый или светло-серый цвет для деталей, которые должны иметь рельеф, по сравнению с окружающими областями.
Используйте фильтр NVIDIA Normal Map в Photoshop чтобы конвертировать отредактированную текстуру в карту нормалей.
Используйте 3D Preview и поиграйте значением масштаба (Scale), чтобы получить требуемый эффект. Я рекомендую деактивировать параметр «animate light». Не забудьте закрыть окно 3D Preview, иначе фильтр не применится.
Подготовка диффузной карты к конвертации в карту нормалей необходима для получения хорошего результата. Иногда карта нормалей так же нуждается в редактировании, для изменения некоторых деталей. Если не маскировать гладкие поверхности, то результатом будет некрасиво неровная карта нормалей.
Opacity Map (карта прозрачности)
Слот в 3DS Max: Opacity.
Название карты говорит само за себя: она определяет области прозрачности и непрозрачности объектов. Это чёрно-белое (или с оттенками серого) изображение, белые области которого представляют собой полностью непрозрачные зоны, а чёрные – полностью прозрачные. Эти карты весьма полезны при создании перил, решёток и тому подобных объектов.
Пример ограждения, сделанного с помощью карты прозрачности, применённой к простой плоскости.
Урок №13. Карты освещения в OpenGL
На предыдущем уроке мы обсуждали, что каждому объекту можно назначить свой собственный уникальный материал, который будет по-разному реагировать на свет. Это отличный способ придать любому объекту уникальный (в сравнении с другими объектами) внешний вид, но все же он не дает нам необходимой гибкости при визуальном отображении объекта.
Также на прошлом уроке мы определили единый материал для всего объекта. Однако в реальном мире объекты обычно состоят не из одного, а из нескольких материалов. Например, представим себе автомобиль: его внешний вид состоит из блестящей поверхности, у машины есть окна, которые частично отражают окружающую среду, его шины почти не блестят, поэтому у них нет зеркальных отблесков, и у него, в том числе, есть диски, которые блестят очень сильно (если вы, конечно, хорошо вымыли свою машину). Автомобиль также имеет рассеянные и фоновые цвета, которые для всего объекта не являются одинаковыми; автомобиль отображает множество различных рассеянных/фоновых цветов. В общем, такой объект обладает различными свойствами материалов для каждой из его отдельно взятых частей.
Таким образом, мы приходим к пониманию того, что использование системы материалов из предыдущего урока нам не подходит, т.к. данная система годится только для простейших моделей. А поэтому необходимо расширить её, введя карты рассеянного и отраженного цветов. Они позволят нам с гораздо большей точностью воздействовать на рассеянный (и, косвенно, на фоновый компонент, поскольку они все равно должны быть одинаковыми) и отраженный компоненты объекта.
Диффузные карты
Наша задача заключается в том, чтобы найти способ, который позволит задать рассеянный цвет для каждого отдельного фрагмента объекта. Быть может, мы уже сталкивались с какой-то системой, в которой можно получить значение цвета на основе положения фрагмента на объекте?
Вероятно, данная подсказка уже навела вас на определенные мысли. Ведь всё это очень напоминает текстуры и это действительно именно так: текстура — вот тот способ, который нам нужен. Ведь если присмотреться, то это просто другое название для того же самого основополагающего принципа: использовать изображение, наложенное на объект, с помощью которого мы можем задавать разные значения цвета для каждого фрагмента. В сценах с освещением такая текстура обычно носит название диффузной карты (или «карта рассеянного света», от англ. «diffuse map»), поскольку текстурное изображение описывает все цвета рассеянной составляющей цвета объекта.
Для демонстрации диффузной карты нам потребуется следующее изображение деревянного контейнера со стальной окантовкой по его периметру:
Примечание: Имейте в виду, что sampler2D — это так называемый непрозрачный тип данных (англ. «opaque type»), экземпляры которого мы создать не можем, а можем только определить их как uniform-переменные. Если бы экземпляр структуры определялся не так, как uniform-переменная (например, в качестве параметра функции), то GLSL выбрасывал бы странные ошибки; то же самое относится и к любой другой структуре, содержащей такие непрозрачные типы данных.
Также мы уберем вектор фонового цвета материала, потому что теперь, когда мы управляем фоновым освещением, данный цвет в любом случае совпадает с диффузным цветом. Так что нет никакой необходимости хранить его отдельно:
Обратите внимание, что во фрагментном шейдере нам снова понадобятся текстурные координаты, поэтому мы объявили дополнительную входную переменную. Затем мы просто используем сэмплер, чтобы получить из текстуры значение диффузного цвета фрагмента:
Кроме того, не забудьте установить фоновый цвет материала равным значению его диффузной составляющей:
И это всё, что нужно, чтобы использовать диффузную карту. Как вы можете видеть, ничего принципиально нового здесь нет, но, благодаря этому, действительно обеспечивается резкое повышение визуального качества всей сцены. Чтобы теперь заставить всё это работать, нам нужно к вершинным данным добавить текстурные координаты, перенести их в качестве атрибутов вершин во фрагментный шейдер, загрузить текстуру и привязать её к соответствующему текстурному юниту.
Обновленные вершинные данные выглядят следующим образом:
Теперь вершинные данные каждой вершины куба включают в себя координаты вершин, нормальные векторы и координаты текстуры. Давайте обновим вершинный шейдер, чтобы иметь возможность принять координаты текстуры в качестве вершинного атрибута и затем переслать их во фрагментный шейдер:
Обязательно обновите указатели вершинных атрибутов обоих VAO, чтобы они соответствовали новым вершинным данным, и загрузите изображение текстуры ящика. Перед его рендерингом мы присваиваем материалу правильный текстурный юнит для uniform-сэмплера material.diffuse и привязываем текстуру ящика к данному текстурному юниту:
Теперь, используя диффузную карту, мы получили большой прирост в детализации объекта — на этот раз ящик действительно начинает блестеть (в буквальном смысле этого слова). Результат:
Карты отраженного цвета
Для задания зеркальных бликов мы снова можем прибегнуть к использованию текстурной карты. Для этого необходимо создать черно-белую (или цветную, если вам так хочется) текстуру, которая определяет интенсивность отраженной составляющей цвета для каждой части объекта. Примером подобной карты отраженного цвета может являться следующее изображение:
Поскольку контейнер в основном состоит из дерева, а дерево как материал не должно иметь зеркальных бликов, то вся деревянная секция диффузной текстуры была преобразована в черную область: черные области не имеют никакого зеркального блика. Стальная граница контейнера имеет интенсивность отражения, которая варьируется, причем сама сталь относительно восприимчива к зеркальным бликам, а трещины — нет.
Примечание: Технически древесина также имеет зеркальные блики, хотя и с гораздо более низким значением блеска (большая часть света рассеивается) и меньшим воздействием, но в иллюстративных целях мы опустим этот момент, предполагая, что древесина никак не реагирует на отраженную составляющую света.
С помощью таких инструментов, как Photoshop или GIMP, относительно легко можно преобразовать диффузную текстуру в текстуру карты отраженной составляющей цвета, вырезав некоторые части, преобразовав их в черно-белые и увеличив яркость/контрастность.
Сэмплирование карт отраженного цвета
Карта отраженного цвета ничем не отличается от любой другой текстуры, поэтому код её использования похож на код использования диффузной карты. Сначала убедимся, что мы правильно загрузили изображение и создали текстурный объект. Поскольку мы используем другой текстурный сэмплер в том же фрагментном шейдере, то мы должны использовать другой текстурный юнит для карты отраженной составляющей, поэтому давайте свяжем его с соответствующим текстурным юнитом перед рендерингом: