UE4 Ray Tracingによる リアルタイムコンテンツ制作【UE4 Ray Tracing Night Week 2020】

14.6K Views

October 24, 20

スライド概要

講演動画はこちら
https://www.youtube.com/watch?v=C_xkgdsnm0I

スライドデータはこちらからダウンロード可能です
https://epicgames.box.com/s/sa3h9b96xvik2rzmjeyhoofl83xm0ce0

発表者:小林 浩之(Epic Games Japan)
本スライドは2020年8月17日(月)から2020年8月24日(月)に行われた勉強会「 UE4 Ray Tracing Night Week」の講演資料となります

profile-image

Unreal Engineを開発・提供しているエピック ゲームズ ジャパンによる公式アカウントです。 勉強会や配信などで行った講演資料を公開しています。 公式サイトはこちら https://www.unrealengine.com/ja/

シェア

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

UE4 Ray Tracingによる リアルタイムコンテンツ制作 Epic Games Japan / Technical Artist Developer Relations 小林 浩之

2.

Ray Tracing in UE4.25 #UE4 | @UNREALENGINE

3.

Ray Tracing in UE4.25 Production Ready ! #UE4 | @UNREALENGINE

4.

ほんとに大丈夫・・・? #UE4 | @UNREALENGINE

5.

UE4のレイトレ各機能を使って リアルタイムコンテンツを作ってみた #UE4 | @UNREALENGINE

6.

AO、GI、Sky Light、Soft Shadow、Reflection、Tranlucency全部乗せ!4k60fps! #UE4 | @UNREALENGINE

7.

無理でした #UE4 | @UNREALENGINE

8.

UE4のレイトレ各機能を(なるべく)使って リアルタイムコンテンツを作ってみた #UE4 | @UNREALENGINE

9.

作例:列車 #UE4 | @UNREALENGINE

10.

#UE4 | @UNREALENGINE

11.

レイトレ検証 ● Ambient Occlusion ● Global Illumination ● Sky Light ● Reflection ● Translucency 検証環境 RTX 2080ti Full HD #UE4 | @UNREALENGINE

12.

レイトレ検証 列車自体が動き続けるため、動的ライティングが重要 そもそも動かして大丈夫? ノイズは増える? #UE4 | @UNREALENGINE

13.

Ambient Occlusion #UE4 | @UNREALENGINE

14.

Ray Tracing Ambient Occlusion SSAO #UE4 | @UNREALENGINE Ray Tracing

15.

Ray Tracing Ambient Occlusion SSAO 品質が高く、パフォーマンスも良好 解像度にもよるがSSAOとの差は1~2ms程度 #UE4 | @UNREALENGINE Ray Tracing

16.

列車を動かすとどうなる? #UE4 | @UNREALENGINE

17.

Ray Tracing Ambient Occlusion 動くとどうなる? 静止時 若干ノイズが増えた #UE4 | @UNREALENGINE 走行時

18.

Ray Tracing Ambient Occlusion 動くとどうなる? Lit Lit状態ならほとんど目立たないため問題なし #UE4 | @UNREALENGINE AOのみ

19.

Global Illumination #UE4 | @UNREALENGINE

20.

Ray Tracing Global Illumination 季節変化や時間変化にも対応可能! 夏 #UE4 | @UNREALENGINE 冬

21.

しかし・・・ #UE4 | @UNREALENGINE

22.

Ray Tracing Global Illumination 処理負荷内訳を見てみると・・・ #UE4 | @UNREALENGINE

23.

Ray Tracing Global Illumination 処理負荷内訳を見てみると・・・ Sky Light #UE4 | @UNREALENGINE Global Illumination Reflection

24.

Ray Tracing Global Illumination 処理負荷内訳を見てみると・・・ Sky Light #UE4 | @UNREALENGINE Global Illumination Reflection

25.

Ray Tracing Global Illumination 処理負荷内訳を見てみると・・・ Sky Light Global Illumination Reflection 約31ms!! #UE4 | @UNREALENGINE

26.

重い・・・ #UE4 | @UNREALENGINE

27.

Ray Tracing Global Illumination Brute Force Sample Per Pixel 4 Sky Light #UE4 | @UNREALENGINE Global Illumination Reflection

28.

Ray Tracing Global Illumination RTGIのタイプ ● Brute Force ● Final Gather Post Process Volumeから変更可能 #UE4 | @UNREALENGINE

29.

Final Gatherならどうか? #UE4 | @UNREALENGINE

30.

Ray Tracing Global Illumination Final Gather Sample Per Pixel 4 #UE4 | @UNREALENGINE

31.

Ray Tracing Global Illumination Final Gather Sample Per Pixel 4 約9ms!! #UE4 | @UNREALENGINE

32.

しかし・・・ #UE4 | @UNREALENGINE

33.

Ray Tracing Global Illumination 動くとどうなる? Brute Force #UE4 | @UNREALENGINE Final Gather

34.

Ray Tracing Global Illumination 動くとどうなる? Brute Force Final Gatherは動きに弱かった・・・ #UE4 | @UNREALENGINE Final Gather

35.

Ray Tracing Global Illumination 動くとどうなる? Sample Per Pixel 4 サンプル数を上げてもあまりかわらず #UE4 | @UNREALENGINE Sample Per Pixel 64

36.

Brute ForceのSample Per Pixelを下げてみる #UE4 | @UNREALENGINE

37.

Ray Tracing Global Illumination Brute Force Sample Per Pixel 1 約7ms!! #UE4 | @UNREALENGINE

38.

Ray Tracing Global Illumination Brute Force Sample Per Pixel 4 サンプル数を上げた方がキレイではあるが、大差はない #UE4 | @UNREALENGINE Sample Per Pixel 1

39.

Ray Tracing Global Illumination Brute Force 静止時 Final Gatherほどではないが、動くとノイズが目立つ #UE4 | @UNREALENGINE 走行時

40.

Ray Tracing Global Illumination Final Gather ● 軽い ● 動きに弱い ノイズが増え、ほぼまともには映らない Brute Force ● 重い Sample Per Pixel 1~2ならリアルタイムも可? ● 動きに対してはFinal Gatherよりマシ でもやはりノイズは増えるし、目立ってしまう #UE4 | @UNREALENGINE

41.

Ray Tracing Global Illumination Final Gather ● 軽い ● 動きに弱い ノイズが増え、ほぼまともには映らない Brute Force ● 重い Sample Per Pixel 1~2ならリアルタイムも可? ● 動きに対してはFinal Gatherよりマシ でもやはりノイズは増えるし、目立ってしまう #UE4 | @UNREALENGINE 結局どちらも動きには弱い!

42.

じゃあどうすれば・・・ #UE4 | @UNREALENGINE

43.

デノイザを調整 #UE4 | @UNREALENGINE

44.

Global Illumination Denoiser デノイザ関連のコンソールコマンドも用意されてます r.Raytracingじゃないので注意 GIとSky Lightのデノイザは共通 #UE4 | @UNREALENGINE

45.

Global Illumination Denoiser r.GlobalIllumination.Denoiser.PreConvolution=2 ● 値を上げることでノイズをある程度抑えるが全体的にぼんやりした印象になる ● デフォルト1、増やすほど負荷が増える r.GlobalIllumination.Denoiser.ReconstructionSamples=1 ● 値を下げることでノイズのパカつきが抑えられる ● デフォルト16 #UE4 | @UNREALENGINE

46.

Global Illumination Denoiser r.GlobalIllumination.Denoiser.PreConvolution PreConvolution=1 PreConvolution=4 値を上げるほどPreConvolutionのパスが増え、処理負荷も上がっていく #UE4 | @UNREALENGINE

47.

Global Illumination Denoiser デノイザ調整 PreConvolution=1 PreConvolution=2 ReconstructionSamples=16 ReconstructionSamples=1 動かしてもだいぶ目立たなくなった! #UE4 | @UNREALENGINE

48.

Global Illumination Denoiser PreConvolution=1 ReconstructionSamples=16 #UE4 | @UNREALENGINE

49.

Global Illumination Denoiser PreConvolution=2 ReconstructionSamples=1 #UE4 | @UNREALENGINE

50.

Sky Light #UE4 | @UNREALENGINE

51.

Ray Tracing Sky Light シャドウ関連の問題 ● MaskedマテリアルのシャドウがOpacity Maskを無視する ● マテリアルエレメント毎のキャストシャドウが効かない ● リフレクションに映るSky Lightの見た目が違う #UE4 | @UNREALENGINE

