LayaAir新版本开源Live2D适配库、内置Spine适配库、大幅优化IDE体验、3D新增AO等功能

2021-08-05 15:49:58 浏览数 (1)

LayaAir 2.0自发布以来,我们一直在大版本推进3D引擎功能。最近,一些开发者也迫切希望对2D给予更多的关注与精力。作为非常重视开发者反馈的我们,在这个版本里,暂缓3D引擎大版本功能的推进,推出一个小版本,本次的2.12.1虽然是个小版本,但推出的功能并不少,除3D引擎的例行更新外,主要的亮点就是2D引擎与周边(Spine、Live2D、Box2D)的实用性功能支持以及IDE使用体验的大幅优化。

1

新增适配Spine3.7与Spine3.8

LayaAir引擎一直是采用自己的2D骨骼系统。对于第三方的骨骼(例如Spine)的使用,只能是通过LayaAirIDE的转换工具将第三方的骨骼文件转换成LayaAir引擎的私有格式文件(.sk与.png)。这种方案的好处是引擎自身可以进行极致的性能优化,远比第三方的运行性能要高很多。

但是,也存在一个短板。那就是 LayaAir引擎毕竟不是只做骨骼动画的引擎,把所有第三方的功能在LayaAir内部全都重新实现一遍没有必要,也会导致引擎的臃肿。所以LayaAir引擎只集成了骨骼动画常用和通用的功能。

因此,当开发者要使用LayaAir引擎不支持的Spine功能时,只能舍弃这部分功能。

本次版本(2.12.1)为提升开发者的使用体验,除保持原有的引擎内置的骨骼动画方案外。还新增了Spine3.7.x与3.8.x两个版本的适配方案,也就是Spine的计算运行采用Spine官方的js库,LayaAir引擎通过适配库,接管了Spine的渲染显示。

这种方案的好处是可以更好的使用Spine官方的功能,缺点是性能的瓶颈在于Spine官方的js库。并且经过实测对比,骨骼的运行性能一定是不如LayaAir引擎内置的骨骼动画方案。所以开发者如果只是使用Spine的常用与基础功能,仍然建议优先选用LayaAir内置的骨骼方案。

具体功能的使用,请参考官网文档

Spine刚刚推出的4.0.x,我们也在适配中,下个版本推出

2

Box2D物理引擎的更新

在以前的引擎版本中,LayaAir内置适配的2D物理引擎版本是Box2D 2.3.1,本次我们将这个物理引擎适配升级到Box2D当前的最新版2.4.1。

相对于之前的LayaAir2D物理版本, 距离关节DistanceJoint增加了minLength、maxLength这两个属性,于是乎,就和绳索关节RopeJoint重复了,因此,绳索关节RopeJoint被删除,有使用原绳索关节的,可以用新版本的距离关节DistanceJoint来代替。另外,车轮关节WheelJoint增加了刚体移动范围约束enableLimit、移动范围下限lowerTranslation、移动范围上限upperTranslation,这几个属性。

除关节外,本次物理引擎还增加了边线碰撞体Edgecollider。边线碰撞体只能是两个端点组成的线段,这与链条碰撞体ChainCollider可以是两个端点的线段也可以是多个点的折线不同。另外,即便同样都是两个端点组成的线段,看上去外观一样,但是在碰撞时,边线碰撞体Edgecollider可以两边都发生碰撞 ,而ChainCollider只能是单边产生碰撞,另一边是可以穿透过去的。

关于本次2D物理新增功能的使用,更详细的说明,可以查看Layabox官网的2D物理文档。

除两者对比的区别外,需要提醒的是,此次升级后的物理版本,边线碰撞体与链条碰撞体都不受重力影响。而以前的物理版本,链条碰撞体ChainCollider是可以受重力影响的。

除了新增的功能变化,此次物理引擎升级,还带来了性能上的提升。在多个平台实测碰撞计算压力较大的DEMO,均有超过30%的性能提升。另外,新版物理引擎压缩后仅为240K,相当于旧版物理引擎压缩后的34%。关节的运行也更加稳定。但是实测堆叠相关的稳定性稍弱于旧版。

3

IDE的新增功能与优化

之前的版本,主要的更新都集中3D引擎上,LayaAir IDE除了小游戏平台的适配更新外,针对IDE的更新内容比较少。本次版本,对于IDE的体验优化也是比较重要的一块。我们在开发者群与社区里收集了大量的开发者反馈,对于收集到痛点逐一验证并进行优化。

首先是MAC系统的优化,原来的IDE版本解压后是app格式,要手动copy到应用程序目录。本次版本解压后是dmg格式,是一种常规的软件安装模式,以后安装使用更加方便快捷。并且本次版本还支持了苹果M1芯片的设备。除此之外,还丰富了MAC系统下的IDE快捷键,例如增加了全屏与退出全屏(control command F)、最小化(command M)。

