Version: 2021.2
言語: 日本語
ライトマッピングとシェーダーメタパス
ライトマップ UV の生成

ライトマップ UV

グローバルイルミネーション (GI) ライトマップには、BakedRealtime の 2 種類があります。どちらを使用するかは、環境ライトを使っているか、特定のライトを使うかによって異なります。

  • グローバルイルミネーション (環境照明) は、 Realtime (リアルタイム) または Baked (ベイク) に設定することができます。 Window > Rendering > Lighting と進み、 Ambient GI ドロップダウンメニューから 1 つを選択します。

  • LightsRealtimeBakedMixed に設定できます。

  • マテリアルには Emission の制御があり、RealtimeBaked に設定できます。詳細は Standard Shader マテリアルの Emission パラメーター に関するドキュメントを参照してください。

Lightmap プロパティ
Baked ベイクしたライトマップは主に、ランタイムにまったく変化しないライトに使用します (例えば、街灯など)。したがって、ライトマップに静的なレンダリングとして格納されます。機能には直接ライティング、間接ライティング、アンビエントオクルージョンが含まれます。
Realtime リアルタイムライトマップは主に、ランタイムにアニメーション化されるライトに使用します (例えば、点滅する街灯など)。したがって、リアルタイムでレンダリングされる必要があります。機能には間接ライトのみが含まれ、たいてい低解像度です。直接ライトはライトマップには格納されず、リアルタイムでレンダリングされます。
Mixed ライトを Mixed モードに設定すると、ベイクしたライトマップに影響し、さらに、静的でないオブジェクトにリアルタイムの直接ライティングを行います。

You can use either one or both of these lightmap sets to light your Scenes. Your choice determines which lightmaps the light contributions and resulting global illumination are added to.

UV の可視化

使用している UV を可視化することは大切です。Unity にはこれを支援する可視化ツールがあります。最初に、Lighting ウィンドウ (Window > Rendering > Lighting) を開き、下の方の Auto チェックボックスをチェックします。これによって、ベイクと事前計算が最新の状態で維持され、UV の表示に必要なデータを出力します。処理が終わるまで時間がかかります (大きいシーンや複雑なシーンには時間がかかります)。

リアルタイム UV の可視化

事前計算されたリアルタイム GI の UV を見るには以下を行います。

  • シーンの Mesh Renderer がアタッチされているゲームオブジェクトを選択します。
  • Lighting ウィンドウを開き、Object タブを選択します。
  • Preview のドロップダウンで Charting を選択します。

これは、このメッシュのインスタンスのうち選択したものが持つリアルタイムライトマップの UV レイアウトを表示します。

  • プレビューでは、チャートは色分けされたエリアで表示されます (上の右側の図)。
  • 選択したインスタンスの UV はチャート上に置かれ、ゲームオブジェクトのメッシュのワイヤーフレームとして表示されます。
  • 濃いグレーのテクセルは、ライトマップの使用されていないエリアです。

複数のインスタンスをリアルタイムのライトマップにパックすることができます。したがって、表示されるチャートの中には、実際には他のゲームオブジェクトに属するものがあります。

注意 インスタンスのグループ化に関して、リアルタイムライトマップとベイクしたライトマップの間に直接の一致はありません。同じリアルタイムライトマップの 2 つのインスタンスが、2 つの異なるベイクしたライトマップに存在する場合があり、その逆もあります。

ベイクした UV の可視化

ベイクした UV を見るには

  • インスタンスを選択します。
  • Lighting ウィンドウ (Window > Rendering > Lighting) を開き、Object タブを選択します。
  • Preview のドロップダウンで Baked Intensity を選択します。

図のように、ベイクした UV は、事前計算されたリアルタイム UV とは大きく異なります。これは、ベイクした UV と事前計算したリアルタイム UV の要件が異なるためです。

リアルタイム UV

Preserve UVs をチェックしても、ベイクした GI で事前計算されたリアルタイム GI と同じ UV を取得することはできません。

可能だとしても、予期せぬ場所にひどいエイリアシング (明るいエッジや暗いエッジなど) が発生します。これは、リアルタイムのライトマップの解像度が意図的に低くなっているため、リアルタイムでそれらを更新することが可能であるからです。これはグラフィカルな品質には影響しません。なぜなら、一般的に周波数が低い (つまり突然ライトの強度が発生したり細かいパターンをもつことがない) 間接ライトのみを格納するからです。直接ライトとシャドウは、標準のリアルタイムライティングとシャドウマップを使用して別々に描画されます。直接ライトは一般的に周波数が高い (つまり、鋭いエッジからシャドウに移る箇所など、ライトの強度の変化や細かいパターンを持つことが多い) ので、この情報を取得するためにより高い解像度のライトマップが必要だからです。

低解像度のライトマップは、チャートがテクセルを共有するときにブリーディングの問題を引き起こす可能性があります。これはライトの品質に悪影響を及ぼしますが、UV チャートを再パックして周囲の半ピクセルの境界を確保することで解決できます。この方法では、双線形補間を使用していても、(最も詳細なミップで) チャートを またがって サンプリングすることはありません。半ピクセルの境界が保証されたチャートの利点は、チャートをすぐ隣合わせに置くことができ、ライトマップのスペースを節約できることです。

In summary, UVs used for precomputed Enlighten Realtime Global Illumination lightmaps are always repacked.

再パックすると、チャートの周りの半ピクセルの境界を保証し、UV はインスタンスのスケールとライトマップ解像度に依存することができます。高い解像度のライトマップを取得するために UV を拡大すると、もはやこの半ピクセルの境界は保証されません。UV は、インスタンスのスケールとライトマップ解像度を考慮に入れて、個々にパックされます。したがって、リアルタイムの UV は インスタンスごと です。同じスケールと解像度のオブジェクトが 1000 あると、それらは UV を共有します。


  • 2017–07–04 公開ページ

  • 2017–07–04 ドキュメンテーション更新のみ。Unity の機能に変更なし。

ライトマッピングとシェーダーメタパス
ライトマップ UV の生成