第21章 ユニティ光源

光源はあらゆるシーンに不可欠な部分であり、シーンを照らすだけでなく、影の効果も生み出すことができます。

Unity には4種類の光源があります。

1. 指向性ライト: 指向性ライトは太陽光をシミュレートするために使用され、指向性ライトはどこでも照らすことができます。

2. 点光源: 点光源は、電球の照明効果をシミュレートするために使用されます。

3. スポット ライト: スポット ライトは、スポット ライト照明の効果をシミュレートするために使用されます。

4. エリア ライト: エリア ライトは「リアルタイム ライティング」モードでは無効で、「ベイク ライティング」モードでのみ使用されます。

デフォルトのシーンでは、太陽に相当する指向性ライトが自動的に追加されます。

光源を選択して、そのインスペクター ビューを表示できます。光源ゲーム オブジェクトの最も重要なコンポーネントは、Light コンポーネントです。スクリーンショットは次のとおりです。

次に、Light コンポーネントのいくつかのプロパティについて簡単に説明します。

タイプ: 現在の光源のタイプ。オプションの値は、方向、ポイント、スポット、エリアです。

カラー: カラーピッカーを使用してグローの色を設定します。

モード: 光源モードを指定します。使用可能なモードは、リアルタイム、ミックス、ベイクです。

強度: 光源の明るさを設定します。

間接乗数: この値を使用して、間接光の強度を変更します。

スポット スポットライト (Light コンポーネントの Type プロパティが Spot) の場合、効果は次のようになります。

このタイプの光源は円錐に似ており、「範囲」と「スポット角度」という 2 つのプロパティがあり、前者は光の照射距離を表し、後者は円錐の開閉角度を表し、それが光の照射範囲です。次のように:

点光源 (Light コンポーネントの Type プロパティが Point) の場合、効果は次のようになります。

このタイプの光源には、光が当たる距離 (球の半径) を表す「範囲」プロパティがあります。

最後のはエリア ライトです。効果は次のとおりです。

このタイプの光源は、空間内の長方形によって定義されます。光は表面積全体のあらゆる方向に均一に放射されますが、長方形の面からのみ放射されます。エリア ライトの範囲を手動で制御することはできませんが、光源から離れると強度は距離の 2 乗に反比例して低下します。照明の計算には多くのパフォーマンスが消費されるため、エリア光源はリアルタイムで処理できず、ライト マップにベイク処理することしかできません。

Unity での光源の使用は非常に簡単で、メニュー バーの GameObject > Light からシーンに光源を追加できます。シーンビューの照明 (ツールバーの [太陽] ボタン) を有効にすると、ライト オブジェクトを移動してパラメータを設定するときに、照明効果をプレビューできます。ここで注意する必要があるのは、指向性ライトは通常、シーン内のどこにでも配置でき、Z 軸の正の方向に沿ってシーン全体を照らすことができ、照射範囲に制限がないため、指向性ライトには何も設定されないということです。位置に関係しますが、それ自身の回転にも関係します (オブジェクトの影の位置に直接影響します)。スポットライトには位置と方向がありますが、照射範囲は限られています。点光源はスポット ライトに似ており、どちらもローカル光源であり、主にシーン内の一部の局所的な詳細に対する光と影の効果を処理するために使用されます。

光源を使用するには多くのテクニックがあります。たとえば、ゲーム シーンで光源を使用する必要があるが、一部のゲーム オブジェクトが光源の影響を受けないようにする場合です。レイヤーを作成し、これらのゲーム オブジェクトをレイヤーに追加できます。光源の検査パネルでカリング マスク アトリビュートを見つけ、ドロップダウン リストでレイヤーを選択します。これで、このレイヤー内のすべてのゲーム オブジェクトは光源の影響を受けなくなります。

光源に関しては、「環境光」を無視しないでください。これは、ゲーム オブジェクトを全方向から照らすことができる真のグローバル イルミネーションです。言い換えれば、影の効果は発生しません。周囲光の設定は、[照明] ウィンドウで確認できます。デフォルトでは、スカイボックス マテリアル マップから取得されます (光の本質は色です)。メニューバーの「ウィンドウ」→「レンダリング」→「ライティング」を開き、表示される新しいウィンドウで「環境」をクリックして選択します。

