Runtime 接入指南
使用须知:
- 暂不提供特效元素的接入
前置条件
请确定引擎中有如下对象:自定义材质、缓冲几何体、Mesh、Texture,这四个对象是接入 effects-runtime 中粒子和图层的必要条件。
下面给出在 Three.js 引擎和 Babylon.js 引擎中这些对象的类名作为参考:
- 自定义材质
- Three.js:
THREE.RawShaderMaterial
- Babylon.js:
Babylon.ShaderMaterial
- 缓冲几何体
- Three.js:
THREE.BufferGeometry
- Babylon.js:
Babylon.Geometry
- Mesh
- Three.js:
THREE.Mesh
- Babylon.js:
Babylon.Mesh
- Texture
- Three.js:
THREE.Texture
(包含THREE.DataTexture
、THREE.CompressedTexture
、THREE.VideoTexture
、THREE.FramebufferTexture
对象) - Babylon.js:
Babylon.Texture
(包含Babylon.VideoTexture
、Babylon.DynamicTexture
、BABYLON.RenderTargetTexture
对象)
接入事项
Material 接入注意事项:
不同引擎对于 WebGL 中状态机中状态的定义不同,需要有工具方法来实现 effects-runtime 和接入引擎间 GL 状态的常量映射表。
Geometry 接入注意事项:
在 effects-runtime 中部分 Attribute
在初始化时没有传入数据,如果引擎在做 GPU 数据创建时对于数据长度为0的做不做 GPU buffer 绑定或 GPU 资源创建,请通过 GeometryProps
中的 maxVertex
参数进行 Attribute
的创建。
Mesh 接入注意事项:
effects-runtime 中的 Mesh
都是在 3D 空间中同一位置放置的,在渲染时为了保证正确的渲染顺序需要正确的设置 priority
值,请确定引擎中有相应的概念。
Texture 接入注意事项:
和 Material
相同,不同的引擎对于过滤器、纹理环绕方式不同,同样需要工具类进行映射,同时 effects-runtime 存在不同类型的图片,请确认接入引擎中是否有相同概念。
可能使用到的类详解
GPUCapability 类
GPUCapability
类是 effects-runtime 中获取 WebGL 的功能支持情况,包括检测浏览器是否支持 WebGL、是否支持特定的 WebGL 扩展、支持的最大纹理大小、支持的最大绘制缓冲区大小等等。这些信息可以让开发者根据用户的设备和浏览器情况,决定是否需要降低渲染质量或者使用其他工具来兼容低端设备。
initialize
方法:GPUCapability
静态实例初始化函数,用来创建对象和获取 WebGL 的功能支持情况getInstance
方法:实例化对象,用于获取GPUCapability
变量detail
对象:WebGL 的功能支持的具体情况,在很多地方都会用到,比如AssetManager
的创建、Composition
的初始化等
AssetManager 类
AssetManager
在 effects-runtime 中是一个资源管理器,用于加载和动效中所有的资源文件,包括图片、插件、图层粒子数据等。它可以通过异步加载资源文件,确保动效在启动时不会因为资源加载时间过长而卡顿。
loadScene
方法:该方法是将 Galacean Effects 的 json 产物,变成 effects-core 用到的场景对象,并通过该场景对象创建出图层、粒子等元素
ThreeComposition 类
ThreeComposition
是 Composition
的抽象实现,用于在 Three.js 中衔接 Galacean Effects 数据处理与渲染设置,串联起 Galacean Effects 数据结构到 Three.js 中渲染的任务。Composition
抽象类的相关概念详见 effects-core 中的介绍。
initialize
方法:通过传入的参数和AssetManager
类创建出的场景对象来实现 composition 对象shouldRestart
参数:是否需要重新开始播放合成