1

我正在尝试使用顶点片段着色器创建水面厚度的效果。

我在一个 3D 游戏环境中,但它是一个滚动视图,所以是一个“2D”视图。 是使用片段着色器在真实 2D 中创建此类效果的好教程。
但我认为这不能用于我的情况。目前我只有一架飞机,如果我应用折射的话。

折射

我想应用水的厚度效果。但我不知道该怎么做。
我暂时不尝试使用顶点创建一些水变形/位移,这不是重点。

我不知道是否可以使用简单的四边形也许我应该使用这样的对象。

系统

这里有些例子。

1 2 4 雷曼

非常感谢 !

[编辑] 添加雷曼水效果以更好地参考效果。

4

1 回答 1

2

我正在尝试在简单的四边形上使用顶点片段着色器创建2D水效果。

您的第一个误解是在 2D 中思考。您在右图中看到的是光与 3D 空间中的 2 表面的相互作用。一个简单的四边形是不够的。

对于水,您需要一些表面位移。您可以通过求解一些波动方程来模拟这一点。或者您正在使用基于傅立叶变换的方法。我建议第二种。接下来,为水面以上的所有内容渲染场景“常规”,然后为水线以下的所有内容渲染“模糊和折射”。将两者渲染到纹理。

然后你渲染水面。当查看空气→水界面(即从上方)时,使用菲涅耳反射术语,即根据入射角在顶部反射和透视之间混合,对于太小的角度模拟布鲁斯特反射。对于水→空气界面(即从下方),您做类似的事情,只是您不需要菲涅耳项,而只需要布鲁斯特项来解释全内反射。

由于您在片段着色器中进行所有混合,因此不需要混合,因此无需对水深的绘图操作进行排序。

是的,渲染水并非易事。

于 2013-05-28T10:02:52.767 回答