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
個人アプリを2年ぶりにアプデしたから褒めて / I just updated my personal app, praise me!
lovee
0
340
ペアーズでの、Langfuseを中心とした評価ドリブンなリリースサイクルのご紹介
fukubaka0825
2
300
Amazon ECS とマイクロサービスから考えるシステム構成
hiyanger
2
490
CNCF Project の作者が考えている OSS の運営
utam0k
5
690
Linux && Docker 研修/Linux && Docker training
forrep
23
4.5k
データの整合性を保つ非同期処理アーキテクチャパターン / Async Architecture Patterns
mokuo
41
15k
Writing documentation can be fun with plugin system
okuramasafumi
0
120
Kanzawa.rbのLT大会を支える技術の裏側を変更する Ruby on Rails + Litestream 編
muryoimpl
0
220
Java Webフレームワークの現状 / java web framework at burikaigi
kishida
9
2.2k
さいきょうのレイヤードアーキテクチャについて考えてみた
yahiru
3
730
チームリードになって変わったこと
isaka1022
0
190
Unity Android XR入門
sakutama_11
0
140
Featured
See All Featured
Designing for Performance
lara
604
68k
Done Done
chrislema
182
16k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
49k
Why Our Code Smells
bkeepers
PRO
335
57k
Intergalactic Javascript Robots from Outer Space
tanoku
270
27k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
175
51k
The Straight Up "How To Draw Better" Workshop
denniskardys
232
140k
Adopting Sorbet at Scale
ufuk
74
9.2k
StorybookのUI Testing Handbookを読んだ
zakiyama
28
5.5k
RailsConf 2023
tenderlove
29
1k
How to Ace a Technical Interview
jacobian
276
23k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
226
22k
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人材を募集しています