这是一次重要的发布。除了众多的引擎功能更新,配套的 Web 编辑器也一同发布。拥有配套编辑器的 Galacean 将大幅提升 2D、3D 互动项目的开发体验和效率。欢迎放问我们的官网首页(galacean.antgroup.com)申请内测,体验编辑器为你带来的便捷!从此,我们的里程碑发布也将着重从整体产品视角讲述内容。当然,如果你有存量的 Pro Code 的旧项目想升级新版本的引擎,我们仍提供了独立的运行时。
以下是本次里程碑的重点更新内容:
与编辑器中其他资产相同,用户可以方便的进行创建、删除、导出场景资产。这使得在同一个项目下编辑多个场景、多个场景复用相同资产成为可能,将帮助用户有效提高场景编辑效率。
我们对烘焙环境光的模式进行了重新设计。与之前上传 HDR 贴图的时候进行烘焙的方式相比,编辑器现在支持根据场景进行烘焙,并且默认内置大气散射作为场景背景和环境光。通过场景面板,用户可以选择天空盒、大气散射、纯色、HDR 贴图等作为烘焙的来源。同时,用户还可以通过设置旋转、曝光、烘焙分辨率等参数,灵活地生成所需的烘焙效果,大幅提升了易用性和功能性。
SceneManager
新增同时渲染多场景能力,现在可以调用 addScene
和 removeScene
方法管理多场景,scenes
属性为当前的场景渲染队列。另外物理功能也调整为逐场景,每个场景可以通过 physics
属性进行场景全局物理功能的控制。
支持 KTX2 压缩纹理格式,glTF 支持 KHR_texture_basisu 扩展,减少纹理内存占用。在编辑器侧只需要在项目打包开启 KTX2 选项即可。
纹理新增动态模式,针对纹理内容频繁变更的场景性能大幅提升。比如播放视频这类需求,推荐开启动态模式。优化前(左)后(右)FPS 大幅提升,部分机型可提升 5 倍左右:
重写了粒子渲染器,粒子作为动效的重要组成部分,可以大幅提升项目整体的渲染氛围。重写后的粒子渲染器除了支持更多的初始生成参数,还新增了多种生命周期变化的相关参数,无论在功能和渲染侧对美术都更加友好。 详见文档。
目前编辑器中暂不支持粒子编辑,即将在 1.1 后续的小版本迭代中推出,敬请期待!
Galacean 引入了一门全新的 Shader 语言 - ShaderLab。它对于 Shader 的编写提供了诸多便利,比如,现在开发者可以在同一个 Shader 文件中指定顶点和片元着色器,同时指定渲染管线、设置渲染状态等等。相较以往版本,ShaderLab 使得自定义 Shader 的编写变得非常方便。详见文档。
我们还在积极开发一款专为 ShaderLab 设计的 VSCode 插件,该插件将针对 ShaderLab 提供语法高亮和 Linting 服务,敬请期待!
ShaderLab 语法示例:
Shader "ShaderName" {
// 声明 uniform 变量
mat4 renderer_ModelMat;
...
SubShader "SubShaderName" {
// 定义 Pass
Pass "PassName" {
// 设置渲染状态
BlendState blendState {
SourceColorBlendFactor = BlendFactor.SourceAlpha;
...
}
BlendState = blendState;
// 指定渲染队列
RenderQueueType = RenderQueueType.Transparent;
// 设置顶点和片元着色器
VertexShader = vert;
FragmentShader = frag;
v2f vert(a2v input) {
...
}
void frag(v2f input) {
...
}
}
}
}
新的面板管理提供了更多的灵活性和自定义选项,让你能够根据自己的喜好和工作流程自由地调整窗口的位置和大小,以便更好地适应自己的屏幕布局和工作需求。通过简单的拖拽操作,你可以轻松地重新排列编辑器中的各个面板 ── 无论是节点树面板、资产面板还是检查器面板。
脚本参数是新增的另一项重要功能。此功能极大的提高了脚本的灵活性和易用性。借助此功能,你可以将脚本中的属性暴露到编辑器界面上,从而调节项目在运行时中的各项属性。你可以直接在界面上修改脚本的各项属性,而无需深入代码进行修改。这种直观的编辑方式可以让非专业开发人员也能够修改场景的状态而不需要理解相关代码。 脚本参数的使用方法也非常简单。首先,在脚本编辑器中使用内置的装饰器函数修饰对应的属性:
import { Script } from '@galacean/engine';
import { inspectProperty } from "@galacean/editor-decorators";
export default class extends Coin {
// We export this attribute to the Editor
@inspectProperty('Number', {
value: 1,
min: 0,
max: 10,
dragStep: 1,
})
private rotate = 1;
onUpdate(deltaTime: number) {
this.entity.transform.rotate(0, this.rotate, 0);
}
}
这里配置了一个名为 rotate
的私有变量,并使用 @inspectProperty
装饰器定义了此变量在编辑器中的一些配置,如最大/最小值,拖动的步进值等;
定义好后,保存脚本,你可以直接在预览页中查看到最新的场景状态:
回到编辑器,点击 parse 按钮,编辑器会解析脚本并收集脚本定义的变量,最后根据配置生成出对应的可调试属性。如下图,编辑器根据上面的脚本生成出了 rotate
属性的配置选项。
相机新增深度纹理功能,开启深度纹理后可以通过 camera_DepthTexture
属性在 Shader 中访问深度纹理。深度纹理可以用于实现软粒子和水面边缘过渡,以及一些简单的后处理效果,Shader 自定义能力增强。详见文档。
过去的串行管线存在着设计缺陷,不能同时处理 glTF 中或 glTF 插件中的的资源请求,因此引擎将整个 glTF 加载管线重构成了并行解析,大大减少了加载耗时。
另外,glTF 管线扩展的方式从创建 GLTFPipeline 对象
调整为装饰器 registerGLTFParse(GLTFParserType.***)
。详见文档。
动画曲线编辑支持引用类型,关键帧的值可以是资产类型如(精灵,材质),例如你可以通过创建引用类型的动画曲线实现帧动画的功能。
除了原有通过高级数据生成 ModelMesh 的方式,ModelMesh 新增了 setVertexElements
和 setVertexBufferBinding
等接口用于通过设置低级数据生成 ModelMesh。通过低级接口设置数据可以更自由和高效的操作顶点数据,达到性能提升和灵活定制。详见文档。
SkinnedMeshRenderer
开放 Bones
属性,用户可以自定义修改蒙皮网格渲染器的骨骼。另外 glTF 模型由于之前延迟初始化机制导致 rootBone
属性需要渲染一帧值才正确的缺陷也得到修复。
camera_Forward
和 camera_Up
deepClone
支持递归克隆Rand
伪随机数GraphicsResource
支持 isContentLost
属性,判断渲染资源的内容是否已经丢失ResourceManager
支持 findResourcesByType
方法,可以根据类型获取所有资源列表里程碑 1.2 编辑器将会对外开放公测,届时所有开发者均可使用 Galacean 编辑器提升互动项目的开发体验和效率。另外 Galacean 的 XR 系统也即将在里程碑 1.2** **上线,敬请期待!