Version: 2022.1
言語: 日本語
ライトマップ UV 入門
Visualizing lightmap UVs

ライトマップ UV の生成

Unity can calculate the UVs for baked lightmaps when you import a model, or you can provide your own data.

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

How to provide your own lightmap UVs

You can author your own lightmap UVs in the content creation software of your choice. Unity uses these UVs as input for its calculations.

Where you put this data depends on whether you are providing UVs for baked lightmaps, real-time lightmaps, or both:

  • For baked lightmaps, you must place lightmap UVs in the Mesh.uv2. This channel is also called “UV1”.
  • For real-time lightmaps:
    • If you already have baked lightmap UVs in the Mesh.uv2 of your mesh, and you want to use the same UVs as input for the real-time lightmaps, you do not need to do anything. Unity falls back to sharing the baked lightmap UVs.
    • If you already have baked lightmap UVs in Mesh.uv2, and you want to provide different UVs as input for your real-time lightmaps, place the real-time lightmap UVs in Mesh.uv3, also called “UV2”.
    • If you do not already have baked lightmap UVs in the second channel of your mesh, it’s your choice whether you use Mesh.uv2 or Mesh.uv3 for real-time lightmap UVs.

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

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

How to automatically generate lightmap UVs

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 を生成します。

Automatic lightmap UV generation settings

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

プロパティ 説明
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 に設定されている場合にのみ表示されます。

Troubleshooting automatically generated lightmap UVs

Pack Margin

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

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

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

Min Lightmap Resolution and Min Object Scale

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 と表示します。

Angle distortion

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

Area distortion

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

ライトマップ UV 入門
Visualizing lightmap UVs