うどんてっくメモ

技術的なメモをまったりと

【Unity】Unity2021.2で正式リリースされた2D Lightの紹介

この記事はUnity Advent Calender 2021 16日目の記事です。
15日目は @monry さんの「Unity Addressables Tips 〜2021年に於けるアップデート情報を添えて〜」でした。

先日Unity2021.2がリリースされ、さまざまな機能の改修が公式で紹介されていました。 その一つが「2D Light」の正式リリースです。

f:id:myudon:20211107200347g:plain

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を作成します。

f:id:myudon:20211105000856p:plain

作成するとRendererとPipelineのアセットが生成され、Pipelineには自動的にRendererがアタッチされた状態となります。 Edit -> Project SettingsからGraphicsの項目を開き、この生成したアセットを設定します。

f:id:myudon:20211105193736p:plain

Qualityごとの設定についても、必要に応じてアタッチしてください。

f:id:myudon:20211105194155p:plain

以上でRendererの設定は完了です。
Lightの影響を受けるスプライトについては専用のLitシェーダーが設定されていることを確認してください。

f:id:myudon:20211107185334p:plain

以上でスプライトが2D Lightの影響を受けるまでの前準備が完了です。

基本的なLightの作成と設定

2D Lightには次の4つの種類が存在します。

  • Global
  • Freeform
  • Sprite
  • Spot

それぞれのライトはヒエラルキー上の右クリックのメニューから作成できます。 作成されるもの自体は2D LightのコンポーネントがアタッチされたGame Objectで、その設定が違うだけです。

f:id:myudon:20211106103851p:plain

パラメータの設定はインスペクター上で設定可能です。 ColorとIntensity、そしてTarget Sorting Layerの項目があり、ライトの色と光の強さ、および対象のSorting Layerを調整できます。

f:id:myudon:20211106183050p:plain

ライトの種類ごとの挙動や設定についても説明します。

Global Light

Global Lightは全体を照らすライトです。設定した値が全体のライティングに反映されます。

f:id:myudon:20211107175031g:plain

全体的な2Dのベースのライティングの調整に活用するライトです。

Freeform Light

Freeform Lightはその名の通り自由変形してライティングする領域を矩形で指定できるライトです。

f:id:myudon:20211107175105g:plain

2Dの描画物に対してとりあえず任意の部分を明るくしたいといったケースでは非常にお手軽に反映させることができます。

Spot Light

Spot Lightは特定の位置に照明を当てたような円形のライティング効果を与えるライトです。 半径や円形に広がるライティング効果の減衰などを調整し、照らし方の調整ができます。

f:id:myudon:20211107175223g:plain

一点から照らすような効果を与えたい時にはSpot Lightを調整するといいでしょう。

Sprite Light

Sprite Lightはライティング効果を特定のスプライトの形状及び値を元に行います。

f:id:myudon:20211107175551g:plain

特定のシルエットによってライティング効果を出したい時には活用できます。

以上が2D Lightを使う上で基本となるライトの種類と設定になります。

Blending

2D Lightではそのライティング効果について、インスペクターからブレンドする計算を乗算にするか加算にするかを選択することができます。

f:id:myudon:20211107200834p:plain

画像にあるようにインスペクタからライトのブレンドを示すBlend Type、反映順序を示すLight Order、そして重なった際のライトの値の処理の種類となるOverlap Operationを設定できます。 Overlap Operationについては純粋な加算となるAdditiveとアルファ値の合成となるAlpha Blendが存在しており、単純にLightを合成する場合には前者を、Light Orderに沿って反映される効果を上書きしたい場合には後者を選択します。

Shadow Caster

2D Lightではライティングだけでなく、影を落とすこともできます。

f:id:myudon:20211113200446p:plain

影を落とすには2D Lightの設定と、スプライト側のコンポーネントのアタッチが必要になります。 まず2D Light側です。インスペクタのShadowsからStrengthを与えるとそれに伴った影が落ちるようになります。

