Skip to content

WF_Water Manual

whiteflare edited this page Dec 11, 2022 · 15 revisions

WF_Water マニュアル

UnlitWF/Water は、水面を描画するシェーダと付属の特殊効果を描画するシェーダで構成される、水シェーダのアセットです。 このページでは WF_Water の設定方法について説明します。

Image from Gyazo

サンプルマテリアル

設定済みマテリアルが Example の unitypackage 内 Unlit_WF_ShaderSuite/Examples/Water/WaterMaterials に収録されています。 複製してご利用ください。

Image from Gyazo

シェーダの全体構成について

WF_Water では、複数のシェーダとマテリアルの組み合わせで、水を描画します。

Image from Gyazo

  • 水面の描画
    • WF_Water_Surface (Opaque, Transparent, TransparentRefracted)
  • コースティクスの描画
    • WF_Water_Caustics (Addition)
  • 深度の描画
    • WF_Water_DepthFog (Fade)

水面の描画

WF_Water_Surface シェーダが水面を描画します。

Image from Gyazo

RenderTypeの選び方

WF_Water_Surface シェーダには RenderType の異なる3種類が存在します。

Image from Gyazo

  • WF_Water_Surface_Opaque
    • 不透明シェーダです。水面下の描写(屈折・コースティクス・深度・その他の水面下のジオメトリ)が不要なときに使用してください。
    • 不透明シェーダのため、RenderQueue に関係する描画不良を起こさないメリットがあります。
  • WF_Water_Surface_Transparent
    • 半透明シェーダです。水面下の描写(コースティクス・深度・その他の水面下のジオメトリ)を透過して確認することができます。屈折のみ利用できません。
  • WF_Water_Surface_TransparentRefracted
    • 上記の Transparent に『屈折』機能を追加したものです。品質は最高ですが、他のシェーダと比較すると高負荷です。
    • Quest環境では動作しないため、他シェーダに差し替える必要があります。(自動で差し替えるサポート機能を用意しました。後述)

以下、サンプルとして同梱している mat_Day_Pool (TransparentRefracted) を例に設定項目を解説していきます。

Surface - 基本設定と透過

基本色と透過度の設定を行います。

Image from Gyazo

Surface - 波面の生成

水面を移動する波面を生成します。以下の設定が計3セット用意されていて、WF_Water_Surface では最大で3つまでの波面を合成して描画することができます。

Image from Gyazo

UVタイプ には UV1, UV2, WORLD_XZ を選ぶことができます。

  • UV1: 水面メッシュのUV1を基準に波面を生成します。
  • UV2: 水面メッシュのUV2を基準に波面を生成します。
  • WORLD_XZ: ワールドXZ平面を基準に波面を生成します。

サンプルでは WORLD_XZ を設定しています。この設定では波の大きさはメッシュの大きさと相関しないため、どの大きさのメッシュにも適用可能です。一方 WORLD_XZ では垂直面が正しく描画されません。 UV 展開したメッシュであれば UV1 や UV2 のほうが適切になるため、適用先のメッシュの都合と合わせて調整してください。

Image from Gyazo

Surface - 光沢(スペキュラ)

水面に光沢を付与します。WF_Water_Surface では最大2色までの光沢を追加できます。

Image from Gyazo

滑らかさ は、Standard シェーダにおける Smoothness に相当するパラメータです。滑らかさが大きいほど、光沢は狭く鋭くなります。滑らかさが小さいときは、光沢は広く淡くなります。

Surface - 反射(Reflection)

水面に反射を付与します。

Image from Gyazo

サンプルマテリアルでは キューブマップ混合タイプ が CUSTOM に設定されていて、キューブマップが明示的に指定されています。 ここを REFLECTION_PROBE に変更すると、指定したキューブマップではなくワールド側でベイクされた ReflectionProbe が映り込むようになります。

Surface - 屈折(Refraction)