環境照明 このアイテムは、オブジェクトに環境照明を提供します。カラー ソースは上記の Skybox シェーダ セットで、固定カラーまたはグラデーション カラーにすることができます。2D ゲームでは通常、光源は必要ありません。環境光のみを設定する必要があります。ちなみに、以下の環境反射について説明しましょう。この項目は、環境光の反射設定を制御します。これは、Skybox スカイボックス マテリアル ボールからも派生しています。鏡面反射効果を提供し、物理ベース レンダリング (PBR) における重要な照明効果です。 )。つまり、シーンに鏡がある場合、鏡に映るものはスカイボックスです。しかし、この鏡が部屋にある場合、鏡がスカイボックスのように見えるのは無理があります。Unity は、周囲のシーンの画像をキャプチャし、キューブマップとして保存するための Reflection Probe テクノロジーを提供します。部屋の鏡には、反射プローブを通して周囲の景色を表示できます。つまり、物体が反射プローブの範囲内にある場合、その物体は反射プローブの範囲内の環境情報を反映します。シーンに反射プローブがない場合、シーン内の反射のあるオブジェクトは、スカイボックスによって生成された環境情報を直接反映します。

ここではスカイボックスの紹介を続けていきます。DirectX コースで紹介したように、実際には現実世界の空をシミュレートします。最も単純なスカイボックスは単なる立方体マップです。Unity のスカイボックスは本質的にマテリアル ボールです。以下のようないくつかの無料のスカイボックスを Unity Asset Store からダウンロードできます。

ダウンロード後、以下に示すように、現在のプロジェクトにインポートできます。

 

このうち「マテリアル」ディレクトリにはスカイボックスシェーダが多数あり、「シーン」は提供されたシーンです。「シーン」をクリックして見てみましょう。

以下に示すように、「Demo.unity」シーン ファイルをダブルクリックします。

実行後の効果は以下の通り

次に、「マテリアル」ディレクトリに戻って表示します。

上の図は多数のスカイボックス シェーダーを示していますが、その本質は単なるマップです。これらのスカイボックス シェーダーの使用方法は? 前のデフォルトのシーンに戻り、メニュー バーをクリックします: [ウィンドウ] > [レンダリング] > [照明]、次に示すように、[環境] オプション パネルを選択します。

私たちがしなければならないのは、シェーダーを上の赤いボックスにドラッグすることだけです。

前のシーンは次のように見えました。これはデフォルトのスカイボックス (Default-Skybox) です。

「FS000_Day_01」に変更した後の様子

次に、ライトマップ ( LightMap )を紹介します。全員が理解する必要があるのは、照明効果の計算にはハードウェアのパフォーマンスが大量に消費されるということです。パフォーマンス効果を得るためにゲーム内のすべてのオブジェクトに対して常に照明計算を実行する必要がある場合、これは明らかに最善の方法ではありません。したがって、事前にライティング情報をマップに「焼き付ける」ことができます。ゲームの実行後は、リアルタイムのライティング計算を実行するのではなく、オブジェクトのライト マップから情報を直接取得して、以前と同じパフォーマンスを実現しますUnity エンジンは強力なライト マップ機能を提供し、アーティストが Unity エディターでライト マップを簡単にベイクできるようにします。ただし、これらのライト マップは静的なオブジェクト ( static )、つまり移動できないオブジェクトにのみ適用できるという欠点があり、パフォーマンスの効果は固定されています。上記の光源モードを導入する場合、使用可能なモードはリアルタイム、ミックス、ベイクです。Realtime はリアルタイム ライティング、Baked はベイクされたライティング、Mixed は両方の組み合わせ (デフォルト) です。名前に基づいて、これら 3 つのモードの用途を大まかに理解できます。ベイクされたライティングは、光源に基づいてライト マップがベイクされることを意味します。ライト マップが生成されると、ベイクされた光源は使用できなくなります。シーン内の静的オブジェクトは引き続き残ります。これは以前の照明効果ですが、動的オブジェクトには照明効果がなく、静的オブジェクトを移動しても、静的オブジェクトの影は一緒に移動しません。この観点から見ると、ベイクされたライティングはコンピューティング パフォーマンスを低下させますが、動的オブジェクトのライティング効果の要件を満たすことはできません。では、この問題をどうやって解決すればよいでしょうか? 実際、これは混合モードであり、静的オブジェクトのライト マップ効果を保証するだけでなく、動的オブジェクトのリアルタイムの照明効果も保証できます。

次に、直接照明と間接照明という 2 つの概念を紹介します

