前文《UE4渲染流程中的绘制调用(Draw Call)》提到过为了减少绘制调用(Draw Call),可以适当对网格体进行合并,那么该如何把握这个适当的程度呢。
限制面数
如果一个被合并的网格体拥有着庞大数量的三角面,那么会对渲染流程中的下一环节造成一定的负担。
只合并同一区域内网格体
当玩家视角聚焦于某处时, 其短期内可视的物体与短期内不可视的物体通常不应合并,由于可见即渲染全部的特性,大量短时间内无需在玩家面前展示的物体不应占用本可不必占用的资源去被用于渲染。
同材质
合并网格体最主要的目的还是为了减少Draw Call,但是每种材质都会调用一次Draw Call,因而入如果被合并起来的网格体拥有多个不同的材质,那么非但不会降低Draw Call,反而会因增加网格体面数而带来更多损耗。
网格体无碰撞或只有简单碰撞体
碰撞体同样会增加计算量,如果一个被合并的网格体同时被迫拥有了奇怪形状的碰撞体,那么除了会对硬件本身带来额外的负担,玩家在与这个碰撞体交互时也同要会遇到各种各样的问题。
小物体或只接受动态光照的网格体更合适
由于静态光照构建的原因,光照信息往往是存储在光照贴图中的,光照贴图分别率决定了光照阴影的精细程度。如果一个被合并的网格体拥有着恐怖的体量,那么在光照贴图分辨率不变的情况下,其每个单位面积所能被分配到的像素块必然也会减少,从何大幅度影响光照构建效果。
远距离物体也适合合并处理
远处物体往往不要求过分精细,有些也不至于频繁地在视野中消失、出现,那么将其合并也不失为一种好方法,如远处的山峰和山腰上的一个小木屋。
个人经验
权衡效率,平衡处理。互不掣肘,双U和谐。这是一个关于CPU和GPU的爱情故事,他好,我也好。
每天强迫自己写一些东西,记录学习过程。