T.M. SoftStudio

feci quod potui, faciant meliora potentes

WebGL: Термины и понятия - Rendering или Graphics Pipeline

Полностью

Рабочий процесс визуализации (Rendering или Graphics Pipeline):

  • Создание вершинных массивов (vertex arrays) и массива индексов (index array).

Vertex array — массив вершинных атрибутов (vertex attribute), используемых в качестве входных данных для шейдера. Вершинный атрибут (vertex attribute) содержит информацию о позиции вершины модели, ее нормали, цвете и текстурных координатах, которые связывают вершину с точкой на текстуре.

Помимо массива вершинных атрибутов также создается массив индексов (element array или index array).

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

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

Могут быть созданы также универсальные значения (uniform) — константы, используемые шейдерами, например, текстуры.



  • Передача вершинных массивов и массива индексов в графический процессор GPU и создание вершинных буферов (attribute buffer или vertex buffer) и буфера индексов (index buffer). Может быть создан также буфер универсальных значений (uniform buffer) для хранения универсальных значений (uniform).

  • Обработка графическим процессором элементов вершинного буфера с помощью вершинного шейдера (Vertex Shader).

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

  • Составление графическим процессором спроецированных вершин в треугольники с помощью массива индексов (Triangle Аssembly или Primitive Assembly).

  • Растеризация (Rasterization или Rasterization and Interpolation) — состоит из трех стадий — обрезание (Clipping), растеризация (Rasterization) и интерполяции (Interpolation). В результате создаются пиксельные фрагменты (pixel-sized fragment).

Обрезание (Clipping) — обрезание тех частей треугольников или примитивов, которые не вошли в экран.

Растеризация (Rasterization) — определение набора пикселей, которые заполняют треугольник или примитив.

Интерполяции (Interpolation) — вычисление значения каждого пикселя внутри треугольника или примитива, основываясь на вершинных атрибутах и расстоянии пикселя до вершин.




  • Fragment Shader или Pixel Shader обрабатывает каждый пиксель (пиксельный фрагмент), добавляя текстуру и источник света. Фрагментный шейдер выдает конечный цвет и глубину пикселя.

  • Framebuffer кадровый буфер формирует конечное 2D изображение из пикселей, получаемых от фрагментного шейдера. Кадровый буфер имеет буфер цвета (color buffer), а также буфер глубины (depth buffer) и буфер трафарета (stencil buffer).

Буфер глубины (depth buffer) — тестирует фрагменты, отбрасывая фрагменты с одинаковыми координатами x,y, но с большей глубиной (z), оставляя самый ближний фрагмент.

Буфер трафарета (stencil buffer) — фильтрует фрагменты согласно трафарета.

Хранение данных буфера глубины и буфера трафарета в памяти обеспечивает буфер визуализации (renderbuffer).