За что отвечают шейдеры в играх
За что отвечают шейдеры в играх
Это вторая часть нашего гайда. Первая, где собраны основные настройки вроде разрешения, качества текстур и теней, вы можете прочитать по ссылке.
Качество освещения (Lightning Quality)
То, насколько правдоподобно симулируется освещение в игре. Если это единственный подобный параметр в игре, то именно в эту настройку заложили уйму других, будь-то и объемный свет, и рассеивание лучей, и отражения, а иногда даже глобальное затенение. Освещение — это, пожалуй, вообще едва ли не самое основное из всего, что влияет на красоту картинки: оно делает ее объемной, натуралистичной, правдоподобной. Но и ресурсов все это дело «кушает» тоже немало. Именно поэтому, например, Nvidia так расхваливает свои новые RTX-видеокарты — они изначально разработаны под Ray Tracing — метод рендеринга, предполагающий правдоподобную симуляцию каждого луча.
Влияние на производительность
Зависит от движка, но почти во всех современных играх — очень сильное. Симулировать свет — это очень непросто, так что врубайте «ультра» только если у вас действительно мощная видеокарта.
Качество эффектов (Effects Quality)
Влияние на производительность
Тоже зависит от игры, чаще всего не особенно высокое. Но чем выше этот параметр, тем сильнее будет нагружаться ваша видеокарта в загруженных сценах, например, при масштабных перестрелках. Так что если игра начинает «подлагивать» в особо динамичные моменты, можно попробовать поиграться с этим ползунком, прежде чем снижать, например.
…Качество шейдеров (Shader Quality)
Шейдеры — это специальные программы для вашей видеокарты, исполняемые ее процессором. Грубо говоря, это такие «инструкции» от игры вашей GPU, по которым та понимает, как именно нужно отрисовывать тот или иной эффект. Чаще всего шейдеры используются для улучшения освещения, затенения, создания эффектов преломления лучей в воде (помните, как взрывала мозг та самая «шейдерная водичка из Half-Life 2: Lost Coast?), отражений, рассеиваний и так далее. Так что да, эта опция работает в тандеме с другими параметрами: качеством освещения и качеством теней. Существует три вида шейдеров: вершинные, геометрические и пиксельные, но игры, где можно отрегулировать качество каждого из них отдельно, встречаются невероятно редко.
Соответственно, чем выше качество шейдеров, тем лучше описанные выше эффекты, красивее тени и свет, реалистичнее геометрия — и тем сильнее нагрузка на видеокарту. Именно на видеокарту — потому что шейдеры считаются только GPU.
Влияние на производительность
Чаще всего — высокое. Например, в GTA V это один из самых «тяжелых» параметров в игре — снизив качество шейдеров с «Ультра» на средниее значение, вы получите прирост больше, чем в 15 FPS. Но бывает и так, что снижение этого параметра почти ничего не дает, как, например, в Mass Effect Anromeda.
Шейдеры. Или почему мир игр стал визуально так похож на наш!
Всем привет! Так как я поставила себе цель когда-нибудь выпустить блог о том, какие технологии улучшения трехмерной графики применяются в топовых играх в последнее время, то я решила сначала разобраться в том, как за последнее время плотного использования трехмерной графики в видеоиграх она вообще достигла таких высот. Или проще говоря засчет чего это происходит, что отвечает за детализацию изображений, которое мы видим на своих экранах, запуская очередную любимую игру.
Всем нам нравится, когда в играх реалистичные пейзажи: красиво переливающиеся блики солнца на водной глади, движения каждого листочка на ветке во время ветра, волосы персонажей выглядят лучше, чем у тебя и много другое. В общем все, что нас так притягивает в современных играх не взялось из неоткуда(ежу понятно). Так кто же «виновник торжества»
Может кто-то уже и догадался по названию поста(глупый вопрос, конечно, там ж написано), речь пойдет о шейдерах. Что это, для чего и почему. Постараюсь разложить все по полочкам. Начнем:)
Что вообще такое эти самые шейдеры. Шейдеры — это программки, которые исполняются на видеокарте и описывают эффекты, методы обработки и прорисовки графики. Изначально GPU преимущественно обрабатывали 2D графику. В это время появляются так называемые акселераторы(ускорители). Они берут на себя часть операций, связанную с обработкой графических данных, сами прорисовывают каждый пиксель и определяю его цвет. Все это использовали видеокарты NVIDIA Riva128 и 3Dfx Voodoo. Эти карты брадли на себя только такие задачи как текстурирование и закраску, все остальное выполнял СPU. Естественно картинка была соответствующей. Подумайте сами, процессор и так загружен другими системными задачами, а тут еще ему и графические данные прорисовывать приходится, которые, по сравнению с арифметическими расчетами, просто звери.



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



