Создание реалистичных шейдеров в Cycles

21 октября 2014 59 комментариев Артем Слаква Материалы и текстуры

Базовые принципы

При взгляде на любую поверхность Ваш мозг автоматически интерпретирует и коррелирует увиденное с тем, что Вы уже знаете или видели в жизни. Например, Вы можете спонтанно назначить температуры для различных цветов, где красный будет ассоциироваться с чем-то теплым, а синий с холодным. Вы также знаете что бетонная поверхность довольно матовая, а металл блестящий. В повседневной жизни мы не задумываемся о том что видим, однако при детальном анализе поверхности достаточно трудно сказать, что мы конкретно видим. Какой цвет хромированной поверхности? В чем разница между отражениями различных металлов? Что создает поверхностные дефекты: крошечные неровности или разница в плотности материала? Ответы на подобные вопросы Вы должны знать при создании реалистичных материалов с помощью любого программного обеспечения.

Диффузный фактор

В мире компьютерной графики «diffuse» или «color» это термин который подразумевает «цвет» который мы видим на поверхности объекта. Он также коррелируется с матовыми поверхностями не отражающих объектов. Мы можем легко распознать оранжевый фрукт в котором отсутствуют отражающие свойства металла. Однако, имейте ввиду, что в реальной жизни ВСЕ поверхности отражают свет и чисто «диффузных» материалов не существует.
chocofur1
Диффузный цвет может быть определен с помощью текстуры для более сложных поверхностей, таких как: дерево, мрамор, ткань и т.д.

Фактор отражения

Я думаю, отражение является наиболее важным фактором. С его помощью Ваши модели и шейдеры выглядят привлекательно и реалистично. Как было сказано ранее, в реальной жизни каждый материал имеет отражает в той или иной степени. «Диффузные» материалы могут иметь различную степень отражения. О том как ее контролировать мы поговорим чуть позже в данной статье.
chocofur2

посмотреть настройку нодов посмотреть настройку нодов посмотреть настройку нодов

Как можно заметить выше, базовый материал создается смешиванием двух различных свойств материала с заданными пропорциями. Тем не менее, подобных материалов не существует в реальности и отражение всегда зависит от угла обзора. Данный, очень важный, фактор часто упускается из виду неопытными 3D-художниками.

В зависимости от программного обеспечения, существуют различные способы контроля угла отражения, но давайте сначала попытаемся понять что же это. Сделайте свои собственные наблюдения. Попробуйте взять любой окружающий Вас объект и посмотреть на него под различными углами. Вы должны заметить, как изменяется отражение от центра объекта к его краям:
chocofur3

посмотреть настройку нодов посмотреть настройку нодов посмотреть настройку нодов

На примере выше отражение зависит от кривизны поверхности. Создание шейдеров подобным образом дает более реалистичный результат. Можно заметить что изменяется не только отражение в зависимости от поверхности / угла обзора (лучше всего видно на левом и центральном примерах), но и общая отражательная способность шейдера также изменяется. Наибольшее количество отражений все равно остается по краям объекта, но на правом примере центральная часть объекта имеет большую отражательную способность, чем остальные.

Стоит отметить, что отражения могут иметь различные цвета. Для большинства неметаллических поверхностей оно будет находится в диапазоне от белого до темно серого. Такие металлы как золото или латунь будут иметь затемнение в центральной части и становятся белее ближе к краю. В приведенных ниже примерах используется 100% отражающий шейдер (Glossy), однако в центре объекты выглядят немного диффузно (если бы смешали диффузный шейдер с отражающим (diffuse + reflectivity)).
chocofur4

посмотреть настройку нодов посмотреть настройку нодов посмотреть настройку нодов
Фактор шероховатости

Шероховатость могут иметь диффузные, отражающие и прозрачные материалы. Изменяя данный параметр мы можем делать отражения более размытыми, шейдер стекла более туманным, а диффузные поверхности более светопоглощающими. Точно также, как и отражения, шероховатость изменяется в зависимости от угла обзора, однако не для чисто диффузных или стеклянных шейдеров.
chocofur5

посмотреть настройку нодов посмотреть настройку нодов посмотреть настройку нодов

