UE4实时渲染——几何结构渲染一

上一节:UE4实时渲染——渲染前和遮挡

上一节Draw线程准备好了一些对象,这些对象是当前一帧对象我们可见的,现在我们要使用GPU线程逐对象来渲染了。

首先我们要考虑的,就是渲染对象的顺序,我们不能单纯的像粉刷墙画那样,先刷上一层背景,再刷上面的图案,这会导致图案和背景重叠的部分,会重复绘制2次,如果在N多个对象的场景中,这种绘制无疑是性能的浪费。
我们的办法是依靠前期的深度(Z)通道,做一个深度测试,当渲染几何体时,他会先做一次预通道,确定下来其中一些像素点的值会被另一个模型的像素所覆盖,所以在渲染背景时,他就不会渲染这部分像素点。
在这里插入图片描述
预通道设置我们没办法插手太多,设置开启即可。

现在我们开始渲染具体的几何体,几何体会根据绘制调用(drawcall)来逐个渲染。

本节的接下来会重点介绍这个功能,绘制调用drawcall。

绘制调用(drawcall)是指渲染时采用的单一处理过程,可以理解为,有相同属性(材质等)的一组多边形或对象。
比如:
左右两图都有三种元素需要绘制,天空、地面、圆柱体,
区别是,左图只需要绘制5次,而右图由于第三个圆柱体是由两种材质构成,所以需要绘制6次。
在这里插入图片描述
每一种新的材质,便要一次新的绘制调用drawcall。
这也就能解释,drawcall会成为最大的性能损耗了,所以如果想在这里获得高性能,就要使绘制调用的次数合理化。
右图的实际渲染顺序如下:

引擎把它们按材质分类组合。我们可以看到三根柱子同材质部分,会依次渲染,然后再绘制其他材质的柱子、其他材质的对象。

有一个常用的命令“stat RHI”(rendering head interface渲染头接口),用来查看当前渲染三角形次数、渲染对象个数等信息。打开后如图:
在这里插入图片描述
Trangles drawn:616212
绘制了约62万个三角形

DrawPrimitive calls:1091
绘制调用drawcall了1091个对象

开启光照会对这个数值产生影响,当开启光照时,绘制调用对象和三角形数量会变多:
如下:
三角形数量变为80万左右,绘制调用次数变为1131个左右
在这里插入图片描述
但不要太纠结这个所显示的渲染数量,和你在UE4中看到的对象数量的差别,它背后的计算过程我们是看不到的,所以有出入属于正常。
但有个对照表,可以帮助我们明确是否渲染需要优化。

绘制调用次数状态
2000-3000正常
5000+过高
10000+可能会导致问题(取决于硬件以及你用这个做了什么)

一般来说,在可移动设备(手机、VR等)上的绘制调用次数,通常只有几百次最多一千次左右。

drawcall绘制调用,是极其影响性能的因素,每一次渲染器完成绘制调用时,它都要再次接收从渲染线程发来的命令,从而增加损耗。

drawcall绘制调用的影响,在很多情况下已经大于“多边形面数”了,之前我们总是关注渲染多边形有十几万个,其性能消耗之大,但现在我们应该多关注drawcall,因为它的性能消耗不会比渲染多边形要少。

我们可以举一个例子来说明这个性能消耗的比较,比如在PC计算机上,

文件夹及内容总大小复制耗时
文件夹中有1GB的1个文件1GB几分钟
文件夹中有1KB的1百万个文件1GB一两天

这和计算机复制文件的流程是有关的,它每次复制完都要再询问并获取下一个复制文件,同理,这也就是为什么drawcall绘制调用的性能消耗如此之大了,这和有多少三角形面片关系并不大。

再比如有这样的情况:
8600万相同材质三角形,3000次drawcall绘制调用,帧率为33fps
在这里插入图片描述
10万个不同材质三角形,44000次drawcall绘制调用,帧率为4fps
在这里插入图片描述
15万7000个相同材质三角形,186次drawcall绘制调用,帧率为236fps
在这里插入图片描述
这是因为第二幅图中,每一个三角形的材质都不同(如下图显示),如上面介绍的那样,这将会导致每绘制一种材质的三角形,就会调用一次drawcall绘制调用,也就是:渲染->停下->等待->渲染->停下->等待……
在这里插入图片描述

总结:
1、绘制调用drawcall对于损耗的影响,会比多边形数量更大。
2、根据你的设置和运行方式,5万三角形可能比5千万的运行效果还差。
3、绘制调用drawcall有基本损耗,所以把低面数模型改为超低面数模型可能不会有太大的改进。

下一节:UE4实时渲染——几何结构渲染二

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值