Шейдер 101 | Кодементор

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

Не все могут писать шейдеры!

Я не могу обещать, что вы станете гуру шейдеров после прочтения этой статьи, но, по крайней мере, я могу дать вам представление о том, с чего начать.

Этот пост об истории шейдеров и о том, что побудило программистов использовать шейдеры. В код не влезет, по крайней мере не в этом посте. Просто разминка!!

Мы не будем тратить слишком много времени на фиксированные функции, так как в этом посте нам предстоит многое осветить. Конвейер с фиксированными функциями относится к конвейеру предыдущего поколения, который на самом деле не поддавался контролю — точный метод преобразования геометрии и то, как фрагменты (пиксели) приобретали значения глубины и цвета, были встроены в аппаратное обеспечение и не могли измениться. Но затем появился программируемый конвейер, который дал программисту большую гибкость. В фиксированном конвейере много работы приходилось выполнять на ЦП. С графическими процессорами вы можете перенести эту работу на процессоры видеокарты (которые специально разработаны для этого и, следовательно, ОЧЕНЬ быстро с ним работают). Например, анимация персонажа со скелетом. Во-первых, нам нужно было сделать все преобразования на процессоре. Теперь мы можем сделать это в вершинном шейдере. Это экономит время на ЦП, которое вы можете использовать для других (не графических) вещей. Физика или ИИ.

Википедия

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

Давайте погрузимся в

До DirectX 8 и OpenGL Язык ассемблера ARB, у графических процессоров был фиксированный способ преобразования пикселей и вершин, называемый «Фиксированный трубопровод» (упомянутое выше). Это сделало невозможным для разработчиков изменить способ преобразования и обработки пикселей и вершин после передачи их в графический процессор, и сделало игры очень похожими с точки зрения графики.

Но прежде чем мы начнем, я хочу упомянуть кое-что о 3D-сетках.

Итак, все 3D-модели, которые вы видите, состоят из треугольников (почему? Потому что любую плоскость можно разбить на треугольник со всеми вершинами в одной плоскости), каждая из которых имеет 3 вершины и грань. Матрицы играют очень важную роль представления. (Больше информации)

Программы, которые мы пишем на Java/C/C++/C#, обрабатываются на CPU точно так же, как шейдеры обрабатываются на GPU. Стоит отметить, что графические процессоры имеют параллельную архитектуру, тогда как процессоры обрабатывают данные последовательно. (Больше информации)

ЦП против графического процессора

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

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

  1. Вершинный шейдер
  2. Геометрический шейдер
  3. Тесселяция/шейдер HULL
  4. Фрагментный/пиксельный шейдер
  5. Вычислительный шейдер

В этой серии мы сосредоточимся на вершинных и фрагментных шейдерах. Но прежде чем мы коснемся их, коротко об оставшихся трех шейдерах.

Тесселяция/шейдер HULL— Как следует из названия, он делает все, что связано с тесселяциями в конвейере, т. е. разбивает большие поверхности на меньшие поверхности — треугольники. Называется в честь вершинного шейдера. В конвейере рендеринга Unity он действует как шейдер с фиксированной функцией, что означает, что они не программируются и встроены в аппаратное обеспечение.

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

**Вычислительный шейдер ** — это шейдер общего назначения, который используется вне конвейера. Он не используется для рисования примитива или затенения пикселя. Его основная роль заключается в ускорении частей рендеринга игры.

Конвейер шейдеров

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

Конвейер шейдеров высокого уровня

Я хотел бы обсудить Vertex Shader и Fragment Shader, но прежде чем перейти к этим типам Shader, мы должны изучить некоторые важные понятия, такие как Rasterizer, Lightning Path, Transformations и основы векторной математики. Так что терпите меня, в следующем посте мы рассмотрим эти темы.

_Полезные ссылки — _треугольник и пиксели

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

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *