2D水顶面轮廓


9

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

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

折射

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

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

系统

这里有些例子。

1个 2 4 雷曼

我对如何产生这种效果一无所知。

非常感谢 !

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


您目前的水效果如何?如果帖子中的第一个屏幕截图是您的,则好像您是在场景上绘制2D方形图一样,带有使它变形的着色器。如果是正确的话,为什么您不能按照教程中的说明进行操作,该说明也是基于使用变形的2D纹理的?
内森·里德

我有一个3D四边形,其顶点碎片着色器使背景变形(背景由Unity GrabPass功能捕获)。我认为使用2D纹理不是一个好主意,我在想一些更通用的带有可自定义参数的方法,但是似乎没有其他方法……而且会更慢吗?
2013年

Answers:


1

在着色器中有一个指定湿度的值。小于0表示空气,大于1表示水,其间表示弯月面。

这是一些伪代码:

vec2 uv2 = bigWaves(uv); // modify the texture coords to create a wavy water effect
float wetness = (uv2.y - 0.1) * 100;

if( wetness<0.0 )
{
    gl_Fragment = texture2D(screen_texture,uv); // is air - no refraction or effect
}
else if( wetness>1.0 )
{
    vec2 uv3 = smallWaves(uv2); // modify the texture coords to create a ripply water effect
    gl_Fragment = texture2D(screen_texture,uv3); // is water - with refraction
}
else
{
    gl_Fragment = vec4(1,1,1,1); // solid white meniscus
}

这是我能做到的最简单的方法。如果是我,我会做些复杂的事情来消除半月板的锯齿,并在那儿施加更多的折射或其他什么操作,但是我无法告诉您什么,因为这将需要美学上的反复。另外,我会给水样本着色和模糊。但是,我将全部交给您。


是的,这是个好主意!我完全同意模糊和色调。我还添加了一个depth(Y)梯度(也许是另一个depth(Z)梯度)。我也应该在弯月面区域添加不同的折射效果,但目前我正尝试像雷曼一样产生涟漪效果。但是我不知道如何。也许我应该对弯月面使用不同的“贴图”以产生这种重复效果。我不知道你是否明白我的意思。
2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.