春日部つむぎ no ゲーム作ってみよう!【UE5/UE4】 - ライティングの反射【UE5】


https://youtu.be/IlHNRbsColE?si=1KFGSQCzPa6bFDoj

00:00 オープニング
00:23 1.初期設定
00:25 1-1.新規レベル作成
00:59 1-2.金属マテリアルの作成
02:12 1-3.ブラシのスタティックメッシュ化
03:05 1-4.現在の反射設定
03:47 2.Lumen反射
05:55 2-1.Lumenの設定
06:04 2-1-1.プロジェクト設定でのLumen設定
07:49 2-1-2.ポストプロセスでのLumen設定
09:33 3.スクリーン空間の反射(Screen Space Reflections)
09:46 3-1.ポストプロセスでのスクリーン空間の反射(SSR)設定
10:43 3-2.スクリーン空間の反射(SSR)の短所
11:24 3-3.スクリーン空間の反射(SSR)の長所
11:41 4.反射キャプチャ(Reflection Capture)
12:27 4-1.反射キャプチャの解像度
13:01 4-2.反射キャプチャの短所
14:00 5.平面反射(Planar Reflection)
15:09 5-1.平面反射(PR)の反射品質
15:29 5-2.平面反射(PR)のシーンキャプチャ
16:20 6.ミラーマテリアルの作成
17:27 6-1.Lumen設定でミラーマテリアル
17:52 ざっくりまとめ
17:57 エンディング
18:29 反射演出のメリットは?

1.初期設定 00:23

1-1.新規レベル作成 00:25

1-2.金属マテリアルの作成 00:59

マテリアルを作成します。
単純な金属を磨いたマテリアルを作成します。

右クリック>マテリアル
名前を「M_Metal」にします。

ファイルを開きます。

3キーを押した状態でクリックして、
3成分ベクターを配置します。
色を白色にします。
1.0:1.0:1.0
ベースカラーにつなぎます。

Metallicを右クリックで「パラメータへ昇格」します。
Default Valueを1.0にします。

ラフネスを右クリックで「パラメータへ昇格」します。
ラフネスを「0.0」に設定すると、
マテリアルの反射率がとても高くなります。
Default Valueを0.0にします。





単純なピカピカに磨いた反射する金属のマテリアルになりましたね。

保存して閉じます。

影が邪魔なのでDirectionalLightを傾けます。
回転をY:-126にします。

作成したM_Metalを
反射パネルにドラッグアンドドロップで割り当てます。

カメラを移動させると、反射しているのが確認できます。
スタティックメッシュは反射パネルに映り込んでますが、
どうやら単純な金属の反射では、ブラシは正確に映してくれないようです。

1-3.ブラシのスタティックメッシュ化 02:12

アウトライナーで対象のBoxブラシを選択します。
詳細パネル>ブラシセッティング>詳細設定>「スタティックメッシュを作成」をクリックします。



保存場所を指定して、「スタティックメッシュを作成」をクリックします。

Boxブラシがスタティックメッシュに置き換わりました。



反射パネルにちゃんと移りましたね。



作成したスタティックメッシュにはコリジョンが作成されていません。
作成したスタティックメッシュを開きます。

凸型分解パネルで適用をクリックします。



凸型分解パネルがない場合は、ウィンドウより表示できます。



その他のブラシもスタティックメッシュ化とコリジョン作成をします。

1-4.現在の反射設定 03:05

ポストプロセスで
反射設定は、現在未設定です。



グローバルイルミネーションも未設定です。



グローバルイルミネーションは、リアルタイムの間接ライティングをシミュレートする機能です。



グローバルイルミネーション・・・リアルタイムの間接ライティングをシミュレートする機能

グローバルイルミネーションと反射は密接な関係にあるので、
同じものを選択します。ワンセットですね。



プロジェクト設定>エンジン>レンダリング>反射に、設定項目があります。
デフォルトでは、Lumenが選択されています。



グローバルイルミネーションもLumenが選択されています。



現在の反射設定は、Lumenが使用されてるってことですね。

2.Lumen反射 03:47

Lumenは、次世代コンソール向けに設計されたダイナミックグローバルイルミネーションおよび反射のシステムです。
Unreal Engine5ではデフォルトの反射システムです。
Lumenは、大規模で詳細度の高い環境で、mm単位からKm単位のスケールで、反射をレンダリングできます。

