これは、開発者とテクニカルアーティストが Unity で High Definition Render Pipeline (HDRP) を設定して使用し、ハイエンドのグラフィックリアリズムを実現する方法を説明する一連の記事の 3 番目です。HDRP は Unity のリアルタイム レンダリングにおける技術的な飛躍を表しており、現実世界での振る舞いと同じように光を操作できます。
高級照明に関するハウツーシリーズの他の記事もぜひお読みください。
HDRP には、シーン内の照明を制御するのに役立つさまざまなライトの種類と形状が含まれています。
ライトの種類
これらは、Unity の他のレンダリング パイプラインと同様に、使用可能なライト タイプです。
- ディレクショナル:無限遠に位置する光源からの光のような特性を持ちます。強度が落ちない完全な平行光線です。指向性ライトは、多くの場合、太陽光の代わりとなります。一般的に、屋外のシーンでは、これがキーとなるライトです。
- Spot:現実世界のスポットライトに似ており、円錐、ピラミッド、ボックスといった形状があります。スポットは前方 Z 軸に沿って、また円錐/ピラミッド形状の端に向かって減少します。
- ポイント:空間内のある 1 点からすべての方向に光を放つ全方向性ライトです。ランプやろうそくのような放射光源に役立ちます。
- エリア:特定の形状(矩形、チューブ、またはディスク)のサーフェスから光を投影します。エリア ライトは、窓や蛍光灯のように、中心に均一な強度を持つ広い光源のように機能します。
範囲を使用して、スポット、ポイント、エリア ライトの減衰方法を変更します。多くの HDRP ライトは、現実世界の光源と同じように、逆 2 乗の法則に従って減衰します。
スポット ライトとエリア ライトには、次のセクションで説明するように、各ライトの減衰を制御するための追加の形状があります。
HDRP スポットライトには 3 つの形状があります。
- Cone(円錐):1 点から円錐形に広がる光を投影します。「Outer Angle」(角度)と「Inner Angle」(パーセンテージ)を使用して、円錐の形と角度減衰を調整します。
- Pyramid(ピラミッド):1 点から四角錐型に広がる光を投影します。「Spot Angle」と「Aspect Ratioを使用して四角錐の形状を調整します。
- Box(ボックス):矩形のボリューム全体へ均一に光を投影します。X サイズと Y サイズによって基部となる長方形を定めて、「Range」によって Y 次元を調整します。この光は、「Range Attenuation」がオンになっていなければ減衰しないようになっているので、ボックスの範囲内で日光のシミュレーションなども行うことができます。
HDRP エリア ライトには 3 つの形状があります。
- Rectangle(矩形):矩形の形状からローカルの正の Z 方向に、定義された「Range」まで光を投影します。
- Tube(チューブ):1 本の線から全方向に、定義された「Range」まで光を投影します。このライトは リアルタイム モードでのみ動作します。
- Disc(ディスク):ディスク型の形状からローカルの正の Z 方向に、定義された「Range」まで光を投影します。このライトは「Baked Mode」でのみ使用できます。
HDRP のすべてのタイプのライトに、ライトの外観を定義する「Emission」プロパティがあります。
「Light Appearance」を「Color」に切り替えると、RGB カラーを指定できます。それ以外の場合は、より物理的に正確な入力を得るために、これを 「フィルター」 と 「温度」 に変更します。
色温度では、ケルビン度に基づいて色を設定します。参考として、このページの下にある「照明と露出のチートシート」を参照してください。
フィルターのように機能する色を追加して、光を別の色調で着色することもできます。これは、現実の写真撮影でカラージェルフィルターを使用する方法と似ています。
HDRP には、インスペクターの右上にある [その他のアイテム] メニュー (⋮) の下にいくつかの高度なコントロールが含まれています。追加のオプションを見るには「Show Additional Properties」を選択します。
「Affect Diffuse」、「Affect Specular」などのトグルがあります。たとえば、カットシーンや映画の照明では、明るい光沢のあるハイライトを制御するライトと、より柔らかい拡散光を生成するライトを個別に分離できます。
「Intensity Multiplier」を使用して、ライトの元の強度の値を変更せずに全体的なライトの強度を調節することもできます。これは、複数のライトを一度に明るくしたり暗くしたりするのに便利です。
HDRP では 、ライトレイヤー を使用して、シーン内の特定のメッシュにのみライトを当てることができます。これらは、Light コンポーネントおよび MeshRenderer に関連付けることができる LayerMask です。
ライトのプロパティで、[その他のオプション] ボタンをクリックすると、[一般]の下にある [ライト レイヤー] ドロップダウンが表示されます。ライトに関連付けるレイヤーマスクを選択します。[その他のアイテム] メニュー (☰)から [追加のプロパティを表示] を選択することもできます。同様に、「一般」の下に「ライト レイヤー」ドロップダウンが表示されます。ライトに関連付けるレイヤーマスクを選択します。
次に、レンダリングレイヤーマスクを使用して MeshRenderer を設定します。一致するレイヤーマスク上のライトのみがメッシュに影響します。この機能は光漏れを修正するのに非常に役立ち、光が意図したターゲットにのみ当たるようにします。カットシーンの照明を設定するワークフローの一部として、キャラクターのみが専用の映画のような照明を受け取るようにすることもできます。
たとえば、建物内の照明が誤って外側の壁を貫通するのを防ぎたい場合は、内部と外部に特定のライト レイヤーを設定できます。これにより、ライト設定を細かく制御できるようになります。
ライトレイヤーを設定するには、「HDRP Default Settings」にアクセスします。「Layers Names」セクションでは、Light Layer 0 から 7 に文字列の名前を設定できます。
ライトのプロパティの完全なリストを含めた詳細については、Light コンポーネントに関するドキュメントをご覧ください。
Unity 2021 LTS 以降には、カメラと被写体間の角度と距離を制御することで、ライトを素早く設定できる「Light Anchor」システムが搭載されています。また、9 つのプリセットで一般的なライトの角度を選択できます。
キャラクターや小道具の周囲に複数のライトを使用して映画のシーン、製品、またはショットを照らす必要がある場合、Light Anchor コンポーネントを使用すると、アンカー ターゲットの周囲の画面空間でライトをすばやく効率的に操作できます。
まず、カメラが MainCamera としてタグ付けされていることを確認し、制御するスポット ライトに Light Anchor コンポーネントを追加します。ライトと被写体を合わせます。この位置がスポット ライトのアンカー ポイントになります。アンカー ポイントとスポット ライト間の 距離 を増やしたり、シーン ビューでライトの変換を手動で調整するのではなく、ゲーム ビュー内でライトの軌道、高度、ロールを調整して、アンカー ポイントの周囲のライトの位置を調整したりすることもできます。
詳細については、Light Anchorsの紹介プレゼンテーションをご覧ください。
HDRP は光の強度を測定するために Physical Light Units (PLU) を使用します。これは、カンデラ、ルーメン、ルクス、ニトなど、現実世界での照度の SI 測定単位と一致しています。PLU では、正確さを保つために、Unity の 1 単位が 1 メートルに相当すると想定していることに注意してください。
単位
物理ベースのライト単位には、光束と照度の両方の単位が含まれる場合があります。光束とは光源から放出される光の総量であり、照度とはオブジェクトに当たる光の総量を指します(単位面積あたりの光束で表されるのが一般的)。
商用照明や写真撮影ではアプリケーションによって単位が異なる場合があるため、Unity は互換性のために複数の 物理ライト ユニット をサポートしています。
- カンデラ:1 単位が、1 本のろうそくの光束に相当します。燭(燭光)などの呼称も一般的です。
- ルーメン:これは、立体角 (ステラジアン) あたりの 1 カンデラとして定義される光束の SI 単位です。市販の電球の仕様では、ルーメンがよく見られます。Unity のスポット ライト、ポイント ライト、またはエリア ライトと一緒に使用します。
- ルクス:1 平方メートルの面積に 1 ルーメンの光を放射する光源の照度は 1 ルクスです。現実世界の露出計は一般的にルクスで読み取られます。このユニットは、Unity の指向性ライトと一緒によく使用されます。
- 二ト:これは 1 平方メートルあたり 1 カンデラに相当する輝度の単位です。ディスプレイ デバイスや LED パネル (テレビやモニターなど) では、明るさをニットで測定することがよくあります。
- EV100:EV100 に対応する強度には、ISO 100 フィルムでの露出値があります ( このページの露出値の計算式セクションを参照してください)。露出を上げると、対数的な計算により、ライティングが倍増します。
実際の照明源を再現するには、技術仕様に記載されているユニットに切り替えて、正しい光束または輝度を接続します。HDRP は物理照明ユニットに一致するため、強度を設定する際の推測作業が大幅に削減されます。
アイコンをクリックし、「Exterior」、「Interior」、「Decorative」、「Candle」のいずれかのプリセットを選択します。特定の値を明示的に一致させていない場合、これらの設定は適切な出発点となります。
ライティングと露出の一般的な値
ここに示すチートシートには、現実世界の一般的な 光源の色温度と照明の強度が記載されています。また、さまざまなライティングシナリオに合った露出値も紹介されています。
照明値の完全な表は 、Physical Light Units ドキュメントに記載されています。
IES プロファイルを使用して、ポイント ライト、スポット ライト、エリア ライトが実際のライトのフォールオフを厳密に模倣するようにします。これは、特定のメーカー仕様を光のパターンに適用するための ライト クッキー のように機能します。IES プロファイルにより、 ライトのリアリティがさらに高まります。
IES プロファイルを「Assets > Import New Asset」からインポートします。インポーターは 正しい強度の ライト プレハブ を自動的に作成します。次に、プレハブを シーン ビュー または 階層 にドラッグし、 色温度を微調整します。
現実の世界では、光は私たちの周囲で反射したり散乱したりします。空と地面は、ランダムな光子が大気と地球の間を跳ね返り、最終的に観察者に届くため、環境照明に貢献します。
HDRP では、「Visual Environment」のオーバーライドを使用して、シーンの空と環境光を定義できます。
例えば、 アンビエントモード:Dynamic」を使用して、空のライティングを、「Visual Environment」の「Sky > Type」に表示される現在のオーバーライドに設定します。
または、「Ambient Mode: Static」を使用する場合は、「Lighting」ウィンドウの「Environment」タブの空の設定がデフォルトになります。
他の光源が無効になっている場合でも、ビジュアル環境はサンプル シーンに一般的な周囲光を提供します。
太陽のキーライトを追加することで、シーン全体の照明が完成します。環境光は影の領域を補い、不自然に暗く見えないようにします。
ビジュアル環境の空を適用することは、仮想世界全体を巨大な照明球で包むことに似ています。球体の色付きポリゴンは、空、地平線、地面からの一般的な光を提供します。
「HDRI Sky」では、ハイダイナミックレンジの写真から作成したキューブマップを使用して空を表現できます。オンライン上には、無料または低価格の HDRI ソースが多数見つかります。良い出発点は、Asset Store の Unity HDRI Pack です。冒険心が強い方には、独自の HDRI を撮影するための ガイド も用意されています。
HDRI アセットをインポートしたら、「HDRI Sky」のオーバーライドを追加し、「HDRI Sky」アセットをロードします。これにより、 歪み、 回転、 更新モードのオプションを微調整することもできます。
空はイルミネーションのソースになるため、「Intensity Mode」を指定してから、対応する「Exposure/Multiplier/Lux」の値を選択して環境ライティングの強度を制御します。強度と露出の値の例については、前述のライティングと露出のチートシートを参照してください。
雲のレイヤーをアニメーション化する
HDRI Sky をアニメーション化し、プロシージャルまたはフローマップを使用して HDRI マップを歪めることができます。これにより、静的 HDRI で風の効果を偽装したり、他の特定の VFX を作成したりできます。
ビジュアル環境 で グラデーション スカイ を選択すると、背景の空をカラー ランプで近似できます。続いて、「Gradient Sky」のオーバーライドを追加します。「Top」、「Middle」、「Bottom」を使用して、グラデーションの色を指定します。
カラーランプを「Gradient Diffusion」とブレンドし、ライティングの強さの「Intensity」を調整します。
グラデーションよりもはるかにリアルなものにするには、Physically Based Sky Override を使用します。
これは、大気中を拡散する光をシミュレートする ミー散乱 や レイリー散乱などの現象を組み込んだ空をプロシージャルに生成し、自然な空の色を再現します。物理ベースの空では、正確なシミュレーションのために指向性ライトが必要です。
煙、霧、もやは、映画撮影の伝統的な手段です。ステージ照明に深みと立体感を加えたり、雰囲気のあるムードを演出したりするのに役立ちます。
HDRP で同様の利点を得るには、 フォグを 使用します。不透明度は、オブジェクトからカメラまでの距離によって異なります。フォグはカメラのファークリッピングプレーンを非表示にし、遠くのジオメトリをシーンに戻すこともできます。
HDRP は、グローバル フォグを フォグ オーバーライドとして実装します。ここでは、カメラからの距離とワールド空間の高さにより、霧は指数関数的に薄れます。
シーン内の ボリューム に フォグ オーバーライド を設定します。「Base Height」では、一定の濃いフォグが上方向に向かうにつれ、薄くなり始める境目を指定します。霧の密度は、 最大高度に達するまで指数関数的に減少し続けます。
同様に、「Fog Attenuation Distance」と「Max Fog Distance」では、カメラから距離が離れるにつれ、フォグをどのようにフェードさせるのかを設定します。一定の色 と既存の 空の色の間で 色モード を切り替えます。
ボリュメトリックフォグを有効にすると、大気散乱のシミュレーションが行われます。Lighting > Frame Settings(Camera の下または HDRP Default Settings内) で Fog と Volumetrics を 必ずチェックしてください。また、HDRP パイプラインアセットでボリュメトリックフォグも有効にします。
ボリュメトリックフォグの距離では、カメラのニアクリップ面からボリュメトリックライティングバッファの背部までの距離(メートル単位)を設定します。これにより、大気が空中のマテリアルで満たされ、範囲内の GameObject が部分的に遮られます。
ボリューメトリック ライティングは 、日没時の雲の後ろの薄明光線や木の葉の間を通過する光線など、ドラマチックな太陽光線のレンダリングをシミュレートできます。
それぞれのライトコンポーネント(エリアライト以外)に、「Volumetrics」グループがあります。「Enable」をオンにしてから、「Multiplier」と「Shadow Dimmer」を設定します。「Real-timeまたは「Mixed Mode」のライトを使用すると、ボリュメトリックフォグ内に「薄明光線」が生成されます。乗数は強度を調整し、シャドウ ディマーは影を落とす表面が光をどのようにカットするかを制御します。
サンプル シーンの部屋 2 には、天窓とボリューメトリック フォグが備わっています。ガラスケースのフレームは天井からの太陽光線から立体的な影を彫り出します。シャドウ ディマーを上げ、乗数を強調して効果を強化します。
フォグ オーバーライドで提供できるよりも詳細なフォグ効果が必要な場合、HDRP では ローカル ボリューメトリック フォグ (HDRP 12 より前では密度ボリューム コンポーネントと呼ばれていました) も提供されます。
これは、ボリューム システム外の別のコンポーネントです。メニューからローカルボリュメトリックフォグのゲームオブジェクトを作成(「 GameObject > Rendering > Local Volumetric Fog」)するか、「Hierarchy」を右クリックします(「Rendering > Local Volumetric Fog」)。
これにより、霧で満たされた境界ボックスが生成されます。サイズ、軸のコントロール、ブレンディング/フェーディングのオプションを調整します。デフォルトではフォグは一様ですが、3D テクスチャを「Density Mask Texture」サブセクションの「Texture」フィールドに適用できます。これにより、ユーザーは霧の外観をより柔軟に制御できるようになります。
Package Manager の「Local Volumetric 3D Texture Samples」からサンプルをダウンロードするか、ドキュメントの手順に従って密度マスクを作成します。
アニメーションの「Scroll Speed」を追加し、「Tiling」を調整します。すると、ボリューメトリック フォグがシーン内をゆっくりと移動できるようになります。
HDRP はパフォーマンスを向上させるために Local Volumetric Fog をボクセル化しますが、ボクセル化が粗く見える場合があります。エイリアシングを減らすには、 密度マスク テクスチャ を使用し、 ブレンド距離 を増やして霧のエッジを柔らかくします。
HDRP バージョン 12 以降では、HDRP パイプライン アセットで最大 256x256x256 のローカル ボリューム解像度を有効にできます。これにより、より正確で大規模な効果が可能になります。
空は雲がないと完成しません。HDRP 12 以降では、 クラウド レイヤー を使用して、空とビジュアル環境のオーバーライドを補完する自然な外観の雲を生成します。
ボリュメトリッククラウドはライティングや風に反応し、実際に厚みを持つリアルな雲を作り出します。
クラウド レイヤーは 、赤と緑のチャンネルを持つ フローマップ を使用してベクトルの変位を制御し、アニメートできる 2D テクスチャです。空の前に配置され、地面に影を落とすオプションを提供します。
再生モードでは、クラウド レイヤーを使用して空にわずかな動きを加え、背景をよりダイナミックにします。
ローカル ボリュームまたはグローバル ボリュームで、ビジュアル環境で バックグラウンド クラウド を有効にします。次に、 クラウド レイヤーオーバーライドを追加します。
雲マップ自体は円筒投影を使ったテクスチャで、RGBA チャンネルはすべて異なる雲のテクスチャ(積雲、層雲、巻雲、さざ波雲)を含んでいます。その後、雲レイヤーの制御を使って各チャンネルをブレンドし、お好みの雲を形成することができます。.4 つのチャンネルを持つ 2 つのレイヤーがあり、最大 8 つの雲の風景をシミュレートしてブレンドできます。クラウドのアニメーション、照明、色、影を好みに合わせて変更します。
雲が光と相互作用する必要がある場合は、Volumetric Cloudsを使用します。これらは、シャドウをレンダリングし、フォグを受け取り、ボリュメトリックな光軸を作り出すことができます。これらをクラウドレイヤーの雲と組み合わせたり、別々に追加したりしましょう。
ボリューメトリック クラウドを有効にするには:
- HDRP アセット:[照明] > [ボリューメトリック クラウド] > [ボリューメトリック クラウド]に移動します。
- ローカルまたはグローバルボリューム:「ボリュメトリッククラウド」のオーバーライドを追加します。
「Advanced」および「Manual」の「Cloud Control」オプションでは、雲の種類ごとにマップを定義できます。
クラウド レイヤー と ボリューメトリック クラウド オーバーライドの詳細については 、HDRP のクラウドに関するドキュメント を参照してください。Volumetric Clouds の詳細については、「Unity 2021.2 の新しいライティング機能」 を参照してください。
暗闇がなければ光を認識することはできません。適切に配置された影はシーンにさらなる深みと立体感を与え、照明そのものと同じくらい個性を加えます。HDRP には、シャドウを微調整し、レンダリングが平坦に見えないようにするための機能が多数含まれています。
シャドウマップ
シャドウは、シャドウマッピングという手法でレンダリングされます。この手法では、ライトの視点からの深度の情報がテクスチャに保存されます。
「Light」コンポーネントの「Shadows」サブセクションで、シャドウマッピングの「Update Mode」と「Resolution」を変更できます。解像度と更新頻度の設定を高くするとコストが高くなります。
ディレクショナルライトの場合は、シャドウマップがシーンの大部分を覆うため、透視エイリアシングと呼ばれる問題が生じることがあります。カメラに近いシャドウ マップ ピクセルは、遠くにあるピクセルに比べてギザギザでブロック状に見えます。
次のセクションで説明するように、Unity は カスケード シャドウ マップを使用してこれを解決します。
カスケード シャドウ マップは、カメラ フラスタムをゾーンに分割し、各ゾーンに独自のシャドウ マップを設定します。これにより、遠近法のエイリアシングの影響が軽減されます。
HDRP では、Shadows Overrideを使用して シャドウ カスケード をさらに制御できます。各ボリュームの カスケード設定 を使用して、それぞれのカスケードの開始位置と終了位置を指定します。
カスケード分割をよりわかりやすく表示するには、[カスケードを表示] ボタンを切り替えます。少し調整するだけで、遠近法のエイリアシングを最小限に抑えることができます。
シャドウ マップでは、特に 2 つのメッシュ サーフェスが接続する識別可能なエッジで、細かい詳細をキャプチャできないことがよくあります。HDRP では、「Contact Shadows」のオーバーライドを使用して、こうしたコンタクトシャドウを生成できます。
コンタクト シャドウは、計算にフレーム内の情報に依存するスクリーン スペース効果です。フレーム外のオブジェクトは、コンタクトシャドウには影響しません。これらは主に、画面上のフットプリントが小さい影の詳細に効果的です。
「Frame Settings」で「Contact Shadows」を有効にします。また、 ライティング品質設定の コンタクトシャドウオーバーライド の下にある パイプラインアセット の サンプル数 を調整することもできます。
2021 LTS 以降のバージョンでは、この機能は Terrain およびSpeedTreeで適切に動作するように改善されました。詳細はブログにてご確認ください。
HDRP を使用すると、細かい影の詳細もマテリアルに拡張できます。Micro Shadows は、法線オクルージョン マップとアンビエント オクルージョン マップを使用して、メッシュ ジオメトリ自体を使用せずに非常に細かい表面シャドウをレンダリングします。
「Micro Shadows」のオーバーライドをシーン内のボリュームに追加し、「Opacity」を調整します。ただし、マイクロ シャドウは指向性ライトでのみ機能することに注意してください。