24.3K Views
October 20, 24
スライド概要
講演者:なが
「Unreal Engine Meetup Connect - Vol.4 - TA編」の講演資料です。
アーカイブ動画:
https://youtu.be/Z6OSqWo2UxI
イベントページ:
https://leon-gameworks.connpass.com/event/328282/
Unreal Engine をメインとするゲーム会社、株式会社Leon Gameworks のアカウントです。
描画処理ブロック 内部パスA 中間結果 内部パスB 最終結果
BasePass LightingPass PostprocessPass 皆さんのモニタへ
ざんねん
なんかある…
それはそれとして(゜.゜)
UEレンダリングパイプライン UE RenderPassA UE RenderPassB CustomProcess SceneViewExtension拡張
BasePass LightingPass CustomProcess
TranslucencyPass PostprocessPass CustomProcess
UEレンダリング構築用オブジェクト(後述) カメラ等のView情報 レンダーターゲット群 アクセスできるテクスチャ群 Gbuffer, SceneColor等
TranslucencyPass PostprocessPass CustomProcess SceneColor SceneColor 引き続きUEレンダリングの SceneColorとして使われる SceneColor カスタム処理でSceneColorに 追加書き込み
SceneColorやDepth GBuffer CustomDepthStencil
RDG構築オブジェクト RDG構築オブジェクトに描画処理を登録
https://levelup.gitconnected.com/organizing-gpu-work-with-directed-acyclic-graphs-f3fd5f2c2af3
UE5 RenderDoc Capture Activision Rendering Engine https://research.activision.com/publications/2023/06/Task-Graph-Renderer-at-Activision
UE5 RenderDoc Capture Activision Rendering Engine Activision 描画タスク数 236個! https://research.activision.com/publications/2023/06/Task-Graph-Renderer-at-Activision
プログラマが手作業で できる規模じゃない… https://research.activision.com/publications/2023/06/Task-Graph-Renderer-at-Activision
システマチックに解決したい! RenderGraph https://research.activision.com/publications/2023/06/Task-Graph-Renderer-at-Activision
https://levelup.gitconnected.com/organizing-gpu-work-with-directed-acyclic-graphs-f3fd5f2c2af3 https://logins.github.io/graphics/2021/05/31/RenderGraphs.html
UE使用者のRDGの操作はここ
このあたりがリソース依存関係 このあたりが処理の登録部
RDGBuilder ここまでのUE描画パスが登録されている 独自のシェーダでDraw処理を登録 Copy等は登録関数が Utilityにある
TranslucencyPass PostprocessPass CustomProcess SceneColor SceneColor 引き続きUEレンダリングの SceneColorとして使われる SceneColor カスタム処理でSceneColorに 追加書き込み
CustomProcess エッジ合成 SceneColor SceneColor “RDG作業テクスチャ” エッジ抽出結果
例)ComputeShader HLSL 例)ComputeShader Dispatchの登録
SceneColor 高輝度抽出シェーダ BrightTexture (Local)
BrightTexture (Local) Ghost生成シェーダ GhostTexture (Local) 引用 https://john-chapman-graphics.blogspot.com/2013/02/pseudo-lens-flare.html
GhostTexture (Local) Ghost合成シェーダ SceneColor
引用 https://www.kyprianidis.com/p/pg2009/jkyprian-pg2009.pdf
SceneColor 勾配計算シェーダ EdgeTexture (Local)
EdgeTexture (Local) ブラーシェーダ BlurEdgeTexture (Local)
BlurEdgeTexture (Local) 異方性計算シェーダ AnisotropyTexture (Local)
SceneColor コピー処理 SceneColorCopy (Local) AnisotropyTexture (Local) 異方性計算シェーダ SceneColor
SceneColor 合成パス SceneColor コピーテクスチャ作成 & コピー 前フレームの ”抽出”から PrevCopySceneColor 次フレームへ ”抽出” CopySceneColor
// 前フレームで抽出して保持していたHistoryTextureをRDG管理下に登録, PrevHistoryTexture = GraphBuilder.RegisterExternalTexture(HistoryTexture); // TODO. // PrevHistoryTextureを使った描画処理 // 次のフレームへ伝搬させるためのテクスチャをRDGで作成. NewHistoryTexture = GraphBuilder.CreateTexture(WorkOutputDesc, TEXT(“DebugTextureName")); // ~~ // TODO. // NewHistoryTextureに次のフレームへ伝搬させる内容を描画. // ~~ // NewHistoryTextureを抽出してRDG管理から取り出し, HistoryTextureとして保持. GraphBuilder.QueueTextureExtraction(NewHistoryTexture, &HistoryTexture);
const uint custom_shadingmodel_id = 15; FMaterialAttributes out_attr = (FMaterialAttributes)0; out_attr = FMaterialAttributes_SetShadingModel(out_attr, uint(custom_shadingmodel_id)); return out_attr;
GBufferBコピー 元からUnlit ShadingModel=0 ShadingModel=15 GBufferB GBufferB シェーダで書き換え ShadingModel=0 コピー処理 ShadingModel書き換え シェーダ GBufferBCopy (Local) GBufferB