f:id:myudon:20211107201618p:plain

そしてスプライト側ですが、これにはShadow Caster 2Dというコンポーネントをアタッチします。

f:id:myudon:20211107201731p:plain

落とす影の設定として、Use Renderer SilhouetteとCasts ShadowsとSelf Shadowsの三つの項目があります。 Casts Shadowsはそのまま影を落とすかどうかの設定となり、Use Renderer SilhouetteとSelf Shadowsは影の形状を調整する設定になります。Use Renderer Silhouetteでは影について描画されるスプライトの形状を加味するかどうか、Self Shadowsは自身に影を落とすかどうかの設定です。 こちらは公式ドキュメントの説明画像がわかりやすいです。引用した画像を次に示します。

f:id:myudon:20211109222017p:plain

また、複数のShadow Caster 2Dを利用する際には、Composite Shadow Caster 2Dというコンポーネントを利用します。 複数のそれらのオブジェクトの親にComposite Shadow Caster 2Dをアタッチすることで、それぞれをマージした一つの影として効果をシーン上に落とすことが可能です。

f:id:myudon:20211113195046p:plain

こちらについても公式ドキュメントの説明画像がわかりやすいです。 引用した画像を次に示します。 f:id:myudon:20211109223134p:plain

複数の影を干渉させるような表現を行う際には活用すべきコンポーネントとなります。

Normal Map

スプライトについて、ノーマルマップを用意したものについてはLight 2Dの効果にも反映されます。 例としてレンガのパターンで紹介します。これは反映せずにSpot Lightを当てた画像です。

f:id:myudon:20211106194404p:plain

これに適当に作ったNormal Mapを設定し、ライトの設定も調整すると次のようにライティング効果が変わります。

f:id:myudon:20211106194804p:plain

陰影が反映されて立体感が演出されているのがわかるかと思います。この手順についてみていきます。
まずはスプライト側です。これは難しいことはなく、該当するスプライトのSprite EditorからSecondery Textureとしてノーマルマップを指定するだけです。 スプライトのインスペクタからSprite Editorを選択し、左上のメニューからSecondary Textureの指定を行います。

f:id:myudon:20211107161718p:plain

_NormalMapと名前をつけ、設定するテクスチャをアタッチします。設定したSecondary Textureは選択して確認可能です。

f:id:myudon:20211107161613p:plain

以上でスプライト側の設定は完了です。次に2D Light側の設定を行います。 インスペクタの下の方にメニューがあるのでそこを調整します。

f:id:myudon:20211107162032p:plain

Qualityではその精度を設定できます。デフォルトではDisable、つまりは無効になっており、簡易的な計算によるFastとより正確な計算によるAccurateを選択します。 Distanceはライトとスプライトの距離を示しています。

Light Explorer

2D Lightも通常のLight同様にLight Explorerで設定の調整ができます。Light Explorerについて知りたい方は公式ドキュメントを参考にしてください。

f:id:myudon:20211107200730p:plain

一括でシーン中の光源の管理をしたいときにおすすめな機能です。

おわりに

Unity2021.2でようやく正式版になった2D Lightですが、さまざまな機能が用意されています。 単純に2Dの世界を明るくするだけではなく、よりリッチな表現をする上では非常に便利な機能となっているので、2Dの演出を考えている人はぜひ試してみてください。

さて、明日の Unity Advent Calendar 2021 は @Takaaki Ichijo さんの「ゲームのアドベンチャーパート(キャラクター掛け合い)の時系列演出をつくる」です。
お楽しみに〜!

参考文献

本記事の検証をするにあたって以下のサイトの素材を使用させていただきました。

かわいいフリー素材集 いらすとや

岩の無料イラスト | フリーイラスト素材集 ジャパクリップ

また、機能については公式ドキュメントを参考にさせていただきました。詳細な仕様を知りたい方はこちらを参照してください。

2D Graphics Features | Universal RP | 13.0.0