Version: 2022.2
言語: 日本語
アンビエントオクルージョン
Lightmapping and shaders

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

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 lightmap support

You can use HDR lightmaps on Windows, Mac, Linux, iOS, tvOS, and Android. To control the encoding/compression of the lightmaps for these platforms, go to Edit > Project Settings > Player > Other Settings > Lightmap Encoding.

Choosing High Quality will enable HDR lightmap support, whereas Normal Quality will switch to using RGBM encoding. Low Quality will switch to dLDR encoding on mobile platforms, on other platforms it’s equivalent to Normal Quality.

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

Advantages of High Quality (BC6H) lightmaps

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

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

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

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

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

ターゲットプラットフォーム エンコード 圧縮 - サイズ (ビットごとのピクセル)
スタンドアロン (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] The texture compression format used for lightmaps on iOS depends on the Texture compression format setting in the Player Settings.

[2] The texture compression format used for lightmaps on Android depends on Player Settings and Build Settings. See Texture compression settings for more details on how these settings interact.

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

The inputs to the GI system have a different range and encoding to the output. Surface albedo is 8-bit unsigned integer RGB in gamma space and emission is 16-bit floating point RGB in linear space. For advice on providing custom inputs using a meta pass, see documentation on Lightmapping and shaders.

放射の出力テクスチャは、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

  • Update lightmap texture compression formats for Android and iOS

アンビエントオクルージョン
Lightmapping and shaders