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 ライトマップは スタンドアロン (PC、Mac、Linux )、Xbox One、PlayStation4 で使用できます。Player 設定の Other Settings には、これらのプラットフォーム向けに Lightmap Encoding があり、エンコード/圧縮を制御します。
High Quality を選択すると HDR ライトマップが適用されますが、 Normal Quality では RGBM エンコードが使用されます。
Lighting ウィンドウでライトマップの Compression が使用されている場合、ライトマップは BC6H 圧縮形式で圧縮されます。
HDR ライトマップは、ライトマップ値をエンコードするためにエンコードスキームを使用しないため、サポート範囲は、0 〜 65504 の16 ビット浮動小数点テクスチャ形式によって制限されるだけです。
BC6H 形式の品質は、DXT5 + RGBM 形式のエンコードよりも優れており、RGBM エンコードに発生するカラーバンディングによるアーティファクトを生成しません。
HDR ライトマップをサンプリングする必要があるシェーダーは、サンプリングされた値をデコードする必要がないため、ALU の命令がいくらか短くなります。
BC6H 形式は、DXT5 と同じ GPU メモリ要件です。
ターゲットプラットフォームごとのエンコードスキームとそのテクスチャ圧縮形式のリストは以下の通りです。
ターゲットプラットフォーム | エンコード | 圧縮 - サイズ (ビットごとのピクセル) |
---|---|---|
スタンドアロン (PC, Mac, Linux) | RGBM / HDR | DXT5 / BC6H - 8 bpp |
Xbox One | RGBM / HDR | DXT5 / BC6H - 8 bpp |
PlayStation4 | RGBM / HDR | DXT5 / BC6H - 8 bpp |
WebGL 1.0 / 2.0 | RGBM | DXT5 - 8 bpp |
iOS | dLDR | PVRTC RGB - 4 bpp |
tvOS | dLDR | ASTC 4x4 block RGB - 8 bpp |
Android* | dLDR | ETC1 RGB - 4 bpp |
Samsung TV | dLDR | ETC1 RGB - 4 bpp |
Nintendo 3DS | dLDR | ETC1 RGB - 4 bpp |
Nintendo 3DS | dLDR | ETC1 RGB - 4 bpp |
GI システムへの入力の範囲とエンコードは出力と異なります。表面アルベドは、ガンマ空間で 8 ビット符号なし整数型の RGB であり、放射はリニア空間で 16 ビット浮動小数点型の RGB です。メタパスを使用してカスタム入力を行う方法については、 メタパス のドキュメントを参照してください。
放射の出力テクスチャは、RGB9E5 共有指数の浮動小数点型 (グラフィックハードウェアがサポートする場合)、またはフォールバックとしては 範囲が 5 の RGBM を使用して保存されます。 RGB9E5 ライトマップの範囲は [0, 65408] です。RGB9E5 形式の詳細については、 Khronos.org: EXT_texture_shared_exponent を参照してください。
関連項目
2017–09–18 編集レビュー 無しに修正されたページ - ページのフィードバックを残す
ベイクしたライトマップは Unity 2017.2 で追加NewIn20172
HDR ライトマップサポートは Unity 2017.3 で追加NewIn20173