Getting started with UIElements
ライトマップの継ぎ目の縫合

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

プログレッシブライトマッパーとは何か

プログレッシブライトマッパーは、パストレースに基づいたライトマッパーバックエンドで、エディターで進行する更新を反映するベイクドライトマップとライトプローブを提供します。

プログレッシブライトマッパーの準備処理時間 (ジオメトリとインスタンスの更新、G バッファとチャートマスクの生成) は短く、非常に早く出力を開始します。新しい中間結果が得られるとすぐに、新しいライトマップとライトプローブが表示されます。これにより、非常に高速な反復ワークフローが可能になります。

なぜプログレッシブライトマッパーなのか

以前の Enlighten に基づいたライトマッパーは、事前計算されたリアルタイム GI を使って間接ライトを生成しました。このことは、ライトを変更するだけで新しいライトマップをかなり早く生成できるという長所でもあり、同時に、ベイクに興味のあるユーザーであっても UV レイアウトのすべての制限にしばられるという短所でもありました。プログレッシブライトマッパーの UV 要件 (面積と角度の誤差が小さい重複なしの UV と、チャート間の合理的なパディングなど) は、ベイクしたライトマッピングにとっては当然のものでした。

新しいライトマッパーは、ライティングワークフローを向上させるためにすぐに出力を生成し始め、経時的に漸次更新します。これは、インタラクティブなライティングワークフローを意味します。さらに、ベイク時間がずっと予測しやすくなりました。

こちらの ビデオは、インタラクティブなワークフローを詳しく紹介しています。

さらに新しいテクニックでは、アップサンプリング手法や放射キャッシュやその他のグローバルデータ構造に頼ることなく、ライトマップの解像度 (個々のテクセルごとに) でグローバルイルミネーションをベイクします。これによりプログレッシブマッパーはしっかりと安定し、ライトマップの選択した部分をベイクすることができます。つまり、反復速度が大幅に早くなります。

設定

新しく作成するシーンでは、デフォルトでプログレッシブライトマッパーが有効になります。既存のシーンでは Bake Backend を Progressive (experimental) に変更するまで Enlighten のままです。

設定画面

  • Bake Backend - Enlighten は古いベイクのバックエンドで、 Progressive (experimental) は新しいものです。
  • Stationary Lighting Mode - シーンのすべての停止したライトに使うライティングモードを指定します。選択肢は Baked Indirect、Distance Shadowmask、Shadowmask、Subtractive です。現在、ライトモードはサポートされていません。ですから、Baked Indirect を使用し、Stationary ライトを使わないでください。近い将来、サポートを開始する予定です。
  • Lightmap Resolution - ワールド単位でのテクセルの量。この値を 2 増加すると、計算されるテクセルの数が 4 増加します。以下の統計の Occupied texels 数を確認してください。
  • Lightmap Padding - アトラス内のインスタンス間のパディング (単位はテクセル)。 インスタンス内の UV チャート間のパディングを変更するには、Generate Lightmap UVs の Advanced settings でメッシュインポーターの Pack Margin を調整してください。
  • Compress Lightmaps - 中間のライトマップは圧縮されませんが、最終的なものには圧縮設定が適用されます。
  • Samples - 各テクセルから取得したサンプル (パス) の量。一部のシーン、特に屋外シーンでは、100 サンプルで十分な場合があります。発光するジオメトリを持つ屋内シーンでは、より多く必要になります。
  • Bounces - パスを追跡するときの間接的な反射の数。大抵のシーンで 2 つの反射で十分。室内の状況で、それよりも多く必要な場合があります。
  • Filtering - ライトマップのポストプロセシングを設定してノイズを制限します。 None、Auto、Advanced のいずれかに設定できます。Advanced オプションには、手動設定のためにさらに 3 つのパラメーターがあります。Auto モードでは、Advanced モードのデフォルト値が使用されます。
    • __Direct Radius: __ ライトマップの直接ライトのガウスフィルターの半径 (単位 テクセル)。半径を大きくするとぼかしの強さが増します。
    • __Indirect Radius: __ ライトマップの間接ライトのガウスフィルターの半径 (単位 テクセル)。半径を大きくするとぼかしの強さが増します。
    • __AO Radius: __ ライトマップのアンビエントオクルージョンのガウスフィルターの半径 (単位 テクセル)。半径を大きくするとぼかしの強さが増します。
  • Prioritize View - 有効にすると、シーンビューのカメラの錐台で現在表示されているテクセルが優先されます。それらが終了すると、ライトマッパーはそれ以外のすべてのテクセルに対して続けます。

