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.6k
わかった気になれるUE5レンダリング
swd
September 01, 2022
Tweet
Share
Other Decks in Programming
See All in Programming
詳解!defer panic recover のしくみ / Understanding defer, panic, and recover
convto
0
240
AI Coding Agentのセキュリティリスク:PRの自己承認とメルカリの対策
s3h
0
230
Navigation 2 を 3 に移行する(予定)ためにやったこと
yokomii
0
260
知っているようで知らない"rails new"の世界 / The World of "rails new" You Think You Know but Don't
luccafort
PRO
1
160
MCPでVibe Working。そして、結局はContext Eng(略)/ Working with Vibe on MCP And Context Eng
rkaga
5
2.3k
奥深くて厄介な「改行」と仲良くなる20分
oguemon
1
540
RDoc meets YARD
okuramasafumi
4
170
プロポーザル駆動学習 / Proposal-Driven Learning
mackey0225
2
1.3k
はじめてのMaterial3 Expressive
ym223
2
740
Tool Catalog Agent for Bedrock AgentCore Gateway
licux
6
2.5k
今から始めるClaude Code入門〜AIコーディングエージェントの歴史と導入〜
nokomoro3
0
170
Introducing ReActionView: A new ActionView-compatible ERB Engine @ Rails World 2025, Amsterdam
marcoroth
0
690
Featured
See All Featured
Agile that works and the tools we love
rasmusluckow
330
21k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
229
22k
Context Engineering - Making Every Token Count
addyosmani
3
44
Balancing Empowerment & Direction
lara
3
620
Rebuilding a faster, lazier Slack
samanthasiow
83
9.2k
Java REST API Framework Comparison - PWX 2021
mraible
33
8.8k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
9
810
The Cost Of JavaScript in 2023
addyosmani
53
8.9k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
61k
Docker and Python
trallard
45
3.6k
How to Ace a Technical Interview
jacobian
279
23k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.4k
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人材を募集しています