В примере выше все три шейдера отличаются лишь настройкой шероховатости нода Glossy. На данном этапе отражения размыты равномерно, независимо от угла обзора. Обратите внимание, что правый объект выглядит практически диффузным, хотя на самом деле это вовсе не так.
chocofur6

посмотреть настройку нодов посмотреть настройку нодов посмотреть настройку нодов

Пример выше можно рассматривать как «базовый шейдер» для создания всех непрозрачных и не металлических материалов. Конечно, не существует никаких универсальных настроек на все случаи жизни, однако данная связка отилично подойдет для большинства сцен и даст приятный глазу результат. Изменение угла шероховатости можно рассматривать как очень тонкий эффект с помощью которого можно добиваться реализма в сценах.
chocofur7

посмотреть настройку нодов посмотреть настройку нодов посмотреть настройку нодов

Шероховатость применяется не только к отражающим поверхностям. Вы можете использовать ее для создания «затуманенного» стекла, как на картинке выше. Для диффузных шейдеров можно контролировать количество поглощаемого света поверхностью.

Фактор объема (Bump / Displacement)

Bump и Displacement используются для добавления трещин, царапин, соединений, выпуклостей и т.д. Иногда создавать подобное проще и даже нужно во время моделирования или скульптинга, а иногда правильно созданная текстура может выполнить тоже самое ни чем не хуже.
chocofur8
На картинке плоская поверхность с текстурой смещения.

Для создание «бампа» всегда необходима текстура, будь то изображение или процедурно генерируемая текстура. Наиболее распространенной ошибкой является использование слишком больших значений бампа или смешивание его с шероховатостью отражений. Лично я сначала настраиваю отражения, а затем добавляю смещение поверхности (bump). С его помощью нужно имитировать лишь незначительные повреждения, трещины и царапины. Для более «глубоких» искажений нужно использовать текстуру смещения (displacement).
chocofur9
Кроме объема и смещения мы можем использовать карты нормалей (normal maps). Лично я не очень люблю их использовать по нескольким причинам. Во первых, окончательный результат лишь немного лучше традиционного бампа и все еще далек от использования смещения. Во вторых, для создания карты нормалей необходимо прибегать к помощи стороннего ПО, что отнимает часть времени (и это при том, что я еще и очень ленивый). В третьих, карты нормалей выглядят совершенно по разному для различных текстур отражения, шероховатости и объема, которые Вы также будете использовать для создания своего шейдера. Все эти текстуры используют черные и белые значения, которые можно смешивать для достижения желаемого результата, в то время как карта нормалей использует цвета, что исключает ее из использования в качестве текстуры для бампа. И последнее, но не менее важное, карты нормалей не так просто адаптируются к различным движкам рендеринга и дают различные результаты в зависимости от настроек гаммы, например. Это делает довольно трудной работу по адаптации и тестированию модели в другой программе. Однако, если Вам нужно создать детализированную анимацию реального времени или модель для игрового движка, то Вам необходимо уметь обращаться с картами нормалей.
chocofur10
chocofur10a
Примеры текстурных карт. Карта нормалей явно выделяется из черно-белого диапазона…

На данный момент эффект смещения все еще не поддерживается в полной мере движком рендеринга Cycles и полноценно работает лишь с использованием модификатора Displacement. Ниже, мы более подробно рассмотрим как создавать окружение и добавлять детали в Вашу сцену.

Система шейдеров в Cycles

Система шейдеров в Cycles является уникальной в сравнении с другими присутствующими на рынке. Вместо того, чтобы дать какие-то готовые базовые настройки, она предлагает лишь использование цвета, отражения, шероховатости…, для создания того, что Вам нужно. Таким образом мы можем создать как что-то физически точное, так и материал, который не может существовать в реальном мире.

Говоря о физике… Очень часто люди пытаются достичь физически точных результатов, в надежде, что это «ключ» к хорошему рендеру. Что ж, я не согласен с этим и лучшим аргументом к этому будут фотографии. Они 100% физически точные, но Вам необходимо приложить немалые усилия, чтобы получить хорошее фото. На мой взгляд, хорошый рендер можно получить несколькими способами. Все зависит от целей проекта над которым Вы работаете.
chocofur11-1
chocofur11-2

Нод Mix Shader

