.net网站开发实例,食品建设网站的目的,搜索引擎营销的案例,百度搜索数据游戏引擎分层架构#xff08;自上而下#xff09;
工具层#xff08;Tool Layer#xff09; 在一个现代游戏引擎中#xff0c;我们最先看到的可能不是复杂的代码#xff0c;而是各种各样的编辑器#xff0c;利用这些编辑器#xff0c;我们可以制作设计关卡、角色、动画…游戏引擎分层架构自上而下
工具层Tool Layer 在一个现代游戏引擎中我们最先看到的可能不是复杂的代码而是各种各样的编辑器利用这些编辑器我们可以制作设计关卡、角色、动画等游戏内容这一系列编辑器就构成了引擎最上面的一层——工具层。 功能层Function Layer
将一个三维虚拟世界转换为一帧一帧的二维图像的过程我们需要用到渲染系统Rendering让一个个静止的模型运动起来做出惟妙惟肖的动作形成连续的画面我们需要用到动画系统Animation物理的碰撞各种力的作用让物体的运动更贴近真实世界我们需要用到物理系统Physics每一个游戏世界都有着自己的规则还要有NPC来丰富游戏可玩性这就需要用到脚本Script、状态机FSM和AI
任何一个游戏的操作都离不开人机交互这其中又涉及一系列功能。以上的种种功能组合在一起便构成了游戏引擎的功能层。 资源层Resource Layer 游戏中有的不只是一行行的源代码还有各种格式的多媒体文件如PhotoShop的PSD文件、3DSMAX的MAX文件加载管理这一系列的图形、图像、音频、视频文件以及其他数据就是资源层的任务了。资源层位于功能层之下不断为功能层提供数据这就好像上面是一个画家在画画而资源层在下面不断为其提供颜料。 核心层Core Layer 游戏引擎中最核心最重要的一层就是核心层。核心层负责响应上面层次频繁的调用提供各种基础功能如内存管理、容器的分配、数据的运算、多线程的创建等等。 平台层Platform Layer 平台层是最容易被忽略的一层一款游戏或者引擎可能被发布在不同的平台上会有不同的图形接口并且不同的用户可能使用不同的硬件设备如键鼠和手柄。适应不同的平台就是平台层的任务。 第三方库Third Party Libraries 中间件和第三方库通过SDKSoftware Development Kit的形式或文件格式进行转化。 为什么要分层架构 为了使游戏引擎解耦并降低复杂度每一层都将独立完成自己的任务底层为上层提供基础服务上层调用底层的工具。这样的分层架构使得上层灵活底层稳定更有利于功能的更新和开发。
资源层
Photohop中的PSD文件、3DSMAX中的MAX文件等一般包含工具自带信息大量与引擎无关的数据数据格式比较复杂 直接使用会很大程度上降低效率。为了提高调度资源的效率需要引擎在导入时将不同资源都转换为资产assets文件。例如引擎中使用贴图文件时我们可能导入JPG、PNG格式的文件但这两种文件的压缩算法对于GPU来说并不高效直接在GPU中使用会浪费性能所以其通常被转换成dds格式再存入显存中。 对于任意一个游戏人物例如上图的小机器人可能需要绑定对应的材质、贴图、网格、动画等资源定义一个Composite asset文件关联这些资源比如XML文件并使用GUID全局唯一标识符进行标识管理。 实际运行时游戏还需要用到资产管理器Runtime Asset Manager其根据资产的生命周期Asset Life Cycle对资产进行管理操作资产的实时加载卸载、资源的分配、垃圾回收GC、延时加载等都包括在其中。
功能层 功能层的使用使得每过一个tick时间游戏中的虚拟世界就会前进一步。一个tick时间内分别执行tickLogic()和tickRender()函数其中逻辑方面的tickLogic()一般先执行主要用于模拟游戏世界包括输入输出的处理、相机视角位置的变换、碰撞的检测等操作用于绘制世界的tickRender()则依据tickLogic()计算出的各资产的位置情况进行渲染绘制。 功能层非常的复杂庞大特别是涉及到网络编程时所以通常需要借助多线程计算。当前主流的多线程是将可以并行计算的任务拆分开来分别放到多个线程运算但若有不适用于并行计算的任务其缺陷便显露出了。在未来引擎会将每个任务划分为极小的可执行单元将这一个个原子般的任务分配到多个线程中执行更加高效的利用资源。
核心层
核心层为上层的所有逻辑提供一个基础它提供数学库如矩阵运算、数据结构和容器如二叉树、内存管理等工具。因为引擎的一切都是以效率为核心的所以在进行数学运算时可以使用近似运算或者SIMD单指令多数据流以同步方式在同一时间内执行同一条指令提高运算效率至于数据结构和容器编程语言中自带的数据结构可能会出现一些问题比如C中的Vector在添加对象时开辟的储存空间会成倍增长在添加大量对象后使用的储存空间我们将无法得知可能会产生内存空洞而引擎中的数据结构更加方便内存的管理提高访问效率引擎的内存管理和操作系统很相似核心原理可以概括为尽可能把数据储存在一起访问时按顺序访问处理时批量处理
平台层
平台层使得游戏能够兼容如Xbox、Mac、Windows等不同平台手柄、键鼠等不同设备。平台层通过使用Render Hardware InterfaceRHI来去除不同Graphics API如DirectX11、DirectX12、OpenGL之间的差异使上层无需关心使用不同API可能会带来的问题。
工具层 工具层一般以编辑器的形式蓝图编辑器、材质编辑器等呈现可以使用不同编程语言开发C、C#、Html5等以开发效率优先它需要使不同使用者能够创造游戏内容。因为很多游戏的数字资产是在不同DCCBlender、MAYA等中创建的所以工具层一般包含导入、导出工具用于导入、导出游戏资源。