[toc]
# 视口渲染
入口在 EditorViewportCLient.cpp -> FEditorViewportClient::Draw 函数中
- 设置视口
- 获取当前 world 设置初始时间
- 如果世界还在改变过程中,则返回,不继续执行
- 设置 DebugCanvas 的显示 (Runtime 会直接被干掉,Editor 会显示)
1 | // Allow HMD to modify the view later, just before rendering |
- 设置 FSceneViewFamilyContext
UE5 文档对 FSceneViewFamily 的解释是:
A set of views into a scene which only have different view transforms and owner actors.
即 FSceneViewFamily 是当前 Viewport 内的 view 的集合,那么 FSceneViewFamilyContext 理所应当是 View 的上下文,官网对他的描述是:
A view family which deletes its views when it goes out of scope.
实际上 FSceneViewFamilyContext 的参数就是 FSceneViewFamily,比如这个脚本里的 ViewPort 中实际上在创建 Context 的时候构建了一个 ViewFamily
1 | // Setup a FSceneViewFamily/FSceneView for the viewport. |
同时也会对这个 ViewFamily 设置一些合适口相关的参数,比如是否支持 HDR, 是否支持 DebugDPIScale 等
# FSceneViewFamily
这个类的脚本在 SceneView.h 下,其中视图类里面还包含一个 ConstructionValues
结构,他主要包含以下变量
1 | struct ConstructionValues{ |
以及包含参数 (不介绍所有的):
Views: 这个 ViewGroup 的所有 View
ViewMode: 这个 View 的类型 (WareFrame/Unlit/Lit 之类的)
RenderTarget: 渲染目标
bMultiGPUForkAndJoin: 是否进行多 GPU 渲染
bForceCopyCrossGPU: 是否强制 GPU 复制
bIsMultipleViewFamily: 是否是多视图组中的一个视图
bIsFirstViewInMultipleViewFamily: 是否是多视图组中的第一个视图
bIsSceneTexturesInitialized: 场景纹理是否已初始化
SceneCaptureSource: 输入到最终的 RenderTarget 的格式
SceneCaptureCompositeMode: 和新的渲染结果的合成模式 (叠加 / 重写等等)
ViewExtensions: 视图修改扩展
DisplayInternalsData: 调试信息