[ue4] 几何体绘制管线

UE4的渲染流程主要在FDeferredShadingSceneRenderer::Render函数中展开,包括图元可见性计算和构建可见图元绘制指令。通过FMeshBatch作为中间数据结构,不同类型的UPrimitiveComponent由相应的FPrimitiveSceneProxy生成。静态图元在AddToScene时创建MeshBatch并缓存,动态图元每帧重新生成。最后,通过FMeshPassProcessor将MeshBatch转换为MeshDrawCommand进行绘制。

        几何体绘制管线,通俗来说,就是通知GPU绘制物体信息的一套完整流程;ue4封装了一套较为复杂的框架来维护整个流程,本文将对整个流程做一些简单的介绍。

引入

        ue4的大部分核心渲染代码入口都在FDeferredShadingSceneRenderer::Render(FRHICommandListImmediate& RHICmdList)这一函数中(以及对应的Mobile版本),在这里可以比较详细地看到整个渲染流程中先后做了哪些事情。其中,在渲染前期的时候,一个比较重要的函数是InitViews:

        在InitViews中,做了如下两件重要的事情:

        (1) 计算可见性

        (2) 构建可见的图元绘制指令

        场景中的所有图元存储在FScene中,我们首先需要对所有图元做一个筛选,确定哪些图元是我们需要在当前帧绘制的(剔除不在视锥体内的,剔除被完全遮挡的,剔除远距离的小物件等)。

        确定了待绘制的图元后,我们最终的目标就是将这些图元的绘制提交给GPU(drawcall)。为了实现这一点,我们需要构造MeshCommand结构,它包含了物体的渲染信息,如顶点缓冲、索引缓冲、着色器绑定等。

       为了实现构建可见的图元绘制指令,ue4实现了一套机制,简单来说,就是为不同类型的图元生成一个中间数据结构,不同渲染通道加载对应所需的中间数据结构,并设置渲染状态,构造MeshCommand,将渲染指令加入到DrawList。整体的流程图如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值