Unity が3D オブジェクトのシェーディングを計算するためには、そのオブジェクトに当たる光の強度、方向、色の情報が必要です。
これらのプロパティーは、シーン内にある Light オブジェクトによって提供されます。ライトのタイプが異なると、異なる方法で設定された色を発します。ライトの中には、光源からの距離で減衰するものもあります。Unity に用意されているさまざまなタイプの光源については ライトの種類を参照してください。
Unityでは、いろいろな使用目的それぞれに、複雑で高度なライティング効果を、さまざまな異なる方法で計算することが可能です。
大まかに言うと、Unityのライティングには 「リアルタイム」なものと「事前計算」によるものがあり、両方組み合わせて使うことでシーンのライティングをより印象的にできます。
ここでは、技術の相違による効果の違い、長所、個々のパフォーマンスの特徴などの簡単な概要を説明します。
デフォルトでは、 Unity にはディレクショナル、スポット、ポイントの各ライトがあります。それらのライトは、シーンのダイレクトライトとともに、毎フレーム更新されます。ライトとゲームオブジェクトがシーン内で移動すると、ライトは即座に更新されます。これはシーンとゲームビューどちらでも確認できます。
リアルタイムライティングは、シーン内のオブジェクトをライティングする最も基本的な方法で、キャラクターなどの動くジオメトリを照らすのに向いています。
残念ながら Unity のリアルタイムライトから放たれる光は、一度放たれた後は、反射しません。より写実的でリアルなシーンを作成するためには、事前計算によるライティングを有効にして、グローバルイルミネーションなどの技法を使います。
Unity では、静的で複雑なライティング効果を計算することができます (グローバルイルミネーションや GI と呼ばれる技法を使います)。計算結果は、ライトマップと呼ばれる参照用テクスチャマップに保存されます。この計算のプロセスをベイク (焼き付け) と言います。
ライトマップをベイクすると、シーン内にある静的なオブジェクトへの光源の影響が計算され、その結果がシーン内のジオメトリの上に、テクスチャとしてオーバーライドされます。これによってライティング効果が生み出されます。
これらのライトマップにはサーフェスを直に照らす直接光と、シーン内にある他のオブジェクトやサーフェスから跳ね返ってくる間接光の、どちらも含めることができます。このライティングテクスチャは、オブジェクトのマテリアルと関連付けられたシェーダーによって、色情報 (アルベド) やリリーフ (法線) などのサーフェス情報と組み合わせて使うことができます。
ライティングをベイクして生成されたライトマップには、ゲーム中に変更を加えることができません。そのため ‘静的(スタティック)’ と呼ばれます。リアルタイムライトは、ライトマップされたシーンの上から加算的にオーバーライドして使うことはできますが、ライトマップ自体を変化させることはありません。
この手法により、ゲーム中にライトを自在に動かす自由と引き換えに、モバイル端末のような非力なハードウェア上でのパフォーマンス向上を狙うことができます。
詳しくは Lighting ウィンドウ と 事前計算されたライティングの使用 を参照してください。
スタティックなライトマップではシーン内でライティングを変化させることができませんが、事前計算によるリアルタイムGIは、シーンの複雑なライティングをインタラクティブに更新する方法を提供します。
この手法により、間接光によるリッチなグローバルイルミネーションを使ってライティングされた環境を生成しつつ、リアルタイムでライティングの変更が可能になります。時刻システム (時間とともに光源の色と位置が変化する) は最適な例です。ベイクによるライトマップでは、これは出来ません。
これらのエフェクトをプレイできるフレームレートで行うためには、長々と時間がかかるものをリアルタイム処理から事前計算処理にする必要があります。
事前計算によって、ゲーム中に行っていた複雑なライトビヘイビアの計算を、比較的時間に余裕のあるときにできるようになります。 これを「オフライン」処理と呼んでいます。
詳しい情報は lighting and rendering チュートリアルを参照してください。
ベイクした GI ライティングと事前計算したリアルタイム GI を同時に使用することも可能ですが、レンダリングのパフォーマンスコストは単純にそれらを合算した値になってしまうことに注意してください。ビデオメモリーに両方のライトマップ一式を保存しなければならないだけでなく、シェーダー内でデコードするプロセッサのコストも必要になります。
対象ハードの性能とプロジェクトの特性から、ライティング方法をどちらか一つ選択したい場合があります。例えば、ビデオメモリーとプロセッサ性能が非常に限られているモバイルデバイスでは、ベイク GI ライティングを使った方がパフォーマンスを上げやすいでしょう。専用のグラフィックスハードウェアを持ったデスクトップPCや、最近のゲーム機では、事前計算のリアルタイム GI を使うことも、同時に両方のシステムを使用することも問題なく可能です。
どのアプローチを使うかは、それを使用するプロジェクトとターゲットプラットフォームの性質によります。異なるハードウェアの範囲をターゲットにしているとき、どのアプローチが必要かはしばしば、最低限の性能によって決定されます。
関連資料: Light のトラブルシューティングとパフォーマンス
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.