ライティング
参考:
ライティングの概要 | Unity 2018.4 マニュアル [公式]
使い方
参考:
ライティングを理解するためにコーネルボックスを作って遊ぶ | テラシュールブログ
導入
参考:
概要
参考:
Lighting ウィンドウ
[Environment]
- Skybox Material:スカイボックスを指定する (デフォルト:Default-Skybox)
- Sun Source:プロシージャルスカイボックスで太陽の方向を与えた Directional Light によって指定する。
None
の場合は最も明るい Directional Light が自動的に選択される。 - Environment Lighting
- Source:環境光の光源として使用するソースを指定する
- Skybox:スカイボックス
- Gradient:グラデーション
- Color:単色
- Intensity Multiplier:環境光の明るさを設定する (
0
~8
/ デフォルト:1
) - Ambient Mode:環境光としてリアルタイムあるいはベイク済みライティングのどちらを用いるかを指定する
- Realtime:環境光の影響をリアルタイムに更新する
- Baked:環境光の影響を事前に計算する
- Source:環境光の光源として使用するソースを指定する
- Environment Reflections
- Source:マテリアルのリフレクション計算に与えるソースを指定する
- Skybox:スカイボックスによるリフレクションを使用する
- Custom:キューブマップによるリフレクションを使用する
- Resolution:リフレクションに用いるスカイボックスの解像度
- Cubemap:キューブマップを指定する
- Compression:リフレクションテクスチャを圧縮するかどうかを指定する
- Uncompressed:リフレクションテクスチャを圧縮しない
- Compressed:リフレクションテクスチャを圧縮する
- Auto:自動 (デフォルト)
- Intensity Multiplier:リフレクションの影響度 (
0
~1
/ デフォルト:1
) - Bouces:反射の回数 (
1
~5
/ デフォルト:1
)
- Source:マテリアルのリフレクション計算に与えるソースを指定する
参考:
Lighting ウインドウ | Unity 2018.4 マニュアル [公式]
The Lighting window | Unity Manual [Official]
Light Explorer
参考:
Light Explorer | Unity 2018.4 マニュアル [公式]
影
参考:
ライトのトラブルシューティングとパフォーマンス | Unity マニュアル [公式]
My Shadows do not show in the Editor view or Game View | Unity Knowledge Base [Official]
両面描画した際の裏面の影
シェーダーの Fallback として Nature/SpeedTree を指定する。
Fallback "Nature/SpeedTree"
一旦シェーダーを Nature/SpeedTree シェーダーに変更してから、使用するカスタムシェーダーを設定する。
参考:
Skybox
参考:
屋外ライティングとシーン設定 | Unity マニュアル [公式]
Changing Unity default background colour – Unity Forum
Light Cookies
参考:
Light の明暗を調整するマスク処理 – Light Cookies | 強火で進め
オブジェクト毎に別のライトを当てる
- レイヤーを作成する。
- オブジェクトをそのレイヤーに入れる。
- ライトの設定を開いて、Culling Mask としてライトを当てたいレイヤーのみを指定する。
参考:
ライトを特定のオブジェクトのみに当てる | naru design devlog
Light インスペクター | Unity マニュアル [公式]
How do I make a light influence only one object? – Unity Answers
Make a light only affect one object – Game Development Stack Exchange
影のみを描画する
参考:
Having an Invisible Object that Casts Realtime Shadows. – Unity Answers
Is it possible to create a light only casts shadows? – Unity Answers
Casting shadow, without rendering the light itself??? – Unity Answers
パフォーマンス
参考:
グラフィックスパフォーマンスの最適化 | Unity マニュアル [公式]
Projector
参考:
グローバルイルミネーション (GI)
リアルタイム GI (**DEPRECATED**)
Enlighten を使用して GI の影響を計算する。Enlighten が廃止されたため、リアルタイム GI も廃止される。Lighting ウィンドウの「シーン」(Scene) タブで、「Realtime Lighting > Realtime Global Illumination」を有効にする。
ベイク済み GI
Lighting ウィンドウの「シーン」(Scene) タブで、「Mixed Lighting > Baked Global Illumination」を有効にする。
参考:
Unity でのグローバルイルミネーションの基礎知識 | LIGHT11
グローバルイルミネーション (GI) 基礎知識 STYLY への反映方法 | STYLY
グローバルイルミネーション | Unity 2018.4 マニュアル [公式]
Lighting ウインドウ | Unity 2018.4 マニュアル [公式]
Generate Lightmap UV’s
参考:
Unity 5 でライトをベイクした結果が汚い | おもちゃラボ
ライティングモード (Light Mode)
- リアルタイム (Realtime)
- 混合 (Mixed)
- ベイク (Baked)
参考:
ライティングモード | Unity 2018.4 マニュアル [公式]
リアルタイムライティング | Unity 2018.4 マニュアル [公式]
混合ライティング | Unity 2018.4 マニュアル [公式]
ベイクしたライティング | Unity 2018.4 マニュアル [公式]
事前計算
- Realtime GI
- Probes
- Ambient Probes
- Reflection Probes
- Baked GI
参考:
事前計算されたライティングの使用 | Unity マニュアル [公式]
Generating Lighting Data | Unity マニュアル [公式]
リアルタイムライティング
- カメラから Shadow Distance で指定された距離より近い範囲で影を生成する
- Realtime GI によって間接光の影響を反映 (負荷が高い)
参考:
リアルタイムライティング | Unity 2018.4 マニュアル [公式]
混合ライティング (Mixed Lighting)
- ベイク済み間接光 (Baked Indirect):間接光としてベイク済み間接光を使用し、直接光はリアルタイムに計算する。
- 減法混色 (Subtractive):静的オブジェクトに対して直接光をテクスチャにベイクする。動的オブジェクトの直接光はリアルタイムに計算する。
- シャドウマスク (Shadowmask):Shadow Distance 以内はリアルタイムに直接光を計算し、範囲外はベイク済みのシャドウを使用する。(負荷が高い)
参考:
ライトモードを Mixed にした時の設定について | LIGHT11
ベイクした影とリアルタイムな影を混ぜる新しい幾つかの手法と、その他諸々 | テラシュールブログ
混合ライティング | Unity 2018.4 マニュアル [公式]
Baked Indirect モード | Unity 2018.4 マニュアル [公式]
Shadowmask | Unity 2018.4 マニュアル [公式]
Subtractive
特徴
- 直接光をベイクする (静的オブジェクトでランタイムに直接光を計算しない)
- 静的オブジェクトはスペキュラーを表示しない (視点に依存するため事前計算できない)
- 静的オブジェクト上に落ちる動的オブジェクトの影は Main Directional Light に限られる
[動的オブジェクト]
- リアルタイム直接光
- リアルタイムシャドウ (Main Directional Light)
- ライトプローブ (Light Probe) による間接光及びシャドウ
[静的オブジェクト]
- ライトマップによる直接光、間接光、静的なシャドウ
- 動的オブジェクトのシャドウ (Main Directional Light)
設定
- Realtime Shadow Color:リアルタイムに計算されるシャドウの色
参考:
Subtractive | Unity 2018.4 マニュアル [公式]
ライトマップをベイクする (LightMap)
参考:
表現方法から見た実践的なライトとベイクの設定方法 | LIGHT11
LightMap を使用して雰囲気のある影を作成 | PointCloudConsortium
ライトマッピング/ライトマッパー (Lightmapper)
- Enlighten (**DEPLECATED**)
- Progressive CPU
- Progressive GPU (プレビュー)
参考:
ライトマッピング | Unity 2018.4 マニュアル [公式]
Enlighten
**DEPLECATED**
- Realtime Global Illumination:グローバルイルミネーションをリアルタイムに計算する
- Final Gather:最終的な光のバウンドをライトマップと同じ解像度で計算する (計算負荷が高い)
- Ray Count:放出されるレイの数 (デフォルト:
1024
) - Denoising:ノイズ除去フィルターを使用する
- Ray Count:放出されるレイの数 (デフォルト:
- Indirect Resolution:間接光の計算におけるサンプル数 (デフォルト:
2
) - Lightmap Resolution:ライトマップの解像度 (1ユニット当たりのテクセル数/デフォルト:
40
) - Lightmap Padding:ライトマップに設ける隙間 (単位:テクセル/デフォルト:
2
) - Lightmap Size:ライトマップのサイズ (デフォルト:
1024
) - Compress Lightmaps:ライトマップテクスチャを圧縮する
- Ambient Occulusion:アンビエントオクルージョンの計算を行う (計算負荷が高い)
- Max Distance:オブジェクト間の距離が指定した値より小さい場合にアンビエントオクルージョンを生成する。0 を指定すると無限に長いレイが投影される。(デフォルト:
1
) - Indirect Contribution:間接光の影響度を 0 ~ 10 の間で指定する。(デフォルト:
1
) - Direct Contribution:直接光の影響度を 0 ~ 10 の間で指定する。(デフォルト:
0
)
- Max Distance:オブジェクト間の距離が指定した値より小さい場合にアンビエントオクルージョンを生成する。0 を指定すると無限に長いレイが投影される。(デフォルト:
- Directional Mode
- Non-Directional:単一のライトマップに全ての計算結果を格納する。
- Directional:Main Directional Light の方向を格納するライトマップを生成する。
- Indirect Intensity:間接光の影響度を 0 ~ 5 の間で指定する。(デフォルト:
1
) - Albedo Boost:マテリアル表面での反射光の強さを 1 ~ 10 の間で指定する。
1
を指定した場合に物理的に正確な反射となる。(デフォルト:1
) - Lightmap Parameters:ライトマップパラメーターアセットを指定する。(デフォルト:
Default-Medium
)
参考:
Enlighten | Unity 2018.4 マニュアル [公式]
Lightmapping using Enlighten (deprecated) | Unity マニュアル [公式]
What is FinalGather? | Unity Forum
Progressive Lightmapper
設定
- Prioritize View:ビューに表示されている範囲を優先的に計算する
- Multiple Importance Sampling:環境光のサンプリングに重み付けを行う。通常は収束が早くなるが、特定の条件でノイズが増える場合がある。(デフォルト:無効)
- Direct Samples:直接光をサンプルするために各テクセルから投影されるレイの数 (デフォルト:
32
) - Indirect Samples:間接光をサンプルするために各テクセルから投影されるレイの数。屋外のシーンでは 100 程度で十分。Emission を使用した屋内シーンでは大きな値が必要。(デフォルト:
500
) - Environment Samples:環境光をサンプルするために各テクセルから投影されるレイの数。(デフォルト:
500
) - Light Probe Sample Multiplier:ライトプローブのサンプル数に係数を掛ける。プロジェクトの設定で「Editor > Graphics > Use legacy Light Probes sample counts」(従来のライトプローブサンプルカウントを使用する) を無効にした場合に使用される。(デフォルト:
4
) - Bounces:間接光の反射回数を指定する。通常は 2 で十分。一部の屋内シーンで多くのバウンスが必要となる場合がある。(デフォルト:
2
) - Filtering:ノイズ除去フィルターの設定
- None:ノイズ除去を使用しない
- Auto:プラットフォーム毎に定義されたプリセットを使用する。OptiX が使用できる場合は半径が 1 テクセルのガウシアンフィルターを適用する。OptiX が使用できない場合は、直接光 1 テクセル、間接光 5 テクセル、アンビエントオクルージョン 2 テクセルの半径のガウシアンフィルターを適用する。
- Advanced:ノイズ除去フィルターの設定を手動で構成する
- Direct Denoiser:直接光の計算で使用するノイズ除去フィルター (OptiX / OpenImageDenoise / Radeon Pro / None)
- Direct Filter:Gaussian / A-Trous / None
- Radius:ガウシアンフィルターの半径 (単位:テクセル/デフォルト:
1
) - Sigma:A-Trous フィルターのシグマ (単位:シグマ/デフォルト:
0.5
)
- Radius:ガウシアンフィルターの半径 (単位:テクセル/デフォルト:
- Indirect Denoiser:間接光の計算で使用するノイズ除去フィルター (OptiX / OpenImageDenoise / Radeon Pro / None)
- Indirect Filter:Gaussian / A-Trous / None
- Radius:ガウシアンフィルターの半径 (単位:テクセル/デフォルト:
5
) - Sigma:A-Trous フィルターのシグマ (単位:シグマ/デフォルト:
2
)
- Radius:ガウシアンフィルターの半径 (単位:テクセル/デフォルト:
- Ambient Occlusion Denoiser
- Ambient Occlusion Filter
- Radius:ガウシアンフィルターの半径 (単位:テクセル/デフォルト:
2
) - Sigma:A-Trous フィルターのシグマ (単位:シグマ/デフォルト:
1
)
- Radius:ガウシアンフィルターの半径 (単位:テクセル/デフォルト:
- Indirect Resolution:間接光をサンプルする解像度 (単位:1ユニット当たりのテクセル数/デフォルト:
2
) - Lightmap Resolution:ライトマップの解像度 (1ユニット当たりのテクセル数:デフォルト:
40
) - Lightmap Padding:ライトマップに設ける隙間 (単位:テクセル/デフォルト:
2
) - Lightmap Size:ライトマップのサイズ (デフォルト:
1024
) - Compress Lightmaps:ライトマップテクスチャを圧縮する
- Ambient Occulusion:アンビエントオクルージョンの計算を行う (計算負荷が高い)
- Max Distance:オブジェクト間の距離が指定した値より小さい場合にアンビエントオクルージョンを生成する。0 を指定すると無限に長いレイが投影される。(デフォルト:
1
) - Indirect Contribution:間接光の影響度を 0 ~ 10 の間で指定する。(デフォルト:
1
) - Direct Contribution:直接光の影響度を 0 ~ 10 の間で指定する。(デフォルト:
0
)
- Max Distance:オブジェクト間の距離が指定した値より小さい場合にアンビエントオクルージョンを生成する。0 を指定すると無限に長いレイが投影される。(デフォルト:
- Directional Mode
- Non-Directional:単一のライトマップに全ての計算結果を格納する。
- Directional:Main Directional Light の方向を格納するライトマップを生成する。
- Indirect Intensity:間接光の影響度を 0 ~ 5 の間で指定する。(デフォルト:
1
) - Albedo Boost:マテリアル表面での反射光の強さを 1 ~ 10 の間で指定する。
1
を指定した場合に物理的に正確な反射となる。(デフォルト:1
) - Lightmap Parameters:ライトマップパラメーターアセットを指定する。(デフォルト:
Default-Medium
)
GPU 版の制限
- 両面グローバルイルミネーションが無効 → 全てのジオメトリが片面のみ表示される
- 影の投影は常に行われる → Cast Shadows / Receive Shadows の設定は無視される
- ベイクされた LOD
- A-Trous フィルタリングは無効 → ガウシアンフィルタリングが使用される
- サブメッシュは使用できない → ライトマッパーは最初のサブメッシュのマテリアル設定のみを使用する
ベイク
ライトマップをベイク中は完了までの予定時間 (ETA) が表示される。
参考:
Unity のライトマップ設定の各項目の説明 Progressive Lightmapper編 | LIGHT11
Progressive Lightmapper の GPU acceleration でライトマップのベイクが爆速に | テラシュールブログ
Denoise を使用してライトマップのベイク時間を劇的に抑える | テラシュールブログ
プログレッシブライトマッパーの最適化に役立つ8つのヒント | Unity for Pro
プログレッシブライトマッパー 2019 | SlideShare
開発中のプログレッシブライトマッパーのご紹介 | Unity Technologies Blog [公式]
プログレッシブ CPU ライトマッパー | Unity 2018.4 マニュアル [公式]
プログレッシブ GPU ライトマッパー (プレビュー版) | Unity 2018.4 マニュアル [公式]
The Progressive Lightmapper | Unity マニュアル [公式]
The Progressive Lightmapper | Unity Manual [Official]
GPU プログレッシブライトマッパー | Unity [公式]
Shadowmask モード
- Shadowmask:静的オブジェクトは常にベイクした影を使用する
- Distance Shadowmask:カメラから Shadow Distance で指定した距離より近い範囲ではリアルタイムの影を計算し、それより遠い範囲ではベイクした影を使用する。(デフォルト)
参考:
Shadowmask モード | Unity 2018.4 マニュアル [公式]
ライトマップパラメーターアセット (Lightmap Parameters Asset)
参考:
Lightmap Parameters Asset | Unity マニュアル [公式]
資料
参考:
第39回 プレゼン資料 菅原 光と影 (PDF) | しずおかアプリ部
ベイクパフォーマンス
参考:
Denoise を使用してライトマップのベイク時間を劇的に抑える | テラシュールブログ
Progressive Lightmapper の GPU acceleration でライトマップのベイクが爆速に | テラシュールブログ
7.5時間を約3分に。ライトマップ (Realtime GI) のベイク時間を短縮する為のチュートリアル | テラシュールブログ