Mix Shader будет одним из Ваших наиболее часто используемых нодов, так как он позволяет смешивать два различных шейдера с заданными пропорциями. Вы можете использовать различные ноды в качестве фактора смешивания или же использовать значение по умолчанию от 0 до 1. Наиболее часто Mix Shader используется для добавления отражения к уже существующему шейдеру diffuse с нодом Fresnel в качестве фактора смешивания.
chocofur12-1
chocofur12-2
chocofur12-3

Хороший способ быстро понять принцип работы системы материалов Cycles, это представить ноды как атрибуты материалов из реальной жизни которые Вы бы хотели добавить для шейдера. В примере выше мы добавили отражение для диффузного объекта. Мы также могли добавить прозрачность объекта подключив нод Transparent или создать интересный (нереальный) эффект.
chocofur13

Существует несколько различных способов достижения угловых отражений в Cycles. Наиболее часто используемый, это подключение нода Fresnel к фактору нода Mix. Но у данного метода есть один недостаток. Он зависим от геометрии объекта. Это означает, что он не будет корректно работать с такими плоскими объектами как штора, травинка, листок, бумага и т.д.

chocofur14-1
chocofur14-2

Для корректных отражений стоит использовать нод Layer Weight. Данный способ геометрически независим и всегда дает корректный результат. Для большего контроля стоит использовать нод RGB Curve. Это хорошо распространенная практика и в других движках рендеинга.
chocofur15-1
chocofur15-2
chocofur15-3

Нод Add Shader

Нод Add Shader менее популярен нежели Mix. Их функции схожи, они оба смешивают два шейдера, но результаты немного отличаются. Нод Add используется для объединения двух различных шейдеров. Некоторые материалы могут быть созданы исключительно с помощью нода Add.

Он не смешивает два шейдера, а добавляет их и в результате получается новый шейдер. Если мы берем 100% диффузный шейдер и 100% прозрачный, то на выходе получим не по 50% первого и второго, а по 100% каждого. Это может показаться немного странным, но есть хорошие примеры из реальной жизни. Для примера возьмем бумагу или травинку/листок. Глядя на них может показаться что они 100% диффузные, но стоит разместить позади них источник света и они кажутся 100% прозрачными. На основе этого мы будем считать что данные материалы 100% диффузные и 100% прозрачные.
chocofur16-1
chocofur16-2
chocofur16-3

Еще одной интересной особенностью нода Add является то, что он воспринимает все черные цвета как 0. Это означает, что они будут добавлены к первому шейдеру, но никак не повлияют на него. Мы можем использовать это для создания тканевых материалов добавив шейдер Velvet к Diffuse. Также можно с его помощью придать дополнительную прозрачность стандартному шейдеру Glass добавив к нему шейдер Transparency.
chocofur17-1
chocofur17-2
chocofur17-3

Использование текстурных карт

До сих пор мы использовали сплошные цвета для создания шейдеров. Для многих случаев этого достаточно, но чтобы создавать более сложные материалы приходится прибегать к помощи различных текстур. Добавить текстуру в Cycles очень просто, но к ней также необходимо подключить несколько вспомогательных нодов цветокоррекции.
chocofur18
Выше базовая настройка нодов, которую я использую при добавлении текстуры. Нод RGB Curves один из самых часто используемых нодов. С его помощью можно добиться лучшей корректировки изображения. Ни один из других нодов не предоставит Вам подобную гибкость. Также используется нод Hue Saturation Value для финальных штрихов, потому как финальная текстура в Cycles выглядит не так, как в программе 2D-редактирования.
chocofur19-1
chocofur19-2
chocofur19-3
chocofur19-4
chocofur19-5
chocofur19-6

Важно понимать как движки рендеринга интерпретируют изображение. Если не вдаваться в технические детали, то полностью белый цвет они интерпретируют как 1, а полностью черный как 0. На 5-ом изображении слайдера выше хорошо видно, что синий цвет проступает в областях наиболее приближенных к белому. На 6-ом изображении этот эффект виден еще четче, за счет изменения контраста с помощью кривой. В компьютерной графике все цвета задаются широким диапазоном от 0 до 1, поэтому мы можем использовать различные изображения для создания отражений, шероховатостей и т.д.
chocofur20-1
chocofur20-2
chocofur20-3
chocofur20-4
chocofur20-5
chocofur20-6

