Шакоретка

Шакоретка 

Crazy mad man driven by pie and coffee 🥧☕️

3subscribers

13posts

Showcase

1
goals1
0 of 500 paid subscribers
Ухожу из найма, посвящаю себя активности в сети, качество и количество контента увеличивается.

Растеризация в 3D графике от Классики до MeshShader

Статья описывает классический пайплайн отрисовки графики при помощи растеризации геометрии и его будущее.
Классический пайплайн отрисовки при помощи растеризации можно описать как линейную последовательность. В ней каждый этап передает преобразованные данные следующему, а также использует глобальные данные, называемые Uniforms.

Как это работает:

1. Input Assembler - этап, на котором данные обретают форму. Вершины подготавливаются для Vertex Buffer: определяются типы данных и их размерность (позиция, UV, нормаль, Vertex ID и т.д.).
2. Vertex Shader - преобразует данные вершин и их положение в Clip Space пространстве с помощью перемножения матриц, подробнее о пространствах и преобразованиях в моей статье на DTF. Также в нем можно задавать новые параметры для вершин: цвет, псевдослучайные величины и т.д.
3. Tessellation - динамически усложняет геометрию, разделяя существующие примитивы для увеличения детализации. Применяется для локальных эффектов: следы на снегу, процедурный ландшафт или волны.
4. Geometry Shader - генерирует новую геометрию на основе полученных примитивов. Например, превращает линию из двух вершин в квад. Находит применение в создании травы, волос или систем частиц, чем активно пользовались разработчики Ghost of Tsushima.
5. Rasterizer - когда положение вершин определено, геометрия аппроксимируется во фрагменты на экране. Данные между вершинами вычисляются через интерполяцию в барицентрическом пространстве каждого треугольника. Здесь же отсекается всё, что вне экрана, и происходит Face Culling.
6. Fragment Shader - обрабатывает каждый фрагмент для определения цвета пикселя. Здесь происходит сэмплирование текстур на основе интерполированных UV или мировых координат (например, при трипланарном текстурировании).
7. Merger - финальный этап. Сравнивает значения пикселя с масками и глубиной (Depth Test), после чего записывает результат в Render Target. Это критически важно для работы прозрачности и Stencil Buffer.

Куда это движется дальше?

Классический пайплайн накладывает много ограничений. Тесселяцию и геометрические шейдеры сложно и дорого использовать, в индустрии их почти не трогают, а в некоторых студиях они вообще считаются табу. Кроме того, мы ограничены в работе с топологией: мы можем создавать геометрию, но не можем эффективно её вычитать.
На смену приходит Mesh Shader, который заменяет собой связку Vertex, Tessellation и Geometry стадий. По сути, это Compute Shader, адаптированный под задачи растеризации.
Mesh Shader работает в паре с Amplification Shader который определяет, сколько Mesh-шейдеров нужно запустить. Расчеты ведутся параллельно, распределяясь по потокам и образуя так называемые мешлеты (кластеры геометрии).
Технология еще изучается, и уже демонстрирует существенный прирост производительности и возможностей. Она позволяет куллить невидимые треугольники на лету, дает доступ к продвинутому динамическому лодированию и отлично справляется с процедурной генерацией, что наглядно продемонстрировали разработчики Alan Wake 2, полностью перейдя на MeshShaders.
Так как MeshShaders это новый подход к пайплайну, а не полное его изменение, Fragment контекст остается не тронут и не требует изменений. Very круто 👍
Если вам это напомнило принципы работы Nanite в Unreal... вы смотрите в верном направлении :^>
Подробнее можно узнать из лекции Radosław Paszkowski на конференции Digital Dragons.
Subscription levels1

Flower

$3.4 per month
• Доступ к статьям на Boosty.
• Доступ к закрытому Telegram каналу.
• Большинство статей в Telegram канале те же, что и на Boosty.
• Доступ к Telegram каналу остается у вас навсегда.
Go up