3.3 - ライティング

Tutorial

Beginner

+10XP

90 mins

Unity Technologies

3.3 - ライティング

このレッスンでは、VR 用にライティングを最適化するために、ライトモード、ライトマッピング、ライトプローブの使い方を学びます。このレッスンを終える頃には、作成したシーンのライティングは、美しさと性能を兼ね備えたものになっていることでしょう。

このレッスンは「Create with VR」コースの一部です。

1. ライティングの設定を試す

シーンのライティングの編集を始める前に、新しい Lighting 設定アセットを作成して、自由に使える設定に慣れておきます。

1. レンダーパイプラインの設定にアクセスする:

  • Project ウィンドウで、「UniversalRenderPipelineAsset」を検索して選択します。


2. レンダーパイプラインの設定を試す:

  • URP アセットの Inspector の Lighting セクションで、設定を使って再生します。
  • 複雑なライティングに課せられる制限を理解するために、Per Object Limit スライダーを試してみることもお勧めします。


3. シーンの Lighting Settings を新規に作成する:

  • Window > Rendering > Lighting の順にクリックして、Lighting ウィンドウを開きます。
  • Inspector の隣にあるウィンドウをドッキングし、New Lighting Settings ボタンをクリックして新しいプロファイルを作成します。


4. シーンの環境ライティングを試す:

  • Lighting ウィンドウの上部にある Environment タブを選択します。
  • 設定を変えて、シーンに与える影響を試してみましょう。

これで、Lighting ウィンドウと URP アセットの中で、ライティング設定を見つけて調整できるようになりました。


関連リソース:

2. 最初のライトマップの準備とベイク

いよいよ初めてライトマップのベイクに挑戦する時が来ました。事前にいくつかのステップを踏む必要があります。

1. すべてのライトをベイクすることができる:

  • シーンの中で、動かない、またはオン/オフしないライトを探して選択します。Hierarchy の検索バーで 「t:light」を検索すると、この作業ができます。
  • その Light コンポーネントで、Mode の設定を Realtime から Baked に変更します。


2. シーン内のオブジェクトにライトをベイクできるようにする:

  • Hierarchy で、動かない static オブジェクトをすべて選択します。
  • Inspector の上部で、Static チェックボックスが選択されていることを確認します。
  • 注意:Lighting セクションのオブジェクト(ランプ、燭台、シャンデリアなど)を選択してください。


3. ライトマップから背景と前景のオブジェクトを削除することで、ベイク時間を短縮できる:

  • 大きな背景のオブジェクトを選択します。
  • Mesh Renderer コンポーネントの Lightmapping セクションで、Scale in Lightmap プロパティを 0 にします。


4. ライトをベイクしてみよう:

  • Lighting ウィンドウに移動します。
  • Scene タブの下部にある Generate Lighting をクリックします。
  • 注意:ベイキングがフリーズしたり、クラッシュするような場合は、Lightmapper の Baking システムを Progressive CPU ではなく Progressive GPU に変更してみてください。


5. ライトマップの生成にかかる時間を一時的に短縮する:

  • Lightmap Resolution を 5~10 の間の値に下げる。
  • ライトマップの品質に寄与するその他の値(サンプル、バウンスなど)を減らします。

これで、シーンに低解像度のベイクしたライトマップができました。

関連リソース:

3. シーンのライティングの調整とリベイク

さて、初めてのベイクを試みたので、時間をかけてシーンを適切にライティングして、もう一度挑戦してみましょう。

1. ライトマップをクリアして、ライティングの変化をリアルタイムに表示する:

  • Lighting ウィンドウの下部にある Generate Lighting の隣のドロップダウンをクリックします。
  • Clear Baked Data を選択します。


2. できるだけ多くのライトの効果を見る:

  • UniversalRenderPipelineAsset を選択します。
  • 一時的に Additional Light Per Object Limit が最大値になります。


3. Room プレハブに付属しているデフォルトのライトを削除する:

  • Hierarchy で、Room_[style] プレハブを展開します。
  • 2 つの子 Point Lights を削除します。
  • 注意:ライトを削除するには、部屋のプレハブを開く必要があります。


4. シーン中の実際の光源から、よりリアルなライティングを加える:

  • Course Library > Prefabs > Lighting フォルダーから、シーンを照らすのに十分な数の発光オブジェクトがあることを確認します。
  • それらのライティング要素に子 Light オブジェクトを追加するには、Hierarchy 内でそれらを右クリックし、Light > Point / Spot Light を選択します。


5. より均一でバランスのとれたライティングを部屋に得ることができる:

  • Directional Light では、IntensityIndirect Multiplier の値を増やしてみてください。
  • Lighting の設定で、Indirect Intensity の値を増やしてみてください。


6. ライティングの見え方をテストする:

  • 再度、Generate Lighting をクリックします。
  • 時間があれば、Lightmap Resolution やその他の Light の設定値を上げて、最終的な状態での見え方を確 認してみましょう。
  • 注意:斑点のようなピクセル状の影が出る場合は、Lighting ウィンドウの Compress Lightmaps 設定をオフにします。

これで大まかなライティングがシーンにベイクされ、ほぼ希望通りの状態になったはずです。


関連リソース:

4. 混合ライティングの追加

オブジェクトにリアルタイムで影を落としつつ、ベイクしたライトマップによるパフォーマンスの恩恵を受けたい場合は、「Mixed」ライティングを使用します。

