前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LayaAir负责人李嵘参加中国图学大会并分享3.0引擎技术

LayaAir负责人李嵘参加中国图学大会并分享3.0引擎技术

作者头像
Layabox Charley
发布2023-03-04 17:46:42
3950
发布2023-03-04 17:46:42
举报
文章被收录于专栏:LayaboxLayabox

第八届中国图学大会—Web3D引擎分论坛,也是首届中国网络图形学论坛的Web3D引擎分论坛,于2022年12月27日上午9点召开。同济大学贾金原教授、英特尔Web图形和机器学习研发团队负责人顾扬、LayaAir引擎负责人李嵘等三维引擎专家受邀参与本次学术性论坛的交流并进行技术分享。

在本次分享中,李嵘透露了即将推出的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的渲染内核层。

在核心算法层里,开发者可以在Native APP版本里,用C++语言的算法去替换掉JS引擎中的算法,这样可以减少因语言级差异导致的Native APP版本性能下降。

在渲染内核层,也是需要重点提及的地方。WebGPU是基于新的图形标准的API、支持CPU多线程、支持通用计算能力,这些都不是当前的WebGL具备的优势。当然,WebGPU当前还处于早期阶段,没有正式发布,也没有全面普及。所以LayaAir 3.0引擎,在Web端,除了面向当下的WebGL图形API,也支持面向未来的WebGPU图形API。在Native APP版本也是对应的,除了OpenGL之外,也支持Vulkan与Metal。

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的八大核心模块。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-12-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Layabox 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第八届中国图学大会—Web3D引擎分论坛,也是首届中国网络图形学论坛的Web3D引擎分论坛,于2022年12月27日上午9点召开。同济大学贾金原教授、英特尔Web图形和机器学习研发团队负责人顾扬、LayaAir引擎负责人李嵘等三维引擎专家受邀参与本次学术性论坛的交流并进行技术分享。
  • 在核心算法层里,开发者可以在Native APP版本里,用C++语言的算法去替换掉JS引擎中的算法,这样可以减少因语言级差异导致的Native APP版本性能下降。
  • 在渲染内核层,也是需要重点提及的地方。WebGPU是基于新的图形标准的API、支持CPU多线程、支持通用计算能力,这些都不是当前的WebGL具备的优势。当然,WebGPU当前还处于早期阶段,没有正式发布,也没有全面普及。所以LayaAir 3.0引擎,在Web端,除了面向当下的WebGL图形API,也支持面向未来的WebGPU图形API。在Native APP版本也是对应的,除了OpenGL之外,也支持Vulkan与Metal。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档