Преимущества использования уникальных шейдеров в компьютерных играх: личный опыт и наблюдения

Эта статья подготовлена в содружестве с разработчиками и гейм-дизайнерами студии zGames.

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

Роль уникальных шейдеров в создании спецэффектов для компьютерных игр


Unity располагает инструментами, с помощью которых можно создавать простые оптические трансформации в пару кликов. Используя набор стандартных скриптов из Unity Asset Store, можно получить огромное количество разнообразных спецэффектов, способных добавить атмосферы игре и ощутимо ускорить процесс разработки.

Что же делать, если перед вами стоит задача создать оригинальный визуальный эффект? Если вам надо сделать игру или какой-то из ее этапов особенно запоминающимся? Здесь не обойтись без создания уникального шейдера. Рассмотрим конкретную ситуацию на примере игры Circle of Life, разработанную студией zGames. В этой игре особый акцент необходимо было придать анимированному объекту – сферической области. Геймплей уже изобиловал достаточным количеством простых эффектов, поэтому этот элемент нужно было выделить с помощью специальных визуальных трансформаций. Так как стандартных инструментов для создания задуманных визуальных эффектов оказалось недостаточно, было решено разработать уникальный шейдер. В итоге, финальный объект реагирует на удерживание пальца на сенсорном экране, увеличиваясь в объеме и меняя структуру. Благодаря уникальным визуальным трансформациям эта сферическая область стала одним из ключевых элементов игры, к которому приковано внимание игрока (ниже показана шейдерная анимация главного объекта игры Circle of Life).



«За» и «против» использования шейдеров в играх


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



Нецелесообразно создавать уникальные шейдеры для второстепенных элементов. Во-первых, шейдерное программирование тоже процесс весьма трудозатратный. Во-вторых, усилия на разработку здесь будут приложены немалые, а отдача может быть весьма условной: игрок увидит эффект максимум один раз, а может и вообще не заметить. И в-третьих, уникальный шейдер на второстепенном объекте может отвлечь внимание от объектов, которые действительно важны. На скриншоте игры Metal Planet шейдеры засвечивают бирюзовым окна слева (второстепенный элемент). Такой же эффект применен к объектам справа, которые на самом деле являются основными интерактивными элементами. В результате фокус внимания смещается с важной (в текущий момент) части мира.



Рассмотрим еще один пример. Допустим, вы создаете игру, сюжет которой построен вокруг параллельных миров с порталами, точками соприкосновения и прочими космогенными элементами. Вы разработали уникальный шейдер для светящегося кристалла в пещере, который искажает пространство. Из-за визуального акцента на кристалле у игрока может сложиться впечатление, что этот объект важен в основной сюжетной линии или является “пасхалкой” (секрет, который нужно обнаружить), хотя это всего лишь элемент декора в интерьере. В итоге это может просто сбить игрока с толку или даже разочаровать, если ему пришлось потратить время на исследование впустую. В результате нарушается “флоу” (состояние погруженности в игровой процесс). Ниже приведен пример из игры Perimeter. Здесь шейдеры создают слишком много красивостей. Становится непонятно, где сосредоточена важная информация (зоны действия вышек), а где эффект применен просто для визуального разнообразия. Игроку труднее ориентироваться в игровой сцене. Приходиться затрачивать больше времени на понимание ситуации и принятие решений.



Поэтому, взвешивая “за” и “против” разработки шейдера, стоит более тщательно продумать целесообразность и уместность использования этой техники.

Составляем оценку трудозатрат на разработку шейдеров: возможные трудности


Если вы только начинаете осваивать шейдерную разработку, то составление адекватной оценки затрат на реализацию требуемого эффекта может стать нетривиальной задачей. Во-первых, вам потребуется хорошее знание математики и понимание физики процесса, графического конвейера, работы оборудования, алгоритмов обработки изображения и т.п. Например, чтобы успешно использовать технику эмуляции выемок и вмятин (normal/bump mapping), программисту необходимо знать и понимать закон отражения и преломления света. Специалист также должен уметь реализовать эти законы в коде, который в сущности работает с плоской поверхностью и источником света (ниже приведен пример использования техники normal mapping).



Во-вторых, оценка должна включать время, требуемое на отладку программы. Ведь сразу создать идеально функционирующий шейдер вряд ли получится. Необходимо помнить, что процесс разработки шейдеров и традиционного ПО отличаются. Системные приложения располагают рядом средств, позволяющих их отладить качественно. Чего не скажешь об инструментах для отладки шейдеров. Для каждого пикселя 3D объекта программа может выполняться по 50 раз за секунду. Остановить такой процесс в определенном месте для проверки корректности работы программы крайне сложно. В настоящее время для отладки шейдеров используется расширение Microsoft Visual Studio со встроенным графическим отладчиком. Еще одна сложность, подстерегающая на пути шейдерной разработки — отсутствие четкого представления как будет выглядеть конечный результат самостоятельно и в игровом процессе. Может возникнуть необходимость в его доработке или даже повторной разработке. Так что и этот момент необходимо учитывать при составлении оценки.

