在两个小版本之后,LayaAir引擎再次迎来了2.13这个大版本的更新。

本次版本中,我们不仅继续进行了大量的引擎优化,例如,优化3D渲染架构、优化后期处理流程、优化AO算法等等。

还增加了若干重要的3D新功能,例如,增加WebXR模块(支持VR显示与操作)、增加3D自定义分辨率、增加渐变环境光、增加新的动画插值方式、增加渲染命令、增加新的粒子功能等等,在本文中,会逐个详细介绍。

增加WebXR适配

WebXR 是一组支持将渲染3D场景用来呈现虚拟世界(虚拟现实,也称作VR)或将图形图像添加到现实世界(增强现实,也称作AR)的标准。

最近火热的“元宇宙”正是基于VR或AR的三维虚拟世界概念,沉浸式的视觉与交互体验也是未来的发展趋势。因此,LayaAir引擎在2.13版本中支持WebXR标准,并成功的Oculus Quest设备上进行了适配与测试。 已经实现了VR头显设备的沉浸式显示与手柄的操控。

在layabox官网中,我们也新增了VR的示例,以及VR的使用文档。开发者可前往官网查看示例效果与文档。

优化3D渲染架构

引擎的优化,一直是我们持续在做的事情。在本次的2.13版本中,我们优化了3D渲染架构,并因此带来一些新功能的增加,可以让开发者的项目有更自由的效果表现。

01

优化后期处理流程

本次3D渲染结构的调整,会节省一次后期处理的屏幕复制操作,规范了后期处理流程中的context的source属性和destination属性。

source属性是场景的渲染结构,也是传入下一个后期处理的源贴图,destination属性指最终结果贴图。因此开发者在开发后期处理时应将最终结果绘制在context.destination纹理上。

02

增加3D自定义分辨率

为了精致的画面,在现代移动设备中,往往需要更高的分辨率来渲染2D,如果用高分辨率来渲染3D就会浪费很大一部分性能。

因此,引擎在2.13版本增加了自定义的3D分辨率,开发者可以根据自身的需求放大或者缩小3D的渲染分辨率,而不影响2D的渲染。

适当的渲染分辨率对于画面表现力的提升,甚至是性能的提升,都会有很大的作用,尤其是后期处理比较多的场景,效果更为明显。

设置的方式非常简单,只需要对Config3D中的pixelResol属性设置值,就可以完成3D分辨率的自定义设置。

//设置自定义3D分辨率值,不设置的默认值是1
Config3D.pixelResol = 0.8; //这里设置为倍率系数

03

增加Camera多重采样的开关

基于自定义3D分辨率功能的增加,开发者在修改分辨率后,可能会使得锯齿感效果严重。因此,引擎在2.13版本中还增加了Camera的msaa属性,通过开启Camera的多重采样功能,来实现抗锯齿的效果。

var camera = new Laya.Camera(0, 0.1, 100);
//开启多重采样抗锯齿,该设置仅在webGL2.0下有效
camera.msaa = true;

重点提醒:该功能只在WebGL2.0下有效。

04

材质增加stencil的渲染状态

2.13版本中,渲染管线中增加了stencil模板缓冲区,stencil是除了颜色和ZBuffer外的一个额外缓冲区,用来自定义某些裁剪像素的功能。

例如,在官网新增的stencilDemo中,以Layabox LOGO为贴图的小球原本包在一个大球之内,正常的渲染状态是不可能看到小球的,当我们开启了stencil之后,大球挡住小球的部分被裁剪掉,小球就可以看到了。开启后的效果如下图所示。

在使用Stencil模板功能时,Camera的depthTextureFormat必须是具有模板缓冲区的渲染buffer。

var camera:Laya.Camera = (<Laya.Camera>scene.getchildByName("Main Camera"));
//使用Stencil模板必须具有模板缓冲区的渲染buffer
camera.depthTextureFormat = RenderTextureDepthFormat.DEPTHSTENCIL_24_8;

然后在Material中设置渲染的Stencil状态 。

//是否写入模板,true为写入material.stencilWrite = true;  //写入模板值为2material.stencilRef = 2;//模板测试方式,设置为总是通过material.stencilTest = RenderState.STENCILTEST_ALWAYS;//所属渲染队列,设置为渲染队列不透明material.renderQueue = Material.RENDERQUEUE_OPAQUE;

05

CommandBuffer的更新

