【问题标题】:2D Water top surface profile二维水面轮廓
【发布时间】:2013-05-28 07:38:07
【问题描述】:

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

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

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

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

这里有一些例子。

非常感谢!

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

【问题讨论】:

  • 您为什么认为这种效果是“在一个简单的四边形上”创建的?
  • 对不起,我说错了,我的意思是我已经制作了一个带有折射的着色器并且它被应用到了一个四边形上。我想知道在这种情况下我如何才能发挥这种效果。
  • 这些图片都没有显示任何refraction
  • 我知道,我不是在谈论折射效果。我已经这样做了。这里我只说顶层水面的厚度。现在我只是有我的四边形的直线边界。你懂我的意思吗 ?而且我不知道如何创建这种厚度效果。
  • @MaT:水面没有“厚度”(至少没有可见的厚度)。您所说的“厚度”实际上是水和容器/玻璃之间的半月板(en.wikipedia.org/wiki/Meniscus)的总内部折射的结果。你不能只用一个四边形来做到这一点。您必须渲染复杂的水面才能获得这种效果。

标签: opengl directx unity3d shader hlsl


【解决方案1】:

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

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

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

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

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

是的,渲染水不是小事。

【讨论】:

    猜你喜欢
    • 2011-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-10
    • 1970-01-01
    • 1970-01-01
    • 2020-01-14
    • 2020-08-16
    相关资源
    最近更新 更多