《游戏引擎架构》读书笔记(三)

《游戏引擎架构》读书笔记(一) 最近在读《游戏引擎架构》这本书,虽然感觉理论颇多,而且很多很多东西都看不懂,不过还是简单的把一些感觉很好的思想和方法或者概念记录下来。 1.      关于各个部件初始化,一个最简单粗暴的办法就是将各个部件按顺序排列起来,不但可以方便的看到初始化顺序,而且修改也十分容易。 2.      关于内存分配: a)        游戏中最常见的法则是-维持最低限度的堆分配,并且 阅读详情

一.动画系统

(1)动画系统的演变:

a)传统的帧动画:2D游戏中,将动作逐帧播放。好吧,我只停留在这个水平。

b)动画纹理:与帧动画差不多,使用面向摄像机的四边形,贴上一连串的纹理。虽然很挫,但是现在仍有应用,特别远距离的物体还是可以使用这种动画方式的。

c)刚性阶层式动画:将角色拆分为各个部分,可以按照关节运动,但是由于是刚性运动,三角形不会有所拉伸,因而会有“裂缝”,看起来不是很真实。

d)每顶点动画:蛮力方法,为每个顶点添加随时间改变的动作信息,虽然三角形会有变化,但是由于存储量太大,不常用。

e)变形目标动画:与上面的方法大致相同,都是存储顶点信息,但是存储量较少,用于极端情况,运行时将两种或以上的姿势混合,就可以生成动画。通常用于面部动画。

f)蒙皮动画:最常用的动画系统。兼具刚性阶层动画和顶点动画的优点。由刚性的骨头和外部圆滑的三角形网格皮肤构成,顶点会追踪关节,当关节移动时,蒙皮可以自然的拉伸。

关于动画数据,一定要进行压缩,不然会过于庞大。

(2)动画系统,由于GPU和CPU的负载,不可能像电影那样锁定帧率,所以游戏的帧率是不稳定的,因而动画系统必须要能够调节时间比例,可以根据帧数采样,帧数不仅限于整数,可能是小数,甚至可以根据是负数来形成倒转的动画。

(3)局部时钟和全局时钟:动画自身有一个局部的时间线,而角色有全局时间线。最简单的就是直接使用动画的局部时间线来控制动画,但是有可能会出现多个角色动画不同步的问题。使用全局时间线,协调不同角色之间的动画。

(4)选择性载入动画,由于动画较大,一次性载入肯定不现实。一般采取的方法是初始化时载入一组核心的动画集,比如角色移动的动画。其余的按需求载入。有的引擎把动画打包成逻辑组,以此单位载入及卸载。

(5)动画系统的架构:

         a)动画管道:用于产生动画,设置动画播放参数等等,并根据骨骼,动画片段等等数据,计算产生动画。这里产生的动画貌似是一些原子动画,可以组合。

         b)动作状态机:置于动画管道之上,通常为有限状态机,通过状态来控制播放哪个动画。如果有同时播放几个动画的情况,可以通过状态层使用多个独立的状态机来控制。每个状态对应一个或者几个动画管道产生的原子动画,将其混合。关于这个状态,最好使用脚本来控制,因为动画的编辑,一定要尽快看得到状态,所以也有很多引擎提供了可视化的动画编辑器。当然,除了要根据状态显示不同的动画之外,还要注意不同状态之间的过渡,

         c)动画控制器:相当于控制动画状态机的一层,实现更高层的动画控制,具体负责一个动作的动画。

 二.碰撞检测系统(collisiondetection system)及刚体动力学(rigid body dnamic)

(1)一些常用的物理SDK如Bullet和PhysX,Havok等。以后打算去看一看PhysX

(2)碰撞检测系统:判断世界中的物体是否有接触,每个逻辑对象用一个或者多个几何形状代表,通常用简单的几何体来代表。检测在某些时刻是否有相交,其实碰撞检测系统就是一个几何体相交检测器。

(3)碰撞物理世界:collision world,碰撞引擎通常通过一个碰撞世界的数据结构管理所有的可碰撞实体。相比将碰撞信息存储于游戏对象本身,将碰撞数据统一管理,可以免去管理多余数据结构,并且有效封装,从可理解性,可维护性,可重用性来说都有好处。

