游戏引擎架构-资源及文件系统

这篇具有很好参考价值的文章主要介绍了游戏引擎架构-资源及文件系统。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本篇知识点来源于《游戏引擎架构》第六章,主要讨论现代三维游戏引擎中典型资源管理器的运作方式。

资源数据库

对于大部分资产来说,游戏引擎并不会使用其原本的格式。资产需要经过一些资产调节管道,把资产转换为引擎所需的格式。当流经资产调节管道时,每个资源都需要用一些元数据描述如何对资源进行处理,比如贴图要用哪种压缩方法,导出animation的时候需要导出哪个范围的帧。为了管理所有这类元数据,需要有某种形式的数据库。

在各游戏引擎中,资源数据库的形式有巨大差异。无论资源数据库采用什么形式,它都必须提供以下功能:

  • 能处理多种类型的资源,期望能用一致的方式处理这些资源

  • 能创建新资源

  • 能删除资源

  • 能查看及修改现存的资源

  • 能把资源从一个位置移动到另一个位置

  • 能让资源交叉引用其他资源

  • 能维持数据库内所有交叉引用的引用完整性。比如删除/移动资源,仍能保持引用完整性

  • 能保存版本历史,并完成记录改动者及事由的日志

  • 支持不同形式的查询。比如想知道模型引用了什么纹理,什么骨骼;或者通过名字、类型搜索资源

运行时资源管理

运行时资源管理指的是引擎运行时,资源是怎样从资源数据库载入、管理并卸载的。

运行时资源管理器的人物全部都和其主要功能“载入资源至内存”有关:

  • 确保任何时候,同一个资源在内存中只有一份实例

  • 管理每个资源的生命周期,在必要时载入需要的资源,不需要的时候需要卸载资源

  • 处理复合资源的载入。比如三维模型,需要载入网格、多个材质、多个纹理

  • 维护引用完整性。当载入复合资源时,资源管理器必须确保所有子资源也被载入,并正确地修补所有交叉引用。比如三维模型在被导入的时候需要确保所有引用的材质、纹理都被正确导入

  • 管理资源载入后的内存用量,确保资源存储在内存中合适的地方

  • 允许载入资源后做自定义处理

  • 通常提供统一接口管理多种资源类型。理想情况下可以要容易扩展,以满足团队新增资源类型的扩展需求

  • 理想情况下可以支持异步资源载入

资源注册表

为了保证在任何时间,载入内存的每个资源只会有一份副本,大部分资源管理器都含某种形式的资源注册表记录已载入的资源。最简单的实现模式就是使用字典,通常以其GUID为键。卸载资源时删除注册表记录,请求某资源时先通过guid查找资源注册表字典,能搜索到则返回资源指针,否则自动载入资源或者返回失败码。

没找到请求的资源时最直接的处理方法是自动载入该资源,但此举会对游戏帧率造成非常明显的影响。因此引擎有两种取代方法:

  1. 在游戏运行时完全禁止加载资源。这就会有“读条”现象,即玩家在进入新的游戏关卡之前需要观看载入画面或者载入进度栏。

  2. 以异步形式加载(即串流)。玩家在关卡A时提前加载关卡B的资源数据。

资源的生命期

资源的生命期被定义为该资源被载入到被卸载的时间。

资源管理器的职责之一就是管理资源的生命期,每个资源对生命期有不同的需求:

  • 有些资源在游戏开始时便需要被载入。这类资源被称为载入或驻留资源(LSR)。比如玩家角色的网格、材质、纹理,整个游戏都会被用到的所有常规武器的资源。

  • 有些资源对应某些特定的场景或者游戏关卡。比如这个资源只会在A关卡出现,直到玩家去到下个关卡时资源才会被卸载。

  • 有些资源生命期短于所在关卡的时间。比如游戏的过场动画用到的资源。

  • 有些资源(bgm、环境音效或者全屏电影)可以在播放时即时串流,内存中某一时刻只需两区块的数据,分别是目前播放中的区块,及载入中、紧接前者的缓存区块。这类资源的生命期很难定义,比如bgm的每个字节短暂停留在内存中,但是整首音乐会持续很长一段时间。

何时载入资源不是难题,只要是玩家第一次看见该资源的时候载入就行,问题是何时需要卸载资源。解决方式就是引用计数,在需要引用某个资源的时候将其引用数+1,即将卸载某个资源的时候引用数-1,当引用数为0时真正卸载这个资源,由0变成1时重新载入这个资源即可。文章来源地址https://www.toymoban.com/news/detail-801612.html

