Skip to main content

Что такое трафаретный буфер?

В программировании компьютерной графики, трафаретный буфер - это область памяти, которую можно рисовать и использовать по отношению к другим графическим буферам для достижения различных эффектов или для маскировки областей сцены, чтобы они не обрабатывались или не отображались. Трафаретный буфер - это буфер на пиксель, аналогичный черно-белому изображению, в котором каждое местоположение в буфере может содержать значение, которое чаще всего имеет длину не более 1 байта, но может быть всего 1 бит. Первоначально буфер был спроектирован как действительная или ложная маска, очень похожая на трафарет реального мира, поэтому области сцены можно было скрыть или игнорировать, установив для значений различных областей буфера трафарета значение, отличное от нуля. Существует несколько вариантов использования буфера помимо простой маскировки, включая рисование теневого объема, создание ореолов вокруг объектов или определение областей, где объекты перекрывают друг друга. Во многих случаях буфер поддерживается в графической памяти графической карты, поэтому к нему можно быстро получить доступ во время рендеринга.

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

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

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