ランタイムライトマップ
このシーン内のすべての照明はライトマップテクスチャによって提供されています
ライトマップ生成は静的シーンの照明情報を事前に計算し、素材に適用されるテクスチャに格納する処理です。ライトソースや形状の多くが静的または環境に使用されている場合にシーンを照らす効率的な方法です。
ランタイムのライトマップ生成
PlayCanvasにはライトマップを生成する非常に便利な方法があります。Editorの標準的なライトコンポーネントを使用して、ライトマップをベークするために使用するライトと実行時にシーンを動的に照らすライトコンポーネントを選択します。ベークするために設定されたライトは、アプリケーションの起動時にシーンを照らすライトマップを生成するために使用されます。
利点は次の通りです:
*照明は実行時に実行されません *数百の静的ライトを使用してシーンを点灯することができます *多くの場合、複数のライトマップテクスチャをダウンロードするよりも実行時にライトマップをレンダリングする方が速いです *Editorで静的および動的ライトを混合することができます *再ベークは、実行時に行うことができます *ライトマップはHDRです Colorだけでなく、*Direction**データもベークすることができ、ベークした表面に鏡面性が得られます。
実行時のライトマップ生成を使用する欠点は、グローバルイルミネーション、アンビエントオクルージョンやその他の特殊なベーキングツールの高度な機能のをベーキングに現在対応していないということです。
ベーキング用にライトを設定
各ライトコンポーネントには、ライトマップのベーキングを有効にするための設定が含まれています。新しいライトはデフォルトで動的に設定されています。
Lightmap: Bake設定を有効にするとライトは範囲内にある全てのライトマップに含まれたモデルのライトマップをベークします。
Directionオプションは、ライトがライト方向情報のベーキングに寄与するかどうかを指定します。シーン設定でColor and Direction*ライトマップモードが選択されている場合、これは鏡面反射の結果に影響を与えます。
ライトの動作を変更する方法は他に二つあり、ライトが実行時に影響を与えるモデルを決定します。いずれかをtrueにするとライトは実行時に動作し、実行時の負荷に影響を与えます。
Affect Non-Baked ボックスがtrueの場合、このライトはライトマップされていない全てのモデルに影響を与えます。Affect Baked ボックスがtrueの場合、このライトはライトマップされている全てのモデルに影響を与えます。
照明のLightmapと Affect Baked を両方trueにすることはできません。なぜなら、モデルにライトマップが生成されているのに、実行時にもライトが同じライティングを追加することになるからです。
ライトマップのライトの影の設定は動的ライトと同じですが、この場合はライトマップ生成時に一度影の計算が行われるのでライトマップのライトに影を有効にする方が軽くなります。影のセクションを参照してください。
ベーキング用にモデルを設定
各モデルコンポーネントでライトマップを受信するには、ライトマップを有効にする必要があります。モデルコンポーネントのプロパティでLightmappedオプションにチェックを入れてイトマップを有効にします。
Shadows: Cast Lightmap オプションはモデルがライトマップに影を落としているか否かを決定します。また、生成されたライトマップテクスチャの解像度を確認したり、UV1のエリアに乗数を適用して大きさを変更するためのオプションもあります。ライトマップのサイズ乗算については以下で説明します。
一般的なライトの設定
ご覧の通り、いくつかの組み合わせのライトの設定を使用することができます。これらの組み合わせには全てユースケースがあり、異なる組み合わせでライトを使用することにより、パフォーマンスと高品質なビジュアルのバランスをとることができます。
ベーク | 非ベークに影響 | ベークに影響 | 説明 |
---|---|---|---|
false | true | false | これがデフォルトの動的ライトです。ライトマップされていない全てのモデルに影響します。 |
true | false | false | このライトは、ライトマップされたモデルのライトマップを生成し実行時に軽い負荷で使用できます。ほとんどの静的環境ライトはこの設定を使用することができます。 |
true | true | false | このライトはライトマップを生成しますが、ライトマップされていないモデルにも影響を与えます。このライトで点灯する必要のある動的/移動するエンティティがある場合に便利です。例えば、プレイヤキャラクタにも影響を与える環境照明。 |
false | true | true | このライトは、ライトマップされたモデルセルとライトマップされていないモデルの両方に影響を与える動的ライトです。 |
ライトマッピングの設定
Size Multiplierはすべてのモデルコンポーネントに影響します。PlayCanvasは自動的にモデルに必要とされるライトマップの解像度を決定します。この値は、モデルのスケールおよび形状の面積の大きさに基づいて計算されます。モデルコンポーネントとのグローバル設定のサイズ乗数欄を修正することでこの計算に影響を与えることができます。
1x1単位(メートル)の平面の例。グローバルサイズ乗数が16でモデルコンポーネントの乗数が2の場合、32x32のライトマップテクスチャサイズ (1sq/m * 16 * 2)が生成されます。つまり、1平方メートルあたり32x32ピクセルとなり、ピクセルサイズは約3cmです 。
Max Resolution*は、メモリを節約するために生成されるライトマップの最大解像度に制限を設定します。
Modeでは、どのデータをベークするかを指定したり、ピクセルからライトまでのみ色や方向を拡散することができます。方向データは、単純な鏡面反射をシミュレートするために使用されます。単一の方向しかベークすることができないので、複数のライトが重なった場合に複雑さを招きます。方向のベーキングは個々のライトに設定することもできます。
自動アンラップとUV1の生成
ライトマップは、常にモデルアセットのUV座標(UV1)の第2のセットを使用して適用されます。最良の結果を得るためには、モデルをPlayCanvasにアップロードする前に、3Dコンテンツツールに第2のUVセットを追加することをお勧めします。ライトマップに適したUVに関する推奨事項はこちらをご確認ください。
便宜上、使用しているモデルがにUV1セットがない場合、PlayCanvasエディタは自動的にアンラップをしてモデルのためにUV1座標を生成することができます。
モデルのUV1マップが不足している場合は、ライトマッピングを有効にするときにモデルコンポーネントに警告が表示されます。
警告を解決するには、モデルアセットを選択してPipelineセクションを開きます。Auto-Unwrapボタンをクリックして、プログレスバーが完了するのを待ちます。自動アンラップを実行するとモデルアセットが編集され、ソースからモデルを再インポートすると(例えば、新しいFBXをアップロード)あらかじめ計算されたUV1が削除され、アップロードされたモデルにUV1がない場合は、モデルを再度自動アンラップを行う必要があります。
Paddingセクションでは、アンラップが発生した際のセクション間のスペースを決定します。ライトマップ上の不適切な場所にライトが表示されてしまう*"light bleeding"*が発生している場合、paddingを増やして軽減することができます。