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.7k
わかった気になれるUE5レンダリング
swd
September 01, 2022
Tweet
Share
Other Decks in Programming
See All in Programming
LLM Observabilityによる 対話型音声AIアプリケーションの安定運用
gekko0114
2
430
AI時代のキャリアプラン「技術の引力」からの脱出と「問い」へのいざない / tech-gravity
minodriven
21
7.4k
高速開発のためのコード整理術
sutetotanuki
1
410
AI時代の認知負荷との向き合い方
optfit
0
160
【卒業研究】会話ログ分析によるユーザーごとの関心に応じた話題提案手法
momok47
0
200
Unicodeどうしてる? PHPから見たUnicode対応と他言語での対応についてのお伺い
youkidearitai
PRO
1
2.6k
CSC307 Lecture 05
javiergs
PRO
0
500
コマンドとリード間の連携に対する脅威分析フレームワーク
pandayumi
1
460
AIで開発はどれくらい加速したのか?AIエージェントによるコード生成を、現場の評価と研究開発の評価の両面からdeep diveしてみる
daisuketakeda
1
2.5k
組織で育むオブザーバビリティ
ryota_hnk
0
180
余白を設計しフロントエンド開発を 加速させる
tsukuha
7
2.1k
AIと一緒にレガシーに向き合ってみた
nyafunta9858
0
250
Featured
See All Featured
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
231
22k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
920
The Invisible Side of Design
smashingmag
302
51k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.7k
Skip the Path - Find Your Career Trail
mkilby
0
57
Marketing to machines
jonoalderson
1
4.6k
From π to Pie charts
rasagy
0
130
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
9.9k
Principles of Awesome APIs and How to Build Them.
keavy
128
17k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
150
First, design no harm
axbom
PRO
2
1.1k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
3.9k
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人材を募集しています