統計情報

下の図の Auto Generate と Generate Lighting オプションは、生成されるライトマップの量を示しています。表示されているライトマップ数 Lightmaps in view (収束 / 非収束)、非表示のライトマップ数 Lightmaps out of view (収束 / 非収束)、ベイクのパフォーマンスを表示します。

ライトマップパラメーター

Lighting ウィンドウの Baked GI 設定の以外に、Lightmap Parameters アセットに設定可能な新しいパラメーターの Anti-aliasing Samples、Pushoff、Backface Tolerance が加わりました。デフォルトのライトマップパラメーターをシーンごとに設定するには General GI > Default Parameters で、あるいは、レンダラーごとに設定できます。  

  • __Anti-aliasing Samples __ - エイリアシングを減らすためにテクセルをスーパーサンプリングする回数。サンプル [1;3] はスーパーサンプリングを無効にし、サンプル [4;8] は 2 倍のスーパーサンプリングを行い、サンプル [9;256] は 4 倍スーパーサンプリングを行います (ユーザー体験では少し奇妙ですので、改善する予定です)。これは、位置と法線のバッファーに使用されるメモリ量に影響します (2 倍のスーパーサンプリングはメモリ量の 4 倍、4 倍は 16 倍のメモリ量を使用します)。
  • Pushoff - モデルの単位で、レイの起点をジオメトリからレイトレーシングの法線に沿って押し退ける量。 これは、ベイクしたライトマップすべてに適用されるため、直接ライト、間接ライト、アンビエントオクルージョンに影響します。必要のないオクルージョンや投影の削除に有用です。
  • __Backface Tolerance __ - 出力したテクセルからのレイが表面に当たるパーセンテージ。レイは表面に当たるもののみが使用可能です。テクセルから発したレイがあまり多く裏面にあたると (テクセルは物理的にジオメトリの内部)、テクセルを無効にできます。そのような場合、周囲のテクセルから有効な値を複製することによって、アーティファクトを避けることができます。例えば、裏面の許容範囲が 0.0 の場合、裏面以外なにも見えない場合のみ、テクセルは拒否されます。1.0 の場合は、裏面にあたるレイがたった 1 つあるだけでもレイの源は拒否されます。Baked Texel Validity シーンビューモードでは、あるケースでは有効 (緑) と無効 (赤) のテクセルが表示されます。シーンで片面しかないメッシュがあるときは、値を 0 にしてこの機能を無効にする方がよい場合もあります。これに対処するために、両面のフラグを後にエディターで加えます。

その他は、デフォルトの Unity 5 のワークフロー同様です。オブジェクトを静的にして、ライトの入力 (ライト、環境ライティング、静的オブジェクトのエミッシブマテリアルなど) をベイクに設定します。

Auto モードでは、ライトマップとライトプローブは自動的に計算されます。Auto が無効にしている場合は、Build ボタンを押してベイクを開始する必要があります。

その他の機能

Force stop: 要求されたサンプル量が実際に終了する前に、任意の時点でベイクを停止することができます。これは、ライティングを手動で構築するときに使用します。100,000 の最大サンプル数とビューの優先順位付けを無効にする機能で、マシンをベイクのままにして、結果が満足な状態になったらいつでも停止できます。

Invalid texels: テクセルは Backface Tolerance パラメーター (LightmapParameters > General GI) に基づいて無効とされ、無効なテクセルは有効な近隣の値で埋められます。いったんライトマップが収束すると、テクセルを処理する拡張プロセスはライトマップを処理しているときよりも、より多くの反復を行います。

Supersampling: ライティングの質は、スーパーサンプリング量の影響を受けます。 ‘Anti-aliasing Samples’ プロパティー (Lightmap Parameters > Baked GI,、前述のライトマップパラメータを参照) を使用してコントロールします。

プロジェクト例

この プロジェクト は、プログレッシブライトマッパーに必要な設定を備えています。これはチュートリアルでも紹介されている タンク で、アセットストアでも入手可能です。このプロジェクトでは 5 分未満でベイクし、11 の 1024x1024 のライトマップが含まれます。以下のビデオでは、このプロジェクトのインタラクティブなワークフローを紹介しています。


  • 2017–07–04 編集レビュー 無しにパブリッシュされたページ

  • 2017–07–04 Unity 5.6 の新機能 (実験的)

Getting started with UIElements
ライトマップの継ぎ目の縫合