《游戏引擎架构》是一本由[美] Jason Gregory (杰森.格雷戈瑞)著作,电子工业出版社出版的平装图书,本书定价:128.00元,页数:800,特精心从网络上整理的一些读者的读后感,希望对大家能有帮助。
《游戏引擎架构》读后感(一):游戏引擎架构 - 一点笔记
笔记:[Game Engine Architecture 游戏引擎架构 - 作业部落 Cmd Markdown 编辑阅读器](https://zybuluo.com/gnat-xj/note/620658)
# Game Engine Architecture 游戏引擎架构
## 第一部分:基础
### 1 导论
```
* 典型游戏团队的结构
* 游戏是什么
* 游戏引擎是什么
* 不同游戏类型中的引擎差异
* 游戏引擎概观
* 运行时引擎架构
* 工具及资产管道
```
游戏是一种软实时(soft real-time)互动(interactive)基于代理(agent-based)计算模拟(computer simulation)型计算机应用。
- 街机游戏(arcade game)
- 任天堂的 8 位红白机(Famicom)
- id software 的 id 发音如 kid 的 id,来自 id(本我),ego(自我)与 superego(超我)
- runtime programmer(做游戏)
- tool programmer(做做游戏的辅助工具)
- generalist(通才)
- lead engineer(首席工程师)
- technical director,TD(技术总监)
- chief technical officer(CTO)
- motion capture actor(动画捕捉演员)
- voice actor(配音演员)
- game designer
- first-party developer(第一方开发商),例如顽皮狗是索尼的第一方开发商
- Monopoly(游戏:大富翁)
- massively multiplayer online games,MMOG(大型多人在线游戏)
- interactively temporal simulation(互动时间性模拟)
- interactively real-time simulation(互动实时模拟)
- soft real-time system,不实时只是效果差点,无大碍
- hard real-time system,不实时会导致重大事故,如核电站的控制棒(control rod)系统
- force feedback(力反馈)
- FPS,first person shooter,第一人称射击游戏
- heads-up display(平视显示器)
- hovercraft(气垫船)
- 主角的能力(ability)以及运动模式(locomotion mode)
- non-player character,NPC(非玩家角色)
- Tekken(游戏:铁拳)
- subsurface scattering,SSS(次表面散射)
- brawler,beat 'em up(痛殴他们)
- hash and slash(切和斩)
- oblique top-down view(斜面俯视)
- height field terrian(高度场地形)
- persistent word(持久世界)
- god game(上帝模拟游戏)
- Castle Wolfenstein 3D,1992,德军总部,第一个 FPS 游戏
- 虚幻引擎是强大的原型制作(prototyping)工具和商业游戏平台
- preeptive multitasking(抢占式多任务)
- collision detection(碰撞检测)
- rigid body dynamics(刚体力学)
- low-level renderer(低阶渲染器)
- message pump(消息泵(beng))
- back-face culling(背面剔除)
- frustum cull(平截头体剔除)
- potentially visible set,PVS(潜在可见集)
- 场景图(scene graph)
- decal system(贴花系统)
- full-screen post effect(全屏后期处理效果)
- high dynamic range,HDR(高动态范围)
- bloom(敷霜效果)
- bleech bypass(略过漂白)
- full-motion video,FMV(全动视频)
- in-game cinematics,IGC(游戏内置电影)
- print statement / log 的 verbosity level
- force(力) and torque(力矩)
- skeletal annimation(骨骼动画)
- morph target animation(变形目标动画)
- ragdoll(布娃娃)
- game asset,`/æsɛt/`(游戏资产)
- asset conditioning pipeline(资产调节管道)
- digital content creation,DCC(数字内容创作)
### 2 专业工具
```
* 版本控制
* 微软 Visal Studio
* 剖析工具
* 内存泄露和损坏检测
* 其他工具
```
- translation unit(翻译单元)
- `cl /c foo.cpp /Fo foo.obj /Wall /Od /Zi`,`Od` 关掉优化,`/Zi` 产生调试信息
- F11 step into,F10 step over
- VS wathing window:`,d` 十进制,`,x` 十六进制,`,6`,六个元素
- conditional breakpoint(条件断点)
- Pareto principle(帕累托法则),也叫 80-20 rule,计算机中更常见的是 90-10 rule
- unobtrosive(不唐突)
- hex editor
- three-way merge tool
- difference/diff tool
### 3 游戏软件的工程基础
```
* 重温 C++ 及最佳实践
* C/C++ 的数据、代码及内存
* 捕捉及处理错误
```
- 只容许从一个单继承层次结构中多重继承一些简单且无父的类,这些类称为嵌入类(mix-in class)
- 尾数(mantissa),指数(exponent),IEEE 浮点数:$(-1)^{s}cdot (1+m)cdot 2^{e-127}$,`|S|-E(8)-|-M(23)-|`,M 的基底是 1/2, 1/4, 1/8, ...
- SIMD,single instruction multiple data(单指令多数据)
### 4 游戏所需的三维数学
```
* 在二维中解决三维问题
* 点和矢量
* 矩阵
* 四元数
* 比较各种旋转表达方式
* 其他数学对象
* 硬件加速的 SIMD 运算
* 产生随机数
```
- cartesian coordinate system(笛卡尔坐标系)
- cylindrical coordinate system(圆柱坐标系)
- sphericial coordinate system(球坐标系)
- RH,right-handed,LH, left-handed,利手(handedness)对叉积有影响(视觉化一个叉积时,右手坐标系用右手法则,左手坐标系用左手法则)
- right hand rule(右手法则)
- position vector/radius vector
- $otimes$ Hadamard product
- Pythagorean theorem(勾股定理),`/paɪˌθæɡəˈriən/`
- reciprocal(倒数)
- 叉积定义了 positive rotation(正旋)方向
- linear interpolation(线性插值),这个运算常被称作 LERP
- weighted average
- model space / object space / local space
- camera space / view space
- ellipsoid 椭球
- normed division algebra(赋范可除代数)
- 四元数:$q=[q_V q_S]=[vec acdot sin{frac{theta}{2}} cos{frac{theta}{2}}]$
- LERP → SLEPR (spherical linear interpolation)
- gimbal lock(万向节死锁)
- SQT(scale,quaternion,translation)
- point-normal form(点法式)
- AABB(axis-aligend bounding box),$[x_{min}, x_{max}, y_{min}, y_{max}, z_{min}, z_{max}]$
- OOB(oriented bounding box)
- frustum(平截头体)
- multimedia extension,MMX,多媒体扩展
- streaming SIMD extensions,SSE(单指令多数据流扩展)
- 随机数(random number)
- 线性同余产生器(linear congruential generator,LCG)
- 梅森旋转(mersenne twiter,MT)
- 所有之母及 Xorshift(mother of all pseudo-random number generator)
## 第二部分:低阶引擎系统
### 5 游戏支持系统
```
* 子系统的启动和终止
* 内存管理
* 容器
* 字符串
* 引擎配置
```
- 蛮力方法总优于其他方法
- memory access pattern(内存访问模式)
- write-thgouth cache(透写式缓存)
- write-back / copy-back(回写)
### 6 资源及文件系统
```
* 文件系统
* 资源管理器
```
- Modern C++ Design,Loki
- intrusive list(侵入式链表)
- 多字节字符集(multibyte character set,MBCS)
- UTF-16,wide character set(WCS)
- per-use option(个别用户选项)
- volume specifer(卷指示符),path separator(路径分割符)
- current working directory,present working directory
### 7 游戏循环及实习模拟
```
* 渲染循环
* 游戏循环
* 游戏循环的架构风格
* 抽象时间线
* 测量及处理时间
* 多处理器的游戏循环
* 网络多人游戏循环
```
- rectangle invalidation(矩阵失效)
- render loop,game loop
- abstract timeline,real timeline,game timeline
- oscilloscope(示波器)
- frame time,time delta / delta time,frame period
- perceived speed
- frame-rate spike
- frame-rate governing
- vertical blanking interval(垂直消隐区间)
- 1/300s 位时间单位(原理和 60 进制一样)
- 多人架构对于游戏主循环的结构有深远影响
### 8 人体接口设备(HID)
```
* 各种人体学接口设备
* 人体学接口设备的接口技术
* 输入类型
* 输出类型
* 游戏引擎的人体学接口设备系统
* 人体学接口设备使用实践
```
- light emitting diode,LED(发光二极管),`['daɪod]`
- 震动反馈(rumble)
- button-mapping table(按钮映射表)
- dead zone
- moving average
- grapple(扑捉技)
### 9 调试及开发工具
```
* 日志及跟踪
* 调试用的绘图功能
* 游戏内置菜单
* 游戏内置主控台
* 调试用摄像机和游戏暂停
* 作弊
* 屏幕截图和录像
* 游戏内置性能剖析
* 游戏内置的内存统计和泄露检测
```
- printf 调试法
- playtest 关卡(qia),游戏测试关卡
- sprint(快速跑)
- in-game menu
- invincible(不死)
- in-game profiling tool
## 第三部分:图形及动画
### 10 渲染引擎
```
* 采用深度缓冲的三角形光栅化基础
* 渲染管道
* 高级光照及全局光照
* 视觉效果和覆盖层
* 延伸阅读
```
- visual property(视觉特性)
- sloving the rendering equation(求解渲染方程),也叫着色方程(shading equation)
- light transport model
- opaque(不透明)
- transparent(透明)
- translucent(半透明)
- piecewise linear approximation(分段线性逼近)
- tessellation(镶嵌)
- 三角化(triangulation)
- level-of-detail,LOD(层次结构)
- dynamic tessellation
- progressive mesh
- winding order(缠绕顺序)
- cache coherency(缓存一致性)
- model-to-world matrix(模型至世界矩阵)
- diffuse(漫反射)
- specular(镜面反射)
- absorb(吸收),反射(reflect),折射(refract),衍射(diffract)
- subsurface scattering,SSS
- anisotropic(各向异性)
- color model,color channel,color format
- bits per pixel,BPP
- RGB888,RGB565
- paletted format
- per-vertex dynamic lighting
- Gourand shading(高氏着色器)
- 各种贴图
- texure map(纹理贴图)
- emmisive texture map(放射光贴图)
- diffuse map(漫反射贴图)
- albedo map(反照率贴图)
- normal map(法线贴图)
- gloss map(光泽贴图)
- environment map(环境贴图)
- light map(光照贴图)
- texture addressing mode(纹理寻址模式)
- wrap mode(缠绕)
- mirror mode(镜像)
- clamp mode(截取)
- border color mode(边缘颜色)
- texel density(纹素密度)
- mipmapping(多级渐远纹理)
- trilinear filtering(三线性过滤)来混合采样生成新一 level 的 texture map
- Cornell box(康奈尔盒子)
- local illumination model(局部光照模型)
- global illumination model
- ray tracing(光纤追踪)
- radiosity(辐射度算法)
- Phong 氏光照模型,Phone reflection model:$$I = k_AA + sum_i{[k_D(Ncdot L_i)+k_S(R_icdot V)^alpha]C_i}$$
- $k_A$ 环境光因子
- $k_D$ 漫反射因子
- $k_S$ 镜面反射因子
- $C_i$ 光源颜色及强度 $C_i = [C_{R_i} C_{G_i} C_{B_i}]$
- Blinn-Phone 反射模型
- BRDF(bidirectional reflection distrubtion function)
- ambient light(环境光)
- directional light(平行光)
- point light(点光)
- 全向光(omni-directional light)
- spot light(聚光)
- emmisive texture map(放射光贴图)
- umbra,`['ʌmbrə]`(本影),penumbra,`[pɪ'nʌmbrə]`(半影)
- perspective foreshortening(透视收缩)
- homogeneous clip space(齐次裁剪空间),通常左手坐标系
- aspect ratio
- 屏幕空间
- triple buffering(三缓冲法)
- depth buffer(深度缓冲),也称 z-buffer(z 缓冲)
- stencil buffer(模板缓冲)
- full-screen antialiasing,FSAA(全屏幕抗锯齿)
- multisample antialiasing,MSAA(多重采样抗锯齿)
- z-fighting
- w-buffer(w 缓冲)
- Unreal Engine 3(虚幻引擎 3)
- visibility determination(可见性判断)
- quadrant(象限)
- binary space partitioning(二元空间分割)
- constructive solid geometry(构造实体几何)
- image-based lighting(基于图像的光照)
- normal map(法线贴图)
- height map(高度贴图):parallax mapping(视差贴图法),浮雕贴图(relief mapping)
- spherical environment map
- cubic environment map
- 方位角(azimuthal angle)
- 天顶(zenith)
- high dynamic range,HDR,可以无失真地同时保留亮区和暗区的细节
- tone mapping(色调映射)
- silhouette edge(阴影体积)
- shadow map(阴影贴图)
- shadow volume(阴影体积)
- ambient occlusion(环境遮挡)
- contact shadow(接触阴影)
- caustics(焦散)
- geometry buffer(几何缓冲,G-buffer)
- sky dome(天空穹顶),sky box(天空盒)
- cathode ray tube,CRT(阴极射线管)
- depth-of-field blur(景深模糊)
- vignette(晕影)
### 11 动画系统
```
* 角色动画的类型
* 骨骼
* 姿势
* 动画片段
* 蒙皮及生成矩阵调色板
* 动画混合
* 后期处理
* 压缩技术
* 动画系统架构
* 动画管道
* 动作状态机
* 动画控制器
```
- cel animation(赛璐璐动画)
- sprite animation(精灵动画)
- rigid hierarchical animation(刚性层阶式动画)
- pelvis(盆骨)
- torso(躯体)
- upper arm(上臂/胳臂(bei))
- lower arm(下臂/手臂)
- upper leg(大腿)
- lower leg(小腿)
- hand(手)
- feet(脚部)
- head(头部)
- morph target animation(变形目标动画)
- facial animation(面部动画)
- skinned animation(蒙皮动画)
- pivotal movement(轴转移动)
- targeted movement(靶向移动)
- one-dimentional LERP blending(一维线性插值混合)
- $P_{LERP} = alpha P_0 + beta P_1 + (1-alpha -beta)P_2$
- delaunay triangulation(Delaunay 三角分割)
- partial-skeleton blending(骨骼分部混合)
- blend mask(混合遮罩)
- inverse kinematics,IK(逆运动学)
- forward kinematics,FK(正向运动学)
- end effector(末端受动器)
- action state machine(动作状态机)
- animation state machine(动画状态机)
### 12 碰撞及刚体力学
```
* 你想在x游戏中加入物理吗
* 碰撞/物理中间件
* 碰撞检测系统
* 刚体动力学
* 整合物理引擎至游戏
* 展望:高级物理功能
```
- je ne sais quoi(难以言喻的特质)
- trigger volume(触发体积)
- buoyancy(水面模拟及浮力)
- collision representation(碰撞表达形式)
- gameplay representation(游戏性表达形式)
- visual representation(视觉表达形式)
- convex(凸),non-convex / concave(凹)
- collision primitive(碰撞原型)
- capsule(胶囊体)
- swept sphere(扫掠球体)
- cuboid(长方体)
- discrete oriented polytope,DOP(离散定向多胞体),k-DOP 是任意 k 个平面所构成的形状
- arbitrary convex volume(任意凸体积)
- polygon soul,poly soup(多边形汤),多用于静态表面建模,如地形和建筑
- compound shape(复合形状)
- analytical geometry(解析几何)
- separating axis theorem(分离轴定理)
- polytope(多胞形)
- CJK
- Casey Muratori [Implementing GJK — 2006](https://mollyrocket.com/849)
- Minkowski difference(闵可夫斯基差)
- simplex(单纯体)
- bullet through paper,tunneling(隧穿)
- continuous collision detection,CCD(连续碰撞检测)
- time of impact(冲击时间)
- broad phase,midphase,narrow phase
- sweep and prune(扫掠裁剪)
- MKS 单位系统,m:meter,k:kilogram,s:second
- center of mass,CM/COM(质心)
- centroid(几何中心)
- linear momentum(线性动量)
- stiffness(刚度)
- mechnical viscous damper(减震器)
- angular dynamics(旋转动力学)
- moment of inertia(转动惯量)
- inertia tensor(惯性张量)
- product of inertia(惯量积)
- Newton's law of restitution for instanteous collisions with no friction(无摩擦力下瞬时碰撞的牛顿恢复定律)
- coefficient of restitution(恢复系数)
- perfectly elastic(完全弹性)
- perfectly plastic(完全塑性)
- point-to-point constraint(点对点约束)
- stiff spring constraint(刚性弹簧约束)
- hinge constraint(铰链约束)
- prismatic constraint(滑移铰约束)
- pulley(滑轮)
- procedural animation(程序式动画)
- contraint solver(约束求解程序)
## 第四部分:游戏性
### 13 游戏性系统简介
```
* 剖析游戏世界
* 实现动态元素:游戏对象
* 数据驱动游戏引擎
* 游戏世界编辑器
```
- world chunk(world chunk)
- level(关卡)
- map(地图)
- state(舞台)
- area(地区)
- cut-scene(过场动画)
- in-game cinematics
- noninteractive sequence,NIS(非交互连续镜头)
- full-motion video,FMV
- game object(GO,游戏对象),entity,agent,actor
- particle emitter(粒子发射器)
- spline(样条)
### 14 运行时系统性基础系统
```
* 游戏性基础系统的组件
* 各种运行时对象模型架构
* 世界组块的数据格式
* 游戏世界的加载和串流
* 对象引用与世界查询
* 实时更新游戏对象
* 时间与消息泵
* 脚本
* 高层次的游戏流程
```
- load-and-stay-resident,LSR(载入并驻留)
- imperative(命令式)语言
- declarative(声明式)语言
- functional(函数式)语言
- procedural(过程式)与 object-oriented(面向对象)语言
- reflective(反射式)语言
## 总结
### 15 还有更多内容吗
```
* 一些未谈及的引擎系统
* 游戏性系统
```
- 音频再次牺牲……(据说本书第二版有)
《游戏引擎架构》读后感(二):好书,好翻译。
记录下我学习到的一些
《1》之前对3维动画系统是有疑问的,这本书讲的太好了。
1,把动画方法视为数据压缩技术。最有弹性的动画系统,是可以控制物体表面无穷多的点;==》只控制顶点,每顶点动画per-vertex animation;==》关键帧然后差值,变形目标动画morph target animation;=》骨骼关节层阶结构+蒙皮顶点到关节上,蒙皮动画skinned animation。
2,动画混合里讲的 core pose,pivotal movement和targeted movement的处理。骨骼分部混合 ==》 加法混合。
3,逆动力学IK,解决地面不平坦时脚插入地面下或漂浮的问题。
4,动画状态机。action state machine,state layer
《2》游戏对象模型
1,单一庞大的类层次结构。深宽,基本无法维护,冒泡效应(使得基类成为个大杂烩了)。unreal 的Actor
2,改用组合Component ,unity就用这种。
3,竟然还有以属性为中心的架构,颇为类似数据库的结构。最大的优点看起来是性能(批量处理,缓存友好)。应该也属于历史了吧?
《3》游戏世界的加载
1,简单关卡加载,有lsr数据+关卡数据。在load关卡数据时也可以理由lsr数据做些tip或练习出招等。
2,阻隔室,air lock。《光环》有用。
3,streaming,无缝大世界。
《4》实时更新游戏对象
1,针对对象间的依赖,桶式更新。依赖树,然后分类。批次依次更新。差一帧的bug应该很多。在更新循环中,你查其他对象的状态可能是之前的也可能是已经更新过的。可用桶来辅助解决这个不一致问题。
《5》event系统
1,使用event队列,或及时传递event。哪个好呢?感觉及时传递更可控一点,比如如果出现事件feedback loop。这种直接栈溢出。event队列则只能查看log来猜测可能loop。
《游戏引擎架构》读后感(三):走向进阶的共鸣 ---深入理解工业级的《游戏引擎架构》
这两年,我阅读了大量关于游戏开发相关的博客,文章及书籍,从理论到实践;也不断通过各种互联网工具查阅实际开发中的一些技术细节和思路;经常与同行进行不同程度的交流和探讨。我体会到,对于某个领域,最重要的是要理解该领域的系统性的知识和原理,要明白它用来解决什么问题,解决问题的思路是什么,这样你才能去高效地实现细节。
然而对一个领域进行系统性讲解的书籍并不多,因为这要求作者不仅能够使用其介绍的技术来解决实际问题,还要对其宏观意义上有更深刻的认识。这就是工作经验富有魅力的地方,也是知识富有艺术性的部分。而《游戏引擎架构》正是这样一本站在系统性的高度,对游戏引擎的各个部分进行精心组织,涵盖一个工业级游戏引擎理论及各个部分实践的非常优秀的著作。原著作者Jason Gregory是世界一流游戏工作室顽皮狗(Naughty Dog)的资深开发者,其所参与的《神秘海域(Uncharted)》系列,《最后生还者(The Last of Us)》都是具有相当高口碑的优秀作品。
我们每一个游戏开发者,都想要了解一个游戏的每个技术点是如何实现的,以及对于组织这些技术的游戏引擎是怎样组织在一起工作的。对于这本书的阅读体验,本书的译者叶劲峰和推荐序者云风都不约而同的提到共鸣。书中对于游戏引擎每个组件的原理,业界方案,甚至其实现数据结构的介绍,阅读起来都是一气呵成的,它会在你以前的经验基础上,形成一种深深的共鸣,让你对游戏引擎的各个组件有更深刻的理解。下面我们选取一些精华内容进行解读。
在基础部分,第3章详细描述了游戏中C++的使用及内存管理方案,从基础数据结构,对象内存布局,字节对齐等方面进行了深入的分析,其中基础数据类型及操作对SIMD寄存器的支持能提升引擎的运算性能,它也能用于实现部分多线程游戏循环架构等方面,对于自研游戏引擎或者从事引擎基础开发的读者有非常重要的借鉴意义。第4章总结了游戏中常见的3D数学知识,虽然是数学基础知识,但是作者主要是围绕游戏中的应用来讲解,这样更易于理解。比如用SQT变换来代替一个4x4的仿射矩阵,可以轻松实现LERP插值计算,它被用于第11章讲述的骨骼动画中的动画混合等方面。此外对于资源及文件系统相关的介绍也是比较详细的,作者重点讲述了资源管理器,包括版本控制,数据库的设计,离线资源管道以及运行时资源管理等,笔者就借鉴了书中关于运行时资源生命周期的管理设计了一套关卡间资源过渡和共享的管理方案。
对于低阶引擎系统方面,笔者独爱游戏循环及实时模拟一章。通常我们理解游戏循环就是按照一定的帧率更新游戏中的状态,而本章却从时间线的角度来理解游戏循环。不同的游戏对象或者子系统拥有自己的局部时间线,从这样的角度去理解游戏循环就能更好地处理游戏中的同步等问题。此外本章还讲述了基于多处理器的游戏循环,由于多核并行性越来越重要,多数游戏工作室的引擎都开始不同程度地支持并行性,本节从Xbox 360和PlayStation3的硬件架构出发,讲述了SIMD,分叉及汇合,作业模型等多线程游戏循环的方案及实现。最后本章还介绍了网络多人游戏循环以及在《雷神之锤2》中的案例分析。
图像及动画部分堪称本书最精华的部分,任何阅读过该书的读者都毫不吝啬的对其赞赏不已。第10章介绍了采用深度缓冲的光栅化相关图形渲染的知识。光照几乎是现代工业级游戏引擎体现差异的地方,本章用大量的篇幅来介绍游戏中的各种光照技术,从传统局部光照模型Phong氏光照模型的算法实现,到基于图像的光照如法线,高度,镜面,环境贴图等,以及阴影渲染,环境遮挡,镜像,焦散,次表面散射,预计算辐射传输等全局光照技术,这些都是当下工业级的游戏引擎正在使用的技术。
3D游戏中人物的动作及动画总是最为迷人的部分,第11章详细讲述了骨骼动画的原理,数据结构及算法实现。首先讲述了骨骼的阶层数据结构,姿势及其内存数据结构。关节的姿势直接控制网格顶点,每个网格顶点可绑定至一个或者多个关节,每个关节定义一个坐标空间,所以每个关节姿势就是一个仿射变换。有了这些基础概念,动画片段用来表示一个小粒度的动作,它包含一连串连续的姿势,或者一些离散的重要姿势,每个动画片段包含一个局部时间线,动画引擎能够对姿势进行插值来计算中间姿势。这里作者还详细介绍了不同角色之间的动画同步,动画的数据格式以及动画重定目标(retarget)等内容。然后作者介绍了关节姿势变换来驱动蒙皮的过程,每个关节都是一个局部空间,它通过蒙皮矩阵来计算其相对于全局姿势的变换,蒙皮顶点也即是使用蒙皮矩阵来计算其在模型空间中的位置。
动画混合用于计算多个动画片段对角色最终姿势的影响,这使3D游戏中人物的动作更加逼真,通过少数动画片段就能产生更加复杂的人物动画。这部分首先讲述用SQT来实现两个关节姿势之间的线性插值计算,它可以用来实现任意给定两个时间点的中间姿势;如若把两个不同片段的时间线适度地重叠,则它可以用来计算不同动画片段之间的淡入和淡出,由此逐步推导出对任意数目的动画片段进行混合。加法混合引入一种区别片段的新类型动画,它记录两个姿势之间的改变,这个改变可以作用于任何正常动画片段,从而产生更加丰富的动画混合效果,本章还介绍了怎样用表达式树来表示各种混合计算。最后讲述了游戏引擎中怎样通过动作状态机,来使应用程序可以以更直接了当的,状态驱动的方式控制游戏中角色的动作,作者介绍了虚幻引擎中的图形化动画编辑器,以及顽皮狗《神秘海域》采用的基于文本的方式描述动画状态。
最后的游戏性系统部分的介绍,也是笔者非常喜欢的章节,这也是大部分开发者会接触的层面。作者探讨了各种运行时对象模型架构,尤其详细对比了以对象为中心和以属性为中心的两种主流对象模型架构,而后者正是笔者正在研究和使用的模型。
要用如此短的篇幅描述这么一本将近800页,内容如此丰富的著作,这令笔者感到非常不自在,我唯恐哪一个文字暗淡了这本书的光芒。
这本书详细地探讨了游戏引擎的方方面面,并且这些知识点不是简单地罗列,你甚至能感觉到作者根据自己丰富的经验,去设置哪些内容是你需要了解的,而哪些知识是你需要知悉原理的。对于那些比较重要的内容,作者甚至给出了数据结构及算法,读者可以全面了解游戏引擎各个方面的理论及实践。将近800多页,阅读起来丝毫不感到累赘,犹如看大片一样的畅爽感,紧凑,一气呵成。不管你是具有什么背景的经验,相信都能从书中各个丰富的细节找到共鸣。
最重要的是,这不是一本讲述概念的教科书,书中所讲述的技术都是当今主流工业级游戏引擎正在使用的技术。例如《神秘海域》引擎中的调试绘图功能,虚幻引擎中的图形化着色语言,动画编辑器等等。书中探讨的关于全局光照技术,是当前主流商业游戏引擎高品质的核心竞争力,例如Unity3D宣布将在Unity5中采用基于光线追踪的全局光照技术,用来动态生成光照贴图;骨骼动画系统相关的知识如加法混合,几乎在当今及未来很长一段时间都会是行业主流技术。
另外值得一提的是,译者在翻译这本书时非常严谨,加注了大量便于读者理解的注释,以及对原著中少数概念性错误的部分加以纠正。这不仅帮助读者更好地理解其中的概念,这种严谨的风格在翻译著作当中是罕见的。翻译作者的素养不仅是要实现文字功能的字面翻译,他也应该和原作者一样,确保书中的每个概念都是没有学术错误的,这样才会放心地交给读者去阅读。
所以,我们技术人到底应该怎样进阶?游戏开发是一个非常庞大的技术领域,我们通常从互联网,工作,以及与同行的交流中获得一些零散的知识。当有一天,一个经验非常丰富的朋友站在一个系统性的高度将这些所有技术的来龙去脉娓娓道来,使我们在共鸣中走向进阶,这个朋友就是《游戏引擎架构》。
《游戏引擎架构》读后感(四):一本不错的参考书
首先肯定下翻译,不往大了说,仅在游戏编程领域绝对是翻译的最好的一本。
但是很遗憾本书对于我这种有经验的开发人员来说水分多了点。太多的篇幅去讲语言和数学基础,太多的过时的优化技术。实际上这个世代的机器已经不用太注意CPU和内存方面的优化。开发人员应该更多的关注怎么把自己的代码写明白。
对于想要学习怎么使用游戏引擎的初学者,也不推荐这本书。因为里面大多数内容都属于不懂的看了也不懂,懂的不用看的范围。。。真不如去下载个Unity,做点小项目。里面的大多数技术Unity都已经覆盖,而且就资源管理和序列化方面的实现来讲,要远超作者当时见过的那些引擎。要是学会了使用上层,再来理解底层也是很容易的一件事。
唯一适合看这本书群体,是那些想重新造个更好的轮子的人,比如,咳,我。遇到问题的时候可以拿出来翻下。
总的来说,一本流水帐,缺乏洞见。不是那种看了会让你在心里说:“哦!还可以这样!”的书。
TW,衷心希望Milo能够写部游戏开发方面的书。不会比这本差。
从此书也可以看出来,为什么很难有好的游戏编程译作,能到译者这水平的人根本不在乎那点中文书稿费。整天上班都够忙了,还要抽时间把这么大一部书译完,真的要很自律的人才能做到。
《游戏引擎架构》读后感(五):一本学习3D游戏引擎的好书
因为前几年工作当中接触过一些计算机图形方面的基础内容,所以平时闲暇之余对于游戏开发也就有些好奇。年前听说Milo Yip翻译的新书《游戏引擎架构》要上市了,所以就有心想买来一读,满足一下好奇心。除此之外,出于敬仰译者在对待技术方面的严谨态度,除了拜读以外,也希望能够收藏此书。
上上周的周末,拿到了此书,接下来花了一个多星期的时间通读了一遍。因为自己并不是做游戏开发的,所以这里只是谈一谈自己的阅读感受,仅供大家参考。
从目录来看,本书分为五个部分。
第一部分为基础部分
第一章导论,属于全书的概览。1.5小节的一张运行时引擎架构图基本展示了整本书中二、三、四部分所要讲解的主要内容。本章接下来的小节,依照这张架构图从下往上依次先做了简短的介绍,以此作为全书的导论。读完本章之后,整体浏览一下本书的目录,会发现整本书的内容,基本上就是遵照这张图从下往上依次讲解的,编排思路非常清晰。
哦,从本章开始,全书有一个看似不起眼的部分对我帮助非常大,那就是整本书的译注。整本书中,译注非常的翔实。对我这个游戏开发的外行人来说,在我阅读整本书的过程中,译注除了辅助我解释一些专业词汇以外,还包括一些本书以外的扩展知识。比如一些技术的背景知识,对于原书作者一些不恰当观点的纠正,以及对于原书中一些过时的技术做一些更新提示。总之,译注真的是本书的一大亮点,阅读的过程中千万不能错过。
第一部分接下来的二、三、四章,主要就是介绍学习本书后面章节所需要的一些基础知识。
第二章开发工具的讲解以Windows平台的Visual Studio为主,以及在游戏开发中常使用的工具做了介绍。或许是因为自己平时用Mac的原因,所以对这部分不太感冒,只是做了简单的了解。:P
第三章对于C/C++的相关知识做了回顾。除了C++的基本语法以外,对于计算机当中数值的讲解以及C++的内存布局的讲解还是蛮重要的,因为这直接影响到理解本书第二部分第五章内存管理的内容。对于这部分,我自己觉得对于C++不太好的同学也不用太担心,因为这部分的讲解采用了图文并茂的方式,讲解思路非常的清晰,而且每个知识点都是从最简单的开始,门槛已经很低了,你需要做的就是集中注意力,勇敢的紧跟作者的思路就OK了。而且,整本书采用LaTeX排版,除了中文的文字看起来很爽以外,代码的排版看起来也非常的舒服。
第四章介绍游戏开发中涉及到的三维数学。这一章讲解了3D游戏开发过程中常见的数学运算,包括向量、矩阵等等。几乎都是简单的介绍基本的运算原理,绝对没有搞一堆看起来“高大上”的数学公式。这部分最重要的就是仿射矩阵,包括仿射矩阵的平移、旋转和缩放等,不管是后面的渲染引擎,还是碰撞物理引擎,或是引擎的局部优化,都会涉及到矩阵运算原理的知识。
从第二部分从低阶引擎系统开始,就算是正式开始讲解游戏引擎。
第五章讲解游戏支持系统,这部分算是游戏引擎的最底层了。所以会有很多C++简短的代码示例片段。对于内存管理,包括了堆栈分配器,双端堆栈分配器,池分配器,含对齐功能的分配器,单帧和双缓冲分配器等等,当然,还有如何处理内存碎片的问题。在容器这部分介绍了一些常见C++类库在游戏开发过程中的优劣。例如,STL、Boost、Loki等等。这部分感觉如果C++内存布局那部分能理解的话,理解这些基本原理应该不是问题,而且这部分的讲解很多也是图文并茂的,很直观。
第六章主要是讲资源管理。资源管理主要分为两大部分,一部分是离线资源管理,另一部分就是运行时资源管理。对于运行时资源管理,也涉及到了内存管理。具体的细节这里就不展开介绍了。
好像写的有点太过详细了……后面的介绍简短一些吧。
第七章讲游戏循环及实时模拟。主要在讲游戏的主循环渲染。介绍了几种常见的循环渲染的方式,对游戏当中的时间问题做了详细的讲解,以及不同游戏平台下,多处理器的游戏循环等。
第八章讲人体学接口设备。这一章主要就是讲解游戏外设,这一章印象比较深刻的一点是跨平台的HID(human interface device)系统。
第九章讲调试及开发工具。从这章的目录中就可以知道主要在讲哪些内容。对于我这个游戏开发的外行人来说,没有太多的感悟,:P
第三部分图形及动画
第十章讲渲染引擎。这章大概分为三个部分,第一部分在讲解3D渲染相关的基本概念。第二部分讲解渲染管道。第三部分主要是讲解光照。在第二部分讲解渲染管道的过程中,作者结合游戏开发,在流程上,把产生几何数据的工具,资产调节管道,应用程序这三个阶段加入了进来。这一点把游戏开发的整体流程考虑了进来,而非像普通图形学书籍那样,只讲解几何处理,光栅化部分。当然,对于渲染引擎来说,这几十页的内容是远远不够的,所以也可以看出,本章讲的其实是一些比较基础的知识。当然,为了让读者能够深入学习,本章最后特意留有一个小节,作为延伸阅读。译者也在章节过程中穿插推荐了一些不错的读物。
第十一章讲解动画系统。本章主要以骨骼蒙皮动画为主。具体如何,可以从译者的译序中也可以看出,本章和第十四章属于本书特别出彩的章节,想必应该不用多说了吧,:)
第十二章讲解碰撞及刚体力学。从题目也可以看出,本章分为三大部分,一部分为碰撞检测,第二部分为刚体动力学,最后一部分是整合到游戏引擎。在碰撞检测系统中,介绍了碰撞原型,碰撞检测及解析几何,这当中讲解了GJK算法。碰撞查询,碰撞过滤等。刚体动力学中主要包括运动学方面的知识。
第四部分游戏性
这部分就不分章说了。关于这部分,不管是云风的推荐序1,还是译者的译序,都特别推荐了这部分。
第五部分是总结
回头来看,本书适合当作学习3D游戏引擎的教材,既可以了解游戏引擎的全貌,又可以根据书中提供的阅读资料深入学习。不管是入门还是进阶,都可以参考此书。而且译者的翻译非常流畅,使用LaTeX排版的阅读体验还是非常爽的 :)
《游戏引擎架构》读后感(六):非常好的一本书
非常好的一本书,以前接触过英文版。当时自己的英文水平还不是很好,读起来有点吃力,当时就期待能有中文版,这次见到中文版面世,顿感相见恨晚。
一本好的外文书,一定要有一个好的译者,这方面,译者的水准我是很佩服的,读起来非常流畅,没有一点生硬的感觉。当然作者自己的游戏编程水平就很不错,在文章中可以把复杂的东西讲的很有条理、很清晰、很专业,这种认认真真翻译的精神我非常佩服。
书已经拿到手了,一口气读了100多页。虽然自己不是专门搞游戏开发的,但是工作也稍微要用到一些,所以读起来很能感到其中的妙处。希望这本很用心的书籍得到更多人的喜爱。
《游戏引擎架构》读后感(七):转载:davidgu 目前为止游戏引擎方面最值得重视的一本好书
游戏引擎方面的书籍历来都埋没在大堆的书中,不为人重视。
大家长期来重点关注的,都是渲染领域。
近年来这些现象有所改善,Game Programming Gems作为综合的Gems类书籍,有不少篇幅涉及了这一领域,近年来更有Engine Gems系列的书涉及这一领域。
然而Gems类的书籍,毕竟没有办法系统化的介绍引擎开发的全流程。
之前还有几本讲述系统性介绍引擎的书籍,如3D Game Engine Architecture和3D game engine design,也涉及这一领域。作为普及类的书籍,在技术方向上,和实际业界的主流引擎做法相差太远,较缺少实际应用价值。
现在的这本Game Engine Architecture,自出版以来,得到了业界的广泛赞誉。出自Naughty dog的资深主程之手,这本书覆盖了大量主流引擎的技术方向,在各个领域都有深入浅出的介绍,帮助开发者快速了解主流引擎的做法,也可以作为进一步深入学习引擎开发的方向指引,找到更多的方向。尤为可贵的是,这本书值得一读再读,在不同的开发阶段,在不同的经验下重读,都能发现很多新的闪光点。
这个时代不缺乏信息,缺乏的是有价值的信息。目前整个行业都充斥着喧嚣的手游致富的情绪,大家秉承多快好省的精神一窝蜂去开发高层应用,忽视底层技术积累,在这样的环境下,一本深度的好书能够得到出版社的引进出版,翻译者的认真翻译实在对中国游戏业能健康发展起到了不可估量的作用。
《游戏引擎架构》读后感(八):鸡肋
是冲着翻译及推荐买的,但看完之后有点失望。
这本书的翻译是毋庸置疑的——认真负责,这个无需多说,下面针对的是本书的内容。
对我而言,这本书比较有价值的部分只有第一章,其余章节都很一般了,偶尔有一些有价值的东西,但改变不了我对整本书的评价。
第一章是游戏的架构,主要的部分就是图1.11,可以对游戏的架构有个直观的了解。这一章约有50页,占书的1/15。对于入门来说,这一章很有价值。
第二章和第三章是编译工具(visual studio)和c++蜻蜓点水式的介绍。说实话,这两章没什么新意,既不深入,也不浅出。约70页,占书的1/10。
第四章是数学基础部分,谈及比较基础的矢量,矩阵,变换,四元数等概念。这部分也是浮光掠影式的介绍,不到70页,占1/10的内容。大部分的内容线性代数都有介绍,除了四元数外。但这部分仅仅写了四元数的一些运算公式,缺乏推导,甚至缺乏解释。这一章还有硬件加速的单指令多数据运算,也就是一个硬件优化,我对之不感兴趣。
第五章是所谓的游戏支持系统,看起来是讨论游戏,实则不然,说白了,就是讨论如何生成对象,有那几种内存分配方式,容器(对,就是STL里面的容器),字符串,配置文件等内容。里面有人对配置文件内容中的Scheme定义觉得眼前一亮,但一方面这个只有一页的内容,另一方面,如果你了解领域特定语言(DSL)的话,这个也就泛泛了。这一章60多页,不到1/10的内容。附加一句,不要看Martin Flower的那本书《领域特定语言》,《领域专用语言实战》可能好一些。
第六章是资源及文件系统,谈到一些管理游戏资源的工具。其实我最想知道的是如何在游戏资源(尤其是Maya,PS等生成的资源)和游戏之间交互,但这个章节上讲一些特定的工具,下讲资源在游戏中应该怎么管理和分配,就缺我想知道的,郁闷。这一章36页,占1/20的内容。
第七章是游戏循环和实时模拟。总算进入游戏主题部分了。主要就是讲游戏中的主循环结构应该怎么讲,怎么样调控帧率。我看完之后更加郁闷了,抽离了要循环的内容讨论循环,离开了要讨论的帧谈帧率,是不是早了点?当然这本书也不会讨论具体的帧。附加说一句,这本书的代码更加鸡肋,就像推荐序1说的“我们不认为这些代码有直接取来使用的价值”,但估计推荐者不好意思说的过火了,接着说代码“极大地帮助了读者理解书中的技术点”。我认为正好相反,这本书的代码不但没有取来直接使用的便利,更没有帮读者理解技术点的价值。这一章28页,占1/20的内容。
写的累了,简洁点了。
第八章讲人体接口设备,大致介绍了各种游戏设备;第九章讲调试和开发工具。这两章均没有亮点。两章合起来50页,占书的1/15。
OK,接下来更简洁了:
第十章:渲染引擎,第十一章动画系统,第十二章刚体动力学,三章加起来大约有250页左右。这也是我认为写的最差的部分。
尤其是第十章(渲染引擎)和第十二章(刚体动力学),包含大量未解释的术语和复杂过程,我最不满意的就是对于复杂的细节和过程仅仅口头叙述一下,而没有直观的图解和例解!
第十一章写的尚可,这也是译者认为精彩的一章,如果精彩是尚可的讳语的话,或许是吧。
第十三章和第十四章分别是游戏性系统简介和运行时游戏性基础系统,在我看来,这不过是C++的再次讨论罢了。译者认为第十三章也比较精彩,我看不出来。