- Input assembly (входная сборка) - GPU получает из памяти буферы вертексов и индексов, определяет как образованы треугольники и какие данные присвоены вертексам.
- Vertex shading (затенение вертексов) - вертексный шейдер выполняется для каждого из вертексов меша, обрабатывая по отдельному вертексу за раз. Его задача - преобразовать вертекс, получить его положение в пространстве и, применив текущее положение камеры, вычислить его положение на экране (целевом рендере).
- Rasterization (растеризация) - после обработки всех вертексов и получения их координат на экране, треугольники меша растеризируются - преобразуются в наборы пикселов. Значения каждого вертекса - UV-координаты, цвет вершины, нормали и тд. - интерполируются по пикселям треугольника, то есть растягиваются с усреднением. Пример: если один вертекс треугольника имеет черный цвет, а другой - белый, то пиксель находящийся между ними получит серый цвет. Также на этом этапе выполняется ряд программных тестов проверяющих корректность растеризации.
- Pixel shading (затенение пикселов) - далее для каждого растерезированного пикселя выполняется пиксельный шейдер (технически, на этом этапе, это еще не пиксель а фрагмент, по этому иногда пиксельный шейдер называют фрагментным). Суть этого шейдера в том, чтобы задать пикселю цвет посредством сочетания свойств материала, текстур, источников освещения и прочих вводных параметров. Это позволяет привести пикселы к окончательному виду. Пикселов может быть очень много, например на целевом рендере разрешением 1080р их будет порядка двух млн., и каждый из них должен обработаться шейдером минимум один раз. Этот процесс является достаточно громоздким и продолжительным для GPU.
- Render target output (вывод целевого рендера) - финальный пиксель снова проходит ряд программных проверок, и если все отработало корректно, то он записывается в целевой рендер хранящийся в памяти.
Полезно, но написано суховато
Спасибо, очень понятная и информативная статья <3
Благодарю!