пройдите тест и узнайте,
какая дизайн-профессия подойдет именно вам

Шейдеры

Шейдеры
25 сентября, 2024
10 мин

Шейдеры (от англ. shaders) — это небольшие программы, созданные на специальном языке программирования, который используется для описания визуальных эффектов в компьютерной графике. Они позволяют создавать и выводить на экран компьютера красивые, реалистичные и динамичные изображения, анимации и эффекты в играх и не только.

Что такое шейдеры: объясняем простыми словами

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

Шейдеры — это программы, которые говорят компьютеру, как рисовать картину с домом, деревьями и небом. Они выполняются на графическом процессоре (GPU), предназначенном для обработки и управления графикой компьютера. Шейдеры позволяют создавать разные эффекты, которые делают картину более красивой и интересной.

Где и для чего используются шейдеры

Основная цель шейдеров — это описание графическому процессору того, как должна выглядеть сцена и как она должна изменяться в зависимости от различных факторов, таких как движение камеры, изменение освещения и т. д. Эта функция требуется во множестве областей, которые работают с 2D- и 3D-графикой. Вот некоторые из них.

  • Игровая индустрия. Шейдеры используются для создания реалистичных эффектов: отражений, теней, разнонаправленного освещения, рассеивания лучей света и текстурирования.
  • Анимация и киноиндустрия. Здесь шейдеры помогают отрисовывать на экране реалистичные материалы (например, стекло, металл, жидкости), создавать спецэффекты (огонь, дым, взрывы и др.), персонажей и окружающий мир.
  • Архитектура и инженерия. В этих областях используются не только черно-белые чертежи, но и эффектные визуализации, например 3D-интерьеры офисов и коттеджей. Шейдеры помогают создавать такие модели, которые выглядят максимально похожими на настоящие.
Шейдеры делают картинку реалистичной
Рендеринг трехмерных интерьеров не обходится без шейдеров: они помогают делать картинку реалистичной, в том числе создавать натуральные эффекты освещения. Автор — OMEGARENDER Visualization Outsourcing. Источник
  • Виртуальная (VR) и дополненная реальность (AR). Здесь шейдеры помогают создавать иммерсивный опыт, придавая окружающему пространству глубину и фактуру.
  • Наука и образование. В этих сферах тоже все чаще применяют сложные графические решения. Шейдеры помогают создавать научные симуляции, например изображать интерактивные карты местности, взаимного расположения планет или визуализации изменения погоды.
использование шейдеров
Визуализация космических проектов с помощью шейдеров
Научные и технологические проекты тоже нуждаются в качественной визуализации. Фрагменты анимации проекта Solar Sailer: The Mission of NEA Scout от Anton Weaver. Источник

Как работает рендеринг и какое место в нем занимают шейдеры

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

В самом общем виде процесс рендеринга выглядит так. 

  1. Моделирование сцены. Компьютер просчитывает, какие у объектов форма, размеры и положение. Затем он учитывает их свойства — текстуры, цвета и материалы. 
  2. Освещение. После этого система определяет источники света, их типы (например, направленный или точечный) и влияние на объекты. Свет может отражаться от стекол, рассеиваться, проходить сквозь листву и т. д. 
  3. Растеризация. Поскольку цель рендеринга — показать зрителю двумерную картинку, компьютер начинает ее отрисовку на уровне пикселей. Все объекты сцены проецируются на плоскость экрана с учетом их размеров, положения, освещенности и других факторов.
  4. Шейдинг. На этом этапе к отрисованным пикселям применяются шейдеры, чтобы сделать вид именно таким, каким его задумал автор: придать нужные тени, отражения, текстуры, цвета и пр. Шейдеры играют ключевую роль в создании визуального стиля сцены.
  5. Постобработка. Происходит финальная обработка отрендеренного изображения с помощью различных фильтров и эффектов, которые улучшают качество. 

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

3д модель из игры без структур
модель с структурами
Процесс создания анимации с шейдерами
Модель для 3D-анимации и стоп-кадр из анимации после рендеринга. Автор — Denirio Thompson. Источник

Виды шейдеров

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

Вершинный шейдер (VS, Vertex Shader)