水面下の屈折描写を追加します。(TransparentRefracted のみ)

Image from Gyazo

屈折率距離 のパラメータを変更すると、屈折による歪みの量を変化させることができます。

Surface - 距離フェード

視点から一定距離離れた先の色を調整できる機能です。

Image from Gyazo

Image from Gyazo

フェード距離 (Near)フェード距離 (Far) の単位はメートルです。Near で指定した距離だけ離れた位置から色調整が始まり、Far で指定した距離になると色調整が最大になります。

Surface - AOマップとライトマップ

ライトマップを読み取って影を描画する場合は有効にしてください。なお水面をライトベイクする際の注意点は後述します。

Image from Gyazo

コントラスト の初期値は 1.0 ですが、水面に使う場合は 0.4~0.8 くらいとするのが良いと思います。影が弱めに描画されます。

Surface - ライト設定(拡張)

光源方向をカスタマイズできます。光源方向は『光沢(スペキュラ)』およびLambert影にて使用されます。

Image from Gyazo

設定方法は UnToon Manual -> Lit Advance と同様です。 初期値は AUTO なので、通常は変更せずとも大丈夫のはずです。カスタマイズする際に変更してください。

コースティクスの描画

WF_Water_Caustics を用いると水底にコースティクスを描画することができます。

Image from Gyazo

メッシュの用意

WF_Water_Caustics はコースティクスのみ描画するシェーダなので、水底のメッシュは別に必要です。 水底メッシュと同じ形状のメッシュを別に用意し、そこに WF_Water_Caustics を割り当ててコースティクスを描画します。

簡単に行う場合、水底メッシュを Unity 上で複製してコースティクス用メッシュとしても大丈夫です。設定から水上部分にコースティクスを描画しないようにできるため、水上に出ている部分のある水底メッシュであってもそのまま複製して利用できます。

image


以下、サンプルとして同梱している mat_DayFX_Caustics を例に設定項目を解説していきます。

Caustics - 基本設定

コースティクスの色を指定できます。

Image from Gyazo

Caustics - 水

水面高と、水上でコースティクスを非表示にするかどうかを設定できます。

Image from Gyazo

水面高 はワールド座標上での水面のY座標を指定してください。初期値は 0 です。 コースティクスが表示されない場合、水面高が正しく設定されているか確認してください。

Caustics - 波面の生成

WF_Water_Surface と同様の設定項目が WF_Water_Caustics にもあります。ただしこちらはノーマルマップ&ハイトマップではなく、コースティクステクスチャを指定します。

Image from Gyazo

コースティクステクスチャは単純なUVスクロールを行います。必要に応じてパターンを差し替えてみてください。

Caustics - AOマップとライトマップ

WF_Water_Surface と同様、WF_Water_Caustics でもライトマップを読み取ることができます。 影の部分はコースティクスが弱めに描画されます。

Image from Gyazo

コントラスト の初期値は 1.0 ですが、水面に使う場合は 0.4~0.8 くらいとするのが良いと思います。影が弱めに描画されます。

深度の描画

水の透明度・不透明度を『深度 (DepthFog)』として描画することができます。 水深が深くなるにつれて水底が見えにくくなるといった効果を追加することができます。

Image from Gyazo

マテリアルの設定先は、コースティクスと同じく水底メッシュ(を複製したもの)です。 コースティクスと併用したい場合は、『水底メッシュ』『コースティクスメッシュ』『深度メッシュ』の3つを用意してください。

Image from Gyazo


以下、サンプルとして同梱している mat_DayFX_DepthFog を例に設定項目を解説していきます。

DepthFog - 基本設定と水

Image from Gyazo

フォグの色を指定できます。水中での距離が長ければ長いほどフォグが強く掛かり、最終的に フォグの色 で指定した色に集束します。 水の透明度 の単位はメートルです。10と指定した場合、10メートル先はフォグが最大になるため水底を判別できなくなります。

Clone this wiki locally