在2.13的版本中,CommandBuffer新增了setShaderDefine命令,使得开发者可以在命令流中修改渲染的宏值,以达到一些特殊的渲染效果。

CommandBuffer还增加了ApplyOne函数,来调用来瞬时执行命令行,以便使用CommandBuffer做一些特殊的功能,比如自定义的大图合集等,使得CommandBuffer不一定非要在渲染流程中使用,可以插入开发者想使用的任何地方。

3D粒子功能更新

对于3D粒子,本次版本既有新增也有优化,我们分别进行介绍。

01

粒子增加Rate over distance

之前的引擎版本,粒子发射器只支持Rate over time,只能按一段时间发射一定数量的粒子。

此次更新,我们新增了Rate over Distance,可以按一段距离发射一定数量的粒子,用于实现拖尾相关的功能效果。

02

Color over lifetime最大值增加

LayaAir的3D粒子基于手机端性能的考虑,粒子渐变色参数只支持4个数据,刨除必须要存在的首帧数据以及末尾帧数据,开发者能使用的中间变量数据只能有两个,这将会限制美术的粒子效果发挥。

随着移动设备的不断升级,硬件性能也在不断提升,基于开发者的效果需求出发。本次的2.13版本,我们去掉了首尾帧必须存在的限制,并且将Color over lifetime渐变参数最大值调整为8。开发者使用限制从2增加到8,将大大增加粒子颜色的实现效果。

其它3D功能更新

01

新增渐变环境光

本次版本增加了渐变环境光的功能,开发者可以设置Scene的环境光模式。

开发者在使用时,需要先将场景的环境光模式(ambientMode)设置为渐变模式(AmbientMode.TripleColor),然后调用setGradientAmbient将三个颜色值传入场景,就会出现自定义的渐变色环境光效果。

效果如下图所示:

//场景环境光模式,设置为三色渐变模式
scene.ambientMode = AmbientMode.TripleColor;
//设置天空颜色值
let skyAmbientColor = new Vector3(0.56,0.89,1);
//设置地平线颜色值
let equatorAmbientColor = new Vector3(0.4,0.2,0.2);
//设置地面颜色值
let groundAmbientColor = new Vector3(0.09,0.08,0.5);//为场景设置渐变色环境光效果scene.setGradientAmbient(skyAmbientColor,equatorAmbientColor,groundAmbientColor);

02

lookAt增加普通对象模式

transform3D的lookAt方法在之前的引擎版本里是专门给摄像机使用的,如果用在普通物体上,将会得到一个反方向的朝向。

因此,本次版本的引擎,增加了一个参数来控制lookat函数是否用于摄像机。

//在最后增加了一个布尔值参数isCamera:boolean=true,如果设置为false,就可以用于普通物体
lookAt(target: Vector3, up: Vector3, isLocal: boolean = false,isCamera:boolean = true)

03

动画增加新插值方式

之前引擎版本的3D动画只支持埃尔米特插值方式,如果开发者在Unity中制作动画时,曲线使用了Weighted模式(如下图所示),由于算法的差异会导致LayaAir引擎的运行效果与Unity不一致。

本次引擎版本中,引擎新增了插值算法,保障开发者在动画曲线中使用Weighted后,效果与Unity保持一致。

但需要提醒的是,这种插值算法的性能消耗要大于埃尔米特插值,所以建议尽量避免在动画曲线时使用Weighted。

04

增加BlitFrameBufferCMD

本次引擎版本,还增加了BlitFrameBufferCMD渲染命令,这个渲染命令不需要在Camera的流程中设置,方便开发者拷贝图片等功能。

写在最后

新特性就介绍到这里,其它的一些优化,例如AO算法优化,以及BUG修复,可以前往layabox官网的更新日志中查看。

在2021年的最后一个月,我们送上2.x引擎的最后一个大版本。明年开始,LayaAir 2.x引擎可能仅保持小版本的稳定性与优化更新。全力投入到3.0引擎与IDE的更新与维护上。

2022年1月开始,LayaAir 3.0 beta版开始以主动邀请的方式,进行小范围测试与调优。至于公开测试的时间,需要看小规模测试与优化的进展,我们会在Layabox公众号上进行告知。希望大家保持对Layabox公众号的关注,及时获取引擎动态。

END

