IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> LayaAir2.12.2新特性:众多性能提升点,新增Spine4.0适配、调整3D场景架构、新增深度值等功能... -> 正文阅读

[游戏开发]LayaAir2.12.2新特性:众多性能提升点,新增Spine4.0适配、调整3D场景架构、新增深度值等功能...

自2018年LayaAir2.0 引擎版本诞生起,基于小游戏产业对3D引擎功能的刚需,引领Web-3D引擎技术的我们,始终保持着大版本的更新。

随着LayaAir3.0引擎与3D-IDE的研发启动,开发者会发现,引擎的大版本更新的节奏已经放缓。其实,放缓大版本,并不仅是因为3.0的研发启动。更多是由于常用的功能已经成熟完善,我们需要将更多的精力放到引擎的稳定与优化上。所以,本次版本,我们针对引擎的优化工作做了大量工作。

3D引擎性能优化

性能极致一直是LayaAir的核心目标,对性能优化的作用也丝毫不逊色于功能新增, 甚至在基础功能得到满足后, 引擎底层的性能将是大大的加分项。在本次的2.12.2版本里,最最出彩的部分,应该就在这里了,大家一定要认真阅读哦~

01

优化矩阵更新,降低CPU压力

在之前的引擎版本中,当我们要拿到某一对象的世界矩阵时,需要根据矩阵的更新标记,从自身的local矩阵开始,一层一层的更新矩阵直到scene节点。如果在层级中某一层的local矩阵为单位矩阵时,这一层的更新并无效果。

我们基于此,本次版本做了每个节点的local矩阵是否为单位矩阵的缓存,如果是单位矩阵,我们将省去这一层的更新,对于一些层级比较深的游戏,会有比较明显的效果提升,有效降低CPU压力。

02

增加动画降帧函数,避免性能浪费

以前引擎版本的动画更新机制是引擎会在帧循环流程中更新所有动画组件,根据动画的播放时间,计算出动画的更新数据数据。

但是在动画控制的节点距离比较远,或者根本看不见的时候,高频率的更新会显得有些浪费。

因此,本次版本在动画系统中增加了Animator更新标记AnimatorUpdateMode。

a53def634003e2bd9e5a2c3cd9e84ed4.png

点击放大查看高清原图

提供了Normal(正常更新),LowFrame(低频率更新),UnScaleTime(不更新)几个更新模式供开发者自己选择。

开发者可以在Animator中设置updateMode属性来设置更新模式,以及lowUpdateDelty参数来控制更新模式是LowFrame的时候更新的频率。

d65ec2889ece8ebbb6781cfd5f18ca1b.png

点击放大查看高清原图

03

直接使用渲染深度图,优化后期处理

在以前的引擎版本中,我们获取深度图的时候,需要将场景都渲染一遍,相对会消耗性能。

78096e01214e55336473b5e7e97ad4d5.png

点击放大查看高清原图

在本次引擎的方案中,就可以省去这部分渲染,直接将渲染时使用的深度图拷贝出来使用,大大优化了渲染性能和渲染前的组织开销

34df15cb86c2eb5307820946581c3a86.png

点击放大查看高清原图

需要注意的是,该方案不可以在主流程渲染的时候使用此深度图,仅对于大量的后期处理流程优化明显

04

优化渲染流程,骨骼动画等提升显著

随着LayaAir引擎渲染流程的健壮,会出现同一Camera在一帧中有多次渲染,之前的版本会将一些不需要频繁更新的数据(比如WorldMatrix)放入多次更新中,会产生不必要的更新消耗。

因此增加了基于Scene的标记来保证每帧只更新一次相关数据,对骨骼动画、uniform提交等性能进行了优化,效果比较显著。

05

重构粒子,优化粒子性能与显存占用

本次版本重构了粒子,重构后的粒子使用了instance的方式,大大增加了粒子生成的性能,同时还优化了对显存的占用。

通过下面的两张对比图,我们可以看出,同一个粒子。消耗占比从优化前的68.9%,经过优化已降低至0.7%。

bcb2cb86f4b765d42f2885b1e43952b7.png

点击放大查看高清原图

f91b387308c1637731003d13c88422bc.png

点击放大查看高清原图

3D功能的新增

在以往的引擎版本中,摄像机深度格式与深度纹理的默认值是DEPTH_16,随着深度广泛的使用,有的开发者会发现16位的深度已然不够用。

在本次LayaAir 2.12.2版本,为camera增加了深度贴图模式属性depthTextureFormat

1427a8f958d933d161dbb8d0127b341e.png

011e79036f56e9ae0d42a6b88b465d88.png

点击放大查看高清原图

以及在RenderTextureDepthFormat增加了24位和32位深度模式的值。用于设置depthTextureFormat属性。

75fc347100283cbf84d834864fda53c1.png

点击放大查看高清原图

除此之外,还增加了新的纹理采样格式MirrorClap。

调整场景管理架构

在LayaAir 2.12.2之前的引擎版本中,渲染节点的管理有两种方式。一种是视锥遍历所有的渲染包围盒,取出渲染节点。还有一种是八叉树的管理方式。

本次版本开始,LayaAir引擎调整了架构,可以通过插件式插入渲染管理结构,只需要调用Scene3D的sceneRenderableManager属性,传入自定义的sceneRenderManager就可以正确的接管引擎的渲染管理。

需要注意的是,此自定义的类必须继承ISceneRenderManager接口,必须实现接口中的函数。引擎会自动调用这些函数进行渲染。

本次调整,为之后引擎版本的无限大地图功能,地形等功能提供了基础。

2D引擎的更新

2D引擎方面,新增了spine 4.0版本的适配。

对于Spine适配版,整合SpineTempletBinary类,统一入口为 SpineTemplet,还精简了SpineTemplet.prototype.loadAni 方法的参数。

除了Spine的重要更新,也有一些引擎代码优化的内容,更多细节详情可以查看官网引擎版本的更新日志。

76322eaa48df761accbe20db0134195e.png

END

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2021-09-30 12:15:25  更:2021-09-30 12:16:54 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/28 3:29:29-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码