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
CursorはMCPを使った方が良いぞ
taigakono
1
210
NPOでのDevinの活用
codeforeveryone
0
660
Webの外へ飛び出せ NativePHPが切り拓くPHPの未来
takuyakatsusa
2
460
明示と暗黙 ー PHPとGoの インターフェイスの違いを知る
shimabox
2
390
技術同人誌をMCP Serverにしてみた
74th
1
520
ソフトウェア品質を数字で捉える技術。事業成長を支えるシステム品質の マネジメント
takuya542
0
420
RailsGirls IZUMO スポンサーLT
16bitidol
0
130
設計やレビューに悩んでいるPHPerに贈る、クリーンなオブジェクト設計の指針たち
panda_program
6
1.8k
AWS CDKの推しポイント 〜CloudFormationと比較してみた〜
akihisaikeda
3
320
『自分のデータだけ見せたい!』を叶える──Laravel × Casbin で複雑権限をスッキリ解きほぐす 25 分
akitotsukahara
1
600
dbt民主化とLLMによる開発ブースト ~ AI Readyな分析サイクルを目指して ~
yoshyum
2
240
Google Agent Development Kit でLINE Botを作ってみた
ymd65536
2
210
Featured
See All Featured
Why Our Code Smells
bkeepers
PRO
337
57k
How STYLIGHT went responsive
nonsquared
100
5.6k
GraphQLとの向き合い方2022年版
quramy
49
14k
The Cult of Friendly URLs
andyhume
79
6.5k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
Imperfection Machines: The Place of Print at Facebook
scottboms
267
13k
Writing Fast Ruby
sferik
628
62k
Building Applications with DynamoDB
mza
95
6.5k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.9k
The Art of Programming - Codeland 2020
erikaheidi
54
13k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
Large-scale JavaScript Application Architecture
addyosmani
512
110k
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人材を募集しています