1. ベイクしたライトマップの上に、リアルタイムでシャドウを表示する:

  • Directional Light Mode を、「Mixed」(「Baked」ではなく) に変更します。


2. 新しい混合ライティングの効果を確認する:

  • Lighting ウィンドウで、Generate Lighting をクリックして、ライティングをリベイクします。
  • この混合ライトが、動的オブジェクトのライティングと影 (シャドウ) にどのような影響を与えるかを確認してください。

これで、動的オブジェクトにディレクショナルライトからのリアルタイムの影ができるはずです。


関連リソース:

5. ライトプローブの追加

シーン内のすべてのベイクしたライトから、より現実的なリアルタイムのライティングを得るためには、ライトプローブ (Light Probes) が必要です。

1. 新しい Light Probe Group を Room オブジェクトの子として追加する:

  • Hierarchy で、Room_[style] オブジェクトを右クリックし、Light > Light Probe Group の順に選択します。


2. ライトプローブを編集できるようにするには:

  • シーンビューの右上にある 3D Icons 付き Gizmos が有効になっていることを確認します。
  • Light Probe Group の Inspector にある Edit Light Probes ボタンをクリックします。


3. 部屋の周りにあるライトプローブを複製して配置し直す:

  • 選択ボックスをプローブの周りにドラッグして選択します。
  • Move (移動) ツールを使って、プローブの位置を決めます。
  • 選択したプローブを複製するには、Ctrl/Cmd+D を使用します。
  • 注意:Scene ビューの右上にある軸ギズモの下にある小さなアイコンをクリックして、アイソメトリックビューに切り替えると便利かもしれません。


4. ライトプローブを正しく配置するには:

  • ライティングの色や強度が急激に変化する場所には、必ずプローブを設置してください。
  • プローブがオブジェクトの中に入っていないか確認してください。


5. ライトプローブの効果を見る:

  • Lighting ウィンドウで、ライティングを再生成し、動的オブジェクトのライティングを確認するテストを行います。

これで、ライトプローブによって計算されたベイクしたライティングに基づいて、シーンにおおよその動的なライティングができるはずです。


関連リソース:

6. ライトマップの最終調整

これでライティングの設定がほぼ完了したので、最終的に高解像度のライトマップを作成する準備が整いました。

1. ターゲットとなるデバイスに合わせて、ライティングを最適化する:

  • ユーザーに使用されることを想定した方法でアプリをテストします(例:モバイルデバイスをターゲットにしている場合は、コンピューターに接続していないスタンドアロンのデバイスでテストします)。
  • 目標とするフレームレートに達しているかどうかを確認します。
  • 実際のデバイスでアプリをビルドして実行する方法については、チュートリアル「VR Project Setup」のチュートリアルを参照してください。


2. 複数の小さなライトマップファイルではなく、1 つのライトマップファイルを生成する:

  • Max Lightmap Size を 4096 にします。
  • ライトマップファイルは、複数の小さなファイルではなく、1 つのファイルにすることをお勧めします。


3. 斑点状の影が出たり、ピクセル状の影が出たりする場合は:

  • Compress Lightmaps チェックボックスをオフにします。


4. ライティングの全体的な外観に満足し、最終的なライトマップを生成する準備ができたら:

  • Lighting ウィンドウで、Lightmap Resolution を 20~80 の間に設定します。
  • 必要に応じて、他のライティング設定(samples, bounces など)の調整を続けて、望ましい結果を得ることができます。

これで、ライティングが思い通りになり、パフォーマンスも最適化されるはずです。


関連リソース:

7. まとめ

注目のフィーチャー:

  • 複雑な高性能のライティング

新しいコンセプトとスキル:

  • ベイクしたライティングとリアルタイムのライティング
  • ライトマッピング
  • ライトプローブ

次のレッスン:

  • Publishing (公開)
任意のステップ

8. 追加のアクティビティ

スキルをさらに向上させたい、新しいコンセプトを探求したい、プロジェクトを改善したいとお考えの方は、下記のオプションの追加アクティビティをチェックしておくと良いでしょう。

それぞれ [Easy]、[Medium]、[Difficult]、[Expert] のタグが付けられており、コーディングが必要な場合は [Requires Programming] のタグも付けられています。

1. 新しいスカイボックスの追加 [Easy] (難易度:低)

新しいスカイボックスを作成またはダウンロードして、シーンの外観を向上させる:

  • Skyboxes について詳しくはこちら
  • スカイボックスは、Unity アセットストアで Free アセットと検索するとダウンロードできます。
  • Environment タブの Lighting ウィンドウからスカイボックスを追加します。
  • 警告:高解像度のスカイボックスがあり、Environment タブでスカイボックスを Environment Lighting の Source に設定している場合、Lightmapping に非常に時間がかかることがあります。これを避けるために、Source を Gradient に変更することができます。

2. ライティングの調整を続ける [Medium] (難易度:中)

シーンのライティングやライティング設定の微調整をし続けて、できるだけ美しく、パフォーマンスの高いシーンを作る:

3. リフレクションプローブの探索 [Hard] (難易度:高)

リフレクションプローブをシーンに追加することで、Metallic のオブジェクトからの反射をよりリアルにする:

  • Reflection Probes のマニュアルと、リフレクションプローブの使用のすべて
  • おそらく、Material_Main を複製して新しい「Material_Main_Shiny」を作成し、そのマテリアルの metallic プロパティを増やし、そのマテリアルをシーン内の反射するべき光沢のあるオブジェクトに割り当てる必要があります。

Complete this Tutorial