この記事はUnity Advent Calender 2021 16日目の記事です。
15日目は @monry さんの「Unity Addressables Tips 〜2021年に於けるアップデート情報を添えて〜」でした。
先日Unity2021.2がリリースされ、さまざまな機能の改修が公式で紹介されていました。 その一つが「2D Light」の正式リリースです。
2D Lightはその名の通り2Dの描画物に対してライティングを行うもので、より高度な2D演出を可能にしてくれます。 初めての登場としてはUnity2019あたりで、Experimentalな機能としてここまで提供されていました。そんな正式リリースした2D Lightについて、その基礎的な機能や使い方について紹介します。 本記事で紹介および検証を行なっているツールのバージョンは次の通りです。
- Unity 2021.2.0f1
- Universal Render Pipeline 12.0.0
バージョンによっては挙動に差異がある場合もありますので、ご了承ください。
使い方
2D Renderer(SRP Asset)のとMaterialの設定
まず2D Lightを使うには、SRPの2D Rendererの設定を行う必要があります。 必要なのは2D Rendererのアセットです。メニューから2D Renderer付きのURP Assetを作成します。
作成するとRendererとPipelineのアセットが生成され、Pipelineには自動的にRendererがアタッチされた状態となります。 Edit -> Project SettingsからGraphicsの項目を開き、この生成したアセットを設定します。
Qualityごとの設定についても、必要に応じてアタッチしてください。
以上でRendererの設定は完了です。
Lightの影響を受けるスプライトについては専用のLitシェーダーが設定されていることを確認してください。
以上でスプライトが2D Lightの影響を受けるまでの前準備が完了です。
基本的なLightの作成と設定
2D Lightには次の4つの種類が存在します。
- Global
- Freeform
- Sprite
- Spot
それぞれのライトはヒエラルキー上の右クリックのメニューから作成できます。 作成されるもの自体は2D LightのコンポーネントがアタッチされたGame Objectで、その設定が違うだけです。
パラメータの設定はインスペクター上で設定可能です。 ColorとIntensity、そしてTarget Sorting Layerの項目があり、ライトの色と光の強さ、および対象のSorting Layerを調整できます。
ライトの種類ごとの挙動や設定についても説明します。
Global Light
Global Lightは全体を照らすライトです。設定した値が全体のライティングに反映されます。
全体的な2Dのベースのライティングの調整に活用するライトです。
Freeform Light
Freeform Lightはその名の通り自由変形してライティングする領域を矩形で指定できるライトです。
2Dの描画物に対してとりあえず任意の部分を明るくしたいといったケースでは非常にお手軽に反映させることができます。
Spot Light
Spot Lightは特定の位置に照明を当てたような円形のライティング効果を与えるライトです。 半径や円形に広がるライティング効果の減衰などを調整し、照らし方の調整ができます。
一点から照らすような効果を与えたい時にはSpot Lightを調整するといいでしょう。
Sprite Light
Sprite Lightはライティング効果を特定のスプライトの形状及び値を元に行います。
特定のシルエットによってライティング効果を出したい時には活用できます。
以上が2D Lightを使う上で基本となるライトの種類と設定になります。
Blending
2D Lightではそのライティング効果について、インスペクターからブレンドする計算を乗算にするか加算にするかを選択することができます。
画像にあるようにインスペクタからライトのブレンドを示すBlend Type、反映順序を示すLight Order、そして重なった際のライトの値の処理の種類となるOverlap Operationを設定できます。 Overlap Operationについては純粋な加算となるAdditiveとアルファ値の合成となるAlpha Blendが存在しており、単純にLightを合成する場合には前者を、Light Orderに沿って反映される効果を上書きしたい場合には後者を選択します。
Shadow Caster
2D Lightではライティングだけでなく、影を落とすこともできます。
影を落とすには2D Lightの設定と、スプライト側のコンポーネントのアタッチが必要になります。 まず2D Light側です。インスペクタのShadowsからStrengthを与えるとそれに伴った影が落ちるようになります。
そしてスプライト側ですが、これにはShadow Caster 2Dというコンポーネントをアタッチします。
落とす影の設定として、Use Renderer SilhouetteとCasts ShadowsとSelf Shadowsの三つの項目があります。 Casts Shadowsはそのまま影を落とすかどうかの設定となり、Use Renderer SilhouetteとSelf Shadowsは影の形状を調整する設定になります。Use Renderer Silhouetteでは影について描画されるスプライトの形状を加味するかどうか、Self Shadowsは自身に影を落とすかどうかの設定です。 こちらは公式ドキュメントの説明画像がわかりやすいです。引用した画像を次に示します。
また、複数のShadow Caster 2Dを利用する際には、Composite Shadow Caster 2Dというコンポーネントを利用します。 複数のそれらのオブジェクトの親にComposite Shadow Caster 2Dをアタッチすることで、それぞれをマージした一つの影として効果をシーン上に落とすことが可能です。
こちらについても公式ドキュメントの説明画像がわかりやすいです。 引用した画像を次に示します。
複数の影を干渉させるような表現を行う際には活用すべきコンポーネントとなります。
Normal Map
スプライトについて、ノーマルマップを用意したものについてはLight 2Dの効果にも反映されます。 例としてレンガのパターンで紹介します。これは反映せずにSpot Lightを当てた画像です。
これに適当に作ったNormal Mapを設定し、ライトの設定も調整すると次のようにライティング効果が変わります。
陰影が反映されて立体感が演出されているのがわかるかと思います。この手順についてみていきます。
まずはスプライト側です。これは難しいことはなく、該当するスプライトのSprite EditorからSecondery Textureとしてノーマルマップを指定するだけです。
スプライトのインスペクタからSprite Editorを選択し、左上のメニューからSecondary Textureの指定を行います。
_NormalMapと名前をつけ、設定するテクスチャをアタッチします。設定したSecondary Textureは選択して確認可能です。
以上でスプライト側の設定は完了です。次に2D Light側の設定を行います。 インスペクタの下の方にメニューがあるのでそこを調整します。
Qualityではその精度を設定できます。デフォルトではDisable、つまりは無効になっており、簡易的な計算によるFastとより正確な計算によるAccurateを選択します。 Distanceはライトとスプライトの距離を示しています。
Light Explorer
2D Lightも通常のLight同様にLight Explorerで設定の調整ができます。Light Explorerについて知りたい方は公式ドキュメントを参考にしてください。
一括でシーン中の光源の管理をしたいときにおすすめな機能です。
おわりに
Unity2021.2でようやく正式版になった2D Lightですが、さまざまな機能が用意されています。 単純に2Dの世界を明るくするだけではなく、よりリッチな表現をする上では非常に便利な機能となっているので、2Dの演出を考えている人はぜひ試してみてください。
さて、明日の Unity Advent Calendar 2021 は @Takaaki Ichijo さんの「ゲームのアドベンチャーパート(キャラクター掛け合い)の時系列演出をつくる」です。
お楽しみに〜!
参考文献
本記事の検証をするにあたって以下のサイトの素材を使用させていただきました。
また、機能については公式ドキュメントを参考にさせていただきました。詳細な仕様を知りたい方はこちらを参照してください。