在本次分享中,李嵘透露了即将推出的LayaAir3.0引擎的部分技术优化点。
元宇宙引擎定位
首先,李嵘强调了LayaAir 3.0引擎是面向泛行业元宇宙大型项目的全平台高性能3D引擎。
未来,必定是属于元宇宙的时代,在三维互联网的时代,一切主流产品的形态都将会以三维空间、物体、形象来体现,例如我们现在的网站、购物、社交等等,这些基于二维表现的产品,最终发展方向都会升级成为三维形态。
然而,大型元宇宙项目会涉及众多渲染与数据组织的挑战。例如,超大规模连续场景的数据组织和渲染挑战、海量同屏人数的数据组织和渲染挑战、元宇宙多样性表现所面临的架构挑战等等。
所以,针对元宇宙需求进行的高性能设计与架构优化是3.0引擎的核心。再加上LayaAir引擎一直以来的全平台引擎特性,构成了3.0引擎的基础定位。
3.0引擎的性能优化
作为定位于元宇宙方向的3D引擎,没有经过大型元宇宙项目的磨砺与验证,是很难成为一个真正的元宇宙底层引擎。通过Layaverse元宇宙项目在微信小游戏与HTML5环境中的大量真实商业案例验证,LayaAir3.0引擎已取得如下进展:
LayaAir 3.0引擎,从数据组织、渲染批次、三角形数量、填充率、显存管理等方面进行了大量的极致性能优化,不断为提升性能而持续努力。
3.0引擎的可编程架构
LayaAir 3.0引擎在设计上共分为四层,分别是开发者使用的引擎上层、可自由拼装拆卸替换的核心算法模块层、可保障多平台支持的渲染接口层、分别应用于Web与Native的渲染内核层。
3.0场景渲染节点管理优化
场景渲染节点的管理是性能优化的重点之一,从需求出发,主要有两点。
第一,当场景越来越大,渲染物体越来越多的时候,引擎的场景管理压力是呈线性增加的。例如上万的数据,需要大量的裁剪才能剔除不需要的渲染。
第二,引擎需要迅速的找到所需要渲染的数据,就需要比较高效的遍历渲染节点的功能。
面对上述需求时,普通的方案是排成一个队列,逐个去遍历。如果采用这种方案,那随着场景复杂度的增长,处理效率必然呈线性下降。所以,LayaAir2.0引擎采用的是八叉树方案,如下图所示:
八叉树方案对性能有明显提升,但随着场景的复杂程度进一步的增加,也会产生了大量的八叉树子节点,导致八叉树查找节点的能力下降。
LayaAir3.0采用以物体为准的空间划分技术。例如,在整个场景里面,引擎通过对物体的排列,以中间的物体进行拆分,将整个场景拆分为不同物体渲染的两个包围盒子节点,如下图所示:
然后,我们在各自的子包围盒节点中继续以中间物体进行拆分,形成新的子包围盒节点,如下图所示。
当引擎不断的拆分之后,就会形成如下图所示的物体包围盒节点结构。
假如上图的的三角形是我们视锥裁剪的区域,那么该优化方案只需逐层检测包围盒的碰撞关系,未发生碰撞的直接剔除即可。例如,首先可剔除上图蓝色物体,然后再剔除绿色物体,最后再剔除暗红色物体,当只剩下黄色物体时,处理视锥裁剪就比较简单了。
该方案适合比较精细的剔除优化,当渲染的包围盒过大时,该方案并不适合,所以引擎也会通过其他的机制来优化,并不计入该优化方案。另外,当处于频繁动态更新改变位置的物体,由于会影响父级节点,并层层影响,导致性能开销增加,也需要采用其它优化方案,也不计入该优化方案。
采用该优化方案后,在随机1000个物体的DEMO中,在裁剪效率方面,普通方案需要调用1000次裁剪,采用八叉树方案,用233次找到八叉树节点,又用了300次找到视锥节点进行裁剪。而3.0的物体空间方案,仅用了226次即可找到视锥节点进行裁剪。
除了裁剪,例如LOD、动态物体、ReflectionProbe等等,均可采用该方案进行优化,并且使用该方案,当物体越多时,优化效率的提升会越明显。
3.0渲染的Batch优化
引擎渲染的性能压力主要体现在DrawCall的数量,以及当引擎渲染的物体总在变化时,切换DrawCall对渲染的压力会比较大。所以从优化策略上,就需要减少CPU设置GPU的数量,以及减少渲染物体(Instance、Vertex merge)等。
在引擎渲染队列中,我们需要上传场景数据、摄像机数据、渲染节点数据、材质数据,然后是设置渲染状态,几何数据绑定等一系列流程,如下图所示:
在上述这个流程里,其实会产生大量重复的设置,于是就有了优化的空间。
传统的优化方案会使用UBO来优化场景和摄像机的数据上传,但渲染节点总在变化时就无法使用UBO来优化了,此时,我们采用建立一个缓冲区对象来存放每一个渲染节点,如下图所示:
这样当只有部分渲染节点动的时候,只提交该部分渲染节点的缓冲数据,节省了无变化渲染节点数据的提交。
材质数据的提交采用渲染节点同样的方案,但有所差异的是,每一个不同的材质,都会单独使用一个缓冲区对象。如下图所示:
在处理渲染状态的时候,我们采用调整渲染顺序的方式,减少渲染状态的切换。如下图所示:
经过一系列的优化后,最终的引擎渲染调整为下图所示:
优化后,可以大幅减少渲染指令,从而提升整体的效率。
3.0重构PBR流程及Linear接入
在3.0引擎里,我们还重构了PRB材质流程,与线性空间的接入。从而使得PBR效果在线性空间下,更加真实与自然。下图为LayaAir2.0与3.0 PBR效果对比图。
其它更多LayaAir3.0引擎方面的提升,后续在一月份(大概在9号那一周)公测的时候,再进行详细介绍,这里就不再展开了。
3.0引擎集成开发环境的提升
IDE是LayaAir 3.0最重磅的提升亮点之一,工欲善其事,必先利其器。3.0首次完成了2D+3D的一站式集成开发环境的建立。从3.0开始,无需再依赖第三方的工具来编辑3D场景了。我们可以观看视频,来预览LayaAir 3.0的八大核心模块。