グローバルイルミネーション (GI)

リアルタイム GI

**DEPRECATED**

Enlighten を使用してリアルタイムに GI の影響を計算する。Lighting ウィンドウの「シーン」(Scene) タブで、「Realtime Lighting > Realtime Global Illumination」を有効にする。

Enlighten が廃止されるため、リアルタイム GI も廃止される。廃止予定であったが代替手段がすぐに用意されず、Unity 2024 LTS まではサポートが予定されている。

ベイク済み GI

Lighting ウィンドウの「シーン」(Scene) タブで、「Mixed Lighting > Baked Global Illumination」を有効にする。

参考:

グローバルイルミネーション | Unity 2018.4 マニュアル [公式]

Lighting ウインドウ | Unity 2018.4 マニュアル [公式]

Enlighten から堅牢なベイクした GI/リアルタイム GI 向けソリューションへの移行のお知らせ | Unity Technologies Blog [公式]

Update on Global Illumination 2021 – Unity Forum

概要

参考:

Unity でのグローバルイルミネーションの基礎知識 | LIGHT11

導入

参考:

入門ライティング設定!- Qiita

ライティング (GI) を軽く触ってみた – Qiita

グローバルイルミネーション (GI) 基礎知識 STYLY への反映方法 | STYLY

Lightmap UVs

継ぎ目の縫合 (Stitch Seams)

ライトマップの継ぎ目が目立つのを解消したい場合は、ゲームオブジェクトの Mesh Renderer コンポーネントで、「Lighting  > Lightmap Settings > Stitch Seams」を有効にする。(プログレッシブライトマッパーで使用できる。)

Generate Lightmap UVs

  • Hard Angle:三角ポリゴンの成す角度が指定した角度より大きい (鋭い) 場合にハードエッジ (ライトマップ UV の継ぎ目) として扱う。180 度に設定すると全てのエッジを滑らかにする。(デフォルト:88 度)
  • Pack Margin:ライトマップをパッキングする際のマージンを指定する。(デフォルト:4 ピクセル)
  • Angle Error:UV 展開において許容する角度の歪みを指定する。(デフォルト:8 %)
  • Area Error:UV 展開において許容する面積変化の比率を指定する。(デフォルト:15 %)

参考:

Generate Lightmap UVs で綺麗になるか? | ウーパの手習い

Generate Lightmap UVs=On/Off の考察 | ウーパの手習い

Unity 5 でライトをベイクした結果が汚い | おもちゃラボ

UV2 (ライトマップ用 UV) の作り方 | Virtual Market 5

UV Overlap の対処法 | おねむゲーマーの備忘録

UV の働きを検証する | Tsumiki Tech Times

グローバルイルミネーションの UV | Unity 2018.4 マニュアル [公式]

Generating Lightmap UVs | Unity 2018.4 マニュアル [公式]

UV の重複 | Unity 2018.4 マニュアル [公式]

ライトマップの継ぎ目の縫合 | Unity 2018.4 マニュアル [公式]

Unity 5 の lightmap で使用される UV について | ユニティ・テクノロジーズ・ジャパン株式会社 [公式]