52.

Ray Tracing Sky Light MaskedマテリアルのシャドウがOpacity Maskを無視する r.RayTracing.SkyLight.EnableTwoSidedGeometry=0で回避 両面描画なマテリアルのシャドウを有効にするかどうか 植物などの影が濃くなりすぎる場合があるためオフに #UE4 | @UNREALENGINE

53.

Ray Tracing Sky Light マテリアルエレメント毎のキャストシャドウが効かない 影を落としたくない窓ガラスは別オブジェクトにして回避 #UE4 | @UNREALENGINE

54.

Ray Tracing Sky Light リフレクションに映るSky Lightの見た目が違う r.RayTracing.Reflections.RayTraceSkyLightContribution=1 レイトレリフレクション内でスカイライトシャドウを描画する デノイズがかからなかったりで全く同じ見た目にはならず、かなり暗くなる シャドウなし #UE4 | @UNREALENGINE シャドウあり

55.

Ray Tracing Sky Light 動くとどうなる? 静止時 GIほどではないがやはり動くと目立つ #UE4 | @UNREALENGINE 走行時

56.

Ray Tracing Sky Light デノイザ調整 調整前 GIと同じくデノイザを調整して解決! #UE4 | @UNREALENGINE 調整後

57.

Reflection #UE4 | @UNREALENGINE

58.

Ray Tracing Sky Light 動くとどうなる? 静止時 ほんの少しノイズが増えているがほとんど問題なし #UE4 | @UNREALENGINE 走行時

59.

Ray Tracing Reflection RT Reflectionには正しく映らないものが多い ● AO ● Global Illumination ● デノイズされたSky LightやSoft Shadow ● SubSurface Scattering などなど #UE4 | @UNREALENGINE

60.

Ray Tracing Reflection RT Reflectionには正しく映らないものが多い #UE4 | @UNREALENGINE

61.

Ray Tracing Reflection Two Sidedマテリアルの陰影が ピンク色になってしまう #UE4 | @UNREALENGINE

62.

Ray Tracing Reflection Two Sidedマテリアルがピンク色になる シェーダーコードの書き換えで解決! #if MATERIAL_SHADINGMODEL_SUBSURFACE || MATERIAL_SHADINGMODEL_TWOSIDED_FOLIAGE uint ShadingModel = GetMaterialShadingModel(PixelMaterialInputs); if ( ShadingModel == SHADINGMODELID_SUBSURFACE || ShadingModel == SHADINGMODELID_TWOSIDED_FOLIAGE ) { Payload.CustomData = GetMaterialSubsurfaceData(PixelMaterialInputs); } #endif Engine\Shaders\Private\RayTracing\RayTracingMaterialHitShaders.usf 385行目辺り #UE4 | @UNREALENGINE

63.

Ray Tracing Reflection Before 4.26で修正予定 もんしょさん&篠山さん #UE4 | @UNREALENGINE After ありがとうございます!

64.

Ray Tracing Reflection Sky Lightのシャドウが描かれず 明るすぎ #UE4 | @UNREALENGINE

65.

Ray Tracing Reflection Sky Lightのシャドウが描かれず明るすぎる RayTraceSkyLightContribution=1 Before #UE4 | @UNREALENGINE or After

66.

Ray Tracing Reflection Sky Lightのシャドウが描かれず明るすぎる RayTraceSkyLightContribution=1 or だいぶ暗くなってしまうけど・・・ #UE4 | @UNREALENGINE

67.

Ray Tracing Reflection Sky Lightのシャドウが描かれず明るすぎる RayTraceSkyLightContribution=1 Lit状態ならさほど気にならない #UE4 | @UNREALENGINE or

68.

Ray Tracing Reflection ソフトシャドウも選択できるが デノイズがかからず粗い #UE4 | @UNREALENGINE

69.

Ray Tracing Reflection ソフトシャドウも選択できるが、デノイズがかかっておらず粗い Normalで歪めたり、ある程度粗い材質なら目立たない Reflection #UE4 | @UNREALENGINE Lit

70.

Ray Tracing Reflection ソフトシャドウも選択できるが、デノイズがかかっておらず粗い Normalで歪めたり、ある程度粗い材質なら目立たない Roughness低め #UE4 | @UNREALENGINE Roughness高め

71.

