Unity で最初のシーンにライトマップ使用している場合,この クイックスタート ガイド が役に立つでしょう。
ライトマッピングは,Unity に完全に統合されているため,エディター内からレベル全体を作成し,そのレベルにライトマップを行い,気にすることなく,マテリアルに自動的にライトマップを選択させることができます。 Unity でのライトマッピングは,パフォーマンス向上のため,すべてのライトのプロパティが Beast ライトマッパに直接マッピングされ,テクスチャにベークされるということです。 Unity Pro は,グローバル照明によってこの機能を拡張しますが,これにより,そうでない場合は,リアルタイムでは不可能な,よりリアルで美しいライティングをベークできます。 さらに,Unity Pro には,より素晴らしいシーン ライティングのためのスカイ ライトや発光マテリアルが用意されています。
このページでは,ライト マッピング ウィンドウにあるすべての属性の詳細な説明を記載します。 ライト マッピング ウィンドウを開くには,
– を選択します。インスペクタの上には 3 つの Scene Filter ボタンがあり,全てのオブジェクトに処理を適用する,またはライトやレンダラに限定することが出来ます。
ライト,メッシュ レンダラおよび地形に対するオブジェクトごとのベーク設定 - 現在の選択内容によって決まります。
Scene Filter ボタンを使用して,ライト,レンダラ,または地形のみを Hierarchy ビュー上で絞りこんで参照できます。
メッシュ レンダラおよび地形:
プロパティ: | 特徴: |
---|---|
Lightmap Static | メッシュ レンダラおよび地形は,ライトマッピングされるように,スタティックとしてマーキングする必要があります。 |
Scale In Lightmap | (メッシュ レンダラのみ) この値が大きいと,解像度が所定のメッシュ レンダラ専用になります。 最終的な解像度は比例します (ライトマップでのスケール)(オブジェクトの世界空間表面エリア)(グローバル ベーク設定解像度値)。 0 の値の場合,オブジェクトはライトマッピングされません (その他のライトマッピングされたオブジェクトには影響します)。 |
Lightmap Size | (地形のみ) この地形インスタンスのライトマップ サイズ。 地形は他のオブジェクトとして変更されません。代わりに,個々にライトマップされます。 |
Atlas | Lock Atlas が無効になると,アトラスティング情報 – が自動的に更新されます。 Lock Atlas が有効になると,これらのパラメータは自動的に編集されなくなり,手動で編集できます。 |
Lightmap Index | ライトマップ配列への索引。 |
Tiling | (メッシュ レンダラのみ) オブジェクトのライトマップ UV のタイリング。 |
Offset | (メッシュ レンダラのみ) オブジェクトのライトマップ UV のオフセット。 |
ライト:
プロパティ: | 特徴: |
---|---|
Lightmapping | ライトマッピング モード。 Realtime Only,Auto または Baked Only のいずれかになります。 下記の Dual Lightmaps を参照してください。 |
Color | ライトの色。 リアルタイムのレンダリングに同じプロパティが使用されます。 |
Intensity | ライトの強度。 リアルタイムのレンダリングに同じプロパティが使用されます。 |
Bounce Intensity | この特定の光源から放出される間接的な光の強度への乗数。 |
Baked Shadows | シャドウがこのライトで照らされたオブジェクトから投影されるかどうかをコントロールします (自動ライトの場合と同時にリアルタイムのシャドウをコントロールします)。 |
Shadow Radius | (ポイントおよびスポット ライトのみ) 柔らかい直接のシャドウの場合はこの値を上げます。シャドーイング (ライティングは対象外) 計算に対して,ライトのサイズを上げます。 |
Shadow Angle | (ディレクショナル ライトのみ) (ポイントおよびスポット ライトのみ) 柔らかい直接のシャドウの場合はこの値を上げます。シャドーイング (ライティングは対象外) 計算に対して,ライトの角度範囲を上げます。 |
Shadow Samples | 上記の Shadow Radius または Angle を 0 に設定した場合,Shadow Samples の数も増します。 サンプル数が多いと,シャドウの半影からノイズが減りますが,レンダリング時間が増える場合があります。 |
グローバル ベイク設定
プロパティ: | 特徴: |
---|---|
Mode | オフラインのライトマップ ベイキングとリアルタイムのライトマップ レンダリング モードの両方をコントロールします。 Dual Lightmaps モードでは,近くおよび遠くのライトマップの両方がベイクされ,遅延レンダリングパスのみ 2 重ライトマップのレンダリングをサポートします。 Single Lightmaps モードは,遠くのライトマップのみベイクし,遅延レンダリング パスに対して,1 つのライトマップ モードを強制するのに使用できます。 |
Use in forward rendering | (デュアル ライトマップのみ) フォワードレンダリング でのデュアル ライトマップを有効化します。その目的にあった自身のシェーダを作成する必要があることに留意して下さい。 |
Quality | ベイクの質を高 (見た目が良くなります) および低 (高速) に設定します。 これらは,最終集光数,コントラスト閾値,その他の最終収集およびアンチエイリアス処理設定に影響します。 |
Bounces | グローバル照明シミュレーションでのライト バウンスの数。 柔らかく,リアルな間接ライティングを得るには,1 つ以上のバウンスが必要です。 0 の場合,直接光のみ計算されます。 |
Sky Light Color | スカイ ライトは,すべての方向に空から放出サれる光をシミュレートします。屋外のシーンに最適です。 |
Sky Light Intensity | スカイ ライトの強度。0 の場合,スカイ ライトは無効になります。 |
Bounce Boost | 暗いシーンでのライトの跳ね返りを強調できます。もしシーンが暗いマテリアルでオーサリングされている場合,強いダイレクト ライティングにより打ち消すことが出来ます。間接ライティングは効果が薄くなり,跳ね返りのライトは早くにフェードアウトします。Bounce Boost を 1 より大きい値にセットすると,これを打ち消して,Albedo カラーは 大域照明のため 1 に近づきます。0 と 1 の間の値によりライトの跳ね返りを減少させることに留意して下さい。実際の演算はコンポーネント pow(colorComponent, (1.0/bounceBoost)) ごとに行われています。 |
Bounce Intensity | 間接的な光の強度の乗数。 |
Final Gather Rays | すべての最後の集光点から放たれる光の数。値が高いほど,質が向上します。 |
Contrast Threshold | 色コントラスト閾値。この上で,新しい最終集光点が適応サンプリング アルゴリズムによって作成されます。 値が高いほど,Beast の表面上の照明の変更に対する許容度が上がり,円滑ですが,細部の少ないライトマップが生成されます。 最終集光の数が少ないと,これ以上最終集光点が作成されないようにするため,高いコントラスト閾値が必要になる場合があります。 |
Interpolation | 最終集光点からの色がどのように補間されるかをコントロールします。 0 は,線形補間,1 は高度な,階調度ベースの補間になります。 後者のほうがアーティファクトが増える場合があります。 |
Interpolation Points | 間に補間される最終集光点の数。 値が高いほど,結果が円滑になりますが,ライティングでの細部も円滑になります。 |
Ambient Occlusion | ライトマップにベークされる周囲オクルージョンの量。 周囲オクルージョンはサイズ Max Distance のローカルな半球上で統合された表示関数のため,ライティング情報は考慮しません。 |
Lock Atlas | ロック アトラスが有効になると,自動アトラシングは実行されなくなり,オブジェクト上の Lightmap Index,Tiling および Offset は編集されなくなります。 |
Resolution | 世界単位ごとのテクセルたんいのライトマップの解像度。50 の値と 10x10 の面の場合,ライトマップで面が 500x500 ピクセルを有する面になります。 |
Padding | 0 から 1 の範囲のテクセル単位で指定された,アトラス上の個別のアイテムの間の空白のスペース。 |
すべてのライトマップの編集可能な配列。
プロパティ: | 特徴: |
---|---|
Compressed | このシーンに対するすべてのライトマップ上での圧縮を切り替えます。 |
Array Size | ライトマップのサイズ (0 - 254)。 |
Lightmaps Array | 現在のシーンでのすべてのライトマップの編集可能な配列。 割り当てていないスロットは黒いライトマップとして扱われます。 メッシュ レンダラと地形上のライトマップ インデックス値に対応したインデックス。 ロック アトラスが有効にならない限り,この配列は,自動でリサイズさ,ライトマップのベーク時に常に投入されます。 |
エディターでのライトマップがどのように表示されるかをコントロールするユーティリティ。 ライトマップ ディスプレイ はシーン ビューのサブウィンドウで,ライトマッピング ウィンドウの表示時に毎回表示されます。
プロパティ: | 特徴: |
---|---|
Use Lightmaps | レンダリング中にライトマップを使用するかしないか。 |
Shadow Distance | Auto ライトと Close By ライトマップが Far Away ライトマップにフェードアウトする距離。 この設定は QualitySettings.shadowDistance 設定をオーバーライドしますが,上書きはしません。 |
Show Resolution | シーン ビューのライトマップ解像度モードを切り替えます。これにより,スタティックとマーキングされたオブジェクトでライトマップのテクセルがどのように消費されるかをプレビューできます。 |
二重ライトマップは,ライトマッピングを スペキュラ , 法線マッピング およびベークされたおよびリアルタイムのシャドウの適切なブレンディングを連携させる Unity の手法です。 また,ライトマップ解像度が低くても,ライトマップの見た目を良くする方法もあります。
2 重ライトマップはデフォルトでは,Deferred Lighting レンダリング パスでのみ使用できます。 フォワード レンダリング パスでは,カスタムのシェーダを記述することで,2 重ライトマップを有効に出来ます ( dualforward 表面シェーダ ディレクティブを使用します)。
2 重ライトマップは,次の 2 組みのライトマップを使用します。
Realtime Only ライトはベークされません。 Near ライトマップ セットは,Shadow Distance 質設定よりもカメラからの距離内で使用されます。 この距離内では, Auto ライトは,スペキュラおよびリアルタイム シャドウのあるリアルタイム ライトとしてレンダリングされ (これにより,そのシャドウが Realtime Only ライトからのシャドウと正しくブレンドされます),その間接的な光はライトマップから取られます。 Outside Shadow Distance Auto ライトは,リアルタイムでレンダリングを行わなくなり,完全な照明は,__Far__ ライトマップから取られます ( Realtime Only ライトはまだそこにありますが,シャドウは無効になります)。
下のシーンには,ライトマッピング モードがデフォルトの Auto に設定された 1 つのディレクショナル ライトと,多くのライトマップが適用されたスタティック オブジェクト (建物,障害物,動かせない細部) および一部の動的移動および可動オブジェクト (銃,銃身のあるダミー) が含まれます。 シーンは,2 重ライトマップ モードでベークおよびレンダリングされます。 シャドウ距離の裏では,ライトマップによってのみ建物が完全に照らされ,2 つのダミーは自動的に照らされますが,シャドウを投影しません。シャドウ距離の前では,両方のダミーとライトマップが適用されたスタティックな建物および地面がリアルタイムで照らされ,リアルタイムのシャドウを投影しますが,柔らかい間接的な光は近くのライトマップから放たれます。
Dual lightmaps allow for specular lighting and normal mapping, but only within shadow distance and in direct light. If you need these effects in areas lit mostly by indirect light or far away from the camera, or if you want to avoid the cost of rendering realtime lights necessary for dual lightmaps, you should use directional lightmaps instead.
Directional lightmaps store information on light directionality in a second set of lightmaps. The first set of lightmaps (color) stores just the diffuse lighting, same as Single Lightmaps do. The second set of lightmaps (scale) stores the ratio of the desaturated incoming light per basis vector.
Advantages:
Disadvantages:
Realtime lighting typically handles one light per pass. Directional lightmaps, on the other hand, handle an arbitrary amount of lights in one pass, as long as they are baked.
The decoding of directional lightmaps is done in a space relative to tangent space. This space is defined by a basis consisting of three pairwise orthogonal vectors, which evenly cover the hemisphere in the direction of the surface normal.
The three coefficients from the scale lightmap are combined depending on the normal from the normal map. This operation is done in the shader at runtime, so normal maps can be dynamically changed, if needed. The normal from the normal map is transformed into the directional lightmaps basis. It is then used to combine the three coefficients from the scale lightmap, with respect to each of the basis vectors, into a final scaling value that is applied to the color lightmap.
The scale lightmap can be interpreted as the amount of light coming from each of the basis directions that contributed to the value stored in the color lightmap. The coefficients linearly combined with the basis vectors give a general light direction that can be used for specular calculations.
シングル ライトマップははるかに簡単な手法ですが,どの rendering path で使用できます。 すべてのスタティック照明 (つまり,ベーク済みのものと自動ライト,スカイ ライトおよび放射マテリアル) は 1 つのライトマップのセットにベークされます。 これらのライトマップは,シャドウの距離に関係なく,ライトマップが適用されたオブジェクトすべてに使用されます。
動的シャドウの強度をベークされたシャドウに一致させるには,ライトの Shadow Strength プロパティを手動で調整する必要があります。
Unity では,ライトマップに使用する特殊なマテリアルを使用する必要はありません。 組み込みシェーダからのシェーダ (およびその場合は,記述した表面シェーダ) は,木にする必要なく,ボックスからのライトマップをサポートしているので,ただ機能するだけです。
Resolution ベーク設定により,見た目を良くするためにシーンに必要な単位ごとのテクセル数をコントロールできます。 シーンに 1x1 単位面があり,解像度を単位あたり 10 に設定すると,ライトマップで面が 10x10 テクセルを使用します。 解像度ベーク設定はグローバル設定です。 特殊なオブジェクトに対してこれを編集したい (ライトマップで非常に小さくまたは非常に大きくしたい) 場合,メッシュ レンダラの Scale in Lightmap プロパティを使用します。 ライトマップでスケールを 0 に設定すると,オブジェクトはライトマッピングされません (その他のオブジェクトのライトマップには影響します)。 Lightmap Resolution シーン ビュー レンダー モードを使用すると,ライトマップ テクセルがどのように消費されるかをプレビューできます。
ライトマップしたいメッシュに,ライトマッピング用の適切な UV があることを確認してください。 最も簡単な方法は,所定のメッシュのメッシュ インポート設定で Generate Lightmap UVs オプションを有効にすることです。
詳細については,Lightmap UVs ページを参照してください。
次のマテリアル プロパティが,Beast の内部シーン表示にマッピングされます。
注意: Beast にマテリアルをマッピングすると,Unity は,シェーダのプロパティおよび’Specular‘,’Transparent’,’Self-Illumin’などのパス/名前キーワードによって シェーダの種類を検出します。
static である スキン メッシュがあることで,メッシュの形状がインポート後に Unity の中で変更できて,レベル毎の微調整が出来るために,コンテンツがより柔軟になります。スキン メッシュ レンダラはメッシュ レンダラ と全く同じ方法でライトマップすることが可能であり,現在のポーズでライトマッピング処理に渡されます。
さらにライトマッピングはメッシュの頂点がランタイム時に多少移動されても使用出来ます – ライティングは完全に正確とはなりませんが,多くの場合は十分にマッチします。
アトラシング (UV パッキング) は,ベークを行う際に毎回自動的に実行されるので,通常は気にする必要はありません。ただ機能するだけです。
オブジェクトの世界空間の表面エリアはオブジェクトごとの Scale In Lightmap 値よって乗算され,グローバル解像度と結果によって,ライトマップでのオブジェクトの UV セットのサイズを決定します (より正確には: [0,1]x[0,1] UV 正方形のサイズ)。 次に,すべてのオブジェクトは,極力少ない数のライトマップにパックされ,それぞれが前のステップで計算された空間量を占めるようにします。 所定のオブジェクトに対する UV セットが [0,1]x[0,1] 正方形の部分のみ占める場合,ほとんどの場合,アトラシングは,近隣の UV セットを近くに移動させ,開いている空間を使用します。
アトラシングの結果,ライトマップが適用されるすべてのオブジェクトがライトマップのいずれかにその場所を持ち,どの空間はその他のオブジェクトの空間に重なりません。 アトラシング情報は,メッシュ レンダラの ライトマップ インデックス,タイリング (スケール),オフセットの 3 つの値として, 地形でのライトマップ インデックスとして格納され, ライトマッピング ウィンドウのオブジェクト ペインを介して,表示および編集できます。
Atlasing は,Lightmap Index,Tiling および Offset であるオブジェクトごとのデータのみ編集可能で, オブジェクトの UV セットは,共有されたメッシュの部分として格納されるため,編集できません。 メッシュの Lightmap UV は,インポート時にのみ,Unity の組み込み自動ラッパーを使用して,または Unity 外部 3D パッケージでのみ作成できます。
Lock Atlas が有効になると,自動アトラシングは実行されなくなり,オブジェクト上の Lightmap Index,Tiling および Offset は編集されなくなります。 Beast は,現在のアトラシングであるものに依存しているため,ユーザーが行うのは,正しいアトラシングの維持のみになります (例えば,ライトマップでのラッピング オブジェクトなし,ライトマップ配列の端を過ぎた,ライトマップ スロットを参照するオブジェクトなし)。
Lock Atlas は,ライトマッピングのためのオブジェクトの送信時の別のワークフローの可能性を開きます。 手動またはスクリプティングを介して,特定のニーズに合うよう,アトラシングを実行できます。また,現在のアトラシングに満足し,シーンに対してより多くのライトマップの接テオをベークし,シーンに更にオブジェクトを追加した後に,アトラシングがその他のライトマップ セットとの互換性を持たせないようにしたい場合,自動生成されたアトラシングをロックできます。
Lock Atlas は,アトラシングのみロックし,メッシュの UV はしません。 ソース メッシュを変更し,メッシュ インポータをライトマップ UV を生成するよう設定すると,UV が異なる形で生成され,現在のライトマップがオブジェクトで正しく表示されません。これを修復するには,ライトマップを再ベークする必要があります。
ベーク処理のパラメータを制御したい場合は, カスタム Beast 設定 のページを参照してください。