(4)碰撞原型:

a)球体(最高效)

b)胶囊体(比圆柱体和长方体高效)

c)传说中的AABB,(axis-alignedbounding box)中文叫轴对齐包围盒。6个面都与坐标系的轴平行,可以很方便的由两个点定义,一个是盒子在主轴上的最小坐标,另一个是最大坐标。优点在于可以很高速的测试和另一个AABB相交与否。但是要求比较高,AABB最好是保持与轴对齐,一旦物体旋转,其逼近形状很差,不能很好的适应物体。

d)OBB(orientedbounding box)定向包围盒。使用半长,半宽,半高,以及一个变换用来定位盒子的中心位置和方向。比较常用。

还有一些,不过对我来说简直太高大上了,还是先看看基础的吧。

对于复杂的物体,可以先进行整体的包围盒检测,如果检测成功了,再使用更高级的检测方法来检测,或者检测子部分。如果不成功,后面的步骤就可以直接省略。这样大大的提高了效率。

(5)关于碰撞检测,有一大堆高大上的算法。表示数学不好,基本看不懂。不过有一个地方还是要注意一下,关于移动物体的碰撞检测,可能会出现“隧穿”现象。正常我们做碰撞检测采用的是碰撞世界“快照”的方式,即每隔一段时间,查看有没有碰撞。但是就有可能出现类似子弹穿纸的情况,在时间间隔内,已经走过了范围,然而的确是碰到了。解决的办法是使用扫掠形状,比如从上一个位置到下一个位置形成一个胶囊体。检测这个胶囊体和另一个物体的碰撞即可。或者还有一种使用连续碰撞检测的方法,求得最早的冲击时间。

(6)碰撞检测的性能优化:碰撞检测是很耗费cpu的操作。所以一定要进行相关的优化。先进行空间的划分,八竿子打不着的就不检测了。然后进行中间阶段的检测,最后再进行精确检测。

(7)碰撞查询:其实有时候我们做碰撞检测不是要检测真正的物体和物体之间的碰撞,有时候是假想的物体。比如获得在给定范围内所有玩家对象。这样的操作成为碰撞查询。

         a)光线投射:ray  cast。貌似就是射线检测,光线投射通过起点p0和方向d,根据方程p(t) =p0 + td t属于【0,1】,t值即碰撞早晚的参数,因为碰撞检测会返回一组结果,通常为t值,击中的碰撞体,接触点的法矢量。

         b)形状投射:这个貌似很有用。比光线投射更加精准,而且能传回多个触点。经常用于判断摄像机是否与游戏世界中的物体碰撞。胶囊体投射常用于角色移动。

(8)碰撞回调:可以在碰撞检测中设置回调函数,用回调函数决定怎样处理碰撞。

(9)碰撞材质:这个想法好天才。类似图像的材质一样,将碰撞系统也设置一种材质,不同的材质有不同的碰撞效果,如音效,粒子,物理属性等。

(10)保证摄像机不要穿过物体,不然会穿帮。不过这并不是一件容易的事。通常使用包围球包围摄像机,在碰撞到物体之前,调整摄像机的位置或定向。

(11)物理系统必须定期更新,通常每帧更新一次,有时候可以使用上一帧的碰撞状态,或者接受一帧的延迟。可以单线程,也可以使用基于命令队列的多线程更新。

《游戏引擎架构》读书笔记(二) 一.调试技巧及工具 (1)基础调试 a)   日志及追踪,有些bug难以用VS自带的调试来进行单步调试,最好的解决方案就是printf调试法,打印一组数据,观察情况。之前我的做法是单独生成一个控制台,不过VS自带了一个OutPutDebugString()的方法,可以打印调试信息。不过这个只支持char*内容,我们可以将这个函数加工一下,使其支持不同类型的数据,甚至可以使其接受可变参数个数。 阅读详情

相关推荐

[读书笔记]<游戏引擎架构>|仿射矩阵

仿射矩阵

菜鸟的试炼 949

3D游戏引擎底层数据结构的封装之Stack

笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,优快云社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:《手把手教你架构3D游戏引擎》电子工业出版社和《Unity3D实战核心技术详解》电子工业出版社等。 数据结构系列已经给读者介绍了一些常用的,这些也是商业引擎底层的封装,给读者展示也是告诉读者其实引擎内部的技术并没有那么神秘,都是人写的。但是作为开发者,我们也要学着写一些数据结构的

海洋个人博客 1221

5分钟搞懂MSDNet:用Transformer实现小样本语义分割的保姆级教程

本文详细介绍了MSDNet(Multi-Scale Decoder Network)如何利用Transformer架构实现小样本语义分割。通过多尺度解码器和空间Transformer解码器,MSDNet能够在仅有1-5张标注图像的情况下完成精确分割任务。文章提供了PyTorch代码实例和优化技巧,帮助开发者快速掌握这一前沿技术。

weixin_30832143的博客 506

《游戏引擎架构》读书笔记-游戏引擎中的C++

《游戏引擎架构》在两年前就买了,而且自己也大体的看过一遍,因为自己想学习引擎的底层知识,所以重新又找出了这本书再读一遍,并把根据自己的理解写一些读书笔记在这里与大家交流。       闲话少续,开始本篇的内容,这本书的第一部分是基础篇,第一章概述了一些引擎概念,第二章讲解了一些工具的用法(Visual Studio等),第三章介绍了C++,和一般的C++书不一样的是,本书讲解的C++应该更多的是引

手机游戏开发学习笔记 4015

webrtc进阶-- FlexFEC 实现原理与调试分析(m80 代码对齐版)

WebRTC 中 FlexFEC 技术解析与调试指南 摘要:本文深入分析 WebRTC 的 FlexFEC(灵活前向纠错)技术实现原理,重点探讨其在 m80 版本中的协商机制、接收侧恢复流程以及 SFU 场景下的特殊处理。文章指出 FlexFEC 通过动态冗余策略提升弱网抗丢包能力,详细解析了编解码器分配、SSRC 映射、包恢复等关键环节,并提供了针对 XR+SFU 场景的调试建议。调试时可重点关注 FEC 包接收与媒体包恢复日志,以验证链路有效性。

HOSTEN的博客 48

【华为OD机试真题 新系统】1043、魔法咒语组合 | 机试真题+思路参考+代码解析(C++、Java、Py、C语言、JS)

【华为OD机试真题 新系统】1043、魔法咒语组合 | 机试真题+思路参考+代码解析(C++、Java、Py、C语言、JS) 华为od机试,华为od机试真题,华为od机试E卷,华为odE卷,华为od机试真题E卷,华为OD,华为OD机试,华为OD机试真题,华为od机考,华为od机试D卷,华为od机试真题D卷,华为od手撕代码,华为od,华为od机试C卷,华为od e卷,华为2026e卷,od机试,2026E卷,华为OD机试E卷,什么是华为od,华为od介绍,全面了解华为od,2026华为od,如何备战华为od

KJ.JK 281

《游戏引擎架构》读书笔记(四)

