こんにちは。アートデザイン課の菅野です。
最近はとても寒くなりましたね。くれぐれもお身体ご自愛ください。
さて、今回はライトベイクで出来るライティング表現についてお話しします。
限られる表現の中で、見た目のクオリティを向上させるための方法をご紹介したいと思います。
ライトベイクとは
ライトベイクとは、「ライトから当たった光や落ちた影の情報をテクスチャとして保存し、そのテクスチャをオブジェクトに貼り付ける方法」です。
リアルタイムのライトと比べて負荷が軽減できるため、ゲーム制作ではライトベイクが使用される事が多いと思います。
前回のブログでライトベイクとリアルタイムライトの比較GIFを載せているので、良ければそちらもご覧ください。
⇢ Unityのパーティクルでライトの点滅を作ってみる
ライトの使い分け
ライトベイクでの表現方法を紹介する前に、どんな時にライトベイクを使用していて、リアルタイムライトとどういう風に使い分けているのか説明していこうと思います。
負荷削減のため基本的にはライトベイクを使用したいのですが、リアルタイムライトでしか出来ない表現もあります。
具体的には以下です。
❶ 光の反射をリアルタイムで表現したい所
❷ 金属の光の反射を表現したい所
❶については想像しやすいのではないでしょうか?
ライトベイクは「光や影をテクスチャとして保存してオブジェクトに貼り付ける方法」であるため、リアルタイムで動く光の反射は表現できません。
以下はオブジェクトにリアルタイムライトを当て、ライトを動かしているシーンです。
ライトを動かすと、影やオブジェクトに反射する光も動いています。
比較として、同じオブジェクトにライトをベイクし、こちらもライトを動かしてみました。
影も光の反射も全く動いていないのが分かると思います。
このように、ライトベイクではリアルタイムで動く光の反射は表現できません。
❷の「金属の光の反射」については、本当にライトベイクで再現できないのか、実際に金属と非金属のオブジェクトを作成して比較してみましょう。
▼オブジェクトとライトを配置
左が非金属、右が金属のマテリアルを適用したオブジェクトで、同じ強さのリアルタイムライトを配置しました。
金属の質感を再現するには、マテリアルのMetallic値を「1」にします。
マテリアルの違いでライトの映り方に差はありますが、どちらにも光が映っているのが分かると思います。
▼ライトをベイク
次に、先ほど配置したライトをベイクライトに変更してベイクしてみました。
非金属のオブジェクトにはライトがベイクされましたが、金属のオブジェクトからは光が消えてしまいました。
このように、金属のオブジェクトにライトをベイクすると光が映らなくなってしまいます。
▼Metallic値を変更してベイク
Metallic値を「1」に出来るだけ近い「0.95」に変更し、ベイクしてみました。
光は映るようになりましたが、金属のような光の反射は再現できません。
やはりライトベイクでの金属の表現は厳しく、リアルタイムライトを使用する必要があります。
ただし、実は混合(Mixed)ライトというものも存在します。混合ライトとは、リアルタイムライトとライトベイク両方の要素を組み合わせたものです。
ライトベイクより負荷がかかりますが、リアルタイムライトよりは負荷を抑える事が出来ます。
金属の反射も再現出来るため、リアルタイムライトを使用するならこちらを使用した方が良いです。
金属の検証は以上になります。
これらにより、ライトベイクの表現には限りがある事が分かったと思います。
しかし、限られた表現の中でもライティングのクオリティを向上させるために出来る事はあります。
これからその方法について紹介していこうと思います。
ライティングのクオリティを向上させる
それでは早速ライトベイクで出来る光の表現について紹介していきます。
光の表現方法
1.別オブジェクトへの光の反射
ランプなどの光るオブジェクトを配置する際などは、壁や地面に光の反射を表現するとグッと見た目が良くなります。
光るオブジェクトによく使用される「Emissiveマテリアル」には、壁に反射する程の光の強さは無いため、ライトベイクで光の反射を補うと良いです。
2.オブジェクトの形に沿った光の反射
オブジェクトの上から光が当たったようにライトを配置しベイクすると、立体感が出て効果的です。
ただ、明るいシーンで行う場合は光だけ当てても影が出ません。オブジェクトの形に沿って影を作る事は難しいため、予め全体を少し暗くしてからライトを配置すると、光と影のバランスが良くなります。
注意点としては、特定の場所だけにライトを当てるには一番右の画像のように小さいライトを何個も配置する必要があり、結構大変な作業です。
3.遠近感
沢山配置するオブジェクトがある場合、ライトの強さを前後や上下で変化させる事で遠近感やメリハリを出す事ができます。
木のオブジェクトを3列に並べ、後ろの列に行くにつれて段々ライトが弱まるよう設定し、ベイクしてみました。
ライトが何も無い時に比べ、前後の関係が分かりやすくなったと思います。
ライティングのクオリティを向上させるとなるとライトでどうにかしなければ、と思うかもしれませんが、光だけではなく影も重要です。
影についてはライトベイクと関係がないものもありますが、負荷のかからない作成方法をいくつかご紹介しようと思います。
影の作成方法
1.テクスチャで影を作成する
既に大体の方がテクスチャ作成の時に影も描画しているとは思いますが、負荷をかけずに影を作成できる方法です。
自分が望む場所に影を追加したい時に便利です。
2.ライトベイクでAOを有効にする
シーン全体に情報量が欲しい場合、ライトベイクの設定でAOを追加する事が出来ます。
地面と複雑な形状の壁のモデルを作成し、AOを有効にしてみます。
Window > Rendering > Lighting で設定を開き、
Lightmapping Settings の「Ambient Occlusion」にチェックを入れます。
「Indirect Contribution」と「Direct Contribution」の値を変更する事で、影の強さを調整できます。
3.影モデルを作成する
複雑な形状のオブジェクトに影を入れたかったり、特定の場所だけに影を入れたい場合は影用のモデルを作成する事も出来ます。
先程AOを付けたオブジェクトに、更に影モデルを追加してみます。
少し分かりにくいかもしれませんが、壁と地面の接地部分に、壁と同じ形状の影が入りました。
一番右の画像のように入れたい影の形でモデルを作成し、Inspector の Mesh Renderer から Cast Shadows を「Shadows Only」にします。
すると、モデルを非表示にして影だけを表示する事ができ、ライトベイクで影をベイクできます。
4.Cookieを使用する
Unityの機能であるCookieは、ライトにマスクテクスチャを追加する事が出来ます。
プロジェクトにテクスチャを追加して Inspector から Texture Type を 「Cookie」 にします。
Alpha Source を Frome Gray Scale に変更し、マスクを付けたいライトの Cookie の項目にテクスチャをアタッチします。
例えばこのように真ん中だけ表示されるようなマスクテクスチャを作成すると、周りを暗くして真ん中にスポットライトが当たっているような表現が出来ます。
ベイク用のライトに使用すれば、こちらもベイクする事が出来ます。
まとめ
いかがだったでしょうか?
今回紹介したものは派手に見た目が変わるようなものではありませんが、ライティングのクオリティを上げるためには大切な事だと思っています。
最初に説明した通り、リアルタイムライトを使用すると、ライトベイクには出来ない様々な表現ができます。
しかし、ゲーム制作では負荷をかけずに見た目を良くする事も重要です。
リアルタイムライトとライトベイクを上手く使い分け、見た目も負荷も納得のいくライティング制作が出来たら良いなと思います。
【免責事項】
本サイトでの情報を利用することによる損害等に対し、
株式会社ロジカルビートは一切の責任を負いません。