GLSL玻璃效果加上深度剥落

GLSL glass effect plus depth peeling

本文关键字:深度 玻璃 GLSL      更新时间:2023-10-16

我正在渲染一个场景,可能有多个相交的透明对象。这使得标准的排序和从后向前绘制的方法存在问题(如果三角形相交,甚至对三角形进行排序也无法工作)。所以我已经使用GLSL片段着色器实现深度剥离来进行第二次深度测试。效果很好。

现在我希望能够使用着色器应用某些效果。场景中的一个物体是一个注射器,我想应用一个玻璃效果。如果我是向后画,这将是很容易的-只要启动着色器当我画注射器,因为它后面的一切都已经在帧缓冲区。然而,当使用深度剥离时,这种方法将不起作用。

我的问题是:

  1. 当使用深度剥离时,我如何将着色器效果应用于场景中的单个对象?
  2. 我如何结合效果着色器与我的深度剥离着色器(假设他们需要在同一时间运行)?

我应该注意到我在使用着色器方面很新,所以代码示例很受欢迎!

如果没有光线追踪,我将感到惊讶。据我所知,使用折射着色器的方法是在环境地图中进行纹理查找。这个地图既可以预先计算,也可以在单独的渲染通道中动态计算。对于后一种选择,你需要一个单独的环境地图和一个额外的通道为每个对象使用着色器。我有点怀疑,如果物体相互相交,这是不可能的。即使是这样,对于每一个这些通道,你也需要另外几个通道来进行深度剥离。现在,如果你还想让深度剥离着色器通道考虑周围物体的折射,这将很快失控。