Статья подготовлена в сотрудничестве с разработчиками и гейм-дизайнерами студии zGames.
Несмотря на обилие техник, позволяющих создавать привлекательные визуальные эффекты в компьютерных играх, шейдеры обладают некоторым рядом преимуществ по сравнению с такими распространенными средствами как партиклы или покадровая анимация.
Роль уникальных шейдеров в создании спецэффектов для компьютерных игр
Unity располагает инструментами, с помощью которых можно создавать простые оптические трансформации в пару кликов. Используя набор стандартных скриптов из Unity Asset Store, можно получить огромное количество разнообразных спецэффектов, способных добавить игре атмосферы и ощутимо ускорить процесс разработки.
Что делать, если перед вами стоит задача создать оригинальный визуальный эффект, дабы сделать игру или какой-то из её этапов особенно запоминающимся? Рассмотрим конкретную ситуацию на примере игры Circle of Life, разработанной студией zGames. В этой игре особый акцент необходимо было придать анимированному объекту — сферической области. Так как геймплей уже изобиловал достаточным количеством простых эффектов, сферический элемент нужно было выделить с помощью специальных визуальных трансформаций. Стандартных инструментов для создания задуманных эффектов оказалось недостаточно, поэтому было решено разработать уникальный шейдер. Благодаря этому объект реагирует на удерживание пальца на сенсорном экране, увеличиваясь в объёме и меняя структуру. Уникальные визуальные трансформации сделали сферическую область одним из ключевых элементов игры, привлекающих внимание игрока. Ниже продемонстрирована шейдерная анимация главного объекта игры Circle of Life.
Gif-файл смотрите по ссылке.
«Надо брать»? «За» и «против» использования шейдеров
В контексте Unity использование шейдеров будет однозначно полезным при разработке любого вида игр. Предположим, вы хотите придать особый акцент одному из элементов игры, — будь то огромный огненный шар, управляемый персонажем-магом, или выстрел невероятно мощного оружия, которое игрок долго и мучительно искал. Вы можете пожелать отобразить искажение воздуха вокруг машущего огненным мечом демона из преисподней. В этих случаях использованием партиклов не обойтись, а покадровая анимация, вероятнее всего, потребует много времени и дополнительных расходов, либо придаст игре слишком однообразный формат. Поэтому здесь использование эффекта на основе шейдера будет как нельзя кстати. Взять, к примеру, игру Hearthstone, в которой шейдерный эффект применён к статичной карте. Карты со спецэффектом приравниваются к «золотым», превращаясь в привлекательный трофей для игроков-коллекционеров.
Gif-файл смотрите по ссылке.
А вот для второстепенных элементов создавать уникальные шейдеры нецелесообразно. Во-первых, повторимся: шейдерное программирование — процесс весьма трудозатратный. Во-вторых, «отдача» может оказаться почти условной: игрок увидит разработанный эффект максимум один раз, а то и вовсе не заметит. И, в-третьих, применяя уникальный шейдер для второстепенного объекта, вы рискуете отвлечь внимание от элементов, которые действительно важны. На скриншоте игры Metal Planet продемонстрирован как раз такой случай. Окна слева (второстепенный элемент) засвечены бирюзовым точно так же, как и справа, тогда как именно правые являются основными интерактивными элементами. В результате фокус внимания смещается с важной (в текущий момент) части игрового мира.
Рассмотрим ещё один пример. Допустим, вы создаёте игру, сюжет которой построен вокруг параллельных миров с порталами, точками соприкосновения и прочими космогенными элементами. Вы разработали уникальный шейдер для светящегося в глубинах пещеры кристалла, который искажает пространство. Однако из-за визуального акцента на кристалле у игрока может сложиться впечатление, что этот объект важен в основной сюжетной линии или является «пасхалкой» (секретом, который необходимо раскрыть), в то время как это — не более, чем элемент декора в игровом «интерьере». В итоге игрок сбивается с толку или раздражается по поводу того, что довелось потратить время на исследование впустую, и нарушается «флоу» (состояние погружённости в игровой процесс).
Для примера рассмотрим игру Perimeter. Здесь шейдеры создают так много «красивостей», что становится непонятно, где сосредоточена важная информация (зоны действия вышек), а где эффект применён просто для визуального разнообразия. Из-за этого игроку труднее ориентироваться в игровой сцене, — приходится затрачивать больше времени на понимание ситуации и принятие решений.
Поэтому, прежде, чем приниматься за разработку шейдера, стоит тщательно продумать целесообразность и уместность использования этой техники.
Оценка трудозатрат на разработку шейдеров: «легко в бою»
Если вы только начинаете осваивать шейдерную разработку, то составление адекватной оценки затрат на реализацию требуемого эффекта может стать нетривиальной задачей. Во-первых, потребуется хорошее знание математики и понимание физической стороны процесса, графического конвейера, работы оборудования, алгоритмов обработки изображения и многое другое. К примеру, чтобы успешно применять технику эмуляции выемок и вмятин (normal/bump mapping), программисту необходимо знать и понимать закон отражения и преломления света. Ниже — пример использования техники normal mapping.
Gif-файл смотрите по ссылке.
Во-вторых, оценивая трудозатраты, нужно добавить время на отладку программы, — создать идеально функционирующий шейдер сразу вряд ли получится. Кроме того, важно учитывать, что процесс разработки шейдеров и традиционного ПО отличаются. Системные приложения располагают рядом средств, позволяющих их качественно отладить, чего не скажешь об инструментах для отладки шейдеров. Для каждого пикселя 3D-объекта программа может выполняться по 50 раз за секунду. Остановить такой процесс в определённом месте для проверки корректности работы программы — крайне сложно. В настоящее время для отладки шейдеров используется расширение Microsoft Visual Studio со встроенным графическим отладчиком. Ещё одна сложность, подстерегающая на пути шейдерной разработки — отсутствие чёткого представления о том, как будет выглядеть конечный результат — как в игровом процессе, так и вне его. Может потребоваться доработка или даже повторная разработка. Так что и этот момент нельзя обходить вниманием при составлении оценки.
Добавьте к этому необходимость знания платформ, на которые рассчитана игра, и их возможностей отображать графические элементы — мобильные устройства, WebGL, Smart TV, консоли, устройства дополненной или виртуальной реальности. С учётом всего вышеперечисленного вы получите список наиболее значимых факторов, способных существенно повлиять на ход проекта.
Процесс разработки: «вам назначено»?
Разработка шейдеров требует не только освоения специализированных языков программирования и знаний из целого ряда разделов физики и математики, но и понимания этапов разработки игрового продукта. Гейм-дизайнер является ключевым звеном в проекте: следит за тем, чтобы создаваемые элементы и функциональность укладывались в рамки задуманной концепции. За графическую и стилистическую проработку игры отвечает художник. Программист, в свою очередь, предлагает варианты реализации эффектов в соответствии с видением гейм-дизайнера и художника. Устранение возможных противоречий между замыслом гейм-дизайнера и временем, затрачиваемым на его реализацию, — в ведении проект-менеджера.
AR, VR, шейдер... Кто больше?
Обладая огромным потенциалом передачи сложных визуальных эффектов, устройства виртуальной и дополненной реальности занимают ведущее место в рядах популярных гаджетов для компьютерных игр. Несомненно, шейдеры добавляют реалистичности объектам игр, разрабатываемым для этих носимых устройств. Но на сегодняшний день не все VR- или AR-шлемы смогут воспроизвести эффекты на основе сложных шейдеров вследствие аппаратных ограничений — недостаточно мощной видеокарты и процессора. Более того, не все VR- и AR-платформы предоставляют полный набор функций, необходимых для программирования нативных шейдеров. Тем не менее, индустрия устройств виртуальной и дополненной реальности продолжает активно развиваться, так что появление качественного 3D-контента с использованием сложных визуальных эффектов на основе шейдеров — дело ближайшего будущего.
В сухом остатке: когда без шейдеров — никак?
Разработка оригинальных шейдеров будет оптимальным выбором, если вам необходимо дополнительно разнообразить визуальный ряд, усложнить графику или добиться графической реалистичности приёмами правдоподобного отражения света от поверхностей, искажения предметов, преломления света в воде, отображения внутреннего устройства предмета и т.п.
Стоит помнить, что лишний эффект в ненужном месте может отвлечь внимание игрока и даже навредить процессу. Если участник игры недополучает информацию о происходящем с помощью визуальной обратной связи, или используемые в игре эффекты создают акцент на второстепенных объектах, то игровой процесс становится малопонятным. Как следствие, — замешательство игрока, потеря интереса к игре.
В целом, использование шейдеров в разработке игр увеличивает длительность и бюджет проекта, а также накладывает определённые ограничения на использование игровых платформ, для которых создаётся игра. Однако здесь есть одно неоспоримое преимущество, которое с лихвой компенсирует перечисленные минусы, — несомненное качество графики и уникальность производимого эффекта.
Релоцировались? Теперь вы можете комментировать без верификации аккаунта.