游戏引擎分层简介

news2024/9/23 13:28:46

游戏引擎分层架构(自上而下)

工具层(Tool Layer)
在一个现代游戏引擎中,我们最先看到的可能不是复杂的代码,而是各种各样的编辑器,利用这些编辑器,我们可以制作设计关卡、角色、动画等游戏内容,这一系列编辑器就构成了引擎最上面的一层——工具层。
在这里插入图片描述
功能层(Function Layer)

  • 将一个三维虚拟世界转换为一帧一帧的二维图像的过程,我们需要用到渲染系统(Rendering);
  • 让一个个静止的模型运动起来,做出惟妙惟肖的动作,形成连续的画面,我们需要用到动画系统(Animation);
  • 物理的碰撞,各种力的作用,让物体的运动更贴近真实世界,我们需要用到物理系统(Physics);
  • 每一个游戏世界都有着自己的规则,还要有NPC来丰富游戏可玩性,这就需要用到脚本(Script)、状态机(FSM)和AI;

任何一个游戏的操作都离不开人机交互,这其中又涉及一系列功能。以上的种种功能组合在一起便构成了游戏引擎的功能层。
在这里插入图片描述
资源层(Resource Layer)
游戏中有的不只是一行行的源代码,还有各种格式的多媒体文件,如PhotoShop的PSD文件、3DSMAX的MAX文件,加载管理这一系列的图形、图像、音频、视频文件以及其他数据,就是资源层的任务了。资源层位于功能层之下,不断为功能层提供数据,这就好像上面是一个画家在画画,而资源层在下面不断为其提供颜料。
在这里插入图片描述
核心层(Core Layer)
游戏引擎中最核心,最重要的一层就是核心层。核心层负责响应上面层次频繁的调用,提供各种基础功能,如内存管理、容器的分配、数据的运算、多线程的创建等等。
在这里插入图片描述
平台层(Platform Layer)
平台层是最容易被忽略的一层,一款游戏或者引擎可能被发布在不同的平台上,会有不同的图形接口;并且不同的用户可能使用不同的硬件设备,如键鼠和手柄。适应不同的平台,就是平台层的任务。在这里插入图片描述
第三方库(Third Party Libraries)
中间件和第三方库通过SDK(Software 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 Interface(RHI)来去除不同Graphics API(如DirectX11、DirectX12、OpenGL)之间的差异,使上层无需关心使用不同API可能会带来的问题。
在这里插入图片描述

工具层

在这里插入图片描述
工具层一般以编辑器的形式(蓝图编辑器、材质编辑器等)呈现,可以使用不同编程语言开发(C++、C#、Html5等),以开发效率优先,它需要使不同使用者能够创造游戏内容。因为很多游戏的数字资产是在不同DCC(Blender、MAYA等)中创建的,所以工具层一般包含导入、导出工具用于导入、导出游戏资源。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1487390.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

多功能声学综合馆:塑造未来城市空间的先锋

现代城市需要多功能声学综合馆,这不仅是一座建筑,更是空间的变革者,为城市注入活力,展现着未来的发展方向。让我们一同探讨多功能声学综合馆的种种优势,它是如何为城市带来独特的价值。 1. 灵活性与多功能性的典范&am…

【RT-DETR有效改进】结合SOTA思想利用双主干网络改进RT-DETR(全网独家创新,重磅更新)

一、本文介绍 本文给大家带来的改进机制是结合目前SOTAYOLOv9的思想利用双主干网络来改进RT-DETR(本专栏目前发布以来改进最大的内容,同时本文内容为我个人一手整理全网独家首发 | 就连V9官方不支持的模型宽度和深度修改我都均已提供,本文内…

RK3568平台开发系列讲解(基础篇)中断线程化

🚀返回专栏总目录 文章目录 一、什么是中断线程化二、中断线程化接口三、中断线程化案例沉淀、分享、成长,让自己和他人都能有所收获!😄 一、什么是中断线程化 中断线程化是一种优化技术, 用于提高多线程程序的性能。 中断线程化的核心思想是将中断处理和主线程的工作分…

paimon取消hive转filesystem

目录 概述实践关键配置spark sql 结束 概述 公司上一版本保留了 hive ,此版优化升级后,取消 hive。 实践 关键配置 同步数据时,配置如下,将形成两个库 # ods库 CREATE CATALOG paimon WITH (type paimon,warehouse hdfs:///d…

ospf协议以及案例

OSPF协议网络类型 OSPF协议支持四种网络类型,分别是点到点网络,广播型网络,NBMA网络和点到多点网络。 1、点到点网络是指只把两台路由器直接相连的网络。一个运行PPP的64K串行线路就是一个点到点网络的例子。 2、广播型网络是指支持两台以上…

第二篇【传奇开心果系列】Python的自动化办公库技术点案例示例:深度解读Pandas金融数据分析

传奇开心果博文系列 系列博文目录Python的自动化办公库技术点案例示例系列 博文目录前言一、Pandas 在金融数据分析中的常见用途和功能介绍二、金融数据清洗和准备示例代码三、金融数据索引和选择示例代码四、金融数据时间序列分析示例代码五、金融数据可视化示例代码六、金融数…

第四届信息通信与软件工程国际会议(ICICSE 2024)即将召开!

2024年第四届信息通信与软件工程国际会议(ICICSE 2024)将于2024年5月10-12日在中国北京举办。本次会议由北京工业大学、IEEE以及Comsoc 联合主办。随着当今社会信息化的高速发展,电子信息技术的应用更是随处可见。其中,信息通信与…

虚拟化之CPU

一 cpu 1 如何查看内核版本:uname -r 2 如何查看操作系统的发行版本:cat /etc/redhat-release 3 计算机系统子的系统 cpu处理器memory内存storage存储network 网络Display显示 4 进程模式 用户模式(user mode)主要处理I/O的模…

TypeScript11:类型兼容性

类型的兼容性 B -> A,将 B 赋值给 A ,如果能完成赋值,则 B 和 A 类型兼容。 鸭子辨型法(子结构辨型法): 目标类型需要某一些特征,赋值的类型只要能满足该特征即可。 TS如何进行类型兼容…

SINAMICS V90 PN 指导手册 第7章 位置跟踪

位置跟踪 位置跟踪的主要作用有以下几点: 为单圈绝对值编码器设置一个虚拟多圈扩展位置区域使用齿轮箱时编码器可以重复负载位置 当位置跟踪功能使能后,那么实际位置值在驱动断电时会保存在驱动的掉电存储区中。当驱动器重新上电后,驱动可…

【计算机考研】408学到什么程度才能考130?

408考130要比考研数学考130难的多 我想大部分考过408的考生都是这么认为的。408的难点在于他涉及的范围太广了,首先如果你要备考408,你要准备四门课程,分别是数据结构,计算机组成原理,操作系统和计算机网络。 这四门…

RabbitMQ队列

RabbitMQ队列 1、死信的概念 ​ 先从概念解释上搞清楚这个定义,死信,顾名思义就是无法被消费的消息,字面意思可以这样理解,一般来说,producer将消息投递到broker或者直接到queue里了,consumer 从 queue取出消息进行消…

模型部署 - BevFusion - (1) - 思路总结

模型部署实践 - BevFusion 思路总结一、网络结构 - 总结1.1、代码1.2、网络流程图1.3、模块大致梳理 二、Onnx 的导出 -总体思路分析三、优化思路总结 学习 BevFusion 的部署,看了很多的资料,这篇博客进行总结和记录自己的实践 思路总结 对于一个模型我…

如何限制一个账号只在一处登陆

大家好,我是广漂程序员DevinRock! 1. 需求分析 前阵子,和问答群里一个前端朋友,随便唠了唠。期间他问了我一个问题,让我印象深刻。 他问的是,限制同一账号只能在一处设备上登录,是如何实现的…

【Java项目介绍和界面搭建】拼图小游戏——美化界面

🍬 博主介绍👨‍🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~ ✨主攻领域:【渗透领域】【应急响应】 【Java】 【VulnHub靶场复现】【面试分析】 🎉点赞➕评论➕收藏 …

AI企业发力智慧物流 HEGERLS四向车开启新一代托盘柔性物流解决方案

不论自动仓储、智能仓储,解决方案都需要更加平民化,普惠更多企业。柔性灵活、易于部署和扩展、初期投入成本低的方案一定是其中的重点。要实现这些特点,最重要的是硬件要做到标准化、软件要模块化,让仓储设备可以即插即用。凭借柔…

三维可视化技术在设备管理系统中的应用

随着科技的进步,传统的设备管理方法已经不能满足现代企业的需求。为了更高效地管理资产,设备管理系统开始采用三维可视化动态技术。这种技术不仅能够帮助用户快速找到相应的设备,还能够展示设备的现场位置、所处环境、关联设备以及设备参数等…

密钥加密机的工作原理

密钥加密机是信息安全领域中不可或缺的核心设备,它承担着保护通信内容、确保数据完整性以及验证信息发送方身份等重要任务。随着信息技术的迅猛发展,密钥加密机的作用愈发凸显,其安全性和可靠性直接关系到国家安全、商业机密和个人隐私等多个…

Ubuntu20安装zabbix-agent2,对接zabbix 6.4

在Ubuntu 20.04 LTS上安装Zabbix Agent 2并与Zabbix Server 6.4对接,请按照以下步骤操作: 更新系统: sudo apt update sudo apt upgrade 添加Zabbix官方仓库: 首先,需要将Zabbix的官方存储库添加到你的系统中以获取Za…

U盘无法读取?轻松掌握正确解决方法!

“为什么我的u盘插入电脑后会显示无法读取呢?想查看一些比较重要的文件,但就是无法读取U盘,想问问大家,我应该怎么操作呢?” U盘作为一种便捷的数据存储设备,广泛应用于我们的日常生活和工作中。然而&#…