UE4-StaticMesh向场景DrawList添加流程
Posted RapdoZoro
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UE4-StaticMesh向场景DrawList添加流程相关的知识,希望对你有一定的参考价值。
文章为本人学习虚幻4引擎源码所整理笔记,如有纰漏欢迎指正交流。
1.渲染线程Main Loop中:
RenderingThreadMain( )
(RenderingThread.cpp)
2. 模型添加到场景里时,就会调用Render Scene的
AddPrimitive()函数,
FScene
::
AddPrimitive()函数中调用
FScene
::
AddPrimitiveSceneInfo_RenderThread
()方法:
(RendererScene.cpp)
3
.
FScene
::
AddPrimitiveSceneInfo_RenderThread
()方法会调用
FPrimitiveSceneInfo的
AddToScene(),将primitive添加到scene中:
(RendererScene.cpp)
![](https://image.cha138.com/20221126/227378ba8f5b45219e7818d74623514e.jpg)
4.在
FPrimitiveSceneInfo
::
AddToScene中,会调用
PrimitiveSceneInfo的
AddStaticMeshes()方法:
(PrimitiveSceneInfo
.cpp
)
5.
PrimitiveSceneInfo的
AddStaticMeshes()方法中,遍历当前PrimitiveSceneInfo的所有static meshes,执行其
FStaticMesh::
AddToDrawLists()方法,将mesh添加到drawlists中:
(PrimitiveSceneInfo
.cpp
)
6.
FStaticMesh的AddToDrawLists中,会根据情况把FStaticMesh加入到各个DrawingPolicyFactory(策略工厂)里面:
(SceneCore
.cpp
)
7.在各个 DrawingPolicyFactory的AddStaticMesh中,会根据StaticMesh的Material相关属性以及其他特性创建对应的DrawingPolicy(策略),并将 模型数据及策略加入到FScene的各种DrawList里面(场景会有很多种DrawList)。
比如在FDepthDrawingPolicyFactory策略工厂的AddStaticMesh中创建FDepthDrawingPolicy策略,并将Mesh和FDepthDrawingPolicy策略策略加入到Scene的DepthDrawList绘制列表中;
或者在FShadowDepthDrawingPolicyFactory策略工厂的AddStaticMesh中创建FShadowDepthDrawingPolicy策略,并将Mesh和FShadowDepthDrawingPolicy策略策略加入到Scene的WholeSceneReflectiveShadowMapDrawList绘制列表中;
又或者在FBasePassOpaqueDrawingPolicyFactory策略工厂的AddStaticMesh中创建TBasePassDrawingPolicy策略,并将Mesh和TBasePassDrawingPolicy策略策略加入到Scene的BasePassPPRBackgroundDrawList绘制列表中。
下图为FDepthDrawingPolicyFactory的AddStaticMesh方法:
(DepthRendering
.cpp
)
下图为场景的各种各样的DrawList绘制列表:
(ScenePrivate
.cpp
)
![](https://image.cha138.com/20221126/d9ae0b00d77348098f801e284d5540ce.jpg)
8.以下为当模型被添加到场景中时,StaticMesh被添加到Scene的DrawList中的函数调用堆栈:
9.DrawList调用AddMesh()在向DrawList添加Mesh后,在内联函数文件(.inl)AddMesh()方法中,
根据DrawingPolicyType先查找是在已存在该DrawingPolicy类型的策略,即该DrawingPolicyType对应的DrawingPolicyLink,
如果不存在,需要重新创建一个DrawingPolicyLink,并按照渲染顺序添加到DrawingPolicy列表中(OrderedDrawingPolicies)。
之后,通过Mesh和DrawingPolicyLink创建一个Element,将Element添加到该Mesh对应的MeshBatch的DrawListLinks中。
(StaticMeshDrawList
.inl
)
以上。
以上是关于UE4-StaticMesh向场景DrawList添加流程的主要内容,如果未能解决你的问题,请参考以下文章
UE4-StaticMesh向场景DrawList添加流程
UE4-渲染时初始化ShaderResource的Shader流程
UE4-渲染时初始化ShaderResource的Shader流程
UE4-渲染时初始化ShaderResource的Shader流程
UE4-渲染时初始化Policy上Shader流程
UE4-渲染时初始化Policy上Shader流程