2D水上面プロファイル


9

頂点フラグメントシェーダーを使用して、水面の厚さの効果を作成しようとしています。

私は3Dゲーム環境にいますが、それはスクロールビューなので、「2D」ビューです。 以下は、フラグメントシェーダーを使用して実際の2Dでこのような効果を作成するための優れたチュートリアルです。
しかし、これは私の場合には使用できないと思います。今のところ、屈折を適用するのは平面だけです。

屈折

そして、水厚効果を適用したいです。しかし、私はそれを行う方法がわかりません。
現時点では、頂点を使用して水の変形/変位を作成しようとはしていません。これはポイントではありません。

シンプルなクワッドで可能かどうかはわかりませんが、このようなオブジェクトを使用する必要があるかもしれません。

システム

下記は用例です。

1 2 4 レイマン

この効果をどのように作成するかについては、私にはまったくわかりません。

どうもありがとう !

[ 編集 ]レイマンウォーターエフェクトが追加され、エフェクトの参照が改善されました。


現在、水の効果をどのようにしていますか?投稿の最初のスクリーンショットがあなたのスクリーンショットである場合、2Dクワッドをシーン上に描画しているように見えます。それが正しければ、歪んだ2Dテクスチャの使用に基づいたチュートリアルの指示に従うことができないのはなぜですか?
ネイサンリード

背景を歪める頂点フラグメントシェーダーを備えた3Dクワッドがあります(背景はUnity GrabPass機能によってキャプチャされます)。2Dテクスチャを使用するのは良い考えではないと思います。カスタマイズ可能なパラメーターを使用したより一般的なものを考えていましたが、他に方法はないようです...遅くなるでしょう?
MaT 2013年

回答:


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)グラディエント)も追加しています。メニスカスゾーンにも別の屈折効果を追加する必要がありますが、今のところ、レイマンのように波紋効果を持たせようとしています。しかし、私は方法がわかりません。たぶん、この複製効果を得るために、メニスカスに異なるテクスチャを使用する必要があります。私の言っていることがわかっているかどうかはわかりません。
MaT 2013年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.