今回も前の記事に引き続きUnityでの「絵作り」に関する話題で、
をご紹介するという内容になっています。
Unityでゲームを作っていると、例えば
- 燃え盛る炎が光を放っている
- 暗闇で敵キャラの目がギラリと光る
といった発光表現をしたくなることがよくあります。このとき、もしかしたら初心者の方は
と思うかもしれませんが、実は「オブジェクト自体が発光する場合」はライトだけを使っても上手く光りません。なのでどうすればいいのかよく分からん!という方もいらっしゃるのではないでしょうか。
そこでここでは
- ライトによる光と発光の違い
- 発光するゲームオブジェクトの作り方
といった点についてご説明しますね。
前提:「ライトによる光」と「発光」の違い
でははじめに、前提となる話としてUnityにおける「ライトによる光」と「発光」の違いを簡潔にご説明しておこうと思います。
まず一般的に「ライト」というと皆さんは下の画像のようなものをイメージすると思います。
具体的に言うと
- ライト自体が発光する。
- 光が周囲のモノに投影され、その部分が明るくなる。
という感じですよね。
ところがUnityのライト(ポイントライト・スポットライト等)は実は上の2番目の機能しか持っていません。つまり単にライトをシーンに配置しても周囲のゲームオブジェクトが照らされるだけであり、ライトそのものは発光しないのです(下図)。
この辺がUnityのライトのややこしいところなので、まずはその点をご理解いただければと思います。
発光するゲームオブジェクトの作り方
発光表現は基本「マテリアル」で設定する!
じゃあ発光はどうやって実現すればいいのかというと、基本的にその辺はマテリアルの設定で行うことになります。マテリアルの設定欄を見てください。
上記はURPの標準的なマテリアル(Litシェーダー)の場合ですが、下の方に「放出」という欄がありますよね。ここでその素材がどれだけ発光するかを定義することができます(※シェーダーによっては発光表現を使えない場合もあります)。
とりあえず発光させたい場合は「放出」にチェックを入れ、色と発光の強度を指定すればOKです。
ただし、マテリアルから設定しただけではイメージ通りにはならない
さてこれでマテリアルが綺麗に光るようになる…と思うかもしれませんが、実はまだ落とし穴があります。それはマテリアルから発光の設定をしただけではイメージ通りの発光表現にはならないということです。下の画像をご覧ください。
これは溝のあるキューブに先ほどの発光設定とポイントライトを付け加えたものです。でも、なんかちょっと違うなぁと思いませんか?例えば下の画像のようにもっと光が「にじみ出る」ような感じにしたいですよね。
こうするにはマテリアルとライトだけでは無理なので、もうひと手間加えましょう。
「光のにじみ」表現にはポストプロセスの「Bloom」を使う
先ほどの光の表現をUnityで実現するには、ポストプロセス(Post Processing)という機能の中の「Bloom」を使います。
ポストプロセスの使い方はプロジェクトのグラフィックの形式(=レンダリングパイプライン)によって違うのですが、例えばURPの場合は「Volume」という名前で標準搭載されているのでそのコンポーネントを任意のゲームオブジェクトにアタッチします。
そうしたら適当なフォルダに「ボリュームプロファイル」を作り、先ほどのコンポーネントの「プロファイラー」欄にプロファイルを登録しましょう。
できたら「オーバーライドを追加」ボタンを押して「Bloom」を追加し、
- しきい値
- 強度
にチェックを入れて適当に値を調整してください。しきい値を上げると一定以上の明るさがある部分に光のにじみが出るようになり、強度を上げるとにじみの強さが強くなります。これで発光表現はばっちりです。
なお注意点ですが、Bloomは比較的重い処理なのでスマホゲー等では処理落ちの原因になるかもしれません。なのでその場合は使用を控えるか、どうしても使いたい場合は「Skip Iterations」の値を上げると品質と引き換えに処理を多少軽くできるので覚えておきましょう。
おわりに
以上、簡単ではありますがUnityでの発光表現の作り方についてご説明しました。
発光表現を上手く使いこなせるようになるとゲームの見た目がグッと良くなるので、PC向けゲーム等では積極的に活用していただけるとよいかと思います。ぜひ上記の内容を参考にしていただき、幻想的な発光表現のあるゲームを作って頂ければと思います。
この記事がUnityでのゲーム開発のお役に立てば幸いです。