Как сделать карту specular
Подробное создание бесшовных PBR текстур: Albedo, Normal Map, Specular
В данном уроке будут затронуты важные темы, касающиеся текстурных карт: способы создания бесшовной текстуры, коррекция цвета, создание Albedo, Normal Map, Specular и других карт. Описание и скриншоты будут приведены только для Photoshop, но по аналогии можно создать текстуры в Gimp и других редакторах. Урок в большей степени рассчитан на новичков, но некоторые методы могут показаться интересными и профессионалам этого дела.
Этап 1. Поиск текстуры.
Для примера мы возьмём нетайловую текстуру с сайта Wildtextures.com. На данном сайте можно найти бесплатные текстуры высокого разрешения, которые используются в рекламах на ТВ и в больших проектах. Нам же нужна любая текстура большого размера. (Для быстроты загрузки страницы сайта изображения были сильно оптимизированы, будет видна потеря качества)
Текстуры на WildTextures с постобработкой и уже подготовлены для использования. Вариант картинки ниже приближен к тому, что может быть найдено в интернете или снято на камеру. Видно, что правая часть текстуры светлее, чем левая. Чтобы это исправить, придерживайтесь следующего.
1. Откройте текстуру в Photoshop. Для удобства мы поменяем размеры текстуры с 6000х4000 до 3000х2000.
2. Во вкладке Слои дважды нажмите на фон. Нажмите ОК в появившемся окне. После этого, выделив данный слой, нажмите Ctrl+J для создания дубликата слоя.
3. Выделив нижний слой, перейдите в Фильтр > Размытие > Среднее. (Русифицированный Фотошоп, перевести на английский не составит никаких проблем).
4. Перейдя на верхний слой, выберите режим наложения: Линейный свет. Непрозрачность выставите на 50%. После этого перейдите в Фильтр > Другое > Цветовой контраст. Выставите значение радиуса: 160 пикселей. Все значения нужно подбирать под каждую текстуру.
5. Также перейдите в Изображение > Коррекция > Цветовой фон/Насыщенность. Добейтесь идеального результата.
Сравните две получившиеся текстуры.
Этап 2. Создание бесшовной текстуры.
1. Открываем текстуру в Photoshop. В нашем случае применим инструмент Кадрирование перспективы. Также сразу стоит почистить текстуру от ненужных элементов с помощью Штампа, как показано на картинке.
2. С помощью рамки выделите участок текстуры. По краям оставьте «пробел» между камнями.
3. Зайдите в Фильтр > Другое > Сдвиг. Сдвиньте текстуру на 1/2 по вертикали и горизонтали (ровно половина пикселей по ширине и высоте изображения)
4. Чтобы устранить появившиеся швы, используйте 2 инструмента: Штамп и Заполнить с учетом содержимого. Последнее не всегда помогает, всё зависит от самой текстуры. Инструмент штамп копирует выделенную область (Зажмите Alt и нажмите на нужный участок).
5. Посмотрите полученный результат.
Этап 3. Создание текстуры Albedo в 4 шага.
1. Откройте бесшовную текстуру, полученную с предыдущего этапа. Дважды нажмите на слой фона, создайте Новый слой. Нажмите Ctrl+J для создания дубликата.
2. Выбрав верхний слой, используйте сочетание клавиш Ctrl+Shift+U для обесцвечивания изображения. Нажмите Ctrl+I для инвертирования цвета. Должно получиться следующее:
3. В параметрах наложения укажите Мягкий свет. Поиграйтесь с бегунком непрозрачности, если на выходе получилось слишком серое изображение.
4. Сравните два изображения. (На итоговом изображении осталось 2-3 темных участка, чего у вас получиться не должно)
Этап 4. Простой способ создания текстуры Specular.
1. Перейдите в Изображение > Коррекция > Цветовой тон/Насыщенность (Сtrl+U), выставите значение Насыщенности = -100.
2. Нажмите сочетание клавиш Ctrl+I для инвертирования цвета.
3. Перейдите в Изображение > Коррекция > Уровни. Настройте значения таким образом, чтобы темные области стали четкими и был виден явный переход между черными и белыми точками.
4. Настройте резкость текстуры, перейдя в Фильтр > Усиление Резкости > Умная резкость. Подберите нужные значения для необходимого результата.
Этап 5. Создание Normal Map.
На данный момент существует огромное количество софта, с помощью которого можно создать карту нормалей. Вот только малая часть: Quixel Suite, PixPlant, CrazyBump, AwesomeBump... Также можно скачать плагин Normal Map Filter для фотошопа отсюда.
После установки в папку с программой он будет доступен в Фильтр > Nvidia Tools > Normal Map Filter. Параметр Scale задаёт масштаб по высоте. Параметр Filter Type отвечает за детализированность.
Если вы знаете другие способы создания текстурных карт, то оставьте комментарий ниже. Или напишите в группу ВКонтакте.
Редакция Devgam
Благодарим наших читателей и подписчиков за проявленный интерес. Поделитесь постом в социальных сетях.
Создание текстурных карт из одного изображения
В большинстве случаев для создания реалистичных поверхностей и рендеров Вам требуется большое количество различных текстур: диффузная, зеркальная, шероховатости, смещения и т.д. В случае, если у Вас нет доступа к специальным программам генерирующим подобные текстуры, такие как: CrazyBump, Knald, Bitmap2Material, то может возникнуть проблема.
Из данного урока Вы узнаете, как с помощью всего одной текстуры создать большинство выше перечисленных используя лишь ноды в Cycles. Техники показанные в данном уроке, также применимы в других редакторах.
В результате прохождения данного урока у Вас должно появится базовое представление о том, как манипулировать изображением для получения необходимого результата.
1. Настройка основного материала
Чтобы не выполнять развертку сферы и не настраивать освещение, скачайте стартовую сцену, в которой все уже будет выполнено, а также настроен базовый материал (смесь diffuse и glossy). Также скачайте текстуру дерева и загрузите ее в нод Image Texture:
2. Создание диффузного градиента
Данный шаг не является обязательным, но он добавит немного реализма материалу.
Для создания градиента добавьте нод RGB Curves (Add > Color > RGB Curves) и смешайте его с текстурой при помощи нода Mix (Add > Color > MixRGB) и подключите в качестве фактора смешивания нод Layer Weight (Add > Input > Layer Weight).
3. Создание карты отражения
Карта отражения (Specular Map) определяет, на каких участках объекта будет преобладать диффузный шейдер, а на каких глянцевый основываясь на оттенках серого.
Преобразовать цветное изображение в черно-белое очень легко подключив цветную текстуру к ноду RGB to BW (Add > Converter > RGB to BW) и контролировать влияние с помощью нода ColorRamp (Add > Converter > ColorRamp).
4. Добавление затенения основанного на физике
В реальности не металлические/диэлектрические объекты и поверхности создают больше отражений на углах, что называется отражением Френеля.
Используя информацию нода Layer Weight добавленного на втором шаге мы вычтем Subtract (Add > Converter > Math) значения карты отражений созданной на третьем шаге.
Мы будем использовать нод Subtract в качестве фактора смешивания шейдеров и тем самым создадим два эффекта: отражения Френеля и карта отражений.
5. Создание карты шероховатости
Данная карта указывает на то, какие части объекта имеют шероховатую поверхность. Создайте еще один нод ColorRamp и используя тот же нод RGB to BW добейтесь результата как на изображении:
После подключите его к входу Roughness нода Glossy:
6. Создание карты нормалей
Данная карта создает небольшие неровности на поверхности объекта.
Добавьте нод Bump (Add > Vector > Bump), подключите к нему все тот же нод RGB to BW и подключите выход Normal к одноименным входам обеих шейдеров:
7. Создание карты смещения
Это практически тоже самое, что и карта нормалей, но с более сильным эффектом для достижения еще большего реализма.
Добавьте нод ColorRamp и отрегулируйте текстуру так, чтобы черный цвет оставался в основном между досок:
Добавьте нод Math (тип Multiply), подключите к нему ColorRamp и соедините с входом Displacement. Значением нода Multiply отрегулируйте силу воздействия:
7. Создание карты впадин
В сочетании с картой смешения, данный тип карты создаст эффекты на подобии грязи и пыли образующихся в щелях.
Добавьте шейдер Diffuse BSDF и смешайте его с существующими шейдерами. Установите для него темно-серый цвет или что-то подобное:
Как и на предыдущих шагах, создайте нод ColorRamp и определите в каких местах на Вашем объекте будут находится впадины:
В завершении, подключите его в качестве фактора смешивания второго нод Mix Shader:
Заключение
Все показанное в данной статье – это лишь вершина айсберга того, что можно делать с помощью нодов. Комбинируя еще больше различных эффектов Вы можете добиться потрясающих результатов.
Я настоятельно рекомендую Вам не повторять всегда эту связку, а находить новые, более эффективные и простые.
Делитесь Вашими материалами здесь в комментариях!
Learn OpenGL. Часть 2.4. — Текстурные карты
Ранее мы обсуждали возможность каждого объекта иметь уникальный материал, чтобы по-разному реагировать на свет. Это отлично подходит для того, чтобы придать каждому объекту уникальный вид относительно других объектов на сцене. Но этого все еще не дает нам большой гибкости в настройке внешнего вида объекта.
Текстурные карты
В предыдущем уроке мы определили материал для целого объекта, но в реальном мире объекты обычно состоят не из одного, а из нескольких материалов. Представьте себе машину: ее внешний корпус блестящий; окна частично отражают окружающую среду; у машины также есть матовые покрышки, а еще есть сверкающие обода (сверкающие, если вы хорошо моете свою машину). Так вот, каждый объект имеет разные свойства материала для каждой своей части.
Итак, наша система материалов из предыдущего урока не подходит для более или менее сложных объектов, по этому нам нужно расширить ее, введя диффузную и бликовую карты. Это даст нам возможность влиять на диффузный (и, косвенным образом, на фоновый, так как это почти всегда одно и то же) и бликовый компоненты объекта с большей точностью.
Диффузные карты
Все, что нам нужно — это способ установить диффузный цвет для каждого фрагмента объекта. Что может повлиять на значение цвета, основываясь на позиции фрагмента?
Припоминаете? Это — текстуры, которые мы интенсивно обсуждали в одном из предыдущих уроков. Карты освещения – всего лишь другое название того же принципа: используя изображение, нанесенное на поверхность объекта, мы можем делать выборки цвета для каждого фрагмента. В сценах с освещением это обычно называется диффузной картой (как правило ее так называют 3D художники), так как текстурное изображение представляет все диффузные цвета объекта.
Для демонстрации диффузных карт мы будем использовать изображение деревянного контейнера с железной рамкой:
Имейте в виду, что sampler2D это, так называемый, непрозрачный тип данных. Это значит, что мы не можем создать экземпляр такого типа, мы можем только определить его как uniform. Если мы попытаемся использовать этот тип не как uniform (например как параметр функции), то GLSL выведет странные ошибки. Это правило также распространяется и на любую структуру, которая содержит непрозрачный тип.
Обратите внимание, что нам снова нужны текстурные координаты во фрагментном шейдере, по этому мы объявляем дополнительную входящую переменную. Затем мы просто делаем выборку из текстуры, чтобы извлечь значение диффузного цвета фрагмента:
Также не забудьте установить фоновый цвет материала таким же, как и диффузный:
Это все, что нам нужно для использования диффузной карты. Как вы могли заметить, в этом нет ничего нового, но это дает впечатляющий рост визуального качества. Чтобы это заработало, нам нужно добавить текстурные координаты к данным вершин и передать их в качестве вершинного атрибута во фрагментный шейдер, загрузить текстуру и связать ее с соответствующим текстурным блоком.
Обновленные вершинные данные можно найти здесь. Теперь они включают в себя позиции вершин, векторы нормалей и текстурные координаты для каждой вершины куба. Давайте обновим вершинный шейдер, чтобы он мог принимать текстурные координаты, как вершинный атрибут и передавать их во фрагментный шейдер:
Удостоверьтесь, что обновили вершинные атрибуты обоих VAO (прим. переводчика: имеются ввиду VAO текстурированного куба и VAO куба-лампы), так чтобы они совпадали с новыми вершинными данными, и загрузили изображение контейнера в текстуру. Перед тем, как нарисовать контейнер нам нужно присвоить переменной material.diffuse предпочтительный текстурный блок и связать с ним текстуру контейнера:
Используя диффузную карту, мы снова получили огромный прирост детализации и теперь, с добавленным освещением, наш контейнер действительно начал блистать (в буквальном смысле). Вероятно, теперь он выглядит вот так:
Вы можете найти полный исходный код приложения здесь.
Бликовые карты
Мы снова можем воспользоваться текстурной картой, только теперь для зеркальных бликов. Это значит, что нам нужно создать черно-белую (или цветную, если хотите) текстуру, которая определит силу блеска каждой части объекта. Вот пример бликовой карты:
Так как контейнер большей частью состоит из дерева, а дерево — это материал, который не дает бликов, то вся «деревянная» часть текстуры закрашена черным. Черные части вообще не блестят. Поверхность стальной рамки контейнера имеет переменную силу зеркального блеска: сама сталь дает довольно интенсивные блики, в то время как трещины и потертости – нет.
Технически, дерево тоже имеет зеркальные отражения, хотя и с намного более низкой силой блеска (свет сильнее рассеивается), но в образовательных целях, мы сделаем вид, что дерево никак не реагирует на зеркальный свет.
Используя инструменты, такие как Photoshop или Gimp, довольно просто превратить диффузную текстуру в бликовую. Достаточно просто вырезать некоторые части, сделать изображение черно-белым и увеличить яркость/контрастность.
Сэмплинг бликовых карт
Карта зеркальных отражений — это самая обычная текстура, по этому код ее загрузки очень похож на загрузку диффузной карты. Удостоверьтесь, что вы правильно загрузили изображение и сгенерировали текстурный объект. Так как мы используем новую текстуру в том же фрагментом шейдере, нам нужно использовать другой текстурный блок для карты бликов. Давайте свяжем эту текстуру с соответствующим текстурным блоком перед визуализацией:
И, наконец, нам нужно провести выборку карты бликов, чтобы получить соответствующую интенсивность блика для каждого фрагмента объекта:
Используя карту бликов, мы можем с чрезвычайной точностью определить, какие части объекта дают зеркальные блики, и установить соответствующую их интенсивность. Таким образом, карта бликов дает нам дополнительный уровень контроля поверх диффузной карты.
Вы также можете использовать в бликовой карте цвета, которые определяют не только интенсивность блика, но и его цвет. Однако в реальности, цвет блика в значительной степени (а в большинстве случаев и полностью) зависит от источника света, поэтому использование цветных карт бликов не даст реалистичных результатов (вот почему эти изображения обычно черно-белые — нас интересует только интенсивность блика).
Если вы запустите приложение, то увидите, что материал контейнера очень похож, на деревянный контейнер с железной рамкой:
Вы можете найти полный исходный код приложения здесь.
Используя диффузные и бликовые карты, мы можем добавить огромное количество деталей в относительно простые объекты. Мы можем добавить еще больше деталей, используя другие текстурные карты, такие как карты нормалей/рельефа и/или карты отражений, но их мы прибережем для следующих уроков. Покажите ваш контейнер друзьям и семье и помните, что однажды наш контейнер может стать еще более привлекательным, чем сейчас!