В примере выше с помощью нода Math производилась регулировка шероховатости поверхности. Умножив входное значение на 0.1 я увеличил отражающую способность поверхности. Это означает, что все черные значения практически не были затронуты, в то время как белые и серые тона (на 90% приближенные к белому) получили максимальное воздействие. Значение 0 создает зеркально отражающую поверхность. Установив значение равным 2 я удвоил цветовой тон, не воздействовав лишь на черный цвет 0. Данный результат можно увидеть на изображении 6. Также стоит отметить, что изображения 2 и 5 дают идентичный результат.

Нод Math может быть использован для огромного количества целей при создании материалов, так как он позволяет применять огромное количество математических операций к Вашим шейдерам. Одной из таких операций, которую Вы будете часто использовать будет контроль силы бампа на поверхности объекта.
chocofur21-1
chocofur21-2
chocofur21-3
chocofur21-4
chocofur21-5
chocofur21-6
chocofur21-7

Перед тем как мы приступим к созданию более сложных шейдеров, я бы хотел остановить Ваше внимание на двух вещах. Вы могли заметить, что в примере выше использовался нод RGB to BW. С его помощью мы экономим память видеокарты при рендеринге на GPU. Обычно, при создании шейдера, используется отдельная текстура для отдельной части материала. Мы говорили об этом в начале урока. Однако данный подход менее экономен с точки зрения памяти видеокарты, так как каждая текстура должна быть в нее загружена. Это можно упустить из виду при наличии GTX Titan с 6 GB видеопамяти, но в большинстве случаев это не так, да еще в случае с большой сценой содержащей множество шейдеров с размерами текстур около 6К Ваш рендер может вовсе и не начаться. Именно в подобных ситуациях к нам на помощь и приходят подобные ноды. За счет различных манипуляций мы можем получать необходимые результаты используя лишь одну текстуру.

На 7-ом изображении слайдера выше показана распространенная ошибка использования черно-белой текстуры в качестве отражения. Посмотрите вокруг — отражения очень равномерные в подавляющем большинстве случаев. Оно может изменяться в зависимости от угла зрения, становится ярче, но, как правило, не имеет никакого цветового оттенка (кроме металлов). Лучший способ это проверить в реальной жизни, это поставить белый лист бумаги рядом с любым отражающим объектам и посмотреть на цвет бумаги в отражении. В большинстве случаев оно будет лишь немного темнее, больше ничего… Однако на отражения влияют и другие факторы, которые мы уже рассмотрели (шероховатости, бамп и т.д.) и в следующей главе я постараюсь показать как их правильно создавать.

Создание более сложных шейдеров

Базовый глянцевый / пластиковый шейдер

chocofur-plastic1
chocofur-plastic2
chocofur-plastic3
chocofur-plastic4
chocofur-plastic5
chocofur-plastic6
chocofur-plastic7
chocofur-plastic8
chocofur-plastic9
chocofur-plastic10
chocofur-plastic11
Данный шейдер не является 100% идеальным и 100% физически точным. Тем не менее, его очень легко и быстро можно настроить. С его помощью можно создавать пластиковые и глянцевые материалы с различными значениями отражения и шероховатости. С помощью кривых можно легко настроить как базовый диффузный цвет, так и оттенок отражения. У меня это один из наиболее используемых шейдеров на проекте.

Шейдер дерева

chocofur-wood1
chocofur-wood2
chocofur-wood3
chocofur-wood4
chocofur-wood5
chocofur-wood6
chocofur-wood7
chocofur-wood8
chocofur-wood9
chocofur-wood10
chocofur-wood11
chocofur-wood12
chocofur-wood13
chocofur-wood14
Метод создания данного шейдера очень похож на создание шейдера пластика. Сначала определяется базовый диффузный цвет и производится его цветокоррекция. RGB Curves также могут использоваться для этой цели. Далее переходим к созданию отражения. С помощью нода Math мы объединяем текстуру с кривой, а с помощью второго регулируем силу воздействия текстуры.

После создания отражения производится регулировка бампа с помощью нода Glossy. В завершении все это смешивается и производится финальная корректировка фактора с помощью кривой.

