《游戏引擎架构》读书心得(二)

一.调试技巧及工具

(1)基础调试

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

b)   冗长级别:我们有时想要打印,有时又不想打印,所以可以设置打印内容的级别,每个信息设置一个级别,然后设置一个全局的级别,大于这个级别的打印,然后可以通过调节全局级别,控制打印内容的范围。

c)      频道:再扩展的想一想,有很多要打印的内容时,就会比较乱,那么,将不同模块的打印信息分成不同的频道就可以解决问题了,再增加一个频道的参数,就可以控制打印哪个频道的相关信息啦。

d)      日志:有时候程序会莫名的崩掉,这时候就不单单要只看打印信息了,我们需要将程序的执行过程写入日志文件来供运行后查看结果。这里有个纠结的地方,如果每次打印都输入到日志文件,会保证日志的完整性,但是会损失性能,如果缓冲满了才输出到日志,有可能程序崩了就没办法将缓冲区的内容输出了,所以这是个取舍的问题。

e)  崩溃报告:崩溃报告也是一种日志,不过是程序崩溃时才有的日志,多数操作系统有一个顶层的异常处理函数,可以在此函数中打印各种异常信息,甚至发送电子邮件给程序团队(这个有点6啊),这些异常信息包括玩家状态,关卡,正在运行的脚本,堆栈信息等等帮助我们发现bug的信息。

(2)游戏中特有的调试功能

上面的一般的程序也可以使用,不过下面的这个应该是游戏中特有的东东了,绘图调试。

游戏几乎全是数学内容驱动的,我们用数学来定位物体,比如碰撞检测,投射光线,检测视线等等,如果我们这些东东都打印出来,一方面特别麻烦,另一方面也不好观测,更好的解决方案是用绘图将信息绘制出来,比如一个包围盒,那就把它画出来,正所谓一图顶千言,画面是最好的表现方式。

调试绘图API:应该简单易用,图形包扩直线,球体,点,坐标轴(x红色,y绿色,z蓝色),包围盒,文本。最好加上可以控制颜色,线的宽度,球体半径,坐标轴长度等的功能。

我们可以通过参数调节这些图元的位置,大小等等,自由度很高。而且这些内容可以使用一个DebugDrawManager类来进行管理,将调试绘图内容添加到调试内容队列中,在渲染时一起渲染出来。

(3)游戏内置菜单,或者主控台也是很好的选择,我们可以通过菜单或者控制台在游戏中对游戏进行控制,如果支持强大的脚本语言,甚至可以操纵整个游戏。比如一个AI,可以去掉其AI,改用手动控制AI以达到调试的目的。

(4)我们在调试游戏的时候,可以给人物手动添加点buff,比如去掉碰撞检测,移动到任意场景。

(5)摄像机移动:有时在调试游戏时,从某个角度我们不能很好的看到游戏的情况,所以我们可以设计一个在游戏暂停运行时也可以移动的摄像机来帮助我们调试。

(6)截屏也是一个很重要的调试方法,有些时候我们不能很好的重现bug,这种情况下截图或者屏幕录制就可以很好的帮我们定位bug。

(7)性能检测:游戏是实时系统,保证FPS很重要,我们要把握好性能,一种方法是查看函数的调用时间,一方面是函数本身的执行时间,另一方面则是函数的调用次数。

(8)如果资源载入失败,应该给出明确的Log提示信息,或者直接在游戏中显现出来。

(9)内存以及内存泄露检测也是很重要的。

二.渲染引擎

渲染引擎是游戏引擎中的重中之重,同时也是最难的部分。作为一个图形学,DX还没怎么学的小白,表示这一章并看不懂多少,只是知道一些概念,得继续恶补了。

(1)      首先就是介绍3D世界构成的那些元素:顶点,三角网格,光照,材质纹理,光照模型,摄像机,光栅化,Z缓存,抗锯齿等等。

(2)      渲染管道:渲染的架构是基于管道(pipeline)的,管道最大的优势就是并行性,各个阶段的计算同时进行,极大的增大了渲染系统的吞吐量。

(3)      渲染管线广义上的划分:

a)        工具阶段(脱机):定义几何体和材质

b)        资产调节阶段(脱机):调节几何体和材质数据,使之变成引擎可用的格式

c)        应用程序阶段(CPU):识别出潜在可视的网格实例,将他们及其材质送至图形硬件以供渲染。

d)        几何阶段(GPU):顶点变换,光照,投影至齐次裁剪空间

e)        光栅化阶段(GPU):三角形转化为片段,对片段着色。经过多重测试(深度测试,alpha测试,模板测试等)最终和帧缓冲融合。

(4)      在渲染之前设置世界矩阵,光源方向矢量,纹理绑定,纹理寻址及过滤模式,基于时间的纹理滚动或动画效果,深度测试(禁用或者启用),alpha混合选项。在提交图元之前要进行设置,绘制只有有时需要还原设置。如果我们忘记了,则会造成渲染状态泄露,即上一个图元的渲染状态影响了下一个图元的渲染状态。

(5)      设置渲染状态是全局的,对整个GPU有效,改变渲染状态时,整个GPU管道必须完成工作才能换上新的设置,所以对于渲染的顺序一定要把握好,不然会有性能损失。最好是按照材质排序来渲染,但是如果按材质来,又会有overdraw即重复渲染同一个像素。解决的办法是使用GPU的深度预渲染步骤(z prepass),即第一次迅速产生深度缓冲内容,第二次才用完整的颜色填进帧缓冲。

(6)      场景图(scene graph):所谓场景图不是图,而是管理场景中对象的数据结构,在平头截体剔除之前先进行显示对象剔除,通常为四叉树,八叉树,BSP树,kd树,空间散列技术等。四叉树和八叉树使用的是递归的思想,将场景不断细分,查询的开销维持在最小。BSP树使用一个平面将空间平分,即传说中的二元空间分割树。

BSP树或者入口系统:用于室内环境

四叉树:室外平坦地形,上帝视角

额外剔除机制:室外大场景,第一人称或第三人称游戏

(7)      好吧,剩下的我基本都看不懂了…诸如:法线贴图,高动态范围光照(HDR),全局光照(GI),伽马校正,全屏后期处理(动态模糊,景深模糊,晕影,着色等等)

游戏引擎真的是博大精深,即使十年时间,也不一定能全部搞懂。做游戏简单,前提是有引擎。做一个引擎真的是太难了!

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-26 03:17:50

《游戏引擎架构》读书心得(二)的相关文章

游戏引擎架构读书心得(一)

