我一直在和你一起工作 这个ES扩展 有一段时间了,但我仍然不太明白这些阴影采样器是什么以及可以用它们做什么。谷歌搜索并没有给我带来任何漂亮,可读的结果,所以我在这里发帖。
我正在寻找能帮助我真正了解这些可以做些什么的东西。这可以是现实使用案例,也可以说明这些与普通采样器有何不同。我的意思是,他们存储深度数据。但是这些数据是如何产生的?它只是由一个绑定到深度附件的纹理制成的吗?
另外,我的问题同样适用于DT(桌面)GL和ES,也可能适用于WebGL;我并不真正关心确切的调用或枚举,因为它们很容易在规范中找到。
一个 “影子采样器” 是一个用于的采样器 深度比较纹理。通常,如果访问深度纹理,则会在该纹理坐标处获得(过滤的)深度值。但是,使用深度比较模式,您正在做的是不同的操作。
对于从纹理中提取的每个样本,将深度与给定值进行比较。如果比较通过,那么获取的样本实际上是1.0。如果比较失败,则为0.0。然后过滤然后处理样本 后 这种比较。因此,如果我正在进行线性滤波,并且一半的样本通过比较而一半不通过,则得到的值为0.5。
要做到这一点,你必须同时激活你正在使用的采样器对象/纹理对象的深度比较,但是你 也 必须在着色器中使用阴影采样器。原因是纹理访问功能现在需要采取额外的值:比较纹理访问的值。
这主要用于 阴影贴图, 由此得名。阴影贴图存储从光到最近曲面的深度。因此,您将其与从光到渲染表面的深度进行比较。如果渲染的表面比阴影贴图中的光线更接近光线,则从阴影采样器获得1.0。如果表面距离光线较远,则得到0.0。在任何一种情况下,您将该值乘以灯光颜色,然后照常执行该灯光的所有灯光计算。
在采样之前进行比较的原因是所谓的“百分比更近的过滤”。深度值之间的过滤不会产生合理的结果;这不是你想要的。您想先进行比较,然后过滤比较的布尔结果。然后你得到的是测量深度纹理中有多少样本通过比较。这样可以沿阴影边缘获得更好的效果。