Шейдер стекла

chocofur-glass1
chocofur-glass2
chocofur-glass3
chocofur-glass4
chocofur-glass5
chocofur-glass6
chocofur-glass7
chocofur-glass8
chocofur-glass9
chocofur-glass10
Если бы меня спросили, что мне больше всего не нравится в Cycles, то я бы ответил — создание шейдера стекла. Честно говоря, до сегодняшнего дня я так и не смог найти метод, который бы в полной мере удовлетворить мои потребности. В зависимости от проекта, я всегда производил какие-то регулировки материала в зависимости от окружения, освещения и т.д. Многие считают что нод Glass по умолчанию дает хороший результат (и это действительно так во многих ситуациях). Из того что мы узнали в этой статье мы можем с уверенностью сказать, что нод Glass — это не идеальное стекло. Философия Cycles основывается на создании материалов с нуля и данный нод это всего лишь отправная точка, а не конечный результат.

При создании шейдеров стекла стоит помнить следующие вещи:

  • геометрия должна быть равномерной и нормали вывернуты наружу
  • при создании объемного отражения геометрия должна быть замкнутой (никаких открытых граней, ребер и т.д.)
  • при пересечении шейдера стекла с другими диффузными шейдерами преломление всегда будет изменяться
  • необходимо включить каустику для корректных теней и общего вида
Базовый шейдер металла

chocofur-metall1
chocofur-metall2
chocofur-metall3
chocofur-metall4
chocofur-metall5
chocofur-metall6
chocofur-metall7
chocofur-metall8
chocofur-metall9
Шейдер металла требует несколько иной подход, чем другие материалы. Вместо того, чтобы сосредотачиваться на шероховатости отражения мы должны уделять внимание цвету отражения. Хорошим примером в данном случае будет золото. Его отражение переходит из немного темно-желтого/оранжевого цвета в полностью белый в зависимости от угла обзора. Есть сайты описывающие данной физическое явление, например этот: refractiveindex.info. На нем Вы можете найти графики кривых и индексы преломления для различных материалов. Одна кривая используется для смешивания двух цветов отражения в зависимости от угла обзора, а вторая для смешивания двух шейдеров.

Что касается отражений и шероховатости, я рекомендую использовать два нода Glossy и смешивать их с помощью кривой. Мы могли бы обойтись и одним шейдером с кривой подключенной к входу шероховатости, но из-за того, что металлы имеют очень четкие отражения, было бы трудно настроить нужную форму кривой.

Заключение

Я уверен, что я не раскрыл тему достаточно, чтобы описать все часто используемые шейдеры. Для этого понадобилось бы еще несколько страниц. Я также уверен, что есть другие способы создания некоторых материалов, так как разные художники, как правило, имеют свои собственные подходы. Тем не менее, я думаю, что данный урок вдохновит многих пользователей на создание своих собственных шейдеров. Для меня лично создание шейдеров, вероятно, наиболее интересная часть всего процесса создания цифровых изображений. Ведь это так интересно смотреть на что-либо в реальной жизни, а затем пытаться воссоздать все это с помощью нодов в Cycles. Вам, также, не нужно смотреть в монитор все время, чтобы практиковаться в создании материалов. Просто посмотрите вокруг, поймите философию системы шейдеров Cycles, а затем воссоздавайте материалы из реальной жизни в голове.

Я надеюсь, что вы вдохновились!

источник урока

О сайте

На данном сайте Вы сможете найти множество уроков и материалов по графическому
редактору Blender.

Контакты

Для связи с администрацией сайта Вы можете воспользоваться следующими контактами:

Email:
info@blender3d.com.ua

Следите за нами

Подписывайтесь на наши страницы в социальных сетях.

На сайте Blender3D собрано огромное количество уроков по программе трехмерного моделирования Blender. Обучающие материалы представлены как в формате видеоуроков, так и в текстовом виде. Здесь затронуты все аспекты, связанные с Blender, начиная от моделирования и заканчивая созданием игр с применением языка программирования Python.

Помимо уроков по Blender, Вы сможете найти готовые 3D-модели, материалы и архивы высококачественных текстур. Сайт регулярно пополняется новым контентом и следит за развитием Blender.