最近在读<游戏引擎架构>这本书,虽然感觉理论颇多,而且很多很多东西都看不懂,不过还是简单的把一些感觉很好的思想和方法或者概念记录下来. 1.      关于各个部件初始化,一个最简单粗暴的办法就是将各个部件按顺序排列起来,不但可以方便的看到初始化顺序,而且修改也十分容易. 2.      关于内存分配: a)        游戏中最常见的法则是-维持最低限度的堆分配,并且永远不在紧凑的循环中使用堆分配. b)        定制的内存分配器,先预先申请一大块内存,然后构建自己的内存分配器(st

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

3月底,我暂时结束了北京的工作,从原来的公司离职,主要是为了学习游戏开发的底层知识和3D引擎相关的内容,并进行技术转型,为了鞭策自己的学习,未来博客更新会比较频繁,现阶段主要是<游戏引擎架构>读书笔记系列和unity学习笔记系列. <游戏引擎架构>在两年前就买了,而且自己也大体的看过一遍,因为自己想学习引擎的底层知识,所以重新又找出了这本书再读一遍,并把根据自己的理解写一些读书笔记在这里与大家交流,另外因为想有一个新的开始,近期都会在博客园这里写技术博客了,前些日子搞了个自己的网站

游戏引擎架构.pdf高清版免费下载

下载地址:网盘下载 备用地址:网盘下载 内容简介编辑[1]  <游戏引擎架构>同时涵盖游戏引擎软件开发的理论及实践,并对多方面的题目进行探讨.本书讨论到的概念及技巧实际应用于现实中的游戏工作室,如艺电及顽皮狗.虽然书中采用的例子通常依据一些专门的技术,但是讨论范围远超于某个引擎或API.文中的参考及引用也非常有用,可让读者继续深入游戏开发过程的任何特定方向.<游戏引擎架构>为一个大学程度的游戏编程课程而编写,但也适合软件工程师.业余爱好者.自学游戏程序员,以及游戏产业的从业人员.通

游戏引擎架构 PDF下载

网盘下载地址:游戏引擎架构 PDF下载 – 易分享电子书PDF资源网 作者: [美] Jason Gregory (杰森.格雷戈瑞) 出版社: 电子工业出版社 原作名: Game Engine Architecture 译者: 叶劲峰 出版年: 2014-1 页数: 800 定价: 128.00元 装帧: 平装 内容简介 · · · · · · <游戏引擎架构>同时涵盖游戏引擎软件开发的理论及实践,并对多方面的题目进行探讨.本书讨论到的概念及技巧实际应用于现实中的游戏工作室,如艺电及顽皮狗.虽

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

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

《游戏引擎架构》笔记十二

碰撞及刚体动力学 一些碰撞/物理系统:http://www.gamedev.net/community/forums/topic.asp?topic_id=463024 I-Collide:http://cs.unc.edu/I-COLLIDE SWIFT: ODE:http://www.ode.org Bullet:http://code.google.com/p/bullet/ TrueAxis:http://trueaxis.com/ PhysX: Havok: PAL:http://ww

游戏引擎架构学习

本书的主页第一部分 基础 第1章 导论1.1 典型游戏团队的结构 工程师:艺术家:游戏设计师:制作人:其他工作人员:发行商&工作室 1.2 游戏是什么 71.3 游戏引擎是什么 101.4 不同游戏类型中的引擎差异 111.5 游戏引擎概观 221.6 运行时引擎架构 271.7 工具及资产管道 46第2章 专业工具 532.1 版本控制 532.2 微软Visual Studio 612.3 剖析工具 782.4 内存泄漏和损坏检测 792.5 其他工具 80第3章 游戏软件工程基础 833.

游戏引擎架构

游戏编程分为游戏逻辑和游戏引擎.游戏引擎是一套可重复利用的底层框架.包括渲染引擎.声音引擎.网络引擎等等.现提供一套游戏架构,从底层向上分别为: 硬件.驱动.操作系统. 第三方软件开发包:DirectX.OpenGL,Boost.STL库,Granny.Havok.Animation等. 平台独立层:集合.迭代器.文件系统.网络传输层.线程库.物理碰撞包裹类. 核心系统:模块启动终止.断言.单元测试.内存分配.数学库.调试用打印及日志.性能剖析.引擎配置.异步文件. 资源(游戏资产):三维模型资

游戏引擎架构笔记之基础

此书获誉无数,第一版没看过,直接看的第二版,然后大致看了一眼作者提到的和第一版的区别: 1.C++语言方面的最新进展,也就是C++ 11的标准:第八代主机游戏的架构,XBOX ONE和PS4 2.鉴于音效机制的巨大作用,作者增加了几章关于音效方面的内容. 3.修复了第一版中的一些错误. 我室友才买这本英文书没多长时间,就出新版本了,不知道杂说好,只能说好贵. 作者期望这本书能包括以下内容 1.工业级的游戏引擎是如何架构出来的? 2.游戏开发团队是如何被组织起来的,如何运转的. 3.世间有无数的游