今回はゲームの絵作りに関する話題で、タイトルのとおり
について解説するという内容になっています。
URPはUnity2021以降は十分すぎるほど実用的になっており、従来のビルトインRP→URPへの乗り換えを始めた方も少なくないと思います。ところがURPではビルトインRPとはポストプロセス機能の使い方が違うので、「絵作りをしようと思ったけどどうすればいいのかよく分からん!」という方は多いのではないでしょうか。
そこでここではURPのポストプロセス機能である「Volume」について、サンプルを交えながら丁寧に解説していきますね。
※なお「そもそもURPって何?」という方は下記の記事も併せてご覧頂けると理解が深まると思います。
URPのポストプロセス機能「Volume」の使い方
でははじめに、URPのポストプロセス機能であるVolumeの概要と使い方についてご説明します。
Volumeとは?
まずVolumeとはURPにおけるポストプロセス機能のことです。ポストプロセスとは「後処理」のことで、公式マニュアルから引用すると
Post Processing (ポストプロセス) は、画像を画面に表示する前に、カメラの画像バッファにフルスクリーンのフィルターとエフェクトを適用する処理です。
とのこと。つまりカメラに映った映像を加工するフィルターだと思っていただければよいでしょう。
なおポストプロセス機能は従来のビルトインRPでは「Post Processing Stack」というパッケージで提供されていました。しかしURPではその機能がVolumeという名称に丸ごと置き換わっている点にはご注意ください。とりあえずURPのポストプロセス=Volumeだとご理解いただければ大丈夫です。
VolumeはURPに標準搭載されているので、導入は不要
次にVolumeの導入方法についてですが、実はVolumeはURPに最初から搭載されているので導入作業は必要ありません。従来のPost Processing Stackのようにパッケージマネージャからインストールする必要はないので、URPさえ導入してあればそのまま普通に使うことができます。
Volumeの基本的な使い方
さてここからが本題でVolumeの基本的な使い方について解説していきます。主な手順は次のとおりです。
- 適当なゲームオブジェクトにVolumeコンポーネントをアタッチする
- Volume Profileを作って設定を行う
- カメラでポストプロセスの設定を行う
それぞれ詳しく見ていきましょう。
手順1:適当なゲームオブジェクトにVolumeコンポーネントをアタッチする
まず、適当なゲームオブジェクト(空のゲームオブジェクトでも、カメラ等でもOKです)にVolumeコンポーネントをアタッチします。インスペクターの「コンポーネントを追加」ボタンでvolumeと検索すると出てくるのでそれを選びましょう。
設定はとりあえずデフォルトのままで大丈夫です。
手順2:Volume Profileを作って設定を行う
次に、Volumeの設定を保存する「Volume Profile」というファイルが必要なのでそれを作ります。プロジェクトビューの適当なところで右クリックし、「作成」→「ボリュームプロファイル」を選択すると新しいプロファイルが作られます。
ただこのままでは処理が登録されておらずなんのフィルターもかかりません。そこで「オーバーライドを追加」ボタンを押して処理を追加する必要があります。これについては後ほど説明するので、とりあえず今はこのままにしておきましょう。
できたらこれを手順1のコンポーネントの「プロファイラー」欄に登録しておいてください。
手順3:カメラでポストプロセスの設定を行う
最後にポストプロセスを有効化するためにカメラの設定を変更する必要があります。
上の画像のように
- 「ポストプロセス」にチェックを入れる
- 「ボリュームマスク」を手順1のゲームオブジェクトのレイヤーと同じにする
という設定を行ってください。以上で必要な準備は完了です。
Volumeでゲームの見た目をワンランクUPさせてみよう
ではここからは具体的にポストプロセスでゲームの見た目を良くするという作業をやってみようと思います。
ポストプロセスの有無による違いの比較
まずはじめに、ポストプロセスを使う前と使った後の実際のゲーム画面の比較を掲載しておきます。
サンプルは私が今開発しているゲームの画面です。適用前と適用後を比べてみると、
- 画面のコントラスト
- 背景のぼかし
- 発光表現
といった点で違いがあり、ポストプロセス適用後のほうが明らかに見栄えがよいことが分かります。このようにポストプロセスを使うとゲーム画面の見栄えを良くすることができるので、ぜひやり方を覚えて頂ければと思います。
明るく元気な印象のゲーム画面にするためのポストプロセスの例
次に今回適用したポストプロセスの例をご覧いただき、どの処理がどのように効いているのかを解説していこうと思います。
今回適用したポストプロセスの各処理は次のとおりです。
- ブルーム(Bloom)
- ビネット効果(Vignette)
- リフト・ガンマ・ゲイン(Lift Gamma Gain)
- 被写界深度(Depth of Field)
- トーンマッピング(Tone Mapping)
- 色調補正(Color Adjustments)
今回は「明るく元気な印象のゲーム画面」がコンセプトなので、主にくっきりとして明るい画面になるような処理を入れました。
ではそれぞれ詳しく見ていきましょう。
ブルーム(Bloom)
まずブルームは、光っている部分の「光のにじみ」を表現できるポストプロセスです。発光表現や幻想的な絵作りをしたいときはほぼ必須で、これが大好きという方も多いことでしょう。
設定項目はいくつかありますが、特によく使うのは
- しきい値
- 強さ
- Skip Iterations
の3つだけです。
しきい値はブルームを発生させる明るさの境界値、強さはブルームの強度です。それからブルームは比較的重い処理なのですが、Skip Iterationsの値を大きくすることで処理負荷を軽減させることができます(※もちろん、その分だけブルームの品質は下がります)。
ビネット効果(Vignette)
次にビネット効果は、画面の隅を暗くしてリアルな雰囲気を出すポストプロセスです。
これは基本的に強さだけをいじればOKです。あまりにも強くすると逆に不自然な感じになってしまうので、0.3前後が丁度いいと思います。
リフト・ガンマ・ゲイン(Lift Gamma Gain)
リフト・ガンマ・ゲインは、簡単に言うと「暗い部分・中間の部分・明るい部分」をそれぞれ調整するためのポストプロセスです。それぞれの色相環の下にあるスライダーを動かすことでトーンの調整を行うことができます。
- リフト:
暗い部分のトーンを制御します。特に影の部分を誇張したいときに使います。 - ガンマ:
中間部分のトーンを制御します。 - ゲイン:
ハイライトを強調します。
ここではハイライトを強調して明るい画面にしたかったのでゲインだけを調整しました。
被写界深度(Depth of Field)
被写界深度はカメラの焦点をシミュレーションするポストプロセスです。カメラのピントを近くに合わせて背景をぼかしたい、といった場合に便利です。ただし比較的重い処理である点には注意してください。
モードは「Gaussian」と「Bokeh」の2種類があり、前者はシンプル・後者はよりリアルという感じになっています。
トーンマッピング(Tone Mapping)
トーンマッピングは、画面のHDR値を再マッピングするポストプロセスです。
設定項目は「モード」だけで、選択肢としては
- None
- Neutral
- ACES
の3種類があります。Neutralは「色相と彩度への影響を最小限に抑えて範囲を再マッピング」するもの、ACESは「コントラストが高く映画的な画風に再マッピング」するものです。ここではACESを選択しています。
色調補正(Color Adjustments)
色調補正はその名の通り画面の色調を調整するポストプロセスです。
よく使うのは次の3つの項目でしょう。
- Post Exposure:
シーンの全体的な露出を調整します。基本的にトーンマッピングを使ったときにのみ設定します。 - Contrast:
画面のコントラストを調整します。 - Saturation:
画面の色の鮮やかさを調整します。
トーンマッピングを使うと全体的に画面が暗くなるので、Post Exposureで画面の明るさを引き上げる必要があります。あとは画面にもう少しパンチが欲しいな、といったときにコントラストや彩度を少し上げるとよい感じになります。
これでゲーム画面の見栄えを良くすることができました。ただし上記はあくまでも私のゲームの場合なので、ゲームの雰囲気に合わせてご自身で色々と調整してみてください。
おわりに
以上、URPのVolumeによる絵作りについて具体例を交えながらご説明しました。
Volumeは色々なものがありますし、設定項目が多いポストプロセスもあるため覚えるまでが大変だと思いますが、使いこなせるとゲームの見栄えをグッと良くすることができます。ぜひ上記の内容を参考にしていただき、Volumeの使い方を覚えて頂ければと思います。
この記事がUnityでのゲーム開発のお役に立てば幸いです。