Он применяется на самом первом этапе графического пайплайна отрисовки картинки. Vertex Shader выполняет ряд расчетов для каждой вершины геометрического объекта, такого как треугольник, квадрат, куб и др. Он преобразует координаты вершины из локального пространства объекта в мировое, затем в пространство камеры, а затем в пространство проекции, чтобы зритель увидел картинку с точным положением элементов относительно друг друга.

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

Вершинный шейдер работает следующим образом:

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

Геометрический шейдер (GS, Geometry Shader)

Шейдер геометрии — это второй этап шейдинга. Он получает данные от вершинного шейдера и работает с ними. GS работает с примитивами: треугольниками, линиями, точками и др. Он умеет изменять их форму и количество, например разбивать или объединять треугольники. Это позволяет создавать сложные геометрические объекты и эффекты, такие как трава, волосы, частицы, туман, дым и др.

Вот упрощенное описание того, как работает геометрический шейдер:

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

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

Пиксельный шейдер (PS/FS, Pixel/Fragment Shader)

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

Вот как работает Pixel Shader:

  • он получает значения атрибутов вершин, которые образуют треугольник, к которому принадлежит пиксель, а также данные о текстурах, источниках света, материалах и др.;
  • производит вычисления;
  • выдает цвет каждого пикселя объектов, которые отображаются на экране.

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

Вычислительный шейдер (CS, Compute Shader)

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

Помимо основных, существует и ряд других видов шейдеров. Вот некоторые из них:

  • шейдер трассировки лучей (RT) — отвечает за симуляцию реалистичного освещения, теней, отражений и преломлений;
  • шейдер материалов (MS) — определяет, как выглядит поверхность объекта и как она реагирует на свет;
  • световые шейдеры (LS) — определяют, как источник света влияет на сцену;
  • шейдер постобработки (PS) — применяется к уже отрендеренному изображению для создания различных дополнительных эффектов, таких как размытие, цветокоррекция, зернистость и др.;
  • шейдер теней (SS) — помогает реализовывать эффект глубины и создавать реалистичные тени от объектов.

На чем пишут шейдеры

Вот несколько распространенных языков программирования для написания шейдеров.

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

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

HLSL (High-Level Shading Language). Это разработанный Microsoft высокоуровневый язык для создания шейдеров. Считается, что его легче освоить и использовать. HLSL применяется в графических процессорах от NVIDIA и AMD и некоторых других.

GLSL (OpenGL Shading Language). Это язык для создания шейдеров в стандарте OpenGL. Он похож на HLSL, но имеет некоторые отличия в синтаксисе и функциях. Язык применяют в графических процессорах от различных производителей, в том числе NVIDIA, AMD и Intel.

CgFX (Cg — сокращение от C for Graphics). Это специализированный язык от NVIDIA, во многом основанный на C.

MSL (Metal Shading Language). Язык, разработанный Apple для создания шейдеров в графических процессорах Apple. У него есть ряд уникальных функций, которых нет в других языках.

Выбор конкретного языка зависит от вашей цели, потребностей и технической базы, на которой будет работать система. Если вы хотите создать сложный шейдер с высокой производительностью, то можно выбрать C++ или CgFX, а если задача относительно простая, то больше подойдут HLSL или GLSL, хотя всё относительно.

В каких программах и сервисах работают с шейдерами

Существует несколько приложений, позволяющих создавать и редактировать шейдеры. Вот некоторые из них.

  • Unity. Это популярный движок для разработки игр. Он имеет свой собственный шейдерный язык ShaderLab и множество готовых решений, которые можно использовать или модифицировать.
  • Unreal Engine. Это еще один мощный игровой движок, в котором можно работать с шейдингом. Движок поддерживает разные языки, включая HLSL, GLSL и др.
  • ShaderToy. Это онлайн-сервис, который позволяет создавать шейдеры на языке GLSL. Здесь есть множество готовых решений, созданных другими пользователями, которые можно посмотреть, оценить и отредактировать. 
  • Visual Studio. Это интегрированная среда разработки, которая поддерживает создание игр и приложений на базе DirectX. У Visual Studio есть собственный встроенный конструктор шейдеров.
  • GLSL Sandbox. Еще одна популярная онлайн-платформа для работы с языком GLSL, позволяющая создавать собственные решения и обмениваться опытом. 

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

Другие термины на букву «Ш»

← Все термины

Читайте также

Подпишитесь сейчас на нашу рассылку

Мы присылаем отличные материалы и никогда не спамим. Отписаться можно в любой момент