反射環境はプロジェクトの作成時には、
 ・プロジェクトで動的反射が必要になるかどうか
 ・達成すべき品質のレベル
 ・リリース対象のターゲットプラットフォームで動的反射がサポートされるかどうか
を考慮する必要があります。

反射手法の比較

静的反射キャプチャ、動的スクリーン空間反射、ポストプロセスエフェクトを組み合わせて使用する方法
 長所 ほとんどのプラットフォームで機能する。
    レンダリングの速度が速い。
 短所 レンダリングアーティファクトが発生する。

    レンダリングアーティファクト・・・好ましくない段差やノイズ
Lumen反射
 長所 シーン内のオブジェクトに対してライトと反射を正確に表現できる。
 短所 レンダリングコストが高くなる。
    すべてのプラットフォームでサポートされるわけではない。

反射システムとプラットフォーム

Lumenの反射・・・ハイエンドなデスクトップPCと次世代コンソール
レイトレーシングによる反射・・・Windows10、DirectX12、サポートされるNVIDIA GPUを搭載したデスクトップPCシステム
スクリーン空間の反射・・・デスクトップとコンソール
反射キャプチャ・・・すべてのプラットフォーム
平面反射・・・すべてのプラットフォーム

Lumenの反射は、ソフトウェアまたはハードウェアベースのレイトレーシングを使用する反射システムです。

ソフトウェアレイトレーシングモードでは、画面トレースを通じてシーンを正確に表現します。
ハードウェアレイトレーシングモードでは、反射にレイトレーシング機能を利用します。運用にはサポートされるNVIDIA GPUが必要になります。

※ハードウェアレイトレーシングによる反射は非推奨で、今後のリリースで削除される可能性があります。

2-1.Lumenの設定 05:55

Lumenの設定は、プロジェクト設定またはポストプロセスボリュームで設定します。
2-1-1.プロジェクト設定でのLumen設定 06:04
編集 > プロジェクト設定 > エンジン > レンダリングで設定します。

Global IlluminationセクションでLumenに設定します。
Reflections(反射)セクションでLumenに設定します。
この2つはセットですね。



Lumenの設定ではハードウェアレイトレーシングかソフトウェアレイトレーシングのどちらかを使用します。



一部グレーアウトになっていますが、
「ハードウェアレイトレーシングをサポートする」を有効にすると選択できるようになります。
ただ、ハードウェアレイトレーシングによる反射は非推奨ですので、ハードウェアレイトレーシングは今回は無効のままにします。

Lumenセクションで
「高品質透過性反射」を有効にします。



半透明のサーフェスの前面レイヤーで高品質のミラー反射を使用するかどうかです。

ソフトウェアレイトレーシングモード
レイトレーシングを行う際に[Detail Tracing] か[Global Tracing]かを選択します。



[Detail Tracing] は、個々のメッシュに対してトレースするので最高品質を得ることができます。



[Global Tracing] は、トレースを最速で行うために、Detail Tracingと比べると低解像度になります。



Software Ray Tracingセクション
[メッシュディスタンスフィールドの生成]は
レイトレーシングの計算で必要なフィールドをスタティックメッシュに対して作るかどうかです。
無効にするとスタティックメッシュに対してレイトレーシングされなくなります。
シーンのほとんどがスタティックメッシュなので、有効にします。



[ディスタンスフィールドボクセル密度]はレイトレーシングの計算で必要なフィールドの密度ですね。
値を大きくすると、レイトレーシングの正確性が増しますが、メモリ消費が激しくなります。

2-1-2.ポストプロセスでのLumen設定 07:49
詳細パネル > グローバルイルミネーションセクション
メソッドを有効にして、Lumenを選択します。



Lumen Global Illuminationでは、それぞれの値を増やすと品質が上がりますが、GPUの負荷が増大します。



詳細設定も同様に、それぞれの値を増やすと品質が上がりますが、GPUの負荷が増大します。



反射セクションメソッドを有効にして、Lumenを選択します。



Lumen Reflections
・品質を上げると、レンダリングの際のノイズを低減しますが、GPUの負荷が増大します。



・Ray Lighting Modeは、ハードウェアレイトレーシングで使用する際の設定なので今回は無効にします。

・「高品質透過性反射」を有効にします。
  半透明のサーフェスの前面レイヤーで高品質のミラー反射を使用するかどうかです。
  プロジェクト設定にあった設定ですね。
  機能を使用したい場合は、事前にプロジェクト設定側を有効にしておく必要があります。
  プロジェクト設定で有効にして、ポストプロセスで有効にしないと使えない設定です。