Ray Tracing Reflection 今回は使わなかったが、リフレクション関連のデノイザオプションもある #UE4 | @UNREALENGINE

72.

Translucency #UE4 | @UNREALENGINE

73.

Ray Tracing Translucency Reflection、Refractionに正しく映らないものが多い ● AO ● Global Illumination ● デノイズされたSky LightやSoft Shadow ● SubSurface Scattering などなど #UE4 | @UNREALENGINE

74.

Ray Tracing Translucency RT Translucencyの屈折 正確に映らない情報が多く、動かした時のノイズも多め #UE4 | @UNREALENGINE

75.

Ray Tracing Translucency 残念ながらRefractionは不採用 Refractionをオフ、Max Refraction Rays 1で運用 #UE4 | @UNREALENGINE

76.

Ray Tracing Translucency 残念ながらRefractionは不採用 描画面積の小さいProp程度ならアリかも? #UE4 | @UNREALENGINE

77.

Ray Tracing Translucency RT Translucencyの反射 Refractionオフでも使用可能 #UE4 | @UNREALENGINE

78.

Ray Tracing Translucency 動くとどうなる? 静止時 不透明リフレクションと同じく、動いてもさほど気にならない #UE4 | @UNREALENGINE 走行時

79.

Ray Tracing Translucency NvidiaのRTX Branch https://github.com/NvPhysX/UnrealEngine/tree/RTX-4.25 半透明の描画はラスタライズで、反射部分だけレイトレで行う Hybrid Translucencyというのもある #UE4 | @UNREALENGINE

80.

レイトレ検証まとめ ● Ambient Occlusion ● Global Illumination ● Sky Light ● Reflection ● Translucency #UE4 | @UNREALENGINE

81.

レイトレ検証まとめ Ambient Occlusion ● クオリティ、パフォーマンスともに優秀 積極的に使っていきたい #UE4 | @UNREALENGINE

82.

レイトレ検証まとめ Global Illumination ● パフォーマンスに難あり ● 速い動きに弱い ● デノイザの調整でリアルタイムも可 #UE4 | @UNREALENGINE

83.

レイトレ検証まとめ Sky Light ● シャドウ関連の問題に注意 ● 速い動きに弱いが、GIと同じくデノイザの調整で改善 #UE4 | @UNREALENGINE

84.

レイトレ検証まとめ Reflection ● 反射に正確に映らない部分を把握しておく ● 粗が目立つ部分はNormalやRoughnessの調整で誤魔化せる #UE4 | @UNREALENGINE

85.

レイトレ検証まとめ Translucency ● ReflectionとRefractionに正確に映らない部分を把握しておく ● 広い面積でRefractionを使うのは厳しいかも ● Refractionを切って反射だけ使うこともできる 反射も不要であればラスタライズでいいかも #UE4 | @UNREALENGINE

86.

完全動的なシーンができた! RTX2080ti 1920 x 1080 30fps前後 #UE4 | @UNREALENGINE

87.

せっかくなのでライトを動かしてみよう #UE4 | @UNREALENGINE

88.

Sun and Sky を使ったライティング #UE4 | @UNREALENGINE

89.

Sun and Sky 座標や時間からライティングをシミュレーション Sun and Skyのドキュメント https://docs.unrealengine.com/ja/Engine/Rendering/LightingAndShadows/SunSky/index.html #UE4 | @UNREALENGINE

90.

Sun and Sky 時間や季節の変化が自由自在に! ※雪景色を作る場合は冬用アセットが必要 #UE4 | @UNREALENGINE

91.

作例:クラゲ #UE4 | @UNREALENGINE

92.

#UE4 | @UNREALENGINE

93.

検証内容 ● Ambient Occlusion ● Global Illumination ● Sky Light ● Translucency ● Reflection #UE4 | @UNREALENGINE

94.

検証内容 ● Ambient Occlusion ● Global Illumination ● Sky Light ● Translucency ● Reflection #UE4 | @UNREALENGINE 今回は未使用

95.

なぜクラゲでリフレクション? #UE4 | @UNREALENGINE

96.

クラゲを作るからには・・・ ● すりガラスのようなやわらかい透け感を表現したい ● DoFかけたい #UE4 | @UNREALENGINE

97.