LayaAir2.13新特性:新增VR相关功能、渐变环境光、3D自定义分辨率、新的渲染命令、新的动画插值方式、新的粒子功能等等...相关推荐

  1. ActiveReports 报表控件V12新特性 -- 新增JSON和CSV导出

    ActiveReports 报表控件V12新特性 -- 新增JSON和CSV导出 ActiveReports 是一款专注于 .NET 平台的报表控件,全面满足 HTML5 / WinForms / A ...

  2. CSS3新特性——新增选择器,2D/3D转换,动画

    CSS3新特性--新增选择器,2D/3D转换,动画 欢迎大家去博客冰山一树Sankey,浏览效果更好.直接右上角搜索该标题即可 博客园主页:博客园主页-冰山一树Sankey CSDN主页:CSDN主页 ...

  3. React 18 新特性(三):渐变更新

    文章目录 前言 一.startTransition:渐变更新 举个例子 模拟代码实现这个例子 启用渐变更新 二.useDeferredValue:返回一个延迟响应的值 三.useTransition ...

  4. htm5新特性新增与弃用元素

    新增的元素 html5新增了一些语义化更好的标签元素. 结构元素 article元素,表示页面中的一块与上下文不相关的独立内容,比如博客中的一篇文章. aside元素,表示article内容之外的内容 ...

  5. H5新特性 - 新增标签

    新增的语义标签 标签语义化 旨在让标签有自己的含义,见名知义 优势 代码结构清晰,方便阅读,有利于团队开发(开发效率提高) 方便其他设备解析(屏幕阅读器,盲人阅读器)以语义的方式来渲染页面 有利于搜索 ...

  6. java9新特性-16-Deprecated的相关API

    1.官方Feature 211: Elide Deprecation Warnings on Import Statements 214: Remove GC Combinations Depreca ...

  7. Java SE 6 新特性 Instrumentation 新功能

    系列内容: 此内容是该系列的一部分:Java SE 6 新特性 Instrumentation 简介 利用 Java 代码,即 java.lang.instrument 做动态 Instrumenta ...

  8. babel css3新特性_2018年面试前端总结

    再有两个月,2018就快过完了,因而有必要在年末对2018年的前端学习做一个总结,本文主要从前端面试中的一些基础知识来对前端进行相关的总结.本文根据网络面试题进行总结. 基础知识 本部分主要从以下几个 ...

  9. android各个版本的新特性

    首先看看最新版本Android 11 : https://www.zhihu.com/question/420186152 4.0 Ice Cream Sandwich(冰激凌三明治):2011年10 ...

最新文章

  1. Pytorch中的广播机制
  2. 阿里云学生计划领取攻略
  3. MySQL LEFT/RIGHT JOIN:外连接查询
  4. 如何利用ESP8266模块实现远程控制
  5. libsvm 训练后,模型参数详解
  6. C#常见编码方式总结
  7. java 6 update 3_Java(TM) 6 Update(java运行环境) V 6.0.450.6 官方版
  8. python struct pack解析_Python struct 详解
  9. python 微服务框架_Python微服务架构chili_chicken
  10. 网络介绍 > 网络连接 > 混合云网络
  11. 程序员为什么需要学会Markdown
  12. ML for trading -cs7646-01
  13. pands 画图 调整大小_用宏命令对word里的图片尺寸大小进行批量修改的方法
  14. 大数据与云计算——Vmware虚拟化技术原理
  15. 高等数学笔记:定积分相关公式
  16. CHM [CHM 电子书 文件格式 定义规范]
  17. vue实现网络监控摄像头直播拍照功能
  18. ⑮霍兰德EA*型如何选专业?高考志愿填报选专业
  19. 防火墙的三种配置方案(转)
  20. 计算机视觉技术的应用实例,图像识别技术都有哪些?图像识别技术原理及应用实例...

热门文章

  1. Spring | Bean自动装配详解
  2. Python-ip代理
  3. 【SVM】基于matlab的SVM支持向量机训练和测试仿真
  4. 计算机文字录入培训大纲,《计算机文字录入》课程教学大纲.doc
  5. 塞班模拟器异常退出 Symbian Emulator Main Killed -4
  6. ECharts x,y轴分别添加自定义的滚动条
  7. Eviews 8.0&9.0界面新功能介绍
  8. mtk平台功率限制介绍
  9. python 类中静态变量_Python中的类或静态变量
  10. Java生成骑缝章带有CA电子签名认证