大规模实时渲染引擎子系统之动态遮挡剔除子系统及示例

请见Demo

Demo1: Vox APP

Demo2: Vox APP

实时渲染引擎在面对大规模渲染对象(drawCall数量很多,例如2w以上)的时候, 性能损耗在drawcall的地方就会很大,在移动端和web端表现尤为明显。除了合批绘制( 无论是cpu或者是gpu端)等优化之外,动态的遮挡剔除系统提供的支持是一个有效的减少drawcall次数的机制。

这里主要说的是动态遮挡剔除,这种剔除机制主要是几何运算(本身运算消耗少,还可以借助其他线程来提供算力),在进入渲染器阶段之前就尽可能的剔除没必要渲染的对象。很多辅助设计或者游戏(例如室内或者第一视角游戏),因为有很多实际存在的遮挡对象,所以遮挡剔除在这些环境中就很有效。

基于几何计算的遮挡剔除,原理是利用开放或者封闭的空间包围体(球体,六面体等)对需要做剔除测试对象做的集合做布尔运算(可见或者不可见),正因为有布尔运算,所以各种包围体可以通过布尔运算做求交,求差,求和等集合运算, 可以通用的测试遮挡体之间的遮挡关系,结合空间管理机制,可以获得很高的运行时性能表现。

请见下图:

有了遮挡剔除,可以剔除掉很多不必要的drawCall(下面的图如果全部drawcall原本有10090个单次drawcall)

通过上图的演示可以看到,这种遮挡剔除,避免了90%左右的多余drawcall。在有需求的场合还是非常有效的。

实际上遮挡剔除系统,不仅仅能优化直接的渲染逻辑,还可以优化例如实时灯光计算、实时阴影渲染等渲染消耗。除了渲染,还可以优化例如鼠标拾取测试,运动碰撞检测(例如运动扫掠体)等。结合现代的多核多线程,可以在模型面熟精度高,渲染单元量巨大,要求高效能这种应用中发挥很不错的功效。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值