引擎方面,重点升级 glTF 解析器,2D方面主要增加了遮罩能力和对 Lottie 动画的支持;编辑器方面,增加了 2D 编辑与场景编辑。另外,官网同步增加 20+ 示例和文档,包括开发者急需的美术流程和小程序文档。
出于对 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 场景中的所有特性,也是目前 Galacean Engine 推荐的 3D 模型格式。glTF 的插件机制使开发者可以自定义实现想要的功能。
精灵遮罩在 2D 中是比较常见的功能,通过遮罩,可以控制精灵某些区域的显示和隐藏。自 0.3 版本重构 2D 精灵后,0.4 版本新增了 SpriteMask 组件,提供精灵内遮罩和外遮罩的能力。
编辑器也同步增加了 SpriteMask 组件和 SpriteRenderer 的 mask 属性设置。
Spine 是 Galacean Engine 动画生态中的重要组成部分,因此对 Spine 的适配程度直接影响着 Galacean Engine 生态的发展,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 作为近年来广受前端开发者欢迎的动画格式,也被 Galacean Engine 作为拥抱生态的重点对象。0.4 版本我们初步实现了 Lottie 节点树中精灵元素(Sprite Elements)的绘制,后续会逐步支持蒙版、形状等高级元素。不同于 lottie-web 的 SVG 或 Canvas 渲染方案,Galacean 的 Lottie 组件借助 Galacean Engine 的 BufferMesh 功能实现了高性能的合批绘制能力。
操作区导航栏增加了“2D模式”的切换按钮,可以让用户在 3D/2D 编辑模式之间快速切换,方便 2D 项目的场景编辑。
在 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;
整体单测覆盖率从 0.3 版本的 43% 提升到了 45 %。 我们接入了 codecov,可以查看详细的覆盖率统计。在 pull request 中,可以看到单测覆盖的评论:
并且在 README.md 里添加了 badge:
Galacean Engine 将对动画系统进行革新,分别是 Morph 动画和 Animator 动画,Morph 动画依然是目前很常用的动画形式,尤其在细节较丰富的动画表现方面。Animator 是 Galacean Engine 的核心动画系统,重新设计后在动画融合和动画叠加等功能方面均有较大提升,性能方面预计提升30%,敬请期待!
欢迎大家 star 我们的 github 仓库,也可以随时关注我们后续 v0.5 的规划,也可以在 issues 里给我们提需求和问题。开发者可以加入到我们的钉钉群里来跟我们吐槽和探讨一些问题: