“阴影采样器”是用于深度比较纹理的采样器。通常,如果您访问深度纹理,则会在该纹理坐标处获得(过滤的)深度值。但是,使用深度比较模式,您所做的是不同的操作。
对于从纹理中提取的每个样本,您将深度与给定值进行比较。如果比较通过,则提取的样本实际上是 1.0。如果比较失败,则为 0.0。然后在比较之后对样本进行过滤。所以如果我在做线性过滤,一半的样本通过比较,一半没有,我得到的值为 0.5。
为此,您必须在正在使用的采样器对象/纹理对象上激活深度比较,但您还必须在着色器中使用阴影采样器。原因是纹理访问函数现在需要一个额外的值:用于比较纹理访问的值。
这主要用于阴影贴图,因此得名。阴影贴图存储从灯光到最近表面的深度。因此,您将其与从灯光到正在渲染的表面的深度进行比较。如果要渲染的表面比阴影贴图中的表面更接近灯光,那么您会从阴影采样器中获得 1.0。如果表面离光源较远,则为 0.0。在任何一种情况下,您都将值乘以灯光颜色,然后照常对该灯光进行所有照明计算。
在采样之前进行比较的原因是所谓的“百分比更接近过滤”。在深度值之间进行过滤不会产生合理的结果;这不是你想要的。您想先进行比较,然后过滤比较的布尔结果。然后你得到的是深度纹理中有多少样本通过了比较的测量。这会在阴影边缘提供更好的效果。