ライティングモード (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 マニュアル [公式]

リアルタイムライトが static なオブジェクトに対し、妙に強く反映される問題の解決法 | テラシュールブログ

Precomputed Realtime GI の事前計算はいつなのかという話 | 土屋つかさの技術ブログは今か無しか

リアルタイムライティング

  • カメラから Shadow Distance で指定された距離より近い範囲で影を生成する。
  • Realtime GI によって間接光の影響を反映させる。(負荷が高い)

参考:

Unity の RealtimeGI を試してみる (Emission のオンオフをしよう) – Qiita

リアルタイムライティング | 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

Unity 2018 で Lightmap を綺麗に Bake する!| 黒猫洋品店

ライトのベイク方法簡易まとめ | mi

ライトマッピング/ライトマッパー (Lightmapper)

  • Enlighten (**DEPLECATED**)
  • Progressive CPU
  • Progressive GPU (プレビュー)

参考:

ライトマッピング | Unity 2018.4 マニュアル [公式]

Enlighten

**DEPLECATED**

Unity 2021 LTS までサポートされ、それ以降廃止が見込まれる。アップグレードが必要な場合は、プログレッシブライトマッパーの使用が推奨される。 (→ Unity Forum)

  • Realtime Global Illumination:グローバルイルミネーションをリアルタイムに計算する。
  • Final Gather:最終的な光のバウンドをライトマップと同じ解像度で計算する。(計算負荷が高い)
    • Ray Count:放出されるレイの数 (デフォルト:1024)
    • Denoising:ノイズ除去フィルターを使用する。
  • Indirect Resolution:間接光の計算におけるサンプル数 (デフォルト:2)
  • Lightmap Resolution:ライトマップの解像度 (単位距離当たりのテクセル数/デフォルト:40)
  • Lightmap Padding:ライトマップに設ける隙間 (単位:テクセル/デフォルト:2)
  • Lightmap Size:ライトマップのサイズ (デフォルト:1024)
  • Compress Lightmaps:ライトマップテクスチャを圧縮する。
  • Ambient Occulusion:アンビエントオクルージョンの計算を行う。(計算負荷が高い)
    • Max Distance:オブジェクト間の距離が指定した値より小さい場合にアンビエントオクルージョンを生成する。0 を指定すると無限に長いレイが投影される。(デフォルト:1)
    • Indirect Contribution:間接光の影響度を 010 の間で指定する。(デフォルト:1)
    • Direct Contribution:直接光の影響度を 010 の間で指定する。(デフォルト:0)
  • Directional Mode
    • Non-Directional:単一のライトマップに全ての計算結果を格納する。
    • Directional:Main Directional Light の方向を格納するライトマップを生成する。
  • Indirect Intensity:間接光の影響度を 05 の間で指定する。(デフォルト:1)
  • Albedo Boost:マテリアル表面での反射光の強さを 110 の間で指定する。1 を指定した場合に物理的に正確な反射となる。(デフォルト:1)
  • Lightmap Parameters:ライトマップパラメーターアセットを指定する。(デフォルト:Default-Medium)

参考:

Enlighten | Unity 2018.4 マニュアル [公式]

Enlighten を使用したライトマップ (非推奨) | Unity マニュアル [公式]

Enlighten から堅牢なベイクした GI/リアルタイム GI 向けソリューションへの移行のお知らせ | Unity Blog [公式]

Update on Global Illumination 2021 – Unity Forum

Enlighten deprecation and replacement solution – Unity Forum

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)
      • Indirect Denoiser:間接光の計算で使用するノイズ除去フィルター (OptiX / OpenImageDenoise / Radeon Pro / None)
      • Indirect Filter:Gaussian / A-Trous / None
        • Radius:ガウシアンフィルターの半径 (単位:テクセル/デフォルト:5)
        • Sigma:A-Trous フィルターのシグマ (単位:シグマ/デフォルト:2)
      • Ambient Occlusion Denoiser
      • Ambient Occlusion Filter
        • Radius:ガウシアンフィルターの半径 (単位:テクセル/デフォルト:2)
        • Sigma:A-Trous フィルターのシグマ (単位:シグマ/デフォルト:1)
  • Indirect Resolution:間接光をサンプルする解像度 (単位:単位距離当たりのテクセル数/デフォルト:2)
  • Lightmap Resolution:ライトマップの解像度 (単位距離当たりのテクセル数:デフォルト:40)
  • Lightmap Padding:ライトマップに設ける隙間 (単位:テクセル/デフォルト:2)
  • Lightmap Size:ライトマップのサイズ (デフォルト:1024)
  • Compress Lightmaps:ライトマップテクスチャを圧縮する。
  • Ambient Occulusion:アンビエントオクルージョンの計算を行う。(計算負荷が高い)
    • Max Distance:オブジェクト間の距離が指定した値より小さい場合にアンビエントオクルージョンを生成する。0 を指定すると無限に長いレイが投影される。(デフォルト:1)
    • Indirect Contribution:間接光の影響度を 010 の間で指定する。(デフォルト:1)
    • Direct Contribution:直接光の影響度を 010 の間で指定する。(デフォルト:0)
  • Directional Mode
    • Non-Directional:単一のライトマップに全ての計算結果を格納する。
    • Directional:Main Directional Light の方向を格納するライトマップを生成する。
  • Indirect Intensity:間接光の影響度を 05 の間で指定する。(デフォルト:1)
  • Albedo Boost:マテリアル表面での反射光の強さを 110 の間で指定する。1 を指定した場合に物理的に正確な反射となる。(デフォルト:1)
  • Lightmap Parameters:ライトマップパラメーターアセットを指定する。(デフォルト:Default-Medium)