针对MAC与Win同步都新增的功能也有不少,例如:

  • 在新建场景同级新增创建预制体,这样对于仅用于对象池的预制体,就避免了先到场景创建再从场景上删除的多余操作。
  • 还新增了文件相关的组件弹出框,当编辑大段的文本时,就可以更加直观和方便了。
  • IDE里也全面升级切换到2.4.1的物理引擎,之前没有的功能(边线碰撞体以及一些关节的属性增加)也同步新增了。
  • IDE里的项目设置(F9)增加spine3.7,spine3.8类库勾选,这样使用spine的时候,勾选一下对应的类库,就可以了。
  • 增加工程栏刷新快捷键(Win:Ctrl Shift F5、MAC:command shift F5)

针对IDE原有的功能,基于开发者的反馈也进行了体验优化,例如:

  • 纹理压缩的功能,由原来的服务器上传压缩,改为集成到IDE内部,在本地进行压缩,这样压缩效率会更加稳定与高效。并且,对于需要转换为等宽等高且是2的幂大小的图片压缩需求,IDE工具也会自动帮开发者处理。
  • IDE里删除某个文件后,bin目录中也会自动删除对应的文件。避免目录冗余文件
  • 启用版本管理时,将版本号映射文件version.json也加入管理,这样就彻底实现了全部的文件版本管理。
  • 原UI编辑中的选中框会随着缩放变化,可能会导致某个边因缩放而消失,优化后会固定边框像素大小,永远不会消失。
  • 原有添加组件的功能,会把src下所有的代码都视为组件脚本,本次版本会排除没有继承Laya.Script的脚本,仅显示2D脚本组件,避免添加组件时被其它脚本干扰。
  • 对于非节点的组件,不显示保存预设按钮,避免小白开发者误操作引起运行错误。
  • 让UI组件VBox、Hbox在IDE里可以所见即所得的查看布局效果。
  • 可批量设置多个资源的默认属性了。

除了以上的新增与优化外,本次版本还修复了一些IDE的BUG,就不在这里一一列出了,开发者可以从IDE下载的更新日志里查看。

4

开源Live2D的适配库

从用户的反馈频率来看,使用Live2D这个动画软件的开发者近年来越来越多。基于开发者的需求出发,LayaAir引擎自本次发版开始,将Live2D的LayaAir引擎适配库,连同整个适配库项目与文档说明,已提交到gitee上,有需要的开发者,可以前往clone,地址为:

https://gitee.com/layabox/live2d

5

3D引擎的更新

最后讲一讲压轴的3D引擎更新,本次的LayaAir 2.12.1引擎版本,除了修复BUG外,也有一些功能新增和优化。

首先是AO(Ambient Occlusion)环境光遮蔽,环境光遮蔽后期处理效果是一种类似实时环境光遮蔽的全屏幕后期处理效果。它会使彼此靠近的褶皱、孔洞、交叉点和表面变得更暗。效果如下图所示:

关于AO的使用的方式,开发者可前往官网的示例查看,地址为:https://layaair2.ldc2.layabox.com/demo2/?language=zh&category=3d&group=PostProcess&name=PostProcess_AO

第二是增加1字节,2字节,3字节的顶点设置格式。以前引擎最小的顶 点数据格式是4字节 ,从本次版本开始,开发者可以根据需求 极致压缩顶点数据。

例如下面的示例代码组织了一个3字节的位置,3字节的法线以及3字节的顶点色,大大节省了vb占用的空间:

代码语言:javascript复制
let vertexDeclaration = new VertexDeclaration(9, [
    new VertexElement(0, VertexElementFormat.Byte3, VertexTerrain.TERRAIN_POSITION0),
    new VertexElement(3, VertexElementFormat.Byte3, VertexTerrain.TERRAIN_NORMAL0),
    new VertexElement(6, VertexElementFormat.Byte3, VertexTerrain.TERRAIN_COLOR0)
]);

横向滚动代码可以查看全部

第三是增加全局静态合并和动态合并的开关。从本次版本开始,开发者可以根据需求使用Config3D来控制引擎自带的动态合批以及静态合批。具体的API分别是Config3D.enableDynamicManager以及Config3D.enableStaticManager。

除此之外,还有一些功能优化,例如:

  • 将DepthNormalTexture数值中从世界空间中的法线值转换为view空间中的法线值,
  • 修改DepthNormalTexture中的初始值,
  • 健壮RenderableSprite3D的生命周期。

BUG修复相关的,开发者可前往官方的引擎更新日志查看。

0 人点赞