https://medium.com/@lordned/unreal-engine-4-rendering-part-3-drawing-policies-89bb1a3c641b
MobileBasePassRendering.h包含base pass渲染定义。
uniform参数:Fog和SceneTextures
base pass中渲染的动态点光源信息(数量,坐标,半径,颜色,衰减)
是否需要cache
TMobileBasePassVSPolicyParamType: public FMeshMaterialShader, public VertexParametersType
:最基础的vertex shader,渲染自发光,lightmap、环境光
class TMobileBasePassVSBaseType : public TMobileBasePassVSPolicyParamType
TMobileBasePassVS : public TMobileBasePassVSBaseType
如果没有反射捕获可用,则用sky light贴图。
TMobileBasePassPSPolicyParamType : public FMeshMaterialShader, public PixelParametersType
把FMobileBasePassUniformParameters、反射cubemap、反射cubemap亮度参数、点光源参数、天空反射参数、csm调试参数、平面反射参数等进行绑定。
TMobileBasePassPSBaseType : public TMobileBasePassPSPolicyParamType
TMobileBasePassPS : public TMobileBasePassPSBaseType
//shader template, 允许在可兼容的shader间重定向。hdr和ldr,是否允许天光
GetMobileBasePassShaders
//渲染自发光和lightmap
template
class TMobileBasePassDrawingPolicy : public FMeshDrawingPolicy 包含getMobileBasePassShaders、SetupPipelineState、
FMobileBasePassOpaqueDrawingPolicyFactory
FMobileProcessBasePassMeshParameters
ProcessMobileBasePassMesh
在MobileBasePassRendering.cpp文件中,有
#define IMPLEMENT_MOBILE_SHADING_BASEPASS_LIGHTMAPPED_PIXEL_SHADER_TYPE(LightMapPolicyType,LightMapPolicyName,NumMovablePointLights)
这里可以修改或添加新的类型
有GetSceneMobileDirectionalLights函数,ModifyCompilationEnvironmentForQualityLevel函数,FDrawMobileBasePassStaticMeshAction类包含Process函数,AddMeshToStaticDrawList函数。
FMobileBasePassOpaqueDrawingPolicyFactory::AddStaticMesh
FDrawMobileBasePassDynamicMeshAction类包含FDrawMobileBasePassDynamicMeshAction构造函数,Process函数。Process函数里通过构建TMobileBasePassDrawingPolicy,设置其状态,调用其DrawMesh函数进行渲染。
bool FMobileBasePassOpaqueDrawingPolicyFactory::DrawDynamicMesh
DrawVisibleFrontToBack 渲染排好序的mesh
DrawVisible渲染没有排好序的mesh
CreateMobileBasePassUniformBuffer创建buffer
FMobileSceneRenderer::RenderMobileEditorPrimitives
void FMobileSceneRenderer::RenderMobileBasePass
渲染动态物体FDrawMobileBasePassDynamicMeshAction类,bool FMobileBasePassOpaqueDrawingPolicyFactory::DrawDynamicMesh函数会调用上面的Action类。前者会被void FMobileSceneRenderer::RenderMobileBasePassDynamicData调用。而FRenderMobileBasePassDynamicDataThreadTask的DoTask函数会调用RenderMobileBasePassDynamicData,MobileBasePassRendering类的RenderMobileBasePass也会调用。
FDrawMobileBasePassDynamicMeshAction类的Process方法,Parameter加bUseMaskedPolicy参数,