実現したいこと
ランベルト・ベールの法則を使って、水中の物体を水深に応じてグラデーション表示したい。
知りたい事
上の実現したい事が知りたい。
理想形はこちらのプレビュー画像のようなグラデーションです: https://godotshaders.com/shader/another-water-shader/
前提
Engine: Godot 4.x
Language: C#
Shader: godot shader graph
モデル: Plane
その他:Render Priorityを1です。
該当のソースコード
画像説明
1,FloatParameterノードのmaxDepthは最大深度です
2,Vector3ParameterノードのVector3 Parameterはランベルト・ベールの法則で使う値です。
3,Clamp()ノードはHDRによる光りすぎを防止するために使っています
4,LinearDepthノードは深度値を線形空間で返す
5,viewノードはそのピクセルが、カメラからどれくらい離れているか(View Space 上の位置)
2枚目の画像
試したこと2の内容になります
Alphaに付け替えて、表示された現状の画像です
グラデーションはされませんが、深度値は有効な模様です
処理内容
処理内容は: LinearDepthノードでカメラからの物体までの距離とviewノードまでの距離を使ってそこにベクトルの値を掛け算して、ランベルト・ベールの法則を使いexp()ノードで最後描画していいます。
試したこと
1,提示画像でデプスバッファを表示しているのですが、現状はすべて同じ色なのでグラデーションが発生しません。
2,Alphaに付け替えと薄い黒が表示されるのですが、真上から見たりしても、グラデーションがなく
深度に応じたものではなく、ただの単色です。
3,Vector3の値を変更したり、maxDepthの値を触りましたが変化しません
4,小さくして考えて、単純にlinearDepthをalphaに繋いだり、深度バッファをモデルに描画することから、順番に調べました。
調べたこと
Youtube検索ワード: godot ocean shader
あなたの回答
tips
プレビュー

