Определение буфера трафарета в Википедии действительно невелико, оно слишком сильно фокусируется на деталях современных реализаций (OpenGL). Я считаю, что неоднозначную версию легче понять:
Трафарет - это шаблон, используемый для рисования или рисования одинаковых букв, символов, фигур или узоров при каждом его использовании. Дизайн, созданный по такому шаблону, также называется трафарет.
Вот что имел в виду трафарет перед компьютерной графикой. Если вы набираете трафарет в Google Images, это один из первых результатов:
Как вы можете видеть, это просто маска или шаблон, который можно использовать, чтобы «нарисовать» негатив шаблона на чем-то.
Трафарет буфера работ в точно так же. Можно заполнить буфер трафарета выбранным шаблоном, выполнив этап рендеринга трафарета, затем установить соответствующую функцию трафарета, которая будет определять, как шаблон должен интерпретироваться на последующих чертежах, а затем визуализировать финальную сцену. Пиксели, попадающие в отбракованные области маски трафарета, согласно функции сравнения, не рисуются.
Когда дело доходит до реализации буфера трафарета, иногда он действительно связан с буфером глубины. Большинство графического оборудования использует 1-байтовый (8 бит) трафаретный буфер, что достаточно для большинства приложений. Буферы глубины обычно реализуются с использованием 3 байтов (24 бита), чего обычно достаточно для большинства видов трехмерного рендеринга. Поэтому логично упаковать 8 бит буфера шаблонов с другими 24 буферами глубины, что позволяет хранить каждый пиксель глубины + трафарета в 32-битном целом числе. Вот что подразумевает под Википедией:
Буфер глубины и трафаретный буфер часто совместно используют одну и ту же область в ОЗУ графического оборудования.
Одно из приложений, в котором буфер трафарета использовался как король, предназначалось для рендеринга теней, в технике, называемой теневыми томами , или иногда также соответствующим образом называемой тенями трафарета . Это было очень умное использование буфера, но в настоящее время большая часть поля рендеринга, похоже, сместилась в сторону основанных на глубине теневых карт.
cleaver
->clever
. Я не могу отредактировать его. D: Между прочим, отличный ответ, в этом пока есть смысл.Буфер шаблонов представляет собой целочисленный буфер без знака, обычно в настоящее время 8-разрядный, где вы можете заполнять информацию на пиксель по своему усмотрению, основываясь на использовании различных операций (например, OpenGL Ops ) после теста на шаблон.
Тест трафарета - это просто операция на пиксель, в которой текущее значение пиксельного трафарета проверяется на соответствие содержимому буфера трафарета. Вы устанавливаете условие, к которому проходит тест трафарета (например, ВСЕГДА, МЕНЬШЕ и т. Д.).
Вы можете решить, что произойдет со значением трафарета, в зависимости от результата теста (в OpenGL с помощью операции, которую я связал с вами выше)
У буфера трафарета довольно много применений, первое, что приходит на ум:
В прошлом это использовалось также для методов затенения, таких как объем теней.
Плохой трафаретный буфер часто недооценивается, но может быть хорошим оружием в арсенале графического программиста.
[*] Значение, которое будет считано в пост-процессе с использованием правильного SRV!
РЕДАКТИРОВАТЬ: Кроме того, стоит отметить, что в Shader Model 5.1 (например, D3D11.3 и D3D12) у вас есть доступ к эталонному значению трафарета через
SV_StencilRef
источник
Источник: Что такое трафаретный буфер? | Сеть разработчиков Microsoft
Общая идея заключается в том, что вы можете установить значение для каждого пикселя, а затем установить операцию (
GREATER
,SMALLER
иEQUAL
т. Д.), Когда это оценивается как true, пиксель заштрихован и показан.Одним из приложений является отражение в реальном времени, при рендеринге текстуры отражения буфер трафарета используется для создания маски, к которой применяется отражение. Например, примените отражение только к заштрихованным треугольникам стеклянного материала. Его также можно использовать для создания произвольных двумерных масок для всего кадрового буфера.
источник