一.游戏性系统 (1)游戏世界一般分为静态元素和动态元素,静态元素和动态元素有时候没有特别明显的分界线。但是静态元素消耗资源较少,可以用笔刷等工具绘制静态元素。 (2)游戏世界一般分为各个组块,如关卡,地图,地区等。建立在这之上的是高级游戏流程,即玩家的目标,比如任务。 (3)游戏动态元素通常以面向对象的方式进行设计,通常称为游戏对象(Game Object),实体(entity),演员(a

puppet_master的专栏 1656

9.16华为OD机试真题 新系统 - 矩阵螺旋遍历 (Java/Py/C/C++/Js/Go)

9.16华为OD机试真题 新系统 - 矩阵螺旋遍历 (Java/Py/C/C++/Js/Go)

算法大师! 640

游戏引擎架构 读书笔记(一)第一章 导论

游戏引擎是指一些已编写好的可编辑电脑游戏系统或者一些交互式实时图像应用程序的核心组件。 游戏引擎包含以下系统: 渲染引擎(即“渲染器”,含二维图像引擎和三维图像引擎)、 物理引擎、 碰撞检测系统、 音效、脚本引擎、电脑动画、人工智能、网络引擎以及场景管理。 对于游戏开发者来说,引擎可以理解为一个封装好的盒子,它的功能是提供调用接口,好让一些复杂的事情通过这个盒子之后变的简单。 常见的游戏引擎有...

【黑键】 1783

加权均值向量算法(INFO)详解:从数学原理到智能算法

本文系统介绍了加权均值向量算法(INFO)的理论基础、数学模型与实现应用。该算法基于加权均值数学概念,通过MeanRule规则平衡探索与开发能力,具有结构新颖、参数合理的特点。核心内容包括:1) 算法理论基础,阐述加权均值数学定义与小波函数权重计算;2) 算法原理,详细解析更新规则、向量组合和局部搜索三阶段数学模型;3) 实现方法,提供MATLAB代码关键参数解析;4) 改进方向,介绍INFO-KELM混合模型等变体;5) 应用案例,涵盖函数优化、工程设计与机器学习领域。

qq_42212808的博客 234

第03章 Hermes Agent 核心原理

环境跑通之后,读者会很自然地想问:Hermes 的内部到底是怎么转起来的?为什么它能做到"越用越聪明"?长对话不会忘记上下文吗?这一章用尽量短的篇幅把核心原理讲清楚。理解原理不是为了纸上谈兵,而是为了在第7章实战时能判断"为什么 Hermes 这么响应"以及"我应该把哪类任务交给它"。

亢少军的博客 141

《游戏引擎架构》

《游戏引擎架构》 基本信息 作者: (美)Jason Gregory(杰森.格雷戈瑞) 译者: 叶劲峰 出版社:电子工业出版社 ISBN:9787121222887 上架时间:2014-1-20 出版日期:2014 年1月 开本:16开 页码:800 版次:1-1 所属分类:计算机 > 游戏 > 综合 更多关于》》》《游戏引擎架构》 编辑推荐...

weixin_30791095的博客 285

车载以太网-组播

车载以太网-组播

天赐好车的博客 252

游戏引擎学习笔记:介绍,架构,设计及实现

By Long Luo 从小到大,虽然玩过的游戏不少,但是从写程序开始,目前为此仅仅写过2个游戏。其一是2011年在MTK平台下写的贪食蛇,其二是2010年在嵌入式开发板上写过一个迷宫的游戏。第一个代码量大概有3000行左右,第二个有2000行左右。 这2个游戏都很简单,而且网上有很多现成的例子可供参考,因此难度也比较低。 这2天把拖延了好久的《Android应用开发揭秘》的游戏

TCP/IP协议栈学习ing 9420

【AI Agent】Harness Engineering实践

Harness(运行宿主)是围绕 LLM构建的一套确定性工程系统,其核心职责是:承认模型的固有局限,用可控的工程手段逐一弥补,使"强大但不可靠的推理引擎"变成"可信赖的生产级Agent"模型 是发动机——提供原始动力Agent 是驾驶员——做出决策Harness 是道路、地图、护栏、仪表盘、维修站和质检线——确保行驶安全有序没有Harness,模型越强,可能只是更快地制造混乱。

sysu_lluozh 190

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Unity3D脚本编程读书笔记——第1章 Hello Unity 3D(认识Unity3D游戏引擎)

本文的核心内容在于纵览Unity3D游戏引擎的发展历史,以及介绍作为一款通用游戏引擎,Unity3D的引擎架构是怎样的。

xcinkey的博客 2357

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

[读书笔记]游戏引擎需要关注什么?

一、游戏引擎的几大块 1、光影效果,即场景中的光源对处于其中的人和物的影响方式。游戏的光影效果完全是由引擎控制的,折射、反射等基本的光学原理以及动态光源、彩色光源等高级效果都是通过引擎的不同编程技术实现的。 2、动画,目前游戏所采用的动画系统可以分为两种:一是骨骼动画系统,一是模型动画系统,前者用内置的骨骼带动物体产生运动,比较常见,后者则是在模型的基础上直接进行变形。引擎把这两种动画系统

