このチュートリアルでは、前のチュートリアルのマテリアルとアセットと、露出、ブルーム、レンズ フレア、カラー グレーディングなどのポストプロセス エフェクトを使用して夜間シーンを作成します。 また、ポストプロセス ボリュームと Lumen の動的グローバル イルミネーションおよび反射を使用して、シーンのライティングと反射の品質を向上させる方法についても学びます。
ポストプロセス エフェクトは、レベルの外観と雰囲気を破壊することなく変更するものです。 たとえばカメラにフィルタをかけたり、レンズの前にカラー ジェルを適用するなどがこれにあたります。
ポスト プロセス エフェクトは、レベル内のアセットを変更することなく、リアルタイムに適用できます。 これらのエフェクトは非破壊的であり、マテリアルや複雑なライティング設定を妨げることなく視覚的な変更を行う際に便利です。
以下の画像に示されているレベル間の唯一の違いは、ポストプロセスの一種であるカラー グレーディングです。
ゲーム デベロッパーは、プレイヤーの注意を引き、ゲームプレイ情報を伝え、視覚的なストーリーテリングを強化する目的でさまざまな種類のポスト プロセス エフェクトを使用します。 たとえば、次のようになります。
カラー グレーディングを使用すると、異なる時間帯を表現したり、シーンの雰囲気を変えたり、フラッシュバックなどの物語の仕掛けを視覚的に伝えることができます。
反射は、ゲームプレイ中にリアリズムを加え、没入感を深めることができます。
ブルームは、露出やレンズ フレアと組み合わせて使用することで、輝き、反射、またはアセットへの直接的な注意を強調することができます。
複数のポストプロセス エフェクトを組み合わせて、ゲームに一貫したビジュアル スタイルを確立したり、特定のゲームプレイ状況で使用したりできます。 以下のデモでは、プレイヤーが水中にいることを視覚的に伝えるために、複数のエフェクトを使用しています。
ポスト プロセス エフェクトは、ライティング機能の最適化を制御するためにも使用されます。 AAA ビデオ ゲームをプレイしたことがあれば、リソースを大量に消費するエフェクト (反射品質 など) を調整するオプションがあることにお気付きかもしれません。 このチュートリアルの後半では、ポストプロセス ボリュームを使用して Unreal Engine の反射品質に関する忠実度とパフォーマンスのバランスを取る方法を説明します。
次に、ポストプロセス エフェクトがゲーム レベルでどのように適用されるかを確認しましょう。
ポストプロセス ボリュームの構造
ポストプロセス エフェクトは、配置可能なポストプロセス ボリュームを使用してレベルに適用することができます。 ボリュームではエフェクトが適用される領域を定義します。 これらのボリュームはランタイム時にはプレイヤーには見えず、バインドまたはアンバウンドが可能です。
バウンド ボリュームとアンバウンド ボリュームの違いを示す例を見てみましょう。 以下の画像では、彩度に影響する 3 つのポストプロセス ボリュームを作成しました。
上の動画で 2 つの点に注目してください。 プレイヤーが廊下を歩行:
アンバウンドされたボリュームの彩度は、プレイヤーがボリューム内にいない場合でも変化しません。 これは、アンバウンドのボリュームではエフェクトがグローバルに適用されるためです。 ボリュームのスケールと位置は重要ではありません。
バウンドされているボリュームの彩度は、プレイヤーがボリューム内にいる場合にのみ表示されます。 これはバウンド ボリュームがエフェクトをローカルに適用するためで、その範囲内のエリアに限定されます。
これから、プレイヤーが境界に近づくときにエフェクトを開始するためにボリュームをブレンドする方法を説明します。
ボリュームは、グラフィック デザイン ソフトウェアのレイヤーのように階層的にレイヤー化することができます。 バウンドされていないグローバル ボリュームは、レベル内のより小さいバウンドされたボリュームの上にレイヤー化されます。 同様に、互いにオーバーラップするバウンド ボリュームにもレイヤー化の優先度を設定できます。
グローバル ボリュームは、ゲーム全体で一貫したビジュアル スタイルを維持するのに役立つほか、さらなるレイヤー化の基盤として機能し、ワークフローを整理された状態に保ちます。
たとえば、レイヤーごとにビジュアル エフェクトを構築することで、特定やデバッグが困難な予期しない結果を回避できます。 複数のレベルにわたって何百ものエフェクトを使用して作業するチームでは、整理された状態を維持することで、貴重な開発およびデバッグの時間を節約することができます。
次に、レベルに 3 つのポストプロセス ボリュームを設定して優先度を設定します。
グローバル ボリュームおよびローカル ボリュームを設定する
「シーンにライトを導入する」で作成したポストプロセス ボリュームに戻り、グローバルにエフェクトを適用していることを確認します。
[Outliner (アウトライナー)] でPostProcessVolume を見つけて選択します。
このボリュームの名前を
PPV_Globalに変更します。[Details (詳細)] パネルで、[Post Process Volume Settings (ポストプロセス ボリューム設定)] を展開します。
[Infinite Extent (Unbound) (無制限に適用 (アンバウンド))] がオンで、[Priority (優先度)] が
0に設定されていることを確認します。
次に、2 つの新しいボリュームを作成します。一つはルーム 3 を囲むもので、もう一つはルーム 3 内のレベル トランジション ポイントを囲むものです。
各バウンド ボリュームの優先度を調整し、プレイヤーがグローバル ボリュームよりも優先されるようにします。 優先度を設定する場合、高い値が低い値よりも優先されます。
新しいボリュームを作成するには、次の手順を実行します。
エディタのメイン ツールバーで、[Create (作成)] > [Visual Effects (ビジュアル エフェクト)] > [Post Process Volume (ポストプロセス ボリューム)] の順にクリックします。 または、検索することもできます。 2 つのボリュームを追加します。
最初のボリュームを「
PPV_Room3」、2 つ目のボリュームを「PPV_LevelTransition」という名前にします。[Outliner (アウトライナー)] で
PPV_Room3を選択し、その [Scale (スケール)] を8.5, 10, 5に設定します。[Location (位置)] を
1600, -1050, 370に設定します。 これでルーム 3 をほぼ囲むことができます。[Post Process Volume Settings (ポストプロセスボリューム設定)] で [Priority (優先度)] を
「100」に設定します。それらの間の範囲が広い値を選択します。 これにより、既存のボリュームの優先度を更新する必要なく、ボリュームを挿入および削除することが可能になります。 たとえば、各値の間で 10 または 100 ずつイテレートします。
[Blend Radius (ブレンド半径)] を
0に設定し、[Infinite Extent (無限の適用)] がオフであることを確認します。[
PPV_LevelTransition] を選択し、その [Scale (スケール)] を「1.5, 1.5, 2.5」に設定します。[Location (位置)] を
2170、-1450、600に設定します。 これは、レベルのトランジション ポイントをおおよそ囲むようにします。[Priority (優先度)]を「
200」に設定し、[Infinite Extent (無限の適用)] のチェックボックスがオフであることを確認します。
このチュートリアル用のボリュームが設定されました。
ポストプロセス プリセットのさまざまなテスト
このセクションでは、次のポストプロセス カテゴリのエフェクトを試していきます。
レンズ
露出
Bloom (ブルーム)
Lens Flare (レンズ フレア)
カラー グレーディング
オフセット
コントラスト
グローバル イルミネーションおよび反射
Lumen シーン ライティング品質
Lumen シーン詳細
反射品質
画面トレース
トレースする最大ラフネス
露出
露出は、レベル内の輝度の上限と下限を制御します。 ポストプロセス ボリュームは、レベル内にある他のアクタのプロパティを変更することはありません。 次のデモでは、光源の明るさが変化していません。 代わりに変更されるのは、カメラレンズに入ることが許可される可視光の最大量です。
実世界では、この効果はカメラの開口値が取り込む光の量を制御する仕組みに似ています。 また、異なるライティング条件に適応するために、瞳孔が拡張・収縮する働きにも例えられます。 これが、Unreal Engine の露出が自動露出 (明暗順応)とも呼ばれる理由です。
露出を使用すると、現実世界の光学効果を模倣して、ゲームにリアリズムを加えることができます。 たとえば、プレイヤーが暗い場所から明るい場所に移動する場合、グローバル露出の調整にかかる時間を長くすることで、人間の目が明るい場所に調整するのにかかる時間を模倣することができます。
このセクションでは、PPV_Global と PPV_Room3 の露出を調整し、プレイヤーがルーム 3 に入ると夜間へのトランジションを作成します。
露出を設定するには、以下の手順を実行します。
[Outliner (アウトライナー)] で PPV_Global を選択します。
[Details (詳細)] パネルの [Exposure (露出)] で [MIN EV100] を選択し、
-10に設定します。[MAX EV100] を選択して
20に設定します。[Outliner (アウトライナー)] で
PPV_Room3を選択します。[Details (詳細)] パネルの [Exposure (露出)] で [MIN EV100] を選択し、
-1.0に設定します。
ビューポートで右クリックし、[Play From Here (ここからプレイ開始)] を選択してレベルをテストします。 部屋 3 に向かって移動すると露出が変化するはずですが、その変化が唐突に感じられます。
変更の持続時間を延長するには、[Blend Radius (ブレンド半径)] を使用してグローバル ボリュームとバインド ボリュームをブレンドします。
[Outliner (アウトライナー)] で
PPV_Room3を選択します。[Post Process Volume Settings (ポストプロセス ボリューム設定)] で [Blend Radius (ブレンド半径)] を
1500に設定します。
レベルをテストします。 部屋 3 に近づくにつれて、露出が徐々に変化するはずです。
同じ露出値でも、レベルによってはここでのものとは異なって見える場合があります。 前のチュートリアルでは、夕暮れのように見えるようにディレクショナルライトの設定を変更しました。
次は、ブルームでネオンサインの輝きを調整します。
Bloom (ブルーム)
ブルームとは、光源や反射の境界を超えて光がにじみ出ているように見えるライティングの不完全性を指します。
映画では、この種の不完全性はカメラのセンサーやレンズの光学特性に起因しますが、ゲームでも演出目的で意図的に再現することが可能です。 たとえば、ブルームや露出を使用することで、プレイヤーが夢のシーケンスに入ったこと、フラッシュバックしたこと、または爆発後に気絶したことを視覚的に伝えることができます。
Unreal Engine では、前のチュートリアルでエミッシブ マテリアルの [Brightness (輝度)] パラメータを 1 より大きい値に上げた場合に、ブルームが機能していることがわかります。
幅広い結果を達成するために各アセットのプロパティを調整するのではなく、ポストプロセス ボリュームを使用して、部屋 3 のブルーム全体を制御しましょう。
[Outliner (アウトライナー)] で
PPV_Room3を選択します。[Details (詳細)] パネルで、[Lens (レンズ)] カテゴリを展開します。
[Bloom (ブルーム)] カテゴリを展開して [Intensity (強度)] をオンにします。
0.8などに設定することも、独自の値を使用することもできます。[Threshold (しきい値)]をオンにして
1または独自の値を設定します。
しきい値は、レベルにブルームのエフェクトが適用される最小値を設定します。 これは、前のチュートリアルで紹介したクランプと同様の仕組みです。 [Intensity (強度)] では、ブルームが有効になると、ブルームの強さを制御できます。
しきい値が「-1」であれば、レベル内の全てのカラーがブルームに影響します。
次は、ネオンサインにレンズ フレアを追加します。
Lens Flare (レンズ フレア)
レンズフレアは、明るい光がレンズやカメラの内部要素の不完全性から反射したときに発生するライティング アーティファクトです。
このエフェクトは、演出目的でゲーム内に再現することが可能です。 たとえばレンズフレアは、反射アセットに視線を引きつけたり、フォトリアリズムを高めたり、プレイヤーが太陽を見たときにその強さを強調したりすることができます。
レベルにレンズ フレアを作成するには、次の手順に従ってください。
[Outliner (アウトライナー)] で
PPV_Room3を選択します。[Details (詳細)] パネルで、[Lens (レンズ)] > [Lens Flares (レンズ フレア)] を展開します。
[Intensity (強度)] をオンにして「
0.5」に設定します。[BokehSize (ボケサイズ)] をオンにして「
5」に設定します。値が小さいほど分散の少ない、よりシャープなボケの結果が得られますが、値が大きい場合は分散が大きくなります。
[BokehShape (ボケ形状)] を確認し、[
DefaultBokeh (既定のボケ)] を検索します。映画においては、ボケパーティクルの幾何学的な形状は、カメラの絞り形状に起因します。 映画によく登場するため、このエフェクトは物理的な開口部が存在しないゲームにも再現されています。
レベル内の光源またはエミッシブ マテリアルの前で前後に移動し、作業をテストしてください。
次に、カラー グレーディングを使用してプレイヤーにゲームプレイの仕組みを伝えます。
カラー グレーディング
画像編集ソフトウェアのように、カラー グレーディングを使用するとレベルの彩度、コントラスト、ガンマ、ゲイン、オフセット、色合いなどに影響を与えることができます。
これらのツールを使用することで、レベルの知覚される時間帯、雰囲気、またはジャンルの規則を変更することができます。 たとえば、セピア色は、古い時代を示唆するカラー グレーディングのスタイルです。
レベルでは、カラーグレーディングを活用することで、プレイヤーがレベルのトランジション ポイントに入ったことを視覚的に強調できます。 レベルのトランジション ポイントは、パズル アドベンチャーの設計で作成されたゲームメカニックで、プレイヤーを新しいレベルに移動させます。
現在レベルのトランジション ポイントに立っている場合、下にある矩形ライトは、部屋の周囲のディレクショナル ライトおよびポイント ライトと競合するほどの強さはありません。 つまり、プレイヤーには、ゲームプレイからレベル トランジションへの切り替わりがより明確に伝わります。
明瞭で一貫性のある演出を提示することで、プレイヤーはレベル内でゲームメカニクスを示すビジュアルキューを認識し、次に起こることを予測できるようになります。
この問題をポストプロセスで解決するには、以下の手順を実行してください。
[Outliner (アウトライナー)] で PPV_LevelTransition を選択します。
[Details (詳細)] パネルで [Color Grading (カラー グレーディング)] > [Global (グローバル)] を展開し、[Offset (オフセット)] をオンにします。
オフセットはレベルの最も暗い領域に影響を与えるため、この暗室の全体的な色合いを調整するのに最適です。
独自の値を選ぶか R=
-1.0、G =-0.02、B =0.15、Y =0.07を設定します。部屋は青く表示されるはずです。
ポイント ライトによって作成された白いホットスポットを補正するには、[Color Grading (カラー グレーディング)] > [Highlights (ハイライト)] から [Contrast (コントラスト)] をオンにします。
[Contrast (コントラスト)] は、レベルの最も暗い領域と最も明るい領域の差を調整します。 ここでは、コントラストを下げることで、白色レベルがオフセット補正のしきい値内に収まるように調整します。
値を R =
0.5、G =0.8、B =0.7、Y =1に設定します。:
作業内容をテストするには、ビューポートで右クリックし、[Play From Here (ここからプレイ開始)] を選択します。 JumpPad に走ってレベル遷移ポイントに着地すると、画面が青くなります。
次に、ポストプロセス ボリュームを使用して反射品質の最適化を制御します。
グローバル イルミネーションおよび反射
ポストプロセス ボリュームは、ビジュアル エフェクトの品質と範囲を制御することができます。 これにより、動的ライティングなど、負荷の高いレンダリング機能で作業する際に忠実度とパフォーマンスのバランスを取ることが可能です。
リソース割り当ては、開発における意思決定に影響を与えることが多い点を覚えておきましょう。 広大な屋外レベルでは、ポストプロセス ボリュームを使用することで、プレイヤーから遠く、気づかれにくい領域の品質を維持できます。 これにより、ゲームプレイ中のプレイヤーの周囲やシネマティック中のカメラの周囲など、品質が重要な領域のリソースを節約できます。
ボリュームのグローバル イルミネーションと反射の設定には、さまざまな開発ニーズに適したさまざまなライティング計算方法が含まれています。
| メソッド | 説明 |
|---|---|
なし | グローバル イルミネーションや反射の計算を無効にします。 光源によって反射光や反射が発生せず、影は真っ黒に表示されます。 |
Lumen | Lumen グローバル イルミネーション (GI) は、Unreal Engine のあらゆるライティング タイプで機能する完全に動的なグローバル イルミネーション システムです。 |
スクリーンスペース | スクリーン スペース グローバル イルミネーション (SSGI) は、画面ビュー内に表示されているもののライティングのみを計算する、高速かつ動的なライティング システムです。 |
次のデモで Lumen メソッドが選択されている場合、ネオンの矢印のオレンジ色の光がシーンに動的に作用していることに注目してください。 これは、(光源ではない) エミッシブ マテリアルが Lumen使用時には計算対象となるものの、他の方式では計算されないためです。
ポストプロセス ボリュームは、品質の制御に加えて、シーン内での光と反射の寄与範囲を制御できます。 Lvl_Adventure は比較的小さいため、レンダリング距離は問題となりません。 ただし、大規模な領域 (距離が離れるとリソースが大量に消費される可能性のあるオープンワールドのゲームなど) では、スコープとパフォーマンスのバランスを取るために、Lumen シーンの表示距離や最大 トレース レンダリング距離などの設定が役立ちます。
Lumen GI を使用して反射品質を調整する
このセクションでは、本格的な演習を通じて問題を解決しながら、レベルのグローバルイルミネーションと反射の設定を調整します。 作業を通じて各設定への理解を深めるとともに、前のチュートリアルで作成した湿った床の反射表現を最適化できます。
調整する設定には、次のものがあります。
| 設定 | 説明 |
|---|---|
| Global Illumination (グローバル イルミネーション) | |
Lumen シーン ライティング品質 | シーンのライティング忠実度を計算します。 この値を大きくすると忠実度が高くなりますが、パフォーマンスに負荷がかかります。 |
Lumen シーンの詳細 | シーンで表示できるインスタンスのサイズを制御します。 値を大きくすると、小さなオブジェクトも確実に表示できますが、パフォーマンスに負荷がかかります。 |
| 反射 | |
品質 | サーフェス上の Lumen の反射の忠実度を高めます。値が大きいほど忠実度が高くなり、アーティファクトが減少しますが、パフォーマンスに負荷がかかります。 |
画面トレース | Lumen グローバル イルミネーションのスクリーン空間トレースを切り替えます。 [Screen Traces (画面トレース)] をオンにすると反射の忠実度が向上しますが、影響があるのは画面上に表示されているもののみとなります。 |
トレースする最大ラフネス | Lumen が引き続き反射をトレースする最大ラフネス値を設定します。 |
作業を進めるために、PPV_Room3 に次の値を適用します。
グローバル イルミネーション)
メソッド: なし
Lumen シーン ライティング品質:
0.25Lumen シーンの詳細:
0.25
反射
メソッド: なし
品質:
0.25画面トレース:オフ
トレースする最大ラフネス:
0.0
練習を開始するには、以下の手順に従ってください。
ビューポートまたはアウトライナーで、前のチュートリアルで作成したエミッシブ アセットの 1 つを見つけます。 好きなようにフロアに配置します。
[Outliner (アウトライナー)] で
PPV_Room3を選択します。[Details (詳細)] パネルに移動します。 Lumen GI を使用するには、[Global Illumination (グローバル イルミネーション)] を展開して、[Method (メソッド)] をオンにして、[Lumen] を選択します。
シーンはこのようになっているはずです。
Lumen 反射を使用するには、[Reflections (反射)] を展開して、[Method (メソッド)] をオンにして [Lumen] を選択します。
シーンはこのようになっているはずです。
反射は、ラフネスの低いマテリアルでより顕著に現れます。
BP_Floorの濡れているときのラフネスは 0 (ラフネスなし) のため、[Max Roughness to Trace (最大ラフネス トレース)] を1.0に設定します。シーンはこのようになっているはずです。
濡れているフロアでは、エミッシブ強度の一部が失われます。 これを解決するには、画面トレースを確認します。
シーンはこのようになっているはずです。
反射光の量は改善されましたが、反射自体は鮮明ではありません。 反射がよりきれいに見えるようにするには、[Quality (品質)] を
「1.0」に増やします。シーンはこのようになっているはずです。
反射の鮮明度が向上しましたが、矢印の背後にわずかに目に見えるアーティファクトがあります。
このアーティファクトを解決するには、Lumen GI が生成するサンプル数を増やします。 [Lumen Global Illumination (Lumen のグローバル イルミネーション)] で、[Lumen Scene Lighting Quality (Lumen シーンのライティング品質)] を選択し、値を
「1.0」に設定します。[Lumen Scene Detail (Lumen シーン詳細)] を確認し、その値を「
1.0」に設定します。最終シーンは次のようになっているはずです。
以上の設定で、Lumen の動的グローバル イルミネーションおよび反射を使用して Lvl_Adventure のビジュアル忠実度とパフォーマンスを制御しました。 ご自身のレベルで各設定を評価し、品質向上にリソースを投入すべき領域と、パフォーマンス確保のために最適化すべき領域を判断してください。
次の内容
次のチュートリアルでは、ポストプロセス マテリアルを作成し、ダメージを示すために画面上のエフェクトを適用する方法について学習します。