GEA 1.6 运行时引擎架构
游戏引擎以软件层构成
- 通常情况下上层依赖下层
- 当下层依赖上层时会出现循环依赖的现象导致系统之间复杂的耦合导致异常
1.6.1 目标硬件
PC或者游戏主机
1.6.2 设备驱动程序
管理硬件资源使上层软件不需要理解不同硬件的通信细节差异
1.6.3 操作系统
操作系统协调一台计算机上多个程序的运行
1.6.4 第三方软件开发包和中间件
英文简称SDK和middleware为应用程序提供接口
1.6.4.1 数据结构及算法
一些第三方数据结构和算法库
- STL:C++标准模板库
- STLport可移植的,优化过的STL实现
- Boost:数据结构与算法库
- Loki:泛型编程Genneric programming
注意:STL内存分配模式不高效,这一点在游戏主机上体现更加明显
1.6.4.2 图形
大多数书游戏渲染引擎都建立在硬件接口库之上
- OpenGL
- DirectX
- libgcm在PS3上更加高效 是一个低阶直接接口
- Edge PS3的渲染和动画引擎
1.6.4.3 碰撞和物理
碰撞检测和刚体动力学
- Havok
- physX 来自unity
- ODE开源
1.6.4.4 角色动画
- Granny
- Havok Animation
- Edge
1.6.4.5 人工智能
- KynapseSDK
1.6.4.6 生物力学角色模型
Endorphin和Euphoria
1.6.5 平台独立层
把其余的引擎部分和底层平台进行隔离 确保包装后的接口在所有硬件平台上均为一致
1.6.6 核心系统
核心系统层的常见功能:
- 断言 assertion 捕捉逻辑错误
- 内存分配 保证高速的内存分配和释放,控制内存碎片所带来的负面影响
- 数学库:矢量、矩阵、四元数旋转、三角学、集合操作、样条线spline操作、数值积分、解方程组
- 自定义数据结构与算法:有时需要手动配置来提高运行效率
1.6.7 资源管理器
统一的资源管理接口以便访问游戏接口
- 虚幻的包
- OGRE的ResourceManager
1.6.8 渲染引擎
渲染引擎设计采用的是分层架构
1.6.8.1 低阶渲染器
设计着重于高速渲染几何图元而非其是否可见
低阶渲染器同样会进行视觉抽象
同样也会使用材质系统和动态光照系统
同时应用vertex和frag
其分为以下一些组件
图形设备接口
使用SDK 枚举设备 初始化设备 建立渲染表面(stencil buffer,后台缓冲等)
消息泵问题,放于后续处理
其他渲染器组件
收集需提交的几何图元
1.6.8.2 场景图/剔除优化
因为低阶渲染器只提供了背面剔除和摄像机镜头方向的剪切平面
需要进入更高层次的组件才可以限制图元是否显示
场景图也就是空间分割算法:
- 二元空间分割树
- 四叉树
- 八叉树
- kd树
- 包围球树
1.6.8.3 视觉效果
- 粒子系统
- 贴花系统
- 光照贴图、环境贴图
- 动态阴影
- 全屏后期处理效果
- 高动态范围和色调映射
- 全屏抗锯齿
- 颜色矫正以及颜色偏移
1.6.8.4 前端
使用一些2D图片去覆盖3D场景
这些目的包括
- HUD
- 内置菜单主控台以及其他开发工具
- GUI
- Full motion video
- 游戏内置电影
1.6.9 剖析和调试工具
内存分析工具,游戏内置菜单,主控台以及回访功能
- 手工测试代码实现一些调试功能
- 性能统计
1.6.10 碰撞和物理
刚体动力学研究力和力矩以及运动
一般使用外部SDK
Havok是今天的业界标准
physX是虚幻引擎4中可以用是NVIDIA公司的
1.6.11 动画
游戏会用到五种基本动画
- sprite动画
- rigid body hierarchy动画
- 骨骼动画
- 顶点动画
- 变形目标动画
骨骼动画是最流行的动画方式
骨骼网格渲染组件是连接渲染器和动画系统的桥梁
动画系统的骨骼以矩阵调色板(matrix palette)形式传至渲染引擎,在渲染器中最终生成顶点位置的过程称为蒙皮
Ragdoll对于死了的角色其骨骼完全交由物理系统模拟决定
1.6.12人体学接口设备(HID)
IO组件:输入输出组件
HID引擎:让个别硬件平台游戏控制器的低阶细节与高阶游戏操作脱钩。
1.6.13 音频
开发每个游戏的时候需要大量的定制软件开发才可以制作出有高质量音频的最终产品
1.6.14 在线多人/网络游戏
支持多人设备会极大地影响某几个游戏引擎组件的设计,最好在项目开始之初就确定是否支持多人游戏。但同时将多人游戏改装为单人游戏更为简单,可以将单人游戏当作多人游戏的一个特例。
1.6.15 游戏性基础系统
游戏性基础层实现游戏内进行的活动,支配虚拟世界的规则以及玩家角色的能力。
1.6.15.1 游戏世界和游戏对象模型
想清楚游戏对象模型与软件对象模型,
1.6.15 .2 事件系统
事件传递给接受对象时调用接受对象的事件处理函数
事件存储在队列上以便未来处理
1.6.15.3 脚本系统
提高开发效率 更改游戏逻辑和数据只需修改脚本代码并且重新载入就可以不需要重新编译链接方可执行程序
1.6.15.4 人工智能基础
将各个游戏中普遍存在的通用部分写成一个SDK集成于引擎当中,使制作规模宏大的游戏更加容易。
1.6.16 个别游戏专用子系统
特定游戏设计所需要的基础软件制作
GEA 1.6 运行时引擎架构相关推荐
- 《游戏引擎架构》笔记一
<游戏引擎架构>该系列的博文部分参考下面的博客: http://raytaylorlin.com/categories/%E6%8A%80%E6%9C%AF/%E6%B8%B8%E6%88 ...
- [置顶]《游戏引擎架构》信息总汇
豆瓣 当当 亚马逊 China-pub 京东 中国图书网 淘宝 PDF样章试读微盘下载 微云下载 中英词汇索引表 本页内容 基本信息 作者:Jason Gregory (杰森.格雷戈瑞) ...
- 《游戏引擎架构》笔记十四
运行时游戏性基础系统 游戏性基础系统的组件 如果可以合理地画出游戏与游戏引擎的分界线,那么游戏性基础系统就是刚刚位于该线之下.理论上,我们可以建立一个游戏性基础系统,其大部分是各个游戏皆通用的.实际上 ...
- 《游戏引擎架构》读书笔记(四)
一.游戏性系统 (1)游戏世界一般分为静态元素和动态元素,静态元素和动态元素有时候没有特别明显的分界线.但是静态元素消耗资源较少,可以用笔刷等工具绘制静态元素. (2)游戏世界一般分为各个组块,如关卡 ...
- 云原生钻石课程 | 第1课:容器运行时技术深度剖析
点击上方"程序猿技术大咖",关注并选择"设为星标" 回复"加群"获取入群讨论资格! 本篇文章来自<华为云云原生王者之路训练营>钻 ...
- drools dmn_使用Drools的DMN运行时示例
drools dmn 正如去年宣布的那样 ,Drools 7.0将在合规级别3对DMN模型提供全面的运行时支持. 在撰写本文时,运行时实现已完成,并且该团队现在正在努力进行改进,以进行错误修复和用户友 ...
- Dools的DMN运行时示例
正如去年宣布的那样 ,Drools 7.0将在合规性级别3上为DMN模型提供完整的运行时支持. 在撰写本文时,运行时实现功能已经完成 ,并且团队现在正在努力进行改进,以进行错误修复和用户友好. 不幸的 ...
- Eclipse运行时概述1(运行时插件模型,首选项)
1 运行时概述 Eclipse 运行时定义插件(org.eclipse.osgi和org.eclipse.core.runtime),其它所有插件都依赖于它们.运行时负责定义插件的结构以及它 ...
- 小红书自研小程序:电商体验与效果优化的运行时体系设计
小程序在其诞生后的几年内,凭借其简单.轻量.流畅.无需安装等特点,引来了爆发式的增长.伴随小红书电商业务的发展,我们洞察到越来越多的商家和品牌大客户有自己定制化需求场景,传统的电商和薯店存在下面三大问 ...
最新文章
- 又在上海!这场人工智能大会,由图灵奖得主等带来机器学习、知识工程等干货分享!...
- php如何获取select multiple的值
- OpenCV、OpenCL、OpenGL、OpenPCL
- 阿里P8架构师谈:大数据架构设计(文章合集)
- Maven学习总结(27)——Maven自定义打包插件maven-assembly-plugin详解
- SQL Server调优系列基础篇(常用运算符总结)
- mm模块流程图 sap_SAP业务流程之MM
- 10款滑动门代码_jquery 滑动门_js滑动门_tab滑动门_jquery 选项卡_js选项卡_tab选项卡效果(三)
- java 仿百度文库源码_Java模拟实现百度文档在线浏览
- 【无人机】一文读懂无人机飞行原理
- cad解除块的快捷命令_Auto CAD2007解除块快捷键是什么呢?
- plot confusion_matrix
- ubuntu下全角半角切换
- java毕业设计图书借阅管理系统mybatis+源码+调试部署+系统+数据库+lw
- mac mysql 自动启动_Mac设置Mysql开机启动
- 笔记本电脑维修90个精选实例
- 套料排版代码python_钣金制造管理系统Fabcost自动套料排版设置
- 杭电oj 1002 C语言解法
- 1/sinx的原函数
- 建站四部曲之移动端篇(Android+上线)