Version: 2021.3
言語: 日本語
ライトマップ UV 入門
ライトマップUVの可視化

ライトマップ UV の生成

モデルをインポートする際に、Unity はベイクしたライトマップの UV を計算することができます。または、独自のデータを用意することもできます。

このページには以下の情報が含まれています。

独自のライトマップ UV を用意する方法

任意のコンテンツ作成ソフトウェアで独自のライトマップ UV を作成できます。Unity はこれらの UV を計算の入力として使用します。

このデータをどこに配置するかは、ベイクしたライトマップ、リアルタイムのライトマップ、またはそれらの両方に UV を提供するかによって異なります。

  • ベイクしたライトマップの場合は、ライトマップの UV をMesh.uv2 に配置する必要があります。このチャンネルは “UV1 ”とも呼ばれます。
  • リアルタイムライトマップ用の場合:
    • すでにメッシュの Mesh.uv2 にベイクされたライトマップ UV があり、同じ UV をリアルタイムライトマップの入力として使用する場合は、何もする必要はありません。Unity は、ベイクされたライトマップ UV を共有する状態に戻ります。
    • `Mesh.uv2 にすでにベイクしたライトマップ UV があり、リアルタイムライトマップの入力として異なる UV を指定する必要がある場合は、“UV2” とも呼ばれる Mesh.uv3 にリアルタイムライトマップ UV を配置します。
    • メッシュの 2 番目のチャンネルにベイクしたライトマップ UV がまだない場合に、リアルタイムライトマップ UV に Mesh.uv2 または Mesh.uv3 を使用するかは、ユーザーが選択できます。

ライトマップ用に適切に設定された UV セットは、以下のルールに従う必要があります。

  • [0,1] x [0,1] UV 空間内にある必要があります。
  • 個々のチャート間に十分なマージンが必要です。詳細は、UV オーバーラップ を参照してください。
  • 重複する面がないようにしてください。
  • UV の角度と元のジオメトリの角度の差を小さくしてください。
  • 一部の領域のライトマップ解像度を高くしたい場合を除いて、UV の三角形の相対的なスケールと元のジオメトリの三角形の相対的なスケールの差を小さくしてください。

ライトマップの UV を自動生成する方法

Model Import Settings を使用して、モデルのライトマップ UV を自動的に生成するように設定できます。

  1. Project ウィンドウでモデルを選択します。Unity はインスペクターで Model Import Settings を開きます。
  2. Model Import Settings で Model タブに移動し、Geometry セクションに移動します。
  3. Generate Lightmap UVs チェックボックスにチェックを入れます。Lightmap UVs settings セクションが Generate Lightmap UVs チェックボックスの下に表示されます。
  4. 任意: Lightmap UVs settings セクションで設定を行います。詳細は 設定 を参照してください。
  5. Apply ボタンをクリックします。Unity は Mesh.uv2 チャンネルにライトマップ UV を生成します。

ライトマップの UV 自動生成設定

これらは、Generate Lightmap UVs を有効にすると、 Model Import SettingsModel タブに表示される設定です。

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 MethodManual に設定されている場合にのみ表示されます。
Min Lightmap Resolution このメッシュを使用するメッシュレンダラーのすべてのシーンにわたる最低のライトマップ解像度 (単位はテクセル/ユニット) です。メッシュレンダラーのライトマップ解像度は、メッシュレンダラーの Scale in Lightmap プロパティと、表示されるシーンの ライティング設定アセットLightmap Resolution プロパティの組み合わせです。

詳細は、ライトマップの最低解像度とオブジェクトの最小スケール を参照してください。

Unity はこの情報を使ってパックマージンを計算します。このプロパティは、Margin MethodCalculate に設定されている場合にのみ表示されます。
Min Object Scale このメッシュを使用するゲームオブジェクトのすべてのシーンにわたる最小のトランスフォームスケールです。

詳しくは、ライトマップの最低解像度とオブジェクトの最小スケール を参照してください。

Unity はこの情報を使ってパックマージンを計算します。このプロパティは、Margin MethodCalculate に設定されている場合にのみ表示されます。

自動生成されたライトマップ UV のトラブルシューティング

パックマージン

フィルタリングを可能にするために、ライトマップは、チャート境界近くのライティング情報 (単位はテクセル) を含んでいます。そのため、常にチャート間にいくらかのマージンを加えて、ライトマップを適用するときにライトのにじみを回避します。

ライトマップの解像度は、ライトマップのテクセル解像度を定義します。ライトマッパーは、ライトマップ内のいくつかのチャートテクセルを広げてエッジが黒くなることを避けます。そのため、メッシュの UV チャートは、ライトのにじみを避けるために、その間に少なくとも 2 テクセルの間隔を空ける必要があります。Pack Margin 設定を使用して、ジオメトリの UV チャート間に十分なマージンがあることを確認します。

ライトマップの UV 空間では、UV オーバーラップや偶発的なライトのにじみを避けるために、チャート間のパディングは少なくとも 2 テクセルである必要があります。この画像では、黒いスペースはチャート間のスペースを表します。

ライトマップの最小解像度とオブジェクトの最小スケール

UV チャートをあまり近づけて配置すると、最終的なライトマップで 隣り合うチャートのテクセルのにじみ が発生することがあります。また、チャートを互いに離して配置すると、メモリが無駄になります。オブジェクトの理想的なパックマージンは、そのオブジェクトに割り当てられているライトマップのテクセル数によって異なります。

Unity がメッシュレンダラーに使用するテクセル数は、メッシュレンダラーのライトマップ解像度とトランスフォームスケールに依存します。適切なマージンを計算するために、Unity はこれらのプロパティの予想される最小値を知る必要があります。

メッシュレンダラーのライトマップの解像度は、メッシュレンダラーが表示されるシーンの ライティング設定アセットLightmap Resolution プロパティと、メッシュレンダラーScale in Lightmap プロパティの組み合わせで決まります。これは、同じメッシュレンダラーであっても、シーンによってライトマップの解像度が異なることを意味しています。

Inspector を使って、特定のシーンのメッシュレンダラーのライトマップの解像度を見ることができます。

  1. シーンビューまたは Hierarchy で、MeshRenderer コンポーネントを持つゲームオブジェクトを選択します。
  2. Inspector で、MeshRenderer コンポーネントの Lightmapping セクションに移動します。
  3. Baked Lightmap の畳まれている部分を展開します。Baked Lightmap セクションで、Unity は、メッシュレンダラーのライトマップの解像度を Lightmap Resolution というラベルで表示し、そのトランスフォームのスケールを Lightmap Object Scale と表示します。

角度の歪み

以下のスクリーンショットは解像度が同じですが、UV が異なります。最初の画像の Angle Error は高く設定され、結果に意図しないアーティファクトが含まれています。2 番目の画像ではデフォルトの Angle Error (8%) が設定されています。メッシュがより多くの三角形を持つと、角度の歪みにより形状を著しく歪ませます。

領域の歪み

以下の画像では、同じパラメーターを持つ 2 つのスポットライトがシリンダーの側面を照らしています。その右側面は Area Error の値が高く、そのため、三角形が歪み、解像度が低くなり、ライトにアーティファクトが発生しています。

ライトマップ UV 入門
ライトマップUVの可視化