ue4 drawing policy

本文深入探讨了Unreal Engine 4中的MobileBasePass渲染流程,包括关键的shader策略、参数绑定、动态物体渲染机制及相关的代码实现细节。

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参数,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿拉平平的小屋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值