Добавьте к этому необходимость знания платформ, на которые рассчитана игра, и их возможностей отображать графические элементы – мобильные устройства, WebGL, Smart TV, консоли, устройства дополненной или виртуальной реальности. Таким образом, вы получите список наиболее значимых факторов, которые могут существенно повлиять на ход проекта.

Немного о процессе разработки


Разработка шейдеров требует не только освоения специализированных языков программирования, владения рядом разделов физики и математики, но и понимание этапов разработки игрового продукта. Гейм-дизайнер является ключевым звеном в проекте – следит за тем, чтобы создаваемые элементы и функциональность укладывались в рамки задуманной концепции. За графическую и стилистическую проработку игры отвечает художник. Программист в свою очередь предлагает варианты реализации эффектов в соответствии с видением гейм-дизайнера и художника. За устранением возможных противоречий между замыслом гейм-дизайнера и временем, затрачиваемом на его реализацию, следит проект-менеджер.

Шейдеры и устройства виртуальной и дополненной реальности


Обладая огромным потенциалом передачи сложных визуальных эффектов, устройства виртуальной и дополненной реальности уже занимают ведущее место в рядах популярных гаджетов для компьютерных игр. Несомненно, шейдеры добавляют реализма объектам игр, разрабатываемых для этих носимых устройств. Но на сегодняшний день не все VR- или AR-шлемы смогут воспроизвести эффекты на основе сложных шейдеров вследствие аппаратных ограничений – недостаточно мощной видеокарты и процессора. Более того, не все VR- и AR-платформы предоставляют полный набор функций, необходимых для программирования нативных шейдеров. Тем не менее, индустрия устройств виртуальной и дополненной реальности продолжает активно развиваться. Появление качественного 3D контента с использованием сложных визуальных эффектов на основе шейдеров дело самого ближайшего будущего.

Подводя итоги


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

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

В целом, использование шейдеров в разработке игр увеличивает длительность и бюджет проекта, а также накладывает определенные ограничения на использование игровых платформ, для которых создается игра. Однако здесь есть одно неоспоримое преимущество, которое с лихвой компенсирует перечисленные минусы, а именно: несомненное качество графики и уникальность производимого эффекта.
  • +9
  • 21.9k
  • 7
Share post

Comments 7

    +6
    Использование шейдеров будет весьма полезным в разработке любого вида игр

    <зануда>Очень полезно, тем более когда любой актуальный графический API требует написать шейдер для рендеринга даже простейшего треугольника.</зануда>
    Если бы речь шла только о Unity, то можно было бы понять, почему о шейдерах рассуждается в таком ключе — движок позволяет что-то нарисовать без единой строчки кода. Но тогда при чём тут

    Например, чтобы успешно использовать технику эмуляции выемок и вмятин (normal/bump mapping), программисту необходимо знать и понимать закон отражения и преломления света.

    если в Unity это всё равно уже давно за вас реализовано.
      0
      Думаю речь не о юнити всё же. Вот мы пишем игру на Direct3d 9, там есть фиксированный конвеер и многое можно сделать без шейдеров, в том числе и треугольники рисовать.
        0
        Всё для совместимости с XP? Я тоже на 9, но очень хочу уже на 11 директ переползти, только боюсь. :)
          0
          Да как-то особой необходимости в переползании нет. ДХ9 обеспечивает все необходимые возможности. Не знаю чем бы ДХ11 был бы лучше для 2д игры в нашем случае. ХР идёт бонусом приятным :)
          Ну и не все встроенные видеорешения умеют ДХ11 еще пока.
        +1
        Игры и эффекты, представленные в статье, даны именно в контексте Unity. Этот движок действительно содержит немало готовых эффектов, включая шейдерные. Но статья как раз призвана продемонстрировать, что делать, если нужно создать что-то, чего нет в готовых эффектах. Как можно выделиться из множества других игр с помощью визуальных эффектов. На что обратить внимание при использовании шейдеров. Особенно это актуально, если заказчик хочет чего-то необычного, или же гейм-дизайнер хочет уделить какому-то моменту особое внимание. Возможно, вам просто хочется попробовать свои силы в разработке уникальных шейдеров. Многие программисты как раз и пробуют написать свой первый шейдер, исходя из обычного любопытства. А уж использовать его потом или нет, или взять готовое решение — дело индивидуального выбора.
        +2
        Гифку на 16 мегабайт стоило бы спрятать за ссылкой.
          0
          Разработка шейдеров требует не только освоения специализированных языков программирования, владения рядом разделов физики и математики
          Разве для геймдева это уже что-то из ряда вон выходящее и необязательное?
          Осталось впечатление, что автор имеет весьма поверхностное представление об инструменте и испытывает своего рода карго-культ. Могло быть простительно, если бы рассуждения не выходили за рамки Unity, а так, похоже на элемент раскрутки упоминаемой в тексте собственной игры.

          Only users with full accounts can post comments. Log in, please.