水のマテリアル研究① 近い場所と遠い場所、水の色が違う
「昨日色々話を聞いてきたんだけど、水のマテリアルは複雑だけど1つ1つ見れば解読は可能だという話をしてて、これはちょうど気になってるやつだったから、今使ってるやつを解読してみようかと」
「今回の目的としては、これをなんとかしたい。何かシミみたいなやつが出る」
妹「なんだろ? 光が反射してる中に、反射してないところがある?」
「M_LakeWaterマテリアルは、モバイルでもそこそもまともに表示出来るんだけど、このシミだけがどうにも気になる。でも機能別サンプル水面の表現のサンプルをそのまま使ってるから、原理がわからず直しようがなかったという」
「で、やっぱり複雑ではあるんだけど、最終的にはベースカラー、メタリック、ラフネス、ノーマルの四ヶ所にいきつくわけだから、個別にやれば出来るかなあと」
「で、とりあえずベースカラーだけ考えるために、他の要素を外した状態にしてみた。どうもこれは、近くの水と遠くの水の色を変える処理らしい。Lerpは以前ブループリントで使ったのと同じ。0から1の小数で、2つのパラメータを混ぜる。今回は色だから、2つの色の中間が出てくるはず」
妹「その下にあるFresnelというのは?」
「これはマテリアル用のノードで、表示用カメラとポリゴンの角度によって、0~1の数字が出てくる。水面はだいたい真上を向いてるから、カメラを下に向けた時の色と、前に向けて遠くを見た時で色が違う」
近く(下を向いたカメラ)
遠く(前方を向いたカメラ)
「真下を向くと濃い色で、そこからだんだんと明るい色に変化してる」
妹「カメラとの距離とは違うんだよね?」
「距離とは違う。あくまでカメラと水面と角度だから、上空高く飛んだとしても、真下はやっぱり青く見える。本当の水は空の色を反射したりとか、もっと複雑な処理なんだろうけど、それに近くなる計算式で代用してる感じ」
妹「じゃあLerpの横のPowerは?」
「Powerっていうのはべき乗のノードなんだけど、それがあるとないとでは、結果としてはこういう違いが出る」
妹「暗くなるの?」
「単純に暗くしてるわけじゃなくて、暗い部分は暗く、明るい部分はそのままって感じになる。ただ暗くしたいなら混ぜる前の色を暗くすればいいし、これはsRGB関係の調整かなって気がするけど、良くはわからない」
妹「そういえばこのベースカラーだけの水だと、さっきのシミでてこないね」
「あ、それは出なくなった。少なくともベースカラーが原因じゃないっていうのは確認できた」