・最大リフレクションバウンスは、ハードウェアレイトレーシングで使用する際の設定なので今回は無効にします。

ライティングを再ビルドします。
メニューバーのビルド > ライティングのみビルドを選択します。



高品質透過性反射を有効にしただけなので、デフォルトからそんなに変わってないですね。

3.スクリーン空間の反射(Screen Space Reflections)  09:33

反射をスクリーン空間の反射(SSR) にします。

スクリーン空間の反射(SSR)は、
画面に表示されているものの反射のみに限定された機能です。

3-1.ポストプロセスでのスクリーン空間の反射(SSR)設定 09:46

ポストプロセスを選択します。
詳細パネル > グローバルイルミネーションセクション
メソッドのスクリーン空間の反射(SSR)はBetaとなっているので、



今回は、Noneを選択します。



反射セクションでメソッドをScreen Spaceにします。



Screen Space Reflectionsプロパティをすべて有効にします。



・Intensity(強さ)
反射機能の強さを設定します。通常0か1を設定します。



・Quality(品質)



デフォルト値は50で、
0が最低、100が最高のパフォーマンスです。
100にします。

デフォルト値:50
最低値:0
最高値:100

・Max Roughness(粗さ最大値)
スクリーンスペース反射を弱めていくラフネス度を設定します
デフォルト値は0.6です。
0.8が妥当値だそうです。



デフォルト値:0.6

さて、反射パネルは?
反射パネルは何も映りません。

3-2.スクリーン空間の反射(SSR)の短所 10:43

スクリーン空間の反射は、
現在画面にレンダリングされているものしか表示できません。
レンダリング済みの情報を再利用して、反射を表現しています。

反射によって映り込むはずのアクターが画面の範囲外にあるので、
反射パネルには柱や壁が映りません。

横に移動しながら反射パネルを見ると
柱や壁が映り込んできます。



スクリーン空間の反射(SSR)は、画面に表示されているものだけしか反射することができません。
また、スクリーン空間の反射にはノイズが多く含まれています。

起動してみましょう
カメラを動かすと、多くのノイズが含まれています。

3-3.スクリーン空間の反射(SSR)の長所 11:24

長所としては、リアルタイムで正確に反射します。

何かが動いている場合、
例えば、前を通り過ぎると反射面に通り過ぎるキャラクターの反射がリアルタイムに反映されます。

4.反射キャプチャ(Reflection Capture) 11:41

反射キャプチャは、反射をキャプチャし、マテリアルの表面に反射を投影します。

スクリーン空間の反射(SSR)だけでは不十分であるため、反射キャプチャと併用して使います。

アクターを配置パネル>[Visual Effects]で
反射キャプチャ(Reflection Capture)を作成できます。

Sphere Reflection CaptureとBox Reflection Captureがあります。
[Sphere]と[Box]は同じ機能で形状だけが異なります。



多くの場合、Sphere Reflection Captureのみを使用します。
理由としては、不連続性や角がないため、エラーが均一だからです。

[Sphere Reflection Capture]を反射パネルの前に配置します。
キャプチャ情報が更新されるまでに少し時間がかかります。

柱と壁の反射を確認できるようになりました。

4-1.反射キャプチャの解像度 12:27

反射キャプチャの解像度は、
編集>プロジェクト設定>エンジン>レンダリングにあります。
反射セクションの
[反射キャプチャ解像度(Reflection Capture Resolution)]でデフォルト値「128」を「1024」に設定します。
2のべき乗 (16、64、128、256、512、1024)でのみ機能します。



綺麗になりましたね。
サイズを大きくするとより綺麗な反射が得られますが、さらに多くのメモリが必要になります。



ライティングを再ビルドします。

4-2.反射キャプチャの短所 13:01

横に移動しながら反射パネルを見ると
何やら段差が生じています。



これは併用によるものです。
スクリーン空間の反射が常に優先され、
スクリーン空間の反射が使用されたのちに、反射キャプチャに切り替えています。

短所として、
反射キャプチャは、リアルタイムでないということです。

反射キャプチャは特定のある時点で360度のキャプチャを撮ります。
これが反射の描画に使用されます。

その為、例えばキャラクターが通り過ぎても、
反射にはそのキャラクターは反映されないといったことが起こります。

反射キャプチャは、
静的な場合、ノイズが少ないですが、
動的の場合、精度が低下するという短所があります。

