各ライトマップには多くの チャート が含まれています。実行時に Unity はこれらのチャートをメッシュ面にマッピングし、チャートのライティングデータを使用して最終的な外観を計算します。GPU のサンプリングの仕組みにより、チャートのデータが互いに近すぎる場合、1 つのチャートからのデータが他のチャート上に、にじみを作る可能性があります。これは通常、意図しないエイリアシング、ピクセレーション (ピクセルが大きくなり出力結果が非常に粗くなる状態)、その他のグラフィカルな結果 (アーティファクトと呼ばれます) を引き起こします。
ライトのにじみを避けるためには、チャート間に十分なスペースが必要です。GPU がライトマップをサンプリングすると、ライティングシステムはサンプリングされた点に最も近い 4 つのテクセルから最終的なサンプル値を計算します (バイリニアフィルタリングが使用されていると仮定)。これらの 4 つのテクセルはサンプリングされた点のバイリニアのネイバーと呼ばれます。チャートが近すぎると重なってしまいます、つまり、チャート内の点が、他のチャート内の近隣の点 (ネイバー) と重なります。下の画像では、白のピクセルはチャートのネイバーを示し、赤のピクセルは重なっているネイバーを示しています。
最適なチャートの配置と間隔の決定は、いくつかのパラメーター (ライトマップ解像度、メッシュ UV、インポーター設定など) に依存するため、難しい場合があります。このため、Unity にはこれらの問題を簡単に識別する機能があります。以下のセクションで概要を説明します。
重複を識別するには 3 つの方法があります。
Unity のコンソールに注目してください。Unity が重複する UV を検出すると、警告メッセージと影響を受けるゲームオブジェクトのリストを表示します。
Scene (シーン) ビューで UV Overlap 描画モードを使用します (詳細はシーンビューの GI ビジュアライゼーション を参照)。このモードを有効にすると、他のチャートのテクセルに近すぎるチャートテクセルに赤いハイライトが表示されます。これは、シーンビューでアーティファクトを発見し、UV の重複がアーティファクトの原因かどうかを素早く調べたい場合に特に便利です。
UV の重複を解決する方法は 1 つだけではありません。なぜなら、UV の重複を引き起こす原因は多岐にわたるからです。以下は最も一般的な解決策です。
Unity が自動的にライトマップ UV を作成している場合は、Pack Margin を増やすことができます。これを行うには、メッシュのインポート設定の Model タブ に移動します。Generate Lightmap UVs が有効になっていることを確認し、Advanced を展開し、Pack Margin スライダーを使って値を上げます。これにより、チャート間の間隔を広げることができ、重複の可能性が低くなります。ただし、ライトマップに必要な総スペースも増えるため、アーティファクトを回避するのに十分なスペースのみを適用し、必要以上に Pack Margin 値を上げないようにします。Unity が自動的に作成するライトマップ UV の詳細は、Generating Lightmap UVs を参照してください。
自身でライトマップの UV を提供する場合は、モデリングパッケージを使用してマージンを追加することができます。
ライトマップ全体の解像度を上げます。これにより、チャート間のピクセル数が増加し、にじみの可能性が減ります。欠点は、ライトマップが大きくなりすぎる場合があるということです。これは Lightmapper Settings の Lighting タブで行うことができます。
1 つのゲームオブジェクトの解像度を上げます。これにより、重複する UV を持つゲームオブジェクトのライトマップ解像度のみを増加させることができます。一方、ライトマップのサイズを増やす可能性は低くなります。ゲームオブジェクトのライトマップ解像度は Mesh Renderer の Lightmap Settings で変更できます。
プログレッシブライトマッパーは 2018.1 で追加 NewIn20181
2018–03–28 Page published