Skip to content

RoyRoot: 场景的管理器和引擎核心

在之前的第一个前端工程中,我们引入了AppClient这样一个类,它是前端工程的一个基类,在项目和引擎启动的过程中,AppClient中的以下方法被一次执行。

mermaid
graph LR
onInit==>onStart==>onUpdate
  • onInit负责初始化工作,包括
    • 引擎所需资源加载(如默认材质\贴图等)
    • 引擎本身的初始化
    • 系统特性检查,如是否支持webp格式等
    • 初始化注册进来的插件
    • 创建webgl或webgpu渲染上下文
    • RoyRoot的创建
    • 注册材质模板、注册资源管理器
    • 绑定dom事件
  • onStart负责场景准备,包括
    • 主场景创建
    • 相机创建
    • 间接光、太阳光创建
    • 天空盒创建
    • 根据项目需要创建交互使用的选择器、相机控制器、对象操作器等
    • 绑定requestAnimationFrame事件进入主循环
  • onUpdate是主循环的回调,包括
    • 资源释放检查
    • Tween动画更新
    • 主状态机更新

其中RoyRoot是一个比较重点的类,它是控制引擎及引擎对象的入库,我们重点介绍它:

  • 场景管理:RoyScene即场景的增删改查,一个项目可能同时有多个场景(如主场景和某个物体的单独展示视图),所有的场景都是通过RoyRoot来管理的
  • 资源管理:所谓资源是指RoyMesh(模型)、RoyTexture(纹理贴图)、RoyMaterial(材质)、RoyRenderTarget(离屏渲染目标)等组成,这些资源可以被任意场景中的对象复用。RoyRoot正是管理和跟踪这些资源使用情况的地方,其持有各种资源对应的管理器。
  • 引擎的execute函数,也就是引擎将场景数据送到GPU上渲染的入口,该函数会统计所有场景中被激活的相机,然后依据相机的参数和场景中物体信息,来组织被GPU理解的数据,并依次提交到GPU渲染吗
  • 引擎信息的Dump和跟踪入口。

以上就是RoyRoot提供的主要功能,从某种角度上来说,AppClient就是为了更好的有序的调用RoyRoot而建立的,桥接了web浏览器和引擎入口。RoyRoot也是唯一的一个全局的类,是引擎的入口。