Unity のライティングとレンダリング

Unity ライトの種類

平行光源

ここに画像の説明を挿入
太陽光のようなもので、どこでも同じ位置にあり、角度を調整することで光源の方向を変えることができます。

ポイントライト

ここに画像の説明を挿入
点画像の周囲から光を放射し、Rangeの値により範囲を変更したり、電球の上に配置したりすることができます。

スポットライト

これは円錐形の光源として理解でき、電気スタンドの環境で使用できます。
ここに画像の説明を挿入

エリアライト

レンジ ライトはベイク モードでのみ使用できます (後述)。
ここに画像の説明を挿入
照明効果を事前にベイク処理し、オブジェクトにテクスチャのレイヤーを追加して、実際の操作時のパフォーマンスの消費を削減できます。

照明モード

リアルタイムグローバルイルミネーションモード

ここに画像の説明を挿入
任意の光源を選択し、モードとしてリアルタイムを選択します。
LightSetting 編集パネルも選択されています。
ここに画像の説明を挿入
これは最も現実的でパフォーマンスを重視するモードですが、通常は使用されません。
ここに画像の説明を挿入
パフォーマンスの消費が大きすぎて、基本的には実行できません。

ベイクモード

グローバル リアルタイム レンダリング モードが利用できない場合でも、優れた画像効果が必要な場合、この時点で何をすべきでしょうか?
この時点で、ベイク モードを使用して、事前レンダリングが必要なオブジェクトを静的オブジェクトに変更できます。
次に、光源と LightingSetting を Baked に設定します。
ここでまた問題が発生します。動的オブジェクトがある場合はどうすればよいでしょうか。
この時点で、混合モードを使用できます。

ミードモード

つまり、ブレンディング モードでは、静的オブジェクトのテクスチャを事前にプリレンダリングできるだけでなく、動的オブジェクトに対してリアルタイムのライティングを実行することもできます。
3つのモードがあります

減算的

最もパフォーマンスを消費しないモードは、最も悪影響を与えるモードでもあります。シーン内でサポートされる光源は 1 つだけです。一般的には使用されません。

シャドウマスク

複数の光源をサポートできますが、静的オブジェクトとの相互作用はサポートしていません。
たとえば、壁がある場合、壁の後ろのキャラクターには影があるはずですが、このモードでは影はありません。影は単なるテクスチャであるため、実際の効果が必要な場合は、それを使用する必要があります。現時点では。
ここに画像の説明を挿入
プロジェクト設定パネルの [品質] の [シャドウマスク モード] で、モードを [距離シャドウマスク] に変更します。
影の距離パラメータを変更します。ここに画像の説明を挿入
このパラメータは観測距離を示します。この距離範囲内では通常、静的オブジェクトの影と相互作用し、それを超える場合はレンダリングされません。

間接焼き

混合モードで最高のパフォーマンスを発揮するモードは、パフォーマンスの消費が最も高くなります。シャドウマスクで期待した効果が得られない場合は、このモードを使用できます。

ライトプローブ

ここに画像の説明を挿入

前述したように、距離シャドウマスクの場合、次の図に示すように、静的なオブジェクト テクスチャの下で影を実現できます。
ここに画像の説明を挿入
壁は静的であり、影は単なるテクスチャですが、それでも実際の効果を生み出すことができます。その理由は、光プローブの使用によるものです。
実際の動作をご覧ください。
ここに画像の説明を挿入
オブジェクトをレンダリングするライト プローブは常に 4 つあり、そのうちの 1 つは太陽の下にあり、他の 1 つは影の中にあり、現在の効果を形成していることがわかりました。
つまり、最高のシャドウ効果を実現したい場合は、シャドウの接合部にライト プローブを追加する必要があります。
ここに画像の説明を挿入
この操作は面倒ですが、パフォーマンスの点では距離シャドウマスクよりも優れています。

反射プローブ

ここに画像の説明を挿入
通常の状況では、オブジェクトのマテリアル反射は一般に反射スカイボックスですが、オブジェクトに周囲のオブジェクトを反射させたい場合は、反射プローブを使用する必要があります。
反射する必要があるオブジェクトに反射プローブを追加し、テクスチャを生成します。
ここに画像の説明を挿入
このとき、オブジェクトは周囲のオブジェクトを正常に反射できることがわかります。

最適化

上記には非常に多くのことが挙げられますが、端的に言えば、それらはすべてパフォーマンスの消費を削減し、最適化の効果を達成することを目的としています。
上記の最適化方法に加えて、次のような最適化方法があります。

動的バッチ処理

動的オブジェクトが同じマテリアルを共有する場合、Unity はこれらのオブジェクトを自動的にバッチ処理します。
動的バッチ操作は自動的に実行されるため、ユーザー側で追加の操作を行う必要はありません。
動的オブジェクトのバッチ処理には頂点ごとのオーバーヘッドが必要なため、動的バッチ処理では頂点が 900 個未満のメッシュのみがサポートされます。

静的バッチ

対照的に、静的バッチ処理を使用すると、エンジンは任意のサイズのジオメトリをバッチ処理して、描画コールを減らすことができます (移動せず、マテリアルが同じである限り)。したがって、静的バッチ処理は動的バッチ処理よりも効率的であり、必要な CPU オーバーヘッドが少ないため、できるだけ静的バッチ処理を使用する必要があります。
静的バッチ処理を適切に使用するには、どのオブジェクトが静的であり、ゲーム内で移動、回転、拡大縮小を行わないことを明示的に示す必要があります。このステップを完了するには、インスペクターの「静的」チェックボックスにチェックを入れるだけです。

おすすめ

転載: blog.csdn.net/qq_40629631/article/details/111189317