直接照明: オブジェクトの表面を直接照らす光源によって生成される照明情報。

間接照明 (Indirect Lighting): 光源がオブジェクトの表面を照らし、その後他のオブジェクトに反射することによって形成される照明情報。間接照明は、現実世界の実際の照明条件により一致するため、シーンをよりリアルにします。これは、物の隣に鏡を置くのと同じで、鏡からの間接光が物体に確実な照明効果をもたらします。ただし、間接照明の実装には、Nvidia の RTX シリーズ グラフィックス カードなど、リアルタイム レイ トレーシングをサポートするハードウェアが必要です。したがって、ローエンド PC やほとんどの携帯電話では、この間接照明情報を提供するために事前に計算されたライト マップに依存する必要があります。そうです、ライト マップには直接照明情報と間接照明情報の両方を保存できます。Unity では、光源は主に直接照明を制御し、照明ウィンドウは主に間接照明を制御します。

次に、別の概念であるグローバル イルミネーション システム (ベイク処理とほぼ同じ)を紹介します。

グローバル イルミネーション システムは、直接照明と間接照明をモデリングしてリアルな照明効果を提供するための一連の技術です。Unity には、Baked Global Illumination と Realtime Global Illumination の 2 つのグローバル イルミネーション システムがあります。ベイク処理されたグローバル イルミネーション システムには、ライト マップ、ライト プローブ、および反射プローブが含まれます。すべてのレンダリング パイプラインは、ベイク処理されたグローバル イルミネーション システムをサポートしています。リアルタイム グローバル イルミネーション システムには、Enlighten を使用したリアルタイム グローバル イルミネーションと、ライト プローブ用の追加機能が含まれています。Enlighten は現在非推奨となっており、リアルタイム グローバル イルミネーション システムは間もなく Unity から削除されることに注意してください。Unityのグローバルイルミネーションは主にライトマップのベイク処理に使用されているようですそこで、Unity の Lighting ウィンドウで設定する必要があるベイクされたグローバル イルミネーション システムを紹介します。メニュー バーの [ウィンドウ] -> [レンダリング] -> [ライティング] から [ライティング] ウィンドウを開き、[シーン] オプションをクリックして選択します。

デフォルトでは、照明設定はありません。設定を生成するには、[新しい照明設定] をクリックする必要があります。

同時に、プロジェクトパネルに同じ名前の照明設定ファイルも生成されます。

「シーン」タブに戻ると、「リアルタイム照明」と「混合照明」の 2 つのオプションがあります。これらはそれぞれ、ベイク グローバル イルミネーションとリアルタイム グローバル イルミネーションを表します。スクリーンショットから、リアルタイム グローバル イルミネーション システムが破棄され、残っているのは「混合ライティング」オプションの下にあるベイクされたグローバル イルミネーション システムであることがわかりますなぜ混合光源なのか?Unity のデフォルトの光源モードは混合光源で、リアルタイム ライティングとベイク処理の両方をサポートし、ベイク処理中にグローバル イルミネーション テクノロジ (直接照明 + 間接照明の混合) もサポートします。なぜなら、上で述べたように、光源をベイク処理するとパフォーマンスの計算が軽減されますが、動的オブジェクトの照明のニーズを解決することはできないからです。したがって、動的オブジェクトを解決するにはリアルタイムの光源が必要です。シーン内にベイクされた光源とリアルタイム光源の両方がある場合、ライト マッピング テクノロジはどのような役割を果たしますか? もちろん、違いは静的オブジェクトと動的オブジェクトの間にあります。理由は非常に単純で、ベイクされた光源は静的オブジェクトに使用され、リアルタイム光源は動的オブジェクトに使用されます。したがって、光源、特にメイン光源には混合方法を使用することをお勧めします。

「Mixed Lighting」の下に 2 つのサブオプションがあることがわかります。1 つはグローバル イルミネーション システムのベイク処理を開始するチェック ボックスで、もう 1 つは「Lighting Mode」で、デフォルト値は「Shadowmask」です。シャドウマスク モードでは、間接照明効果がライト マップにベイクされ(つまり、間接照明はリアルタイムで計算されません)、直接照明によって生成されたシャドウもライト マップにベイクされます(つまり、シャドウはリアルタイムで計算されません)。時間)。つまり、プロジェクトの実行時に混合光源を変更しても、間接照明や静的オブジェクト (ライト マップで固定) の影には影響しませんが、他のレンダリングは引き続きリアルタイムの光源に従って計算されます。したがって、このモードはリアルタイム ライティングとライト マッピングを組み合わせたものです。ユニバーサル レンダリング パイプライン (URP) は、デフォルトのオプションであるにもかかわらず、シャドウマスク ライティング モードをサポートしていないことに注意してください。

