海や川、プールなどのあるワールドで、水面の中に入ってもあまり水中らしさが出ないことに悩んでいたりはしませんか?
今回は一定の範囲内だけにPost Processingを設定することで、水中の表現ができるようにしていきます。

水面をつくる
まずは水面をつくってみましょう。
水面の表現はPlaneに専用のシェーダーを使ったマテリアルを適用することでおこないます。
アセットストアなどで様々な水面シェーダが公開されていますが、今回は一例としてこちらを使っていきます。
- ダウンロードしたzipファイルを解凍し、展開されたフォルダ内のunitypackageをUnityのProjectビューにドラッグアンドドロップします。
- 表示されたウインドウの「Import」ボタンを押すとプロジェクトにシェーダーとマテリアルがインポートされます。


次に、実際にシーン上に水面を配置します。
- Hierarchyを右クリックか上部メニューのGameObjectから、3D Object>Planeを選択して平面を作成します。
- PositionやScaleを変更して、水面を広げたい範囲に合わせましょう。

続いてこのPlaneに水面マテリアルを適用します。
- Assets/WaterShader for clusterフォルダにあるWaterマテリアルをPlaneにドラッグアンドドロップしてください。


これでPlaneが水面になりました!
水中をつくる
この水面の中に入れるようにしてみましょう。
- PlaneのInspectorを確認し、Mesh Colliderを無効化します。
これでPlaneをすり抜けて水面の下に入れるようになりましたが…

このままでは水中らしく見えません。
ここから、水面より下に行くと水中らしく見えるようにしていきます。
今回は「Post Processing」を使って水中の表現を作っていきます。
- まず、以下の記事を参考にPost Processingを導入してください(Bloomの設定は不要です)。
Post Processingは効果範囲を指定することができます。
- まず、Is Globalにチェックが付いていないことを確認してください。
- ※上の記事でチェックを入れていますが、今回は外してください。

- 次に、Post Processingオブジェクトに自動で追加されているBox Colliderを確認してください。
このコライダーの範囲内がPost Processingの有効範囲となります。
- 編集ボタンを押してシーン内で移動させるか、PositionとSizeに値を入力してコライダーの範囲を水面の下に合わせてください。


最後に、範囲内で実際にかかる効果を設定していきます。
- 上の記事でBloomを追加しているのと同じ手順で、「Color Grading」を追加してください。

- Color Filterという項目にチェックを入れ、カラー選択で好みに合わせて青~青緑くらいの色を選択しましょう。

ここで一度再生ボタンを押して実行してみます。水の中に入ると視界の色味が変わり、水中にいるようになります。

さらに水中らしい表現として、遠くがぼやけて見えるようにしてみます。
- 同じ手順で「Depth of Field」を追加してください。
- Focus Distanceにチェックを入れ、値を1にします。
- ※カメラからこの値の距離の位置にピントが合うようになり、それより遠くと近くがぼやけます。好みに合わせて調整してください。
この状態で実行してみてください。
色味の変化に加えて、遠くにあるものがぼやけて見えるようになり、より水中らしさが増しました。

見た目の雰囲気を変えるPost Processingを一定範囲だけに適用することで、ひとつのワールドの中でも様々な環境を表現できます。
水中以外にもエフェクトを組み合わせてワールドに合わせた表現を試してみましょう!