Emiel Boven рассказал о своем подходе к созданию шейдеров неба и льда в Unity 5.

Вступление

Меня зовут Emiel Boven, я студент третьего курса игрового искусства из Нидерландов. В своей работе я сосредоточен на технической стороне игрового искусства: шейдерах, освещении и VFX. Я работал над кооперативной игрой под названием Rite of Ilk во время моей стажировки в Turtleneck Studios здесь, в Нидерландах, и недавно я объединился с небольшой группой художников, разработчиков и дизайнеров из моей школы, чтобы создать свою собственную компанию под названием Rift Shard Studios. Мы уже начали работать над приключенческой игрой, о которой мы расскажем чуть позже.

Unity 5 shaders

Шейдеры в Unity

Я учился на концепт-художника, но мне очень понравились вещи, которые раньше я считал "скучными и техническими" в разработке игр, такие как: 3D-моделирование и программирование. С тех пор я больше никогда не создавал 2D арты, теперь я экспериментирую с шейдерами и создаю свои собственные небольшие проекты на C#. Мне нравится в шейдерах то, что они могут принимать набор переменных и данных из меша, например, направление нормалей или положение вершин, а также манипулировать ими для достижения интересных и визуально приятных эффектов, которых нельзя достичь простым моделированием и текстурированием.

Основы

Основы шейдеров сводятся к простой идее: у вас есть набор 3D-координат и атрибутов, которые проходят через набор небольших программ, называемых шейдерами, прежде чем они будут выведены на экран в виде 2D фрейма. Все эти шейдеры имеют очень специфичный функционал, и некоторые из них можно поменять для пользовательских шейдеров, чтобы понять, как изменится финальный кадр, например, vertex и fragment/pixel shaders. Вертекс шейдер может быть использован, например, для смещения позиций вершин модели, используя Displacement map, без изменения первоначально импортированной модели.

Написание шейдеров, которые правильно взаимодействуют с освещением, довольно непростая задача, поэтому для большинства целей я использую Surface Shader. Surface шейдеры в Unity делают большинство вычислений за вас, поэтому вы можете сосредоточиться на эффектах, не занимаясь написанием всех функций для корректного освещения модели. При этом я по-прежнему использую Vertex и Fragment шейдеры для эффектов деколей и постпроцессинга, поскольку они не нуждаются в вычислениях освещения.

Amplify Shader Editor

Amplify Shader Editor - это нодовый редактор Unity. Это означает, что вы можете создавать шейдерный код из системы взаимосвязанных узлов, которые вы можете построить, не зная ни единой строчки HLSL. Это отличный способ узнать о шейдерах без необходимости написания кода. На втором году моего обучения я впервые узнал о шейдерах в серии уроков о шейдерах и рендеринге. В этих уроках я узнал о том, как создать шейдеры, используя другой нодовый редактор Shader Forge. Таким образом, я узнал обо всех крутых вещах, которые я мог сделать с шейдерами. После этих "творческих" уроков я был настолько заинтересован ими, что решил потратить некоторое время на изучение создания шейдеров без нодовых редакторов. Это действительно помогло мне в создании более сложных шейдеров, используя ноды, так как теперь я больше знаю о том, что происходит под капотом.

Amplify Shader Unity 5

Для шейдеров льда и снега я создал два разных материала: обычный материал и материал, на котором был снег сверху, и сосульки висели снизу.

Второй материал создает маску по оси Y, чтобы создать снег и лед только на поверхностях, которые направлены вверх и вниз. Это позволяет вам вращать меш, но сосульки всегда будут направлены вниз в игровом мире. Снег и сосульки используют displacement для смещения вершин вверх или вниз, чтобы создать иллюзию снега, который накапливатся поверх материала. Сосульки немного отличаются от того, как я делал снег. Они создаются, используя Noise map, которая маскирует некоторые части дна, поэтому создаётся такой эффект зубчатых сосулек.

Затем я использовал Vertex Color, который вы можете добавить в своём 3D пакете или непосредственно в самом игровом движке, как сделал я, в качестве маски для смешивания двух материалов на модели.

Шейдеры в игровом движке Unity 5

Шейдеры для стилизованных сцен

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

Shaders for stylized environment

Skybox Shader

Шейдер отображает skybox с текстурой облаков, которую я сделал. Файл, содержащий текстуру облаков, состоит из трех черно-белых карт, хранящихся в отдельных RGB каналах изображения. Эти текстуры загружаются в шейдер и используются для трех основных составляющих облака: формы облаков, создании света по краю облака, внутренних теней. В шейдере я соединяю эти карты и цвета, чтобы эти части могли окрашиваться отдельно, когда это необходимо. Текстура, отвечающая за свет по краям, немного отличается от двух других, потому что она объединяется с градиентом вокруг солнца так, что свет по краям появляется только тогда, когда солнце находится вблизи облаков.

Skybox shader Unity V

Как было сказано ранее, цвет облаков можно менять отдельно, но это также верно и для неба, и для горизонта. Таким образом, художник, использующий этот материал, обладает полным контролем над Skybox.

Поскольку облака движутся, а я использую неподвижное изображение, то придется работать с UV, использовать Noise текстуру, чтобы облака медленно двигались по небу и изменяли свою форму.

Shader materials unity  5

Реализация шейдеров

Шейдеры в Unity довольно просто в реализации. Шейдер, написанный вручную или созданный с использованием редактора нодов, может быть назначен материалу в Unity, который уже потом может быть назначен объекту в игре. Шейдеры могут быть использованы для создания интересных эффектов на основе меша, но могут использоваться также для эффектов частиц и эффектов пост обработки. Недавно я узнал о том, как технический художник Simon Trumpler создал все стилизованные эффекты в игре RIME. Его видео может послужить неплохим вдохновением для создания подобных классных эффектов.

Урок для начинающих

Я бы хотел посоветовать вам использовать такие программы, как Amplify Shader Editor и Shader Forge. Особенно, если у вас нет опыта работы с шейдерами.  Эти программы дают вам возможность начать экспериментировать без необходимости знания HLSL, но также стоит заметить, что вы не сможете создавать узкоспециализированные шейдеры. Даже если вы уже являетесь звездой в кодинге шейдеров, я по-прежнему рекомендую использовать систему нодов, поскольку она устраняет проблемы с синтаксическими ошибками и знает точные названия используемых функций. Таким образом, это может ускорить ваше время разработки и оставит больше времени на разработку чего-нибудь другого.

Emiel Boven на Artstation.

Переведено с сайта 80.lv: источник.