Version: Unity 6.0 (6000.0)
言語 : 日本語
グローバルイルミネーションキャッシュ
ライトプローブデータ形式

ライトマップのデータ形式

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

エンコードスキーム

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

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

  • Double Low Dynamic Range (dLDR) エンコード。 dLDR エンコードは、[0, 2] の範囲を [0, 1] に単純にマッピングすることにより、モバイルプラットフォームで使用されます。ベイクしたライトの強度が 2 より大きい場合は、クランプされます。デコード値は、ガンマ空間を使用する場合はライトマップテクスチャの値に 2 を掛けて計算し、リニア空間を使用する場合は 4.59482 (22.2) を掛けて計算します。プラットフォームによっては、ライトマップを dLDR として保存します。RGBM を使用すると、ハードウェア圧縮によって見た目を損なうアーティファクトが発生するためです。

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

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

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

HDR ライトマップサポート

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

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

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

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

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

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

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

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

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

ターゲットプラットフォーム エンコード 圧縮 - サイズ (ビットごとのピクセル)
スタンドアロン (PC, Mac, Linux) RGBM / HDR DXT5 / BC6H - 8 bpp
WebGL 2.0 RGBM / RGBM / HDR 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 のライトマップに使用されるテクスチャ圧縮形式は、Player SettingsTexture compression format 設定によって異なります。

[2] Android のライトマップに使用されるテクスチャ圧縮形式は、Player SettingsBuild Settings によって異なります。これらの設定の相互作用の仕方についての詳細は、テクスチャ圧縮設定を参照してください。

事前計算されたリアルタイムグローバルイルミネーション (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 のライトマップテクスチャ圧縮形式を更新

グローバルイルミネーションキャッシュ
ライトプローブデータ形式