ライトマップのライトのにじみの修正
各ライトマップには多くの__チャート__が含まれています。ランタイムに Unity はこれらのチャートをメッシュ面にマップし、チャートのライティングデータを使用して最終的な外観を計算します。GPU のサンプリングの仕組みにより、チャートのデータが互いに近すぎる場合、1 つのチャートからのデータが他のチャート上に、にじみを作る可能性があります。これは通常、エイリアシング、ピクセル化など意図しないアーティファクトが生じる原因になります。
チャートのにじみによるグラフィカルなアーティファクトの例
ライトのにじみを避けるためには、チャート間に十分なスペースが必要です。GPU がライトマップをサンプリングすると、ライティングシステムはサンプリングされた点に最も近い 4 つのテクセルから最終的なサンプル値を計算します (バイリニアフィルタリングが使用されていると仮定)。これらの 4 つのテクセルはサンプリングされた点のバイリニアの “ネイバー” と呼ばれます。チャートが近すぎると重なってしまいます。つまり、チャート内の点が、他のチャート内の近隣の点 (ネイバー) と重なります。下の画像では、白のピクセルはチャートのネイバーを示し、赤のピクセルは重なっているネイバーを示しています。
赤いピクセルは重なりあうチャートのネイバーを示します
最適なチャートの配置と間隔の決定は、いくつかのパラメーター (ライトマップ解像度、メッシュ UV、インポーター設定など) に依存するため、難しい場合があります。このため、Unity にはこれらの問題を簡単に識別する機能があります。以下のセクションで概要を説明します。
Identification
重複を識別するには 3 つの方法があります。
Unity のコンソールに注目してください。Unity が重複する UV を検出すると、警告メッセージと影響を受けるゲームオブジェクトのリストを表示します。
シーンビューで UV Overlap 描画モードを使用します (詳細はシーンビューの GI ビジュアライゼーションを参照)。このモードを有効にすると、他のチャートのテクセルに近すぎるチャートテクセルに赤いハイライトが表示されます。これは、シーンビューでアーティファクトを発見し、UV の重複がアーティファクトの原因かどうかを素早く調べたい場合に特に便利です。
UV Overlap 描画モード (左上のドロップダウン) を使用したシーンビュー
-
Baked Lightmaps Preview を使用します。ゲームオブジェクトを選択して Lighting ウィンドウに移動し、Baked Lightmaps タブを選択します。ハイライトされたライトマップをダブルクリックし、Preview ウィンドウに移動し、Baked UV Overlap (右上のドロップダウン) を選択します。Prview ウィンドウは、このビューで問題のあるテクセルを赤で表示します。
Lighting ウィンドウの Baked Lightmaps タブの Baked Lightmaps Preview
解決策
UV の重複を解決する方法は 1 つだけではありません。なぜなら、UV の重複を引き起こす原因は多岐にわたるからです。以下は、最も一般的な解決策です。
- 自身でライトマップの UV を提供する場合は、モデリングパッケージを使用してマージンを追加することができます。
- Unity がモデルのライトマップ UV を自動生成する場合、パックマージンを増やすように Unity に指示することができます。これを行う最も簡単な方法は、Margin Method を Calculate に設定し、適切な Min Lightmap Resolution と Min Object Scale を設定することです。Margin Method を Manual に設定したい場合は、Pack Margin の値を直接調整できます。これらの設定の詳細については、ライトマッピング UV の生成のドキュメントを参照してください。
- ライトマップ全体の解像度を上げます。これにより、チャート間のピクセル数が増加し、にじみの可能性が減ります。欠点は、ライトマップが大きくなりすぎる場合があるということです。これは Lightmapper Settings の Lighting タブで行うことができます。
- 1 つのゲームオブジェクトの解像度を上げます。これにより、重複する UV を持つゲームオブジェクトのライトマップ解像度のみを増加させることができます。一方、ライトマップのサイズを増やす可能性は低くなります。ゲームオブジェクトのライトマップ解像度は Mesh Renderer の Lightmap Settings で変更できます。
前と同じメッシュですが、アーティファクトがありません