また、Baked Indirect と Subtractive の 2 つのモードから選択できます。

Baked Indirect モードでは、間接照明のみがベイクされ (つまり、間接照明はリアルタイムで計算されません)、直接照明と影はリアルタイムで計算されるため、パフォーマンスの消費は比較的大きくなります。このモードは 3 つのレンダリング パイプラインすべてでサポートされていることに注意してください。

減算モードでは、直接照明と間接照明が同時にライト マップにベイクされ、静的オブジェクトの影もライト マップにベイクされます。高解像度レンダリング パイプライン (HDRP) は減算ライティング モードをサポートしていないことに注意してください。

3 つのモードを比較すると、静的オブジェクトの直接照明、間接照明、影がライト マップから取得され、リアルタイムの計算が実行されないため、減算モードが最もパフォーマンスの消費が低くなります。もちろん、動的オブジェクトには依然として実際のオブジェクトが必要です。 -光源の時間計算。パフォーマンス コストは最も低くなりますが、HD レンダリング パイプラインではサポートされていないことに注意してください。2 つ目は Shadowmask モードで、静的オブジェクトの間接照明と影のみをベイク処理します。直接照明は依然としてリアルタイムの照明に基づいて計算されます。前者のモードと比較すると、パフォーマンスの消費が大きくなります。パフォーマンスの消費は比較的犠牲になり、Unity のデフォルト オプションでもありますが、ユニバーサル レンダリング関係はサポートされていません。最後に、間接照明をベイクする Baked Indirect モードがありますが、直接照明と影は引き続きリアルタイム ライティングに基づいて計算され、明らかに最もパフォーマンスを消費します。最も多くのパフォーマンスを消費しますが、すべてのレンダリング パイプラインでサポートされています。したがって、ゲームを開発するときは、これらの内容を決定し、どのレンダリング パイプラインとどのモードを選択する必要があります。

[照明] ウィンドウには、以下の重要なパラメータを含む [ライトマッピング設定] オプションも表示されます。

ライトマッパー: シーン内のライトマップの計算に使用される内部照明計算ソフトウェアを指定します。Unity は、Progressive Lightmapper と呼ばれるコンピューティング システムを使用します。デフォルトはプログレッシブ CPU (CPU が計算に使用されることを意味します) ですが、計算にプログレッシブ GPU を選択することもできます。さらに、Enlighten は放棄されました (前述のように)。

直接サンプル: 直接照明のサンプリング値

間接サンプル: 間接照明のサンプリング値

環境サンプル: 環境光のサンプリング値

最後は Auto Generate チェック オプションです。このオプションをチェックすると、Unity が自動的にライト マップを生成します。チェックしなかった場合 (デフォルト)、右側の「Generate Lighting」をクリックしてライトを手動で生成する必要があります。地図。照明やシーンを変更した場合は、ライト マップを再生成する必要があります。

最後にまとめておきます: Unity の 4 つの光源タイプは理解しやすいです。さらに理解しにくいのは、Unity の間接照明です。その主な目的はシーンをよりリアルにすることですが、残念ながら、間接照明はライト マップの生成に使用されるベイク処理にのみ使用できます。Unity ではライト マッピング テクノロジーが広く使用されているため、リアルタイム、ベイク、ミキシングの 3 つの光源モードがあります。デフォルトでは、混合モードで光源を使用することをお勧めします。ライト マップをベイクした後、シーン内の静的オブジェクトはライト マップから照明効果を取得しますが、動的オブジェクトは引き続きリアルタイムの光源計算を通じて照明効果を取得します。このようにして、全体的な照明効果を確保できるだけでなく、パフォーマンスの消費も削減できます。ライトマップのベイク設定については、ライティングウィンドウの「混合ライティング」にある「ライティングモード」の3つのモードを理解しておく必要があります。それらの違いは、直接照明、間接照明、影がライト マップにベイクされるかどうかにあります。ベイクされるコンテンツが増えるほど、必要なリアルタイム計算は少なくなります。これを理解するのは難しくありません。

おすすめ

転載: blog.csdn.net/konkon2012/article/details/130461175