到了这里,关于游戏引擎架构-资源及文件系统的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【架构】Java实现游戏引擎

    学过编程后,感觉所有的游戏都离不开两个方法,一个是画面更新,一个是指令输入。大概所有的游戏都有这几步流程: 输入指令 根据指令做业务逻辑的判断 根据判断结果更新画面 既然大多数的游戏都离不开这几步,那么为了便利游戏的开发,一些工程师就把这几个方法抽

    2024年02月13日
    浏览(45)
  • 《游戏引擎架构》--学习

    维持最低限度的堆分配,并且永不在紧凑循环中使用堆分配   迭代器 未完待续。。。  

    2024年02月19日
    浏览(37)
  • Games104现代游戏引擎笔记 网络游戏进阶架构

    玩家2的视角看玩家1的移动是起伏一截一截,并且滞后的 interpolation:内插值,在两个旧的但已知的状态计算 extrapolation:外插值,本质是预测 内插值:但网络随着时间不停地给我信息包时,信息包可以不均匀(由于网络波动等因素),客户端可以根据给的时间将中间值插出来

    2024年02月08日
    浏览(44)
  • Games104现代游戏引擎笔记 网络游戏架构基础

    挑战1:网络同步 挑战2:是网络的可靠性,包括应对网络的延迟,丢包和掉线 挑战3: 反作弊和安全系统,因为网络游戏的本质是经济系统 挑战4:多样性(不同设备,不同服务器),在不停服的情况下热更新 挑战5:大量人数时对高并发,高操作的要求 Socket编程,通过接口,确认好相

    2024年02月08日
    浏览(59)
  • 十八、Unity游戏引擎入门

    1、下载     首先需要下载Unity Hub,下载网址:https://unity.com/cn。     然后在其中下载Unity编辑器并安装,可选择最新版本。     接着需要选择适合的开发环境,例如Android Studio或Xcode,以便进行手机游戏开发。在安装完Unity后,需要根据项目需求下载对应的模块和插件,例

    2024年02月16日
    浏览(79)
  • 在unity里面双击脚本文件,系统自动打开vs之后,界面上没有“解决方案资源管理器”

    在unity里面双击脚本文件,系统自动打开vs之后,界面上没有“解决方案资源管理器”,写部分代码的时候也没有提示。然后在视图里把“解决方案资源管理器”调出来之后上面也不显示这个项目 解决方法: 检查一下Unity 和 Visual Studio 有没有关联 1、打开 Unity项目 2、选择顶部

    2024年02月05日
    浏览(67)
  • 使用团结引擎开发Unity 3D射击游戏

           本案例是初级案例,意在引导想使用unity的初级开发者能较快的入门,体验unity开发的方便性和简易性能。       本次我们将使用团结引擎进行开发,帮助想体验团结引擎的入门开发者进行较快的环境熟悉。      本游戏是一个俯视角度的射击游戏。主角始终位于屏幕

    2024年01月19日
    浏览(78)
  • [游戏开发][Unity]Assetbundle打包与资源加载框架

    我会分三个篇章写整个框架分别是: AB打包篇 AB下载篇 AB加载篇 整个框架内容比较多,属于企业级方案,涉及到增量打包、打包策略、AB包下载、边玩边下、资源管理系统,资源加载系统等功能。 Unity小白看本系列文章可能比较吃力。如果我哪里写的不好,影响理解了,欢迎

    2024年02月13日
    浏览(55)
  • Unity、UE、Cocos游戏开发引擎的区别

    Unity、Unreal Engine(UE)和Cocos引擎是三个常用的游戏开发引擎,它们在功能和特性上有一些区别。以下是它们之间的主要区别: 编程语言:Unity使用C#作为主要的编程语言,开发者可以使用C#脚本进行游戏逻辑编写。Unreal Engine主要使用C++作为编程语言,但也支持蓝图系统,允许

    2024年02月22日
    浏览(66)
  • 30分钟了解所有引擎组件,132个Unity 游戏引擎组件速通!【收藏 == 学会】

    🎬 博客主页:https://xiaoy.blog.csdn.net 🎥 本文由 呆呆敲代码的小Y 原创,首发于 CSDN 🙉 🎄 学习专栏推荐:Unity系统学习专栏 🌲 游戏制作专栏推荐:游戏制作 🌲Unity实战100例专栏推荐:Unity 实战100例 教程 🏅 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📆 未来很长

    2024年02月11日
    浏览(74)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包