Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
わかった気になれる UE5レンダリング swd
Slide 2
Slide 2 text
自己紹介 ● 名前 ○ swd (@s_w_d_) ● 所属 ○ Preferred Networks ○ 普段の仕事は全く描画関係なし ● OSS ○ Effekseer ■ EpicGamesからも支援
Slide 3
Slide 3 text
概要 ● Unreal Engine5 ○ ゲームエンジン ○ とてもレンダリングが綺麗 ○ CitySampleで話題 ● 話すこと ○ UE5の描画技術の概要の一部 ■ 甘口 ■ 非描画技術者向け ● 話さないこと ○ UE5の設定 ○ 詳細な技術の実装 City Sample
Slide 4
Slide 4 text
NaniteとLumen ● Lumen ○ リアルタイムGI ■ 直接光と間接光を リアルタイムに計算 ■ 発光等もリアルタイムに使用可能 ● Nanite ○ 大量のポリゴンを表示する技術 ■ 数千万ポリゴンの 3Dモデルを表示
Slide 5
Slide 5 text
Nanite ● 大量のポリゴンを表示する機能 ● 主に2つの要素で構成 ○ 強力なカリングとLoD ■ Mesh Cluster Rendering ● メッシュの一部のみを描画する機能 ○ 描画時のメモリの転送量の削減 ■ Visibility Buffer ● メモリ転送量を抑制する描画手法
Slide 6
Slide 6 text
カリング ● 従来の手法 ○ フラスタムカリング ■ カメラ外のオブジェクトを描画から除外 ■ 一部でも表示されている場合、全体が描画される ○ オクルージョンカリング ■ 壁等で隠れているオブジェクトを描画から除外 ■ 遮蔽の計算が難しい ■ 一部でも表示されている場合、全体が描画される
Slide 7
Slide 7 text
Mesh Cluster Rendering ● 1つのメッシュを複数に分割 ○ 分割した単位でカリング ○ 必要なメッシュのみを描画 ● 距離に応じてメッシュを変更 ○ ポリゴンのサイズが同じになるように調整 近 遠
Slide 8
Slide 8 text
AmplificationShader + MeshShader ● Amplification Shader ○ GPU側でメッシュを描画の可否を判断する機能 ● MeshShader ○ 高速でGPU上でメッシュを生成する機能 ○ 状況に応じて適切なメッシュを生成可能 ● UE5 ○ UE5は未サポートGPUのために ComputeShaderで代替の実装を行っている ○ 実質同様かつフォールバックの実装なので上記機能を説明
Slide 9
Slide 9 text
AmplificationShader, MeshShaderによるLoDカリング ● 処理 ○ GPU内で遮蔽を計算、隠れた部分を描画メッシュから除去 ○ カメラ内のメッシュのみ描画 ○ 距離に応じてメッシュ切り替え ● 結果 ○ GPU、CPUの転送量が減って高速化 ■ 描画する、しないの判断をCPUが行っていた ■ 今まではオクルージョンカリングは CPUで行う必要があった ○ ポリゴン数をより細かく調節できて高精度化、高速化
Slide 10
Slide 10 text
AmplificationShader, MeshShader ● AmplificationShader, MeshShaderはGPUの機能 ○ UE5特有の実装ではない ○ DirectX12 Ultimate, Vulkanの拡張等に存在 ○ 他ゲームエンジンでもいずれ採用されるかもしれない カリングされている DirectX12 サンプル
Slide 11
Slide 11 text
描画方法の変更 ● 従来の描画方法 ○ Forward Rendering ○ Deferred Rendering
Slide 12
Slide 12 text
Forward Rendering ● Forward Rendering ○ オブジェクトごとに直接色を描画 ○ メリット ■ 軽い ○ デメリット ■ 光源を増やせない
Slide 13
Slide 13 text
Deferred Rendering ● Deferred Rendering ○ メリット ■ 大量の光源を配置可能 ○ デメリット ■ メモリの転送量が多い 計算用の情報のバッファを描画 情報のバッファを元に色を描画 メモリの転送量が多い!
Slide 14
Slide 14 text
VisibilityBuffer Forward Rendering Deferred Rendering Visibility Buffer 複数光源 × 〇 〇 メモリ転送量 〇 × 〇 The Visibility Buffer: A Cache-Friendly Approach to Deferred Shading
Slide 15
Slide 15 text
VisibilityBuffer ● スクリーンにポリゴンのIDを書き込み ○ メッシュID ○ ポリゴンID ○ ポリゴン内位置 ○ 等 メッシュID ポリゴンID
Slide 16
Slide 16 text
VisibilityBuffer ● 書き込まれたポリゴンのID等から面を取得 ● 取得された面を描画 ● DeferredReneringよりメモリ転送量が少ない ○ IDなので軽い 画像から ポリゴンID等を取得 ポリゴンから 面の情報を取得
Slide 17
Slide 17 text
まとめ ● カリングとLoDの強化、描画方法の変更により高速化 ○ 計算量、メモリ転送量ともに減少 ● ただし特定オブジェクトのみ対応 ○ 例:半透明
Slide 18
Slide 18 text
Lumen ● リアルタイムGIレンダリング ○ 直接光+間接光のリアルタイム計算 直接光 間接光
Slide 19
Slide 19 text
直接光 ● 遮蔽物を考慮しつつ計算 ● 間接光として重くはない 直接光
Slide 20
Slide 20 text
間接光の計算 ● 複数回の反射の計算 ○ オブジェクトに衝突した光が反射され他に衝突 ○ 計算量が膨大
Slide 21
Slide 21 text
従来手法 ● 手順 ○ 間接光を事前に計算 ○ テクスチャに結果を焼きこみ ● 問題点 ○ 動的物体に対応できない ○ 環境の変化に対応できない リアルタイムに計算したい!
Slide 22
Slide 22 text
リアルタイムGIの実現 ● リアルタイムGI実現のために2種類のデータをリアルタイム生成 ○ ScreenProbe ■ スクリーン上の光源情報 ■ 不透明物体向け ○ GI Volume ■ 空間上の光源情報 ■ 半透明物体向け
Slide 23
Slide 23 text
ScreenProbe ● スクリーン上で一定間隔ごとに情報を記録 ○ 360度方向の入射光の方向と強さ ○ 視界に映るオブジェクトの部分ごとの間接光を計算しやすくなる
Slide 24
Slide 24 text
GIVolume ● 3D空間上に一定間隔ごとに情報を記録 ○ 360度方向の入射光の方向と強さ ○ ScreenProbeとの違いは密度と配置 ● 半透明物体向け
Slide 25
Slide 25 text
計算方法概要 ● オフライン ○ メッシュカード生成 ■ 計算高速化用データ ○ 他様々な高速化用データ生成 ■ 本講演では説明せず ● オンライン VoxelLighting 直接光 メッシュカード情報 VoxelLighting ScreenProbe GI Volume
Slide 26
Slide 26 text
メッシュカード ● 計算を軽量化するためのメッシュ ● オブジェクトを直方体で近似 ○ 入り組んでいる物体は苦手
Slide 27
Slide 27 text
メッシュカードへの情報計算1 ● カメラ近辺のメッシュカードを取得しテクスチャにUVを展開 ● 表面の材質の情報を計算 ● 材質のテクスチャ上に配置 ○ 次の計算に利用
Slide 28
Slide 28 text
メッシュカードへの情報計算2 ● 材質を元にメッシュカードへのライティングを計算 ● 直接光 ○ 遮蔽を考慮しつつ、光源からのライティングを計算 遮蔽物
Slide 29
Slide 29 text
メッシュカードへの情報計算2 ● 間接光 ○ VoxelLightingに対してレイトレーシング メッシュカード VoxelLighting レイトレーシング
Slide 30
Slide 30 text
VoxelLighting ● 光源の輝度+方向情報をボクセル上に記録したもの ● 高速化のために粗密のデータを生成
Slide 31
Slide 31 text
VoxelConeTracing ● VoxelConeTracingで輝度を計算 ○ 円錐の形状でボクセルの輝度を取得 ○ 遠距離ほど疎なデータを参照することで高速化
Slide 32
Slide 32 text
VoxelLightingの生成 ● メッシュカードの情報から生成 ● 近傍のメッシュカードを取得し計算
Slide 33
Slide 33 text
ScreenProbe ● 複数の情報から生成 ○ MeshCard ■ 近距離 ○ VoxelLighting ■ 中距離~ ○ SSGI ■ 全体 ■ スクリーン上の画像から簡易的な GIを行う ● 今回は説明なし
Slide 34
Slide 34 text
GI Volume ● LightingVoxelで全方向にVoxelConeTracingすることで作成
Slide 35
Slide 35 text
複数回反射 ● VoxelLightingが2つある ○ 前フレームのデータを移動させて使用 ○ 情報を積算してくことで間接光の複数回反射を実現 VoxelLighting 直接光 メッシュカード情報 VoxelLighting ScreenSpace Probe GI Volume
Slide 36
Slide 36 text
まとめ ● これらの処理によりリアルタイムGIを実現 ○ 高速な視点、オブジェクト移動には弱い
Slide 37
Slide 37 text
最後に ● これらは大まかな説明 ○ 詳細を気になる方は他の資料を見てください ● かなりUE5の実装は難解 ○ 間違ってたところがありましたら、教えてください ● 弊社の3DScanしたデータをUE5で表示してみました
Slide 38
Slide 38 text
ご清聴ありがとうございました Preferred Networksでも3D人材を募集しています