首夏犹清和,芳草亦未歇。盛夏将至,Oasis 0.4 里程碑也落下帷幕。
引擎方面,重点升级 glTF 解析器,2D方面主要增加了遮罩能力和对 Lottie 动画的支持;编辑器方面,增加了 2D 编辑与场景编辑。另外,官网同步增加 20+ 示例和文档,包括开发者急需的美术流程和小程序文档。
功能
glTF 升级
出于对 glTF 稳定性和功能完善等方面的考虑,0.4 版本对 glTF 进行了全面的重构,大大增强了功能性和扩展性,同时修复了若干已知 Bug,覆盖了 glTF 官方的测试案例。
插件扩展方面,升级后的 glTF 解析器使用了管道(Pipeline)模式,如果默认解析器不能满足您的需求,可以参考引擎默认管道解析器的写法进行自定义配置管道,也可以通过装饰器的写法扩展插件,目前已支持以下插件:
插件 | 功能 |
---|---|
KHR_draco_mesh_compression | 支持 Draco 压缩模型,节省显存 |
KHR_lights_punctual | 支持多种光源组合 |
KHR_materials_pbrSpecularGlossiness | 支持 PBR 高光模式 |
KHR_materials_unlit | 支持 Unlit 材质 |
KHR_materials_variants | 支持多材质切换 |
KHR_mesh_quantization | 支持顶点数据压缩,节省显存 |
KHR_texture_transform | 支持纹理 TilingOffset 缩放位移变换 |
工具方面,我们贴心地提供了 glTF Viewer ,方便开发者拖拽 glTF 文件夹进行在线预览/调试。
glTF(GL Transmission Format)是 khronos 发布的一种能高效传输和加载 3D 场景的规范,与 FBX、OBJ 等传统模型格式一样,基本支持 3D 场景中的所有特性,也是目前 Oasis 推荐的 3D 模型格式。glTF 的插件机制使开发者可以自定义实现想要的功能。
2D 升级
精灵遮罩
精灵遮罩在 2D 中是比较常见的功能,通过遮罩,可以控制精灵某些区域的显示和隐藏。自 0.3 版本重构 2D 精灵后,0.4 版本新增了 SpriteMask 组件,提供精灵内遮罩和外遮罩的能力。详见文档。
编辑器也同步增加了 SpriteMask 组件和 SpriteRenderer 的 mask 属性设置。
Spine
Spine 是 Oasis 动画生态中的重要组成部分,因此对 Spine 的适配程度直接影响着 Oasis 生态的发展,0.4 版本我们对 Spine 的资源加载进行了强化,之前的版本只支持单路径加载,0.4 在此基础上增加了双路径加载。单路径加载要求 json(or bin) 和 atlas 必须同名。支双路径加载后 json(or bin) 和 atlas 文件可以不同名,更加灵活:
单文件:
const spineEntity = await engine.resourceManager.load({
url: "https://gw.alipayobjects.com/os/OasisHub/spine0.json",
type: "spine"
});
复制代码
双文件:
const spineEntity = await engine.resourceManager.load({
urls: [
"https://gw.alipayobjects.com/os/OasisHub/spineX.json",
"https://gw.alipayobjects.com/os/OasisHub/spineY.atlas"
],
type: "spine"
});
复制代码
另外,还修复了 SpineAnimation 组件在其挂载的实体进行克隆操作时,组件中 spine 骨骼与动画数据共享导致的 bug。详见文档。
Lottie
Lottie 作为近年来广受前端开发者欢迎的动画格式,也被 Oasis 作为拥抱生态的重点对象。0.4 版本我们初步实现了 Lottie 节点树中精灵元素(Sprite Elements)的绘制,后续会逐步支持蒙版、形状等高级元素。不同于 lottie-web 的 SVG 或 Canvas 渲染方案,Oasis Lottie 借助 Oasis Engine 的 BufferMesh 功能实现了高性能的合批绘制能力。详见文档。
编辑器新增 2D 编辑模式
操作区导航栏增加了“2D模式”的切换按钮,可以让用户在 3D/2D 编辑模式之间快速切换,方便 2D 项目的场景编辑。
我们使用引擎的 2D 能力,迅速复刻了经典小游戏 FlappyBird,并作为蚂蚁 527 技术日 Oasis 展台互动小游戏,欢迎使用支付宝扫码体验。
场景升级
背景
在 0.3 版本中,背景色的设置在相机组件中不合理。0.4 版本我们把背景相关的设置收敛到场景属性中,允许把背景设成纯色或天空,并开放了天空模式的网格和材质的设置。详见文档。
// 纯色模式背景
background.mode = BackgroundMode.SolidColor;
background.solidColor.setValue(1, 1, 1, 1);
// 天空模式背景
background.mode = BackgroundMode.Sky;
background.sky.mesh = PrimitiveMesh.createCuboid(engine, 2, 2, 2); // 设置天空网格
const skyMaterial = new SkyBoxMaterial(engine);
skyMaterial.textureCubeMap = textureCube;
background.sky.material = skyMaterial; // 设置天空材质
复制代码
同时在编辑器中增加了“场景设置”功能,现在可以在场景设置中调整“背景”与“环境光”的设置。
环境光
0.3 版本中,环境光相关的设置包含在 EnvironmentMapLight
组件和 AmbientLight
组件,结构比较零散。0.4 版本我们将环境光相关的设置进行了合并并收敛到 Scene
的 ambientLight
属性。环境光的漫反射分为纯色模式和纹理模式。详见文档。
const ambientLight = scene.ambientLight;
// 漫反射可以选择纯色模式
ambientLight.diffuseMode = DiffuseMode.SolidColor;
scene.ambientLight.diffuseSolidColor.setValue(1, 1, 1, 1);
// 漫反射也可以选择纹理模式
ambientLight.diffuseMode = DiffuseMode.Texture;
ambientLight.diffuseTexture = cubeTexture;
// 镜面反射
ambientLight.specularTexture = cubeTexture;
复制代码
其他功能更新
引擎
- Feature:默认开启 WebGLRenderer 的模板缓冲 #312
- Feature:矩阵添加线性插值 api #268
- Bug Fix:在 ShaderData 中设置 baseColor 无效 #306
- Bug Fix:编辑器中设置几何体参数无效 #293
- Bug Fix:支持完整的 VertexElementFormat,并支持是否归一化操作 #287
- Bug Fix:Blinn Phong shader 当多种直接光源时会报错 #323
- Bug Fix:FrameBuffer Picker 销毁报错 #316
- Bug Fix:点光源和聚光灯的 bug #279
- Bug Fix:射线检测不准确 #265
- Bug Fix:Spine Clone Bug #23
编辑器
- Feature:节点树增加右键菜单
- Bug Fix:截屏按钮不起作用的 bug
- Bug Fix:操作区中 gizmo 、辅助线以及相机操作的 bug
- Bug Fix:几何体参数设置的 bug
- Bug Fix:检查器表单输入体验优化
其他信息
示例
本期新增 22 个示例:
单测
整体单测覆盖率从 0.3 版本的 43% 提升到了 45 %。
我们接入了 codecov,可以查看详细的覆盖率统计。在 pull request 中,可以看到单测覆盖的评论:
并且在 README.md 里添加了 badge:
更多
- 里程碑 0.4:github.com/oasis-engin…
- Change Log:github.com/oasis-engin…
0.5 里程碑预告
Oasis 将对动画系统进行革新,分别是 Morph 动画和 Animator 动画,Morph 动画依然是目前很常用的动画形式,尤其在细节较丰富的动画表现方面。Animator 是 Oasis 的核心动画系统,重新设计后在动画融合和动画叠加等功能方面均有较大提升,性能方面预计提升30%,敬请期待!
最后
欢迎大家 star 我们的 github 仓库,也可以随时关注我们后续 v0.5 的规划,也可以在 issues 里给我们提需求和问题。开发者可以加入到我们的钉钉群里来跟我们吐槽和探讨一些问题,钉钉搜索 31360432
无论你是渲染、TA 、Web 前端或是游戏方向,只要你和我们一样,渴望实现心中的绿洲,欢迎投递简历到 chenmo.gl@antgroup.com。岗位描述详见:www.yuque.com/oasis-engin…。