Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
わかった気になれるUE5レンダリング
Search
swd
September 01, 2022
Programming
0
1.5k
わかった気になれるUE5レンダリング
swd
September 01, 2022
Tweet
Share
Other Decks in Programming
See All in Programming
AIプログラミング雑キャッチアップ
yuheinakasaka
17
4.2k
自力でTTSモデルを作った話
zgock999
0
100
Introduction to kotlinx.rpc
arawn
0
760
Domain-Driven Transformation
hschwentner
2
1.9k
CI改善もDatadogとともに
taumu
0
200
Rails アプリ地図考 Flush Cut
makicamel
1
130
CloudNativePGを布教したい
nnaka2992
0
110
データベースのオペレーターであるCloudNativePGがStatefulSetを使わない理由に迫る
nnaka2992
0
230
dbt Pythonモデルで実現するSnowflake活用術
trsnium
0
260
Honoとフロントエンドの 型安全性について
yodaka
7
1.4k
ファインディLT_ポケモン対戦の定量的分析
fufufukakaka
0
920
はじめての Go * WASM *OCR
sgash708
1
100
Featured
See All Featured
Mobile First: as difficult as doing things right
swwweet
223
9.4k
Stop Working from a Prison Cell
hatefulcrawdad
267
20k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
2.1k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
175
52k
Art, The Web, and Tiny UX
lynnandtonic
298
20k
How GitHub (no longer) Works
holman
314
140k
Building Adaptive Systems
keathley
40
2.4k
The Art of Programming - Codeland 2020
erikaheidi
53
13k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
330
21k
GraphQLとの向き合い方2022年版
quramy
44
14k
GitHub's CSS Performance
jonrohan
1030
460k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
366
25k
Transcript
わかった気になれる UE5レンダリング swd
自己紹介 • 名前 ◦ swd (@s_w_d_) • 所属 ◦ Preferred
Networks ◦ 普段の仕事は全く描画関係なし • OSS ◦ Effekseer ▪ EpicGamesからも支援
概要 • Unreal Engine5 ◦ ゲームエンジン ◦ とてもレンダリングが綺麗 ◦ CitySampleで話題
• 話すこと ◦ UE5の描画技術の概要の一部 ▪ 甘口 ▪ 非描画技術者向け • 話さないこと ◦ UE5の設定 ◦ 詳細な技術の実装 City Sample
NaniteとLumen • Lumen ◦ リアルタイムGI ▪ 直接光と間接光を リアルタイムに計算 ▪ 発光等もリアルタイムに使用可能
• Nanite ◦ 大量のポリゴンを表示する技術 ▪ 数千万ポリゴンの 3Dモデルを表示
Nanite • 大量のポリゴンを表示する機能 • 主に2つの要素で構成 ◦ 強力なカリングとLoD ▪ Mesh Cluster
Rendering • メッシュの一部のみを描画する機能 ◦ 描画時のメモリの転送量の削減 ▪ Visibility Buffer • メモリ転送量を抑制する描画手法
カリング • 従来の手法 ◦ フラスタムカリング ▪ カメラ外のオブジェクトを描画から除外 ▪ 一部でも表示されている場合、全体が描画される ◦
オクルージョンカリング ▪ 壁等で隠れているオブジェクトを描画から除外 ▪ 遮蔽の計算が難しい ▪ 一部でも表示されている場合、全体が描画される
Mesh Cluster Rendering • 1つのメッシュを複数に分割 ◦ 分割した単位でカリング ◦ 必要なメッシュのみを描画 •
距離に応じてメッシュを変更 ◦ ポリゴンのサイズが同じになるように調整 近 遠
AmplificationShader + MeshShader • Amplification Shader ◦ GPU側でメッシュを描画の可否を判断する機能 • MeshShader
◦ 高速でGPU上でメッシュを生成する機能 ◦ 状況に応じて適切なメッシュを生成可能 • UE5 ◦ UE5は未サポートGPUのために ComputeShaderで代替の実装を行っている ◦ 実質同様かつフォールバックの実装なので上記機能を説明
AmplificationShader, MeshShaderによるLoDカリング • 処理 ◦ GPU内で遮蔽を計算、隠れた部分を描画メッシュから除去 ◦ カメラ内のメッシュのみ描画 ◦ 距離に応じてメッシュ切り替え
• 結果 ◦ GPU、CPUの転送量が減って高速化 ▪ 描画する、しないの判断をCPUが行っていた ▪ 今まではオクルージョンカリングは CPUで行う必要があった ◦ ポリゴン数をより細かく調節できて高精度化、高速化
AmplificationShader, MeshShader • AmplificationShader, MeshShaderはGPUの機能 ◦ UE5特有の実装ではない ◦ DirectX12 Ultimate,
Vulkanの拡張等に存在 ◦ 他ゲームエンジンでもいずれ採用されるかもしれない カリングされている DirectX12 サンプル
描画方法の変更 • 従来の描画方法 ◦ Forward Rendering ◦ Deferred Rendering
Forward Rendering • Forward Rendering ◦ オブジェクトごとに直接色を描画 ◦ メリット ▪
軽い ◦ デメリット ▪ 光源を増やせない
Deferred Rendering • Deferred Rendering ◦ メリット ▪ 大量の光源を配置可能 ◦
デメリット ▪ メモリの転送量が多い 計算用の情報のバッファを描画 情報のバッファを元に色を描画 メモリの転送量が多い!
VisibilityBuffer Forward Rendering Deferred Rendering Visibility Buffer 複数光源 × 〇
〇 メモリ転送量 〇 × 〇 The Visibility Buffer: A Cache-Friendly Approach to Deferred Shading
VisibilityBuffer • スクリーンにポリゴンのIDを書き込み ◦ メッシュID ◦ ポリゴンID ◦ ポリゴン内位置 ◦
等 メッシュID ポリゴンID
VisibilityBuffer • 書き込まれたポリゴンのID等から面を取得 • 取得された面を描画 • DeferredReneringよりメモリ転送量が少ない ◦ IDなので軽い 画像から
ポリゴンID等を取得 ポリゴンから 面の情報を取得
まとめ • カリングとLoDの強化、描画方法の変更により高速化 ◦ 計算量、メモリ転送量ともに減少 • ただし特定オブジェクトのみ対応 ◦ 例:半透明
Lumen • リアルタイムGIレンダリング ◦ 直接光+間接光のリアルタイム計算 直接光 間接光
直接光 • 遮蔽物を考慮しつつ計算 • 間接光として重くはない 直接光
間接光の計算 • 複数回の反射の計算 ◦ オブジェクトに衝突した光が反射され他に衝突 ◦ 計算量が膨大
従来手法 • 手順 ◦ 間接光を事前に計算 ◦ テクスチャに結果を焼きこみ • 問題点 ◦
動的物体に対応できない ◦ 環境の変化に対応できない リアルタイムに計算したい!
リアルタイムGIの実現 • リアルタイムGI実現のために2種類のデータをリアルタイム生成 ◦ ScreenProbe ▪ スクリーン上の光源情報 ▪ 不透明物体向け ◦
GI Volume ▪ 空間上の光源情報 ▪ 半透明物体向け
ScreenProbe • スクリーン上で一定間隔ごとに情報を記録 ◦ 360度方向の入射光の方向と強さ ◦ 視界に映るオブジェクトの部分ごとの間接光を計算しやすくなる
GIVolume • 3D空間上に一定間隔ごとに情報を記録 ◦ 360度方向の入射光の方向と強さ ◦ ScreenProbeとの違いは密度と配置 • 半透明物体向け
計算方法概要 • オフライン ◦ メッシュカード生成 ▪ 計算高速化用データ ◦ 他様々な高速化用データ生成 ▪
本講演では説明せず • オンライン VoxelLighting 直接光 メッシュカード情報 VoxelLighting ScreenProbe GI Volume
メッシュカード • 計算を軽量化するためのメッシュ • オブジェクトを直方体で近似 ◦ 入り組んでいる物体は苦手
メッシュカードへの情報計算1 • カメラ近辺のメッシュカードを取得しテクスチャにUVを展開 • 表面の材質の情報を計算 • 材質のテクスチャ上に配置 ◦ 次の計算に利用
メッシュカードへの情報計算2 • 材質を元にメッシュカードへのライティングを計算 • 直接光 ◦ 遮蔽を考慮しつつ、光源からのライティングを計算 遮蔽物
メッシュカードへの情報計算2 • 間接光 ◦ VoxelLightingに対してレイトレーシング メッシュカード VoxelLighting レイトレーシング
VoxelLighting • 光源の輝度+方向情報をボクセル上に記録したもの • 高速化のために粗密のデータを生成
VoxelConeTracing • VoxelConeTracingで輝度を計算 ◦ 円錐の形状でボクセルの輝度を取得 ◦ 遠距離ほど疎なデータを参照することで高速化
VoxelLightingの生成 • メッシュカードの情報から生成 • 近傍のメッシュカードを取得し計算
ScreenProbe • 複数の情報から生成 ◦ MeshCard ▪ 近距離 ◦ VoxelLighting ▪
中距離~ ◦ SSGI ▪ 全体 ▪ スクリーン上の画像から簡易的な GIを行う • 今回は説明なし
GI Volume • LightingVoxelで全方向にVoxelConeTracingすることで作成
複数回反射 • VoxelLightingが2つある ◦ 前フレームのデータを移動させて使用 ◦ 情報を積算してくことで間接光の複数回反射を実現 VoxelLighting 直接光 メッシュカード情報
VoxelLighting ScreenSpace Probe GI Volume
まとめ • これらの処理によりリアルタイムGIを実現 ◦ 高速な視点、オブジェクト移動には弱い
最後に • これらは大まかな説明 ◦ 詳細を気になる方は他の資料を見てください • かなりUE5の実装は難解 ◦ 間違ってたところがありましたら、教えてください •
弊社の3DScanしたデータをUE5で表示してみました
ご清聴ありがとうございました Preferred Networksでも3D人材を募集しています