【石】黑水晶 1302

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

游戏引擎架构 个人笔记 2.2.1-2.2.3章节

[游戏引擎架构 个人读书笔记 2.2.1-2.2.3章节] 个人读书笔记:只根据自己的情况写下自己关心的部分。 => 编译器(compiler): 每次只翻译一个cpp => To Object File i: 可重定位:未决定代码的内存地址 :p ii: 未链接:未解决外部函数和全局数据 :p 我(Object File)~ 只...

weixin_30824479的博客 86

Koan《iphone游戏开发》 读书笔记之一:游戏引擎揭秘

Koan《iphone游戏开发》 读书笔记之一:游戏引擎揭秘 2011年09月01日   本人做的读书笔记,版权归《iphone游戏开发》作者:[美]Paul Zirkle Joe Hogue 著 张龙 译,如作者及译者认为侵犯版权,本人马上删除该笔记,另外,转载慎重,因为版权非本人。。   游戏引擎的组成:应用框架、状态机、图形引擎、物力引擎、音频引擎、游戏输入以及游戏逻辑等。 ...

ttl04ttl 278

[读书笔记]<游戏引擎架构>|管理器的启动与终止

每个游戏都会包含一些底层支持系统, 例如资源管理器、日志系统、对象池、动画管理器、音乐/音效管理器等。这些管理器通常是一个单例类,如下面这段代码:class ResourceManager { private: static ResourceManager* m_pInstance; public: static ResourceManager* get() {

菜鸟的试炼 506

GameEngineArchitecture读书笔记(一)

Game Team 国外AI和Audio程序员所占的角色还是很重要的, 而国内AI都是服务器在做, Audio基本上没有人下多少工夫美术的话TA越来越重要, 3D游戏开发不缺少另外, 项目管理也很重要, 程序员没有那么多精力去关注这些事情Game Engine 引擎的三个特性: 数据驱动, 可复用, 可扩展流派 第一人称 对于技术通常都是走在最前端: 写实效果, 对于技术要求最高. 真实渲染, 高帧率, 物理模拟, 动画和高智能AI, 多人游戏支持第三人称 卡通效果, 丰富的动作, 可交互场景格斗

逍遥剑客 6100

优快云博文精选:iPhone系列开发博客资源汇总

优快云博客本期热文推荐,为您介绍有关iPhone应用开发的5个博客,分享他们的日积月累的宝贵经验,希望这些文章对iPhone开发者们能有所启发和帮助。 [1] 李华明:Objective-C语言随笔、iOS Cocos2d游戏开发 从这一章开始,Himi将一步一步的带大家走进Iphone4的开发,当然开发语言则不再是Java,而是Objective-C。 Mac os 下搭建iOS...

weixin_33751566的博客 274

HGE读书笔记(一)--绘制,声音,和碰撞处理

HGE读书笔记一: 1.库的安装和下载 从官网上http://hge.relishgames.com/上可以下载到最新的HGE游戏引擎,此游戏引擎是完全免费开源的。在此感谢此引擎的编写者,感谢他的无私奉献。本教程是入门的教程,可是在此也并不介绍如何配置环境,这些操作网上琳琅满目,读者可自行上网收索   2.HGE实例 #include #pragma comment(lib,"hge.

i_dovelemon的专栏 4673

游戏学习路线_读书笔记

事游戏开发多年,之前也做过程序的培训,找回以前自己的写过的 一篇文章,结合,自己的经验实践,给大家一些方向的指导吧 首先:你要做好2点思想准备:1,真心喜欢游戏2,路漫漫其修远兮,吾将上下而求索 然后:一般从零开始 要经历一下四个阶段 第一阶段:学习和计算机沟通的言语 —— C++语言或其他语言 程序是什么?要回答这个问题要从各个方面进行剖析,在计算领域中,程序 (progra

soho95的专栏 892
上一篇: Direct-X学习笔记--公告板
下一篇: 什么是游戏开发的实体系统框架
puppet_master
puppet_master 领域专家: C/C++技术领域 领域专家: C/C++技术领域
博客等级 码龄12年 2695粉丝 161原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值