クラゲを作るからには・・・ ぼんやりと内臓が透けて見える これをやってみたい #UE4 | @UNREALENGINE

98.

半透明表現検証 RT ReflectionのRoughnessのような効果がほしい Roughness 0.0 #UE4 | @UNREALENGINE Roughness 0.25

99.

半透明表現検証 RT ReflectionのRoughnessのような効果がほしい 残念ながらレイトレ半透明では不可能 #UE4 | @UNREALENGINE

100.

ならば! #UE4 | @UNREALENGINE

101.

半透明表現検証 RT ReflectionのRoughnessのような効果がほしい リフレクションレイを突き抜けさせれば 半透明っぽくなるのでは・・・? #UE4 | @UNREALENGINE

102.

レイを突き抜けさせるには #UE4 | @UNREALENGINE

103.

マテリアルで法線をいじる #UE4 | @UNREALENGINE

104.

半透明表現検証 RT Reflectionを利用して半透明っぽくする 反転したカメラベクトルを法線とすることで・・・ #UE4 | @UNREALENGINE

105.

半透明表現検証 RT Reflectionを利用して半透明っぽくする Tangent Space Normalを切る必要あり #UE4 | @UNREALENGINE

106.

半透明表現検証 RT Reflectionを利用して半透明っぽくする ほぼ真逆にレイが飛ぶ #UE4 | @UNREALENGINE

107.

半透明表現検証 RT Reflectionを利用して半透明っぽくする RoughnessやNormalを工夫して すりガラスっぽく #UE4 | @UNREALENGINE

108.

半透明表現検証 透けているように見えるが、実際には不透明の反射扱いなので・・・ Depthにしっかり描画される #UE4 | @UNREALENGINE

109.

半透明表現検証 透けているように見えるが、実際には不透明の反射扱いなので・・・ Depthにしっかり描画される DoFがかかる! #UE4 | @UNREALENGINE

110.

Reflection半透明の注意点 ● メッシュが重なった分Reflectionのバウンス回数を増やさないといけない 他の反射物にも影響が出る 複雑な形状ほどバウンス数が必要で、処理負荷に繋がる可能性も ● そもそも想定された使い方ではない 今回はReflectionのみの運用だったので無事だったが、どこに悪影響が出るか分からない 今後のアップデートでシェーダーが書き変わればできなくなる可能性も #UE4 | @UNREALENGINE

111.

狙っていたぼんやり透ける感じ & DoFが表現できた! #UE4 | @UNREALENGINE

112.

実行ファイル&プロジェクト 公開してます 実行ファイル https://drive.google.com/file/d/1N7K9O1vj6ypwsAB_v6m5k4E2RzPmR5A9/view?usp=sharing プロジェクト https://drive.google.com/file/d/1nlYv0YoLzNXgeU1sN6BSt5CrB9FKO9M1/view?usp=sharing #UE4 | @UNREALENGINE

113.

UE4のレイトレ各機能を使って リアルタイムコンテンツは作れるか? #UE4 | @UNREALENGINE

114.

作れた! #UE4 | @UNREALENGINE

115.

レイトレのメリット、デメリットを把握し プロジェクト毎に適切な使い方を #UE4 | @UNREALENGINE

116.

UE4でレイトレコンテンツを作るメリット、デメリット メリット ● ライティングの動的変化 Sun and Skyと組み合わせることで簡単に日時や季節変化をシミュレートできる 列車や飛行機の中など、動くものへのライティングに対応できる ● 物理的な正確さ ReflectionやGIが正確かつ動的になり、今まで困難だった表現も可能に ● イテレーションの速さ ベイク不要なのでもちろんLight Mapも不要 モデル作成からライティングのチェックまでがかなり早くなる #UE4 | @UNREALENGINE

117.

UE4でレイトレコンテンツを作るメリット、デメリット デメリット ● 処理負荷 GIを筆頭に従来の機能と比べるとかなり重い シーンによっては従来の表現でも十分なクオリティを出せている場合もある ● 未対応な部分 リフレクションや半透明の映り込みなど、苦手とする部分がある ● 動きが付くと基本的にノイズが増える 今回は遅めに動かしてはいたが、それでもGIのノイズは厳しかった 更に速い動きになるとまた別の対応が必要かも #UE4 | @UNREALENGINE

118.

ありがとうございました #UE4 | @UNREALENGINE