Skip to content

RoyEngine 操作手册

简介

RoyEngine引擎是一款实时的、基于物理渲染的跨平台引擎,尤其侧重在PC端和移动端的Web平台,它的涉及目标是引擎内核尽可能的小巧和高效,同时快速的开发、项目管理与迭代。开发语言是C++和TypeScript,其中C++负责基础部分,TypeScript则是业务主体。

为了达成上述目标,引擎由以下几个方面构成:

基础层(C++部分)

  • RoyEngine:与web结合时编译为wasm,负责渲染数据的组织,渲染管线的布置,提供大规模数据遍历、裁剪、重组的能力,并将最终的渲染指令推送至GPU。其本身配合工具有材质的编译,IBL的生成等。

  • RoySolid:与web结合时编译为wasm,是基于OCCT的封装,拥有实体建模的基础能力,外部可以根据实际的项目需要对此再次封装,以达到快速建模的目的。

  • RoyService:后端的服务集群的统称,作为一个web端的引擎框架,并不适合在web端进行重度的工作,一些工作需要服务化。其工作主要是将此类任务交给部署在云上的服务器处理,如模型格式的转化,模型的减面,渲染图、渲染视频的生成等。此服务框架的特点是易用的多线程、高并发特点,复用性强,非常容易扩展新类型的应用和任务。为了达成开发环境,服务端以Nodejs为基础,C++部分作为nodejs的dll注入,共同完成任务。

中间框架层(TS部分)

  • RoyBase:通用能力库,包括数学库、事件系统、观察者模式封装、内存池管理、MD5、Tween、数据绑定、Base编码等工具。

  • RoyProtocal:是整套框架的数据的一个定义,它定义了在RoyEngine框架下的数据形式,约束了开发的基础以及衍生的各个模块其数据定义的基本形式,同时作为双端实时通讯的标准。有了这套标准,各个模块开发和交互的时候沟通起来会非常顺畅。

  • RoyInterface:基于RoyEngine的一层封装,基于Object-Component封装的层次结构和接口,也应用了RoyProtocal定义的数据标准,方便使用者将需要渲染的数据传递给引擎,将收集到的数据初步处理扁平化后送入渲染引擎渲染,处理包括裁剪、合批组织等优化内容。

  • RoyImpl:渲染器的分发,将RoyInterface收集到的渲染数据分发给不同的渲染器,不仅仅可以给到RoyEngine,还可以送给Unreal等商业引擎,将渲染器与实际的上层业务相分离。

  • RoyFrame:基于RoyInterface的一层封装,如果说RoyImpl解决的是渲染数据分发的问题,那么RoyFrame解决的是工程一致性的问题。一个丰富的引擎需要有很多功能,这些具体的功能由各个团队开发,并能够有机的组合在一起,形成最终的有价值的产品。协调各个插件、提供共用的基本功能、约束各个插件的开发方法是该模块的主要功能。该部分包括三个部分RoyFrameBase、RoyFrameClient、RoyFrameService,RoyFrameClient和RoyFrameService依赖于RoyFrameBase,分别在客户端和服务端提供框架支持。

  • RoySvgApi:基于axiso对三维家API的封装库,基于Cookie和AuthCode对三维家数据的操作和访问,方面各个业务功能插件的开发。

  • RoyUI:一套基于Html+Css封装的UI系统,与传统的UI开发模式不同,RoyUI将开发者从反复的Css配置中解脱出来,从负责的UI逻辑中解脱出来,而让开发人员专注于业务逻辑的开发,实现数据到界面的双向绑定,使用者只需定义数据结构,即可自动生成UI界面。(注:如果是有特殊需求的界面,提供封装成组件的能力)。目前有越来越多的Web端框架如基于React的antd、基于Vue的uniapp、新兴的Flutter等,考虑到这部分因素,RoyUI虽然存在,但不会再继续维护,而是转向主流的Web端UI框架。

应用层(TS部分)

  • Plugin:基于RoyFrame开发的各个插件和产品,每个插件都有独立定义数据、独立完成某一项功能的能力,如全景图插件、柜体生成插件等,这些插件因RoyFrame的约束可自然的组合在一起,而不用在项目后期费神的去查找因集成而产生的不稳定性问题,目前已经有越来越多的开发者贡献自己的插件。

  • Apps:基于RoyFrameClient与所需Plugin而封装成为的web端最终产品,往往内容很薄,框架层实现被royframe承担,功能实现被插件层承担。可以选择适合自己的框架如Umi、UniApp等,任何前端框架都可以与RoyFrameClient和Plugins结合。

  • Cloud:基于RoyFrameService与所需Plugin而封装成为的node端最终产品,服务端可以选择自己的框架如NestJs等,任何成熟的nodejs服务端框架都可以与RoyFrameService和Plugins结合。

结语

整个RoyEngine,是一个注重效率、扩展、工程化实现的集成开发环境,注重引擎前后端生态的搭建。引擎不断发展新的特性,以期在未来成为一个能够为使用者带来舒适体验的渲染引擎。