モデルをインポートする際に、Unity はベイクしたライトマップの UV を計算することができます。または、独自のデータを用意することもできます。
このページには以下の情報が含まれています。
任意のコンテンツ作成ソフトウェアで独自のライトマップ UV を作成できます。Unity はこれらの UV を計算の入力として使用します。
このデータをどこに配置するかは、ベイクしたライトマップ、リアルタイムのライトマップ、またはそれらの両方に UV を提供するかによって異なります。
Mesh.uv2
にベイクされたライトマップ UV があり、同じ UV をリアルタイムライトマップの入力として使用する場合は、何もする必要はありません。Unity は、ベイクされたライトマップ UV を共有する状態に戻ります。Mesh.uv2
または Mesh.uv3
を使用するかは、ユーザーが選択できます。ライトマップ用に適切に設定された UV セットは、以下のルールに従う必要があります。
Model Import Settings を使用して、モデルのライトマップ UV を自動的に生成するように設定できます。
これらは、Generate Lightmap UVs を有効にすると、 Model Import Settings の Model タブに表示される設定です。
Property: | Function: | |
---|---|---|
Hard Angle | 隣接する三角形間の角度 (単位は度)。Unityはそれを鋭い切れ目と見なし、継ぎ目を作成します。これを 0 と 180 の間の値に設定できます。これはデフォルトで 88 度に設定されています。 これを 180 度に設定すると、Unity はすべてのエッジが滑らかであると見なし、これは有機的なモデルでは現実的です。デフォルト値 (88度) は機械的なモデルには現実的です。 |
|
Angle Error | ソースジオメトリの角度から UV 角度の可能な最大偏差 (0–100%)。これはデフォルトで 8% に設定されています。 これにより、UV 空間の三角形と元のジオメトリの三角形との違いを制御します。通常、ライトマップを適用するときにアーティファクトを避けるため、これはかなり低くする必要があります。 |
|
Area Error | ソースジオメトリの領域から UV 領域の可能な最大偏差 (0–100%)。これは、デフォルトでは 15% に設定されています。 これにより、相対的な三角形領域を維持する度合いを制御します。値を大きくするとチャートを少なくすることができますが、三角形の解像度が変わる可能性があります。そのため、発生する歪みがライトマップの品質を損なわないことを確認してください。 |
|
Margin Method | Pack Margin を手動で指定するか、Unity が自動的に計算するか。 | |
Manual | Pack Margin を手動で指定します。 | |
Calculate | 予想されるライトマップの解像度とオブジェクトのスケールに基づいて、Unity は UV が重なるのを避けるのにちょうど十分な Pack Margin の大きさを計算します。 | |
Pack Margin | メッシュが 1024x1024 のライトマップ全体を占めると仮定したときの、隣接するチャート間のマージン (単位はピクセル)。これを 1 から 64 の間の値に設定できます。値を大きくするとマージンが増えますが、チャートに必要なスペースも増加します。デフォルトでは 4 ピクセルに設定されています。 詳細については、後述の パックのマージン を参照してください。 このプロパティは、Margin Method が Manual に設定されている場合にのみ表示されます。 |
|
Min Lightmap Resolution | このメッシュを使用するメッシュレンダラーのすべてのシーンにわたる最低のライトマップ解像度 (単位はテクセル/ユニット) です。メッシュレンダラーのライトマップ解像度は、メッシュレンダラーの Scale in Lightmap プロパティと、表示されるシーンの ライティング設定アセット の Lightmap Resolution プロパティの組み合わせです。詳細は、ライトマップの最低解像度とオブジェクトの最小スケール を参照してください。 Unity はこの情報を使ってパックマージンを計算します。このプロパティは、Margin Method が Calculate に設定されている場合にのみ表示されます。 |
|
Min Object Scale | このメッシュを使用するゲームオブジェクトのすべてのシーンにわたる最小のトランスフォームスケールです。 詳しくは、ライトマップの最低解像度とオブジェクトの最小スケール を参照してください。 Unity はこの情報を使ってパックマージンを計算します。このプロパティは、Margin Method が Calculate に設定されている場合にのみ表示されます。 |
フィルタリングを可能にするために、ライトマップは、チャート境界近くのライティング情報 (単位はテクセル) を含んでいます。そのため、常にチャート間にいくらかのマージンを加えて、ライトマップを適用するときにライトのにじみを回避します。
ライトマップの解像度は、ライトマップのテクセル解像度を定義します。ライトマッパーは、ライトマップ内のいくつかのチャートテクセルを広げてエッジが黒くなることを避けます。そのため、メッシュの UV チャートは、ライトのにじみを避けるために、その間に少なくとも 2 テクセルの間隔を空ける必要があります。Pack Margin 設定を使用して、ジオメトリの UV チャート間に十分なマージンがあることを確認します。
ライトマップの UV 空間では、UV オーバーラップや偶発的なライトのにじみを避けるために、チャート間のパディングは少なくとも 2 テクセルである必要があります。この画像では、黒いスペースはチャート間のスペースを表します。
UV チャートをあまり近づけて配置すると、最終的なライトマップで 隣り合うチャートのテクセルのにじみ が発生することがあります。また、チャートを互いに離して配置すると、メモリが無駄になります。オブジェクトの理想的なパックマージンは、そのオブジェクトに割り当てられているライトマップのテクセル数によって異なります。
Unity がメッシュレンダラーに使用するテクセル数は、メッシュレンダラーのライトマップ解像度とトランスフォームスケールに依存します。適切なマージンを計算するために、Unity はこれらのプロパティの予想される最小値を知る必要があります。
メッシュレンダラーのライトマップの解像度は、メッシュレンダラーが表示されるシーンの ライティング設定アセット の Lightmap Resolution
プロパティと、メッシュレンダラー の Scale in Lightmap
プロパティの組み合わせで決まります。これは、同じメッシュレンダラーであっても、シーンによってライトマップの解像度が異なることを意味しています。
Inspector を使って、特定のシーンのメッシュレンダラーのライトマップの解像度を見ることができます。
以下のスクリーンショットは解像度が同じですが、UV が異なります。最初の画像の Angle Error は高く設定され、結果に意図しないアーティファクトが含まれています。2 番目の画像ではデフォルトの Angle Error (8%) が設定されています。メッシュがより多くの三角形を持つと、角度の歪みにより形状を著しく歪ませます。
以下の画像では、同じパラメーターを持つ 2 つのスポットライトがシリンダーの側面を照らしています。その右側面は Area Error の値が高く、そのため、三角形が歪み、解像度が低くなり、ライトにアーティファクトが発生しています。