赞
踩
如何访问数据
离线资源导入:引擎导入资源需要做 数据转换
。因为从各种资源编辑软件中导出的资源
,包含了很多对我们的引擎而言无用的数据
,我们需要去其糟粕取其精华,将资源(Resource)
转化成资产(Assets)
,即 资源引擎化
。 比如一张贴图可能是jpg或者png格式,这些贴图文件是压缩算法的产物,并且他的数据排列格式在GPU中绘制效率很低。因此不管什么样的贴图文件,我们需要先转化为dts格式
,这种格式按照16byte把贴图顺序排布,可以直接放进显存中使用
资产的使用:比如要表达一个机器人角色,所用到的材质、网格、贴图、动画、音效、Shader等资产
其实是互相关联
的。因此我们需要定义一个 额外的资产:Composite Asset
来管理这些复杂的相互的Reference。如下图,它是一段代码,存放了这个角色所引用/依赖的所有资产的名字、GUID、路径等信息
GUID(Globally Unique Identifier),全局唯一标识符
运行时资产管理
生命周期
和引用关系。功能层是非常庞大的,有时候经常与游戏内容混淆咋一起,某些功能难以区分需要放在游戏业务层还是引擎完成。比如引擎的相机是渲染画面的,某些FPS还有要求相机有摇晃的感觉,那么摇晃感应该属于功能层由开发者们完成,而非引擎提供
如何让游戏世界充满生机?一个非常重要的概念 Tick
Tick就是我们的游戏世界中最小的时间单位。
一个Tick之内,游戏引擎会把所有的事情都做一遍(包括但不限于功能层)
,比如:读取用户输入,动一下相机、更新角色控制器的状态、动画系统计算、物理计算、渲染出画面、网络数据传输、再处理输入输出、内存垃圾回收(GC)…
一个tick其实就是一帧的时间DeltaTime,输出一帧画面 需要把所有该做的事情都做一遍 所以这个Tick在30帧的游戏里 就是 1 30 \Large\frac{1}{30} 301秒,以此类推
Tick分为两个部分
最初的引擎是单线程的,未来的引擎一定是多核架构
核心层涵盖引擎诸多基础模块,这里提到两个
高效率数学库
高效率
。不要求精确解,追求近似解,可以极大的提高算法的效率(渲染中许多公式的求解就是近似解)内存管理:引擎会申请一大块内存,自行管理。原则是:批量处理
cache miss
的几率(CPU需要处理数据时,如果数据已经在cache中,则 cache hit,不在则cache miss)。因此选择CPU的时候cache越大越好核心层提供了整个引擎所要使用的绝大部分的函数,是影响引擎效率的非常重要的环节,需要极高的代码质量
不同的平台规则是不一样的,比如文件系统的路径,win和mac的目录中分别使用的反斜杠和斜杠,编写代码,掩盖这些不同平台的差异,就是这一层所需要做的工作。
DirectX11
、DirectX12
,Android常用opengl
、Vulkan
硬件架构的不同:平台可能硬件结构不同,比如:PS3上面的CPU叫做PPU,GPU叫做SPU。很多运算可以放在一些特殊硬件上,完全不同于GPU和CPU的架构,因此就需要为这些硬件编写不同的代码,才能很好的运行
工具层 = 自带编辑器 + 第三方数字生产工具
方便编辑者发挥能力
第三方编辑器
和自带编辑器
生产的数字资源都会经过引擎的导入/导出器(Asset Conditioning Pipline)
变成引擎需要的Assets。Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。