Answers:
维基百科上的模板缓冲区定义确实不是很好,它过多地关注了现代实现(OpenGL)的细节。我发现歧义版本比较容易理解:
模具是一种模板,每次使用时都会绘制或绘制相同的字母,符号,形状或图案。由这种模板产生的设计也称为模板。
那就是在计算机图形学之前模具的意思。如果您在Google图片上输入模具,这是第一个结果之一:
如您所见,它只是一个遮罩或图案,可用于将图案的底片“绘制”到某物上。
该缓冲模板的方式完全相同。可以通过执行模板渲染过程,用选定的图案填充模板缓冲区,然后设置适当的模板功能,该功能将定义在后续图形上如何解释图案,然后渲染最终场景。根据比较功能,不会绘制掉落在模板遮罩拒绝区域中的像素。
在实现模板缓冲区时,有时确实需要与深度缓冲区配合使用。大多数图形硬件使用1字节(8位)的模版缓冲区,对于大多数应用程序来说已经足够了。深度缓冲区通常使用3个字节(24位)来实现,通常对于大多数3D渲染来说足够了。因此,将模板缓冲区的8位与深度缓冲区的其他24位打包在一起是合乎逻辑的,从而可以将每个深度+模板像素存储为32位整数。那就是维基百科的意思:
深度缓冲区和模板缓冲区通常在图形硬件的RAM中共享相同的区域。
模板缓冲曾经是国王的一个应用是用于阴影渲染,这种技术称为阴影体积,有时也适当地称为模板阴影。这是对缓冲区的非常巧妙的使用,但是如今,大多数渲染字段似乎已转向基于深度的阴影贴图。
模板缓冲区是无符号整数缓冲区,如今通常为8位,您可以在模板测试后根据各种操作(例如OpenGL Ops)的使用,根据需要填充每个像素的信息。
模板测试仅是按像素进行的操作,其中将针对当前像素模板值针对模板缓冲区的内容进行测试。您设置模板测试通过的条件(例如,始终,更少等)。
您可以根据测试结果来决定模具值的变化(在OpenGL中,使用我上面链接的操作)
模板缓冲区有很多用途,首先想到的是:
过去,它还用于阴影技术,例如“阴影体积”。
较差的模板缓冲区通常被低估了,但是在图形程序员的工具库中可能是一个很好的武器。
[*]使用正确的SRV在后处理中回读的值!
编辑:另外,值得一提的是,在Shader Model 5.1(因此D3D11.3和D3D12)中,您可以通过以下方式访问模具参考值 SV_StencilRef
模板缓冲区包含每个像素的整数数据,该数据用于增加对渲染像素的控制。
模板缓冲区的操作类似于深度缓冲区。同样,模板数据也存储在深度缓冲区中。深度数据确定哪个像素最接近相机时,模版数据可以用作更通用的每像素掩码,以保存或丢弃像素。若要创建遮罩,请使用模板功能将每次渲染像素时将参考模板值(全局值)与模板缓冲区中的值进行比较。
总的想法是,可以设置每个像素的值,然后设置操作(GREATER
,SMALLER
,EQUAL
等等),当这个计算结果为True的像素被遮蔽,并示出。
一种应用是实时反射,当渲染反射纹理时,模版缓冲区用于为应用反射的位置创建蒙版。例如,仅将反射应用于玻璃材质阴影三角形。它也可以用于为整个帧缓冲区创建任意二维蒙版。
cleaver
->clever
。我无法对其进行编辑D:好的答案,到目前为止,这是最有意义的。