Однако, но хоть шейдеры — это программы, их количество напрямую связано с качеством вашей видеокарты. Их количество настроено изначально на заводе-производителе и самому изменить это параметр невозможно. Хотя, обладателям консолей не стоит этого бояться т.к игры изначально оптимизируют под консоли и она в любом случае пойдет на приемлемом качестве. И как раз из-за шейдеров обладателям ПК приходится сверять системные характеристики и постоянно увеличивать мощность своего компьютера. Так же нужно помнить, что всего хорошего должно быть в меру. Программист, который разрабатывает шейдеры должен четко понимать что, где и как шейдер должен делать. Иначе получится полная ж… иными словами переизбыток шейдеров ничего хорошего не сулит!


Преимущества использования уникальных шейдеров в компьютерных играх: личный опыт и наблюдения
Эта статья подготовлена в содружестве с разработчиками и гейм-дизайнерами студии zGames.
Несмотря на обилие техник, позволяющих создавать привлекательные визуальные эффекты в компьютерных играх, шейдеры обладают некоторым рядом преимуществ по сравнению с такими распространенными средствами как партиклы или покадровая анимация.
Роль уникальных шейдеров в создании спецэффектов для компьютерных игр
Unity располагает инструментами, с помощью которых можно создавать простые оптические трансформации в пару кликов. Используя набор стандартных скриптов из Unity Asset Store, можно получить огромное количество разнообразных спецэффектов, способных добавить атмосферы игре и ощутимо ускорить процесс разработки.
Что же делать, если перед вами стоит задача создать оригинальный визуальный эффект? Если вам надо сделать игру или какой-то из ее этапов особенно запоминающимся? Здесь не обойтись без создания уникального шейдера. Рассмотрим конкретную ситуацию на примере игры Circle of Life, разработанную студией zGames. В этой игре особый акцент необходимо было придать анимированному объекту – сферической области. Геймплей уже изобиловал достаточным количеством простых эффектов, поэтому этот элемент нужно было выделить с помощью специальных визуальных трансформаций. Так как стандартных инструментов для создания задуманных визуальных эффектов оказалось недостаточно, было решено разработать уникальный шейдер. В итоге, финальный объект реагирует на удерживание пальца на сенсорном экране, увеличиваясь в объеме и меняя структуру. Благодаря уникальным визуальным трансформациям эта сферическая область стала одним из ключевых элементов игры, к которому приковано внимание игрока (ниже показана шейдерная анимация главного объекта игры Circle of Life).
«За» и «против» использования шейдеров в играх
Нецелесообразно создавать уникальные шейдеры для второстепенных элементов. Во-первых, шейдерное программирование тоже процесс весьма трудозатратный. Во-вторых, усилия на разработку здесь будут приложены немалые, а отдача может быть весьма условной: игрок увидит эффект максимум один раз, а может и вообще не заметить. И в-третьих, уникальный шейдер на второстепенном объекте может отвлечь внимание от объектов, которые действительно важны. На скриншоте игры Metal Planet шейдеры засвечивают бирюзовым окна слева (второстепенный элемент). Такой же эффект применен к объектам справа, которые на самом деле являются основными интерактивными элементами. В результате фокус внимания смещается с важной (в текущий момент) части мира.
Рассмотрим еще один пример. Допустим, вы создаете игру, сюжет которой построен вокруг параллельных миров с порталами, точками соприкосновения и прочими космогенными элементами. Вы разработали уникальный шейдер для светящегося кристалла в пещере, который искажает пространство. Из-за визуального акцента на кристалле у игрока может сложиться впечатление, что этот объект важен в основной сюжетной линии или является “пасхалкой” (секрет, который нужно обнаружить), хотя это всего лишь элемент декора в интерьере. В итоге это может просто сбить игрока с толку или даже разочаровать, если ему пришлось потратить время на исследование впустую. В результате нарушается “флоу” (состояние погруженности в игровой процесс). Ниже приведен пример из игры Perimeter. Здесь шейдеры создают слишком много красивостей. Становится непонятно, где сосредоточена важная информация (зоны действия вышек), а где эффект применен просто для визуального разнообразия. Игроку труднее ориентироваться в игровой сцене. Приходиться затрачивать больше времени на понимание ситуации и принятие решений.
Поэтому, взвешивая “за” и “против” разработки шейдера, стоит более тщательно продумать целесообразность и уместность использования этой техники.
Составляем оценку трудозатрат на разработку шейдеров: возможные трудности
Если вы только начинаете осваивать шейдерную разработку, то составление адекватной оценки затрат на реализацию требуемого эффекта может стать нетривиальной задачей. Во-первых, вам потребуется хорошее знание математики и понимание физики процесса, графического конвейера, работы оборудования, алгоритмов обработки изображения и т.п. Например, чтобы успешно использовать технику эмуляции выемок и вмятин (normal/bump mapping), программисту необходимо знать и понимать закон отражения и преломления света. Специалист также должен уметь реализовать эти законы в коде, который в сущности работает с плоской поверхностью и источником света (ниже приведен пример использования техники normal mapping).
Во-вторых, оценка должна включать время, требуемое на отладку программы. Ведь сразу создать идеально функционирующий шейдер вряд ли получится. Необходимо помнить, что процесс разработки шейдеров и традиционного ПО отличаются. Системные приложения располагают рядом средств, позволяющих их отладить качественно. Чего не скажешь об инструментах для отладки шейдеров. Для каждого пикселя 3D объекта программа может выполняться по 50 раз за секунду. Остановить такой процесс в определенном месте для проверки корректности работы программы крайне сложно. В настоящее время для отладки шейдеров используется расширение Microsoft Visual Studio со встроенным графическим отладчиком. Еще одна сложность, подстерегающая на пути шейдерной разработки — отсутствие четкого представления как будет выглядеть конечный результат самостоятельно и в игровом процессе. Может возникнуть необходимость в его доработке или даже повторной разработке. Так что и этот момент необходимо учитывать при составлении оценки.
Добавьте к этому необходимость знания платформ, на которые рассчитана игра, и их возможностей отображать графические элементы – мобильные устройства, WebGL, Smart TV, консоли, устройства дополненной или виртуальной реальности. Таким образом, вы получите список наиболее значимых факторов, которые могут существенно повлиять на ход проекта.
Немного о процессе разработки
Разработка шейдеров требует не только освоения специализированных языков программирования, владения рядом разделов физики и математики, но и понимание этапов разработки игрового продукта. Гейм-дизайнер является ключевым звеном в проекте – следит за тем, чтобы создаваемые элементы и функциональность укладывались в рамки задуманной концепции. За графическую и стилистическую проработку игры отвечает художник. Программист в свою очередь предлагает варианты реализации эффектов в соответствии с видением гейм-дизайнера и художника. За устранением возможных противоречий между замыслом гейм-дизайнера и временем, затрачиваемом на его реализацию, следит проект-менеджер.
Шейдеры и устройства виртуальной и дополненной реальности
Обладая огромным потенциалом передачи сложных визуальных эффектов, устройства виртуальной и дополненной реальности уже занимают ведущее место в рядах популярных гаджетов для компьютерных игр. Несомненно, шейдеры добавляют реализма объектам игр, разрабатываемых для этих носимых устройств. Но на сегодняшний день не все VR- или AR-шлемы смогут воспроизвести эффекты на основе сложных шейдеров вследствие аппаратных ограничений – недостаточно мощной видеокарты и процессора. Более того, не все VR- и AR-платформы предоставляют полный набор функций, необходимых для программирования нативных шейдеров. Тем не менее, индустрия устройств виртуальной и дополненной реальности продолжает активно развиваться. Появление качественного 3D контента с использованием сложных визуальных эффектов на основе шейдеров дело самого ближайшего будущего.
Подводя итоги
Если вам необходимо дополнительно разнообразить визуальный ряд, сделать графику более затейливой, либо если вы хотите добиться графической реалистичности, например, правдоподобного отражения света от поверхностей, искажения предметов, преломления света в воде, передачи внутреннего устройства предмета и т.п., то разработка оригинальных шейдеров здесь будет оптимальным выбором.
Необходимо помнить, что лишний эффект в ненужном месте может отвлечь внимание игрока и даже навредить процессу. Если участник игры недополучает информацию о происходящих действиях с помощью визуальной обратной связи, либо если используемые в игре эффекты создают акцент на второстепенных объектах, то такой процесс становится малопонятным и противоречивым. Как следствие – замешательство игрока, потеря интереса к игре.
В целом, использование шейдеров в разработке игр увеличивает длительность и бюджет проекта, а также накладывает определенные ограничения на использование игровых платформ, для которых создается игра. Однако здесь есть одно неоспоримое преимущество, которое с лихвой компенсирует перечисленные минусы, а именно: несомненное качество графики и уникальность производимого эффекта.
Шейдеры в видеокарте – что это такое: их версии и как они влияют на работу
Всем привет! Сегодня разберем, что такое шейдеры в видеокарте, что дают, как влияют на обработку графики в играх и для чего используются, какие бывают версии и как узнать шейдеры своей платы. О том, что значит OC в наименовании видеокарты NVidia или AMD, можно почитать здесь.
Немного истории
Давным-давно, когда мониторы были большими и пузатыми, а компьютеры маленькими в плане производительности, графику обрабатывал центральный процессор. Этих возможностей хватало, так как и графика была на зачаточном уровне: пиксельные схематические изображения, объекты на которых не всегда можно было узнать.
Видеоигры только зарождались, и пока никто всерьез не рассматривал компьютер как средство для развлечения. Это был рабочий инструмент для выполнения вычислений, к тому же доступный не всякому среднестатистическому американцу.
Шло время, появились первые разработки в сфере компьютерной 3D графики. Вот тут-то и стало понятно, что такую технологию моделирования объектов можно использовать для симуляции виртуальных пространств, живущих по своим законам. Да, речь идет о видео играх.
Простыми словами я рассказываю именно об играх, так как это — прикладная область, которая в полной мере позволяет реализовать 3D технологии. Следующим этапом можно считать унификацию «полномочий» различных игровых компонентов. Так, в отдельный элемент «откололся» так называемый движок — структура, которая отвечает за взаимодействие всех игровых компонентов.
Если вы увлекаетесь видеоиграми, то, конечно же, слышали такие термины как Unity, Cry Engine или Creation Engine. Узкая специализация позволяет игроделам не «изобретать велосипед» каждый раз с нуля, сосредоточившись на главном — созданием непосредственно самой игры.
Любой 3D объект состоит из так называемых полигонов, которые имеют треугольную форму. Детализация объекта будет зависеть от количества таких полигонов: чем их больше, тем четче нарисована каждая мелочь. При выводе изображения на экран полигоны нужно растеризовать, то есть перевести их из трехмерного пространства на плоский экран с сохранением пропорций.
Что такое shedar
Shader переводится с английского как «оттеняющий». Это специальная программа, которая обрабатывает объекты, содержащиеся в игровом коде, и придает им окончательный вид.
По сути, это один из элементов унификации. Если совсем упростить, то разработчик игры попросту задает расположение и форму объекта, а также его текстуру. За отрисовку отвечают уже шейдеры, которые для этого и написаны.
Это еще больше упрощает создание игр: не нужно каждый раз программировать, как именно будут отображаться блики, преломление света, разряды молний и прочие красивости, делающие современные игры крайне реалистичными. Фактически, все это уже есть готовое и содержится в DLL библиотеках, которые обрабатываются шейдерами.
Виды шейдеров
Современные графические адаптеры оснащены универсальным набором шейдеров, который умеет обрабатывать любые объекты. Всего их существует 3 типа:
Все это относится к realtime графике, то есть обработке изображения в режиме реального времени (например, 60 кадров в секунду, как это бывает в играх). Для создания 3D мультфильмов используются совсем другие технологии: качество там такое, что для рендеринга видео нужны очень большие вычислительные мощности.
Как узнать какие шейдеры поддерживает моя видеокарта
Самый простой способ сделать это — установить бесплатную утилиту GPU-Z. Нужная информация отображается в поле DirectX Support. Это будет число в поле SM — например 2.0 (более старая версия) или 3.0 (пригодна для современных игр). Последние модели графических адаптеров поддерживают уже четвертую версию шейдеров.
Также при покупке графической платы обратите внимание на количество шейдеров и их частоту. Принцип прост: чем выше эти параметры, тем лучше.
Для вас будут полезны публикации «Что такое в видеокарте HDCP?» и «Что означает Dual в маркировки видеокарты и что это дает покупателю». Буду признателен, если вы поделитесь этим постом в социальных сетях. До скорой встречи!
Shader — это не магия. Написание шейдеров в Unity. Введение
Всем привет! Меня зовут Дядиченко Григорий, и я основатель и CTO студии Foxsys. Сегодня хочется поговорить про шейдеры. Умение писать шейдеры (и в целом работать с рендером) очень важно при разработке под мобильные платформы или AR/VR, если хочется добиться крутой графики. Многие разработчики считают, что шейдеры — это магия. Что по ним мало хорошей информации, и что чтобы их писать нужно иметь, как мимимум, звание кандидата наук. Да, разработка шейдеров по своим принципам сильно отличается от клиентской разработки. Но основное понимать базовые принципы работы шейдеров, а так же знать их суть, чтобы в этом не было ничего магического и поиск информации по этой теме был простой задачей. Данная серия статей рассчитана на новичков, так что если вы разбираетесь в программировании шейдеров, данная серия вам не будет интересна. Всем же кто хочет разобраться в этой теме — добро пожаловать под кат!
Это вводная статья в которой я расскажу общие принципы написания шейдеров. Если тема будет интересна, то мы разберём уже подробнее в отдельных статьях: вершинные шейдеры, геометрические шейдеры, фрагментные/пиксельные шейдеры, трипланарные шейдеры, скринспейс эффекты и компьют шейдеры (OpenCL, СUDA и т.п.). И в целом всю ту магию, которую можно делать на GPU. Разбираться это будет в контексте стандартного рендер пайплайна Unity. Так LWRP и HDRP мне пока кажутся немного сыроватыми.
Что такое шейдер?
По сути это программа выполняемая на гпу, выходными данными которых является разная информация. В вершинных шейдерах — это параметры вершин меша. Пиксельные шейдеры выполняются попиксельно.
Для понимания того, как работают шейдеры нужно рассказать, что такое графический конвейер (graphic pipeline). Очень часто про эту тему говорят довольно сложными словами, но мы это немного упростим для понимания. Возьмём на примере OpenGL. В этом плане мне очень нравится эта картинка.
Если опустить детали связанные с освещением и т.п. То в целом с точки написания тех же Unlit шейдеров на hlsl суть такова. У нас есть в шейдере
где мы определяем, что вертексная часть шейдера будет писаться в функции vert, а фрагментная — в функции frag.
Структуры которые мы описываем в шейдере определяют какие данные мы будем забирать из меша и после обработки вертексным шейдером, которые висят на нашем MeshRenderer и MeshFilter объекте.
Дальше вертексный шейдер вычисляет получив на вход данные appdata и отдаёт результат в виде структуры v2f, которая дальнейшем пойдёт в фрагментный шейдер. Который в свою очередь уже рассчитает цвет пикселя. Так как информация v2f пишется только в вершины (которых меньше, чем пикселей), данные в фрагментной части интерполируются. Всё это можно представить как то, что vert считается в каждом вертексе независимо. Потом результат передаётся в фрагментную часть, где frag для каждого пикселя считается так же независимо. Так как вычисления производятся параллельно, в данных частях нет никакой информации о соседях (если не передавать её как-то хитро).
Более детально все нюансы, а так же множество примеров описаны в документации Unity docs.unity3d.com/Manual/SL-Reference.html
Языки программирования шейдеров
Дальше с точки зрения изучения шейдеров, когда эти языки уже не вызывают вопросов можно посмотреть какие возможности предоставляет сам по себе«UnityCG.cginc» и другие библиотеки написанные юнити, чтобы упростить себе работу.
Почему if в шейдерах — это плохо?
Тут важно понимать, как шейдеры исполняются на уровне железа и почему они такие быстрые, что могут выполнять миллионы операций не напрягаясь.
Основная идея графических процессоров — это максимальная параллельность вычислений. Тут нужно ввести такое понятие, как “волновой фронт”. По сути оно довольно простое, волновой фронт — это группа шейдеров выполняющая одну и туже последовательность операции. То есть с точки зрения гпу самый лучший вариант, когда в одно и тоже время выполняются одни и те же инструкции. Единственно различие в выполнении — это входные данные. Проблема ветвления в том, что может случиться ситуация, когда в одной группе шейдеров, шейдеры должны вызывать разные операции. Что в свою очередь приводит к созданию нового волнового фронта, копированию в него данных и т.п. А это очень дорого.
Там есть нюансы и исключения, но для того чтобы спокойно писать if, вы должны понимать, как он себя поведёт на целевой версии графического апи. Так как тот же самый OpenGL ES 2 или DX11 в этом плане сильно отличаются.
Зачем мне это знать, ведь есть нодовые редакторы?
Важно понимать, что нодовые редакторы — это в первую очередь инструмент для техникал артистов. Это специалисты, которые имеют экспертизу в математике, но в большей степени являются дизайнерами. Шейдеры типа wireframe (где требуется понимание барицентрических координат) или же преобразование к картезианским координатам, которое используется для хитрых проекций, в разы проще делать кодом, так же как и многие математические модели физических материалов. При этом с точки зрения шейдерного программиста вы по сути делаете кастомные ноды и инструменты для техникал артистов, чтобы творить реальную магию. Нодовые редакторы имеют ограниченный функционал с этой точки зрения. Поэтому важно уметь писать шейдеры на языках типа hlsl. Понимать то, как работает рендер и т.п.
Полезные ресурсы для изучения
С точки зрения изучения шейдерного программирования хорошим упражнением является переписывание шейдеров с www.shadertoy.com или glslsandbox.com. Кроме того существует крутой профиль специалиста из Unity, где можно посмотреть много интересного github.com/keijiro
Всё остальное — это математика и понимание физики эффектов. Это в чём-то похоже на смешивание ингредиентов, если не решается конкретная задача физического моделирования. Много любопытного можно сделать смешивая между собой шум, преломление, подповерхностное рассеивание света, каустику, эффект Френеля, реакцию диффузии и прочие физические свойства объектов. В целом шейдерное программирование это безусловно не элементарно, и там есть куда копать в глубину.
Если тема шейдеров будет интересно, то постараюсь выпустить серию на статей на эту тему, уже с конкретными примерами и туториалами на тему создания разных эффектов. Предлагайте в комментариях про что вам было бы интересно прочитать и какие темы изучить. Спасибо за внимание!
Все эффекты в статье — это запись эффектов шейдеров с shadertoy.