GPU 版の制限 (2018.3)

  • 両面グローバルイルミネーションが無効 → 全てのジオメトリが片面のみと仮定して計算される。(2019.1 以降でサポート)
  • 影の投影は常に行われる → Cast Shadows / Receive Shadows の設定は無視される。(2019.1 以降でサポート)
  • LOD が設定されたオブジェクトではベイク済みライトマップは適用できない。(2020.1.0a20 以降でサポート)
  • A-Trous フィルタリングは無効 → ガウシアンフィルタリングが使用される。(2020.1a15 以降でサポート)
  • サブメッシュの複数マテリアルは考慮されない → ライトマッパーは最初のサブメッシュのマテリアルのみを用いてライトマップのベイクを実行する。(2019.3 以降でサポート)

ベイク

ライトマップをベイク中は完了までの予定時間 (ETA/Estimated Time of Arrival) が表示される。

参考:

Unity のライトマップ設定の各項目の説明 Progressive Lightmapper 編 | LIGHT11

Progressive Lightmapper の GPU acceleration でライトマップのベイクが爆速に | テラシュールブログ

Denoise を使用してライトマップのベイク時間を劇的に抑える | テラシュールブログ

プログレッシブライトマッパーの最適化に役立つ8つのヒント | Unity for Pro

プログレッシブライトマッパー 2019 | SlideShare

開発中のプログレッシブライトマッパーのご紹介 | Unity Technologies Blog [公式]

ライトマッピング – はじめに | Unity 2018.4 マニュアル [公式]

プログレッシブ CPU ライトマッパー | Unity 2018.4 マニュアル [公式]

プログレッシブ GPU ライトマッパー (プレビュー版) | Unity 2018.4 マニュアル [公式]

The Progressive Lightmapper | Unity マニュアル [公式]

The Progressive Lightmapper | Unity Manual [Official]

GPU プログレッシブライトマッパー | Unity [公式]

Progressive GPU Lightmapper preview | Unity Forum

Shadowmask モード

  • Shadowmask:静的オブジェクトは常にベイクした影を使用する。
  • Distance Shadowmask:カメラから Shadow Distance で指定した距離より近い範囲ではリアルタイムの影を計算し、それより遠い範囲ではベイクした影を使用する。(デフォルト)

参考:

Shadowmask モード | Unity 2018.4 マニュアル [公式]

指向性モード (Directional Modes)

  • Directional:光源の指向性を考慮して反射を計算する。余分にテクスチャメモリを使用して計算量も多くなるためシェーディング負荷が高い。
  • Non-Directional:ノーマルマップを使用せず均一な拡散を仮定するために計算負荷は低いが、面はフラットに表現される。

参考:

指向性のモード | Unity 2018.4 マニュアル [公式]

ライトマップパラメーター (Lightmap Parameters)

参考:

Lightmap Parameters アセット | Unity マニュアル [公式]

使用する GPU を指定する

Unity 2020 以降の場合:

  1. Lighting ウィンドウを開く。
  2. 「Workflow Settings > GPU Baking Device」で使用する GPU を選択する。

Unity 2018 / 2019 の場合:

  1. 使用したい GPU のプラットフォームとデバイス番号を調べる。Unity エディターのログ (C:\Users\[User Name]\AppData\Local\Unity\Editor\Editor.log) を開いて「Listing OpenCL device(s)」が出力された箇所を見つけ、DEVICE_NAME = ... の欄が対象のグラフィックスカードとなっている項目の * OpenCL platform x, device yxy の数字をメモする。
  2. Unity Hub でプロジェクト項目の右端にある縦に連なった3点ドットアイコンをクリックし、「詳細なプロジェクト設定」を開く。
  3. 追加のコマンドライン引数として -OpenCL-PlatformAndDeviceIndices x y の形式でプラットフォームとデバイス番号を指定する。

参考:

Unity 2018 で VRChat ワールドを GPU ベイクしてみた – Qiita

どの GPU をライトマッパーに使用するかの設定 | Unity 2018.4 マニュアル [公式]

プログレッシブ GPU ライトマッパー (プレビュー版) | Unity マニュアル [公式]

The Progressive GPU Lightmapper (Preview) | Unity Manual [Official]

資料

参考:

第39回 プレゼン資料 菅原 光と影 (PDF) | しずおかアプリ部

フォーラム

参考:

Global Illumination | Unity Forum

Productboard

参考:

Global Illumination | Productboard

タグ:

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です