我试图用顶点片段着色器创建水面厚度的效果。
我在3D游戏环境中,但它是滚动视图,因此是“2D”视图。 Here是使用片段着色器在真实2D中创建此类效果的好教程 但我认为这不能用于我的情况。 目前我只有一架飞机可以进行折射。
我想应用水厚效果。但我不知道该怎么办。
我暂时不打算用顶点创建一些水变形/位移,这不是重点。
我不知道是否可以使用简单的四边形,我应该使用这样的对象。
以下是一些例子。
非常感谢!
[编辑]添加了雷曼水效果以更好地参考效果。
答案 0 :(得分:2)
我正在尝试使用简单四边形上的顶点片段着色器创建 2D 水效果。
你的第一个误解是用2D思考。您在右图中看到的是光与3D空间中的2个表面的相互作用。一个简单的四边形是不够的。
对于水,您需要一些表面位移。你可以通过求解一些波动方程来模拟这个。或者您正在使用基于傅里叶变换的方法。我建议第二个。接下来,您将场景“定期”渲染为水面以上的所有内容,然后对水线以下的所有内容进行“模糊和折射”。渲染纹理。
然后渲染水面。当观察空气→水界面(即从上方)时,使用菲涅耳反射项,即根据入射角在顶部反射和透视之间混合,并且对于太小的角度模拟布鲁斯特反射。对于水→空气界面(即从下方)你做的类似,只有你不需要菲涅耳术语,而只需要布鲁斯特术语,以考虑全内反射。
由于您在片段着色器中进行了所有混合,因此不需要混合,因此无需对水深进行绘制操作。
是的,提供水并非易事。