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)

 

4.在 FPrimitiveSceneInfo :: AddToScene中,会调用 PrimitiveSceneInfoAddStaticMeshes()方法: (PrimitiveSceneInfo .cpp

5. PrimitiveSceneInfoAddStaticMeshes()方法中,遍历当前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

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流程