Version: 2023.1
言語: 日本語
アンビエントオクルージョン
ライトマッピングとシェーダー

ライトマップ - 技術的な情報

Unity は、ターゲットプラットフォームやライティングウィンドウの圧縮設定によって、異なる圧縮やエンコードスキームでライトマップを格納します。

エンコードスキーム

Unity プロジェクトでは必要に応じて、2 つのテクニックを使ってベイクしたライトの強度範囲を低ダイナミックレンジのテクスチャにエンコードできます。

  • RGBM エンコード。 RGBM エンコードは、RGB チャンネルにカラーを、アルファチャンネルに乗数 (M) を保存します。 RGBM ライトマップの範囲は、リニア空間では 0〜34.49 (52.2)、ガンマ空間では 0〜5 です。

  • ダブルローダイナミックレンジ (dLDR) エンコーディング。 dLDR エンコードは、[0、2] の範囲を [0、1] に単純にマッピングすることによって、モバイルプラットフォーム上で使用されます。 2 の値を上回る焼成された光強度がクランプされる。デコード値は、ガンマ空間を使用する場合はライトマップテクスチャの値に 2 を掛けて計算し、リニア空間を使用する場合は 4.59482 (22.2) を掛けて計算します。プラットフォームの中には、ライトマップを dLDR として保存するものもあります。なぜなら、RGBM を使用するとハードウェア圧縮によって 見ためを悪くするアーティファクトが生成される場合があるからです。

リニアカラースペースを使用すると、ライトマップテクスチャは sRGB とマークされ、シェーダーが使用する最終値 (サンプリングおよびデコード後) はリニア色空間になります。ガンマ色空間を使用する場合、最終値はガンマ色空間になります。

注意: エンコードを使用すると、ライトマップ (GPU テクスチャメモリ) に格納された値は常にガンマ色空間になります。

UnityCG.cginc シェーダーのインクルードファイルの Decode Lightmap シェーダー関数は、値がシェーダーのライトマップテクスチャから読み取られた後のライトマップ値のデコードを処理します。

HDR ライトマップサポート

HDR ライトマップは、Windows、Mac、Linux、iOS、tvOS、Android で使用できます。これらのプラットフォームのライトマップのエンコード/圧縮を制御するには、Edit > Project Settings > Player > Other Settings > Lightmap Encoding の順に移動します。

High Quality を選択すると、HDR ライトマップサポートが有効になりますが、Normal Quality では RGBM エンコードを使用するように切り替わります。 Low Quality では、モバイルプラットフォームに対して、dLDR エンコードに切り替わります。他のプラットフォームに対しては、Normal Quality と同様です。

Lighting ウィンドウでライトマップの Compression を有効にすると、デスクトップとコンソールのプラットフォームで BC6H 圧縮形式を使用してライトマップが圧縮されます。モバイルプラットフォームの場合、Unity は下の表に従って HDR (High Dynamic Range、ハイダイナミックレンジ) 形式を選択します。

高品質 (BC6H) ライトマップの利点

  • HDR ライトマップは、ライトマップ値をエンコードするためにエンコードスキームを使用しないため、サポート範囲は、0 〜 65504 の16 ビット浮動小数点テクスチャ形式によって制限されるだけです。

  • BC6H 形式の品質は、DXT5 + RGBM 形式のエンコードよりも優れており、RGBM エンコードに発生するカラーバンディングによるアーティファクトを生成しません。

  • HDR ライトマップをサンプリングする必要があるシェーダーは、サンプリングされた値をデコードする必要がないため、ALU の命令がいくらか短くなります。

  • BC6H 形式は、DXT5 と同じ GPU メモリ要件です。

ターゲットプラットフォームごとのエンコードスキームとそのテクスチャ圧縮形式のリストは以下の通りです。

Target platform エンコード 圧縮 - サイズ (ビットごとのピクセル)
スタンドアロン (PC, Mac, Linux) RGBM / HDR DXT5 / BC6H - 8 bpp
WebGL 1.0 / 2.0 RGBM DXT5 - 8 bpp
iOS ASTC (1) dLDR / RGBM / HDR ASTC - 3.56 bpp / ASTC - 3.56 bpp / RGB9E5 - 32 bpp
iOS PVRTC dLDR / RGBM / HDR PVRTC RGB - 4 bpp / ETC2 RGBA - 8 bpp / RGB9E5 - 32 bpp
tvOS dLDR / RGBM / HDR ASTC - 3.56 bpp / ASTC - 3.56 bpp / RGB9E5 - 32 bpp
Android ASTC (2) dLDR / RGBM / HDR ASTC - 3.56 bpp / ASTC - 3.56 bpp / ASTC HDR - 3.56 bpp
Android ETC2 dLDR / RGBM / HDR ETC2 RGB - 4 bpp / ETC2 RGBA - 8 bpp / ASTC HDR - 3.56 bpp
Android ETC dLDR / RGBM / HDR ETC1 RGB - 4 bpp / ETC2 RGBA - 8 bpp / ASTC HDR - 3.56 bpp

[1] iOS でライトマップに使用されるテクスチャ圧縮形式は、プレイヤー設定テクスチャ圧縮形式 設定によって異なります。

[2] Android でライトマップに使用されるテクスチャ圧縮形式は、プレイヤー設定 および ビルド設定 によって異なります。これらの設定がどのように相互作用するかの詳細については、テクスチャ圧縮設定 を参照してください。

事前計算されたリアルタイムグローバルイルミネーション (GI)

GI システムへの入力の範囲とエンコードは出力と異なります。表面アルベドは、ガンマ空間で 8 ビット符号なし整数型の RGB であり、放射はリニア空間で 16 ビット浮動小数点型の RGB です。メタパスを使用してカスタム入力を行う際のヒントについては、ライトマッピングとシェーダー に関するドキュメントを参照してください。

放射の出力テクスチャは、RGB9E5 共有指数の浮動小数点型 (グラフィックハードウェアがサポートする場合)、またはフォールバックとしては 範囲が 5 の RGBM を使用して保存されます。 RGB9E5 ライトマップの範囲は [0, 65408] です。RGB9E5 形式の詳細については、 Khronos.org: EXT_texture_shared_exponent を参照してください。

関連項目


  • 2019–04–26 修正されたページ

  • ベイクしたライトマップは Unity 2017.2 で追加NewIn20172

  • HDR ライトマップサポートは Unity 2017.3 で追加NewIn20173

  • モバイルプラットフォーム用のライトマップエンコード設定は、Unity 2019.1 で追加NewIn20191

  • Android と iOS のライトマップテクスチャ圧縮形式をアップデートします

アンビエントオクルージョン
ライトマッピングとシェーダー