Skip to content

RoyScene:3D的舞台

有了对RoyRoot的理解和认识,那么接下来就可以创建一个场景。在一些引擎中,往往有一个stage,即舞台的概念,RoyScene和这个概念类似,但是需要注意的是,RoyScene是由多个的,可能项目中会同时存在多个场景。

RoyScene承担了几个方面的工作:

  • RoyScene管理RoySceneNode(场景节点),一般来说3D场景都会管理一个场景树,场景树是由场景节点构成的,每一级场景节点都由自己的坐标系,形成从子节点的本地坐标空间到父节点的本地坐标空间的映射,往往场景的根节点的坐标空间被称为世界坐标空间。这样使用树形结构组织场景,就建立起3D对象之间的位置关系。
  • RoyScene负责场景的裁剪,在RoyScene中有一些裁剪策略,当一个RoySceneNode被创建和添加时,也会添加到裁剪策略的管理器中去,比如常用的有八叉树、BSP等裁剪策略,那么场景再渲染之前,也会识别出被裁剪掉的RoySceneNode上的附着的对象,以减少和GPU的交互和压力。
  • RoyScene负责场景拾取,当点击鼠标或者框选屏幕时,会形成用于拾取的3D射线或锥体,通过场景的结构组织,拾取到射线或者锥体与哪些RoySceneNode及其附着的3D对象碰撞。
  • RoyScene还负责场景级别的参数控制,比如场景中的灯光统一强度,统一刷新场景中所有的3D对象的某种属性等。

以上就是RoyScene的主要工作,在运行时RoyScene会做一些优化控制:

  • 场景中的对象变化时,标记该物体,更新时只更新变化的部分
  • 场景中相同物体的批次合并。
    • 硬件实例化,使用Instance合并
    • 软合并,将材质相同的细碎mesh合并为一个可绘制对象
    • 软合并Adv,将材质不同的细碎mesh合并为一个可绘制对象
  • 场景中MeshLod的管控

这些信息并不需要使用方来管控,依然按照常规方式使用,这里仅需要了解以下RoyScene还做了这些事情即可。