反射キャプチャを動かすと、反射もこの反射パネル内で動きます。
反射の位置が、反射すべき位置と正確に一致するとはかぎりません。

5.平面反射(Planar Reflection) 14:00

Sphere Reflection Captureを削除します。

平面反射(PR)は平面のみに反射情報をキャプチャします。
例えば、鏡、窓、水面、ガラスなど平らなオブジェクトに適しています。

編集>プロジェクト設定>エンジン>レンダリング>反射セクションで
「平面反射のグローバルクリッププレーンをサポート」を有効にします。



変更すると、エディタの再起動が必要です。

アクターを配置パネル>[Visual Effects]より、
[Planar Reflection]をレベルに配置します。



[Planar Reflection]を反射パネルの前に配置します。
大きさを合わせます。
横から見ると合わせやすいです。



詳細パネル>「Show Preview Plane」を無効にすると、
反射平面を非表示にすることができます。



反射が確認できない場合は、アクターの内側に入っている可能性があります。
平面反射を前に出すと、反射が表示されます。

5-1.平面反射(PR)の反射品質 15:09

反射の品質を設定することができます。

詳細パネル>平面反射セクションで
詳細設定を展開します。
[Screen Percentage]で反射の品質を設定できます。
「100」に設定してみます。



反射がより綺麗になりましたね。

5-2.平面反射(PR)のシーンキャプチャ 15:29

[Planar Reflection]はリアルタイムでキャプチャすることも、一度だけキャプチャすることもできます。

詳細パネル>シーンキャプチャセクションで
[Capture Every Frame]を有効にすると各フレーム毎にキャプチャします。
無効にすると、ロード時に1回、その後は移動した時のみ更新します。

毎フレームの更新は、パフォーマンスに大きな負荷がかかります。
通常はオフにするのが望ましいです。



ライティングを再ビルドします。
起動してみましょう。

平面反射(PR)は、
反射をリアルタイムで反映させることができますが、その分負荷が大きくなります。

すべてのシーンが映り込んでますね。
横から見ても段差がないですね。



まだ少しぼやけた感じになってますね。

6.ミラーマテリアルの作成 16:20

今、単純な金属を磨いただけのマテリアルなので、
鏡に適したマテリアルを作成します。

「M_Metal」を複製します。
名前を「M_Mirror」にします。

ファイルを開きます。

Blend ModeをTranslucentにします。



Translucentは半透明という意味です。

透過処理セクションで
Lighting ModeをSurface Translucensy Volumeにします。
これは、ガラスや水面などの半透明のサーフェスで使用します。



フォワードシェーディングセクションで
High Quality Reflectionsを有効にします。
このオプションは、フォワードレンダリングの際、一緒にブレンドされる複数の視差補正反射キャプチャーを有効にします。



Planar Reflectionsを有効にします。
このオプションは、フォワードレンダリングの際、平面反射を有効にします。



保存して閉じます。

反射パネルに割り当てます。

起動してみましょう。

少しきれいになりましたね。

6-1.Lumen設定でミラーマテリアル 17:27

Lumen設定に変更します。

ポストプロセスを選択します。
詳細パネル>グローバルイルミネーションセクション
メソッドをLumenにします。



反射セクションでメソッドをLumenにします。



起動してみましょう。

さらにきれいになりましたけど、
少し重たいですね。



ざっくりまとめ 17:52

Lumenの反射・・・正確な反射が必要な場合に使用。
反射キャプチャ・・・明るい面や反射率の高い表面に使用。
平面反射・・・反射率の高い平坦な表面に使用。
スクリーン空間の反射・・・その他の部分で使用。

反射演出のメリットは? 18:29

リアル感の向上:

 反射は環境やキャラクターのリアル感を高めます。
 鏡面や水面、ガラスなどでの反射は、環境の一部としてプレイヤーにリアルな視覚体験を提供します。

美麗な視覚効果:

 反射は美しい視覚効果を生み出します。
 キャラクターの動きに応じて、光源や周囲の景色が反映されることで、シーン全体がより魅力的に見えます。

アートデザインの強化:

 反射はアートデザインを強化します。
 クリエイターの感情やアイデアをより視覚的に表現することができます。
 個性的な美しい光の反射は、プレイヤーの心に感動を与えることができます。

ゲームプレイのサポート:

 反射はプレイヤーに情報を提供します。
 例えば、反射は、プレイヤーが障害物や敵を見つけるのに役立ちます。

環境の豊かさ:

 反射を追加することで、ゲームの環境がより豊かに感じられます。