本书从实践的角度出发,详细介绍3D游戏开发的高级技术,并具体描述了一个游戏引擎的构建过程。全书着重讨论三个主题:游戏开发的一般过程;实时渲染过程;角色动画。所有主题均围绕一个具体的游戏开发系统Fly3D SDK2.0加以介绍。\r\n 本书旨在为当今的三维游戏引擎技术提供一个综合的解决方案,使读者尽快地进入开发者角色,了解整个游戏的开发过程并初步具备游戏引擎开发能力。\r\n 本书适合作为高等院校相关专业的教学参考书,同时可供相关技术人员和游戏开发人员阅读。
出版者的话\r\n专家指导委员会\r\n译者序\r\n前言\r\n第一部分 高级游戏系统剖析\r\n 第1章 高级游戏系统剖析I:构造过程和静态光照\r\n 1.1 数据结构\r\n 1.2 构造过程\r\n 1.3 光照贴图的构造\r\n 1.4 BSP管理\r\n 1.5 高级静态光照——辐射度\r\n 第2章 高级游戏系统剖析II:实时处理\r\n 2.1 视见和BSP\r\n 2.2 照相机控制\r\n 2.3 使用BSP的基本碰撞检测和反弹\r\n 2.4 特殊的碰撞检测和反弹\r\n 2.5 基本的路径规划\r\n 第3章 高级游戏系统剖析III:软件设计与应用编程\r\n 3.1 应用的种类\r\n 3.2 Fly3D引擎体系结构\r\n第二部分 实时渲染\r\n 第4章 实时渲染\r\n 4.1 简介\r\n 4.2 顶点、像素和贴图\r\n 4.3 因式分解法\r\n 4.4 BRDF和真实材质\r\n 4.5 使用BRDF进行逐像素着色\r\n 4.6 环境贴图参数化\r\n 4.7 实现BRDF:可分离的近似\r\n 4.8 着色语言和着色器\r\n 第5章 实时渲染:实践\r\n 5.1 基本着色器\r\n 5.2 渲染状态\r\n 5.3 着色器实例\r\n 5.4 实时硬件渲染\r\n 5.5 动态纹理\r\n 5.6 特效\r\n 第6章 几何处理\r\n 6.1 简介\r\n 6.2 推动因素和定义\r\n 6.3 排序标准\r\n 6.4 简化与属性\r\n 6.5 实例分析\r\n第三部分 动画制作\r\n 第7章 角色动画\r\n 第8章 动画成形方法\r\n 第9章 高级角色动画之要素\r\n 第10章 基于运动捕捉的角色动画\r\n 第11章 反向运动学原理\r\n 参考文献
近年来, 随着数字技术突飞猛进的发展, 计算机图形学(Computer Graphics, CG)作为一种图形设计的方法及工具, 已在世界范围内得到了普遍的重视, 成为计算机科学中最为活跃的领域之一. 计算机图形学是一门建立在计算机科学. 数学. 物理. 心理学以及艺术基础上的综合学科, 它主要研究如何在计算机中表示图形, 以及利用计算机进行图形计算. 处理和显示的相关原理与算法. 目前已被广泛地应用于娱乐. 计算机辅助设计(Computer Aided Design, CAD). 科学可视化及系统可视化领域, 形成了一系列新的研究方向.
在当今世界上, 在CG技术方面处于领先地位的国家分别是美国和日本. 自1968年美国科学家第一次在实验室中将自己亲属的照片扫描进计算机(这也是对计算机图形学的首次尝试)开始, 计算机图形学已经在美国发展了整整35年, 其中1975年开始举办的SIGGRAPH(计算机图形艺术联合)展不仅极大推动了美国CG技术的发展, 而且已经发展成为世界CG技术的年度展览会. 同时, 日本也依赖其特有的动漫文化产业的支持, 为全球CG业, 尤其是电子游戏及动画领域输送了大量人才, 推动了各种游戏软件及硬件(如SONY最新推出的PS2)的发展. 如今在这些国家, CG技术已经广泛深入到影视制作. 游戏制作. 个人艺术创作. 多媒体教育等社会各个层面, 每年给国家带来近千亿美元的经济利润. 可以说, CG已经成为一种产业, 深刻影响着一个国家的经济和文化发展.
三维游戏开发是计算机图形学中一个重要的研究方向, 对开发人员而言, 不仅需要熟练掌握图形学中的原理和技术, 同时还需具备人工智能. 计算机网络等多方面的知识. 随着游戏产业朝着专业化的方向发展, 游戏程序的开发逐渐分离为两大块内容:开发游戏引擎和使用游戏引擎开发游戏. 其中游戏引擎是针对某一类特定形式的游戏所定制的二次开发平台, 它使游戏设计者可以较少地关心程序技术本身, 而专心致力于游戏可玩性的设计. 本书旨在为当今的三维游戏引擎技术提供一个综合的解决方案, 将游戏理论技术与具体引擎代码分析相结合, 使读者阅读后能够初步具备游戏引擎的开发能力.
本书分为上下两册. 上册主要从理论上探讨最新的游戏引擎技术, 包括建模技术. 真实感图形生成技术. 实时渲染技术. 动画技术, 以及声音. 输入输出控制和物理引擎等高级技术, 力求使读者能有一个较完备的理论知识背景, 在日后开发中对各方面的技术具有系统的把握能力.
下册从实践的角度出发, 具体描述了一个游戏引擎的构建过程, 着重于基本开发工具的使用. 软件构架. 开发技巧和优化等方面, 并结合具体的游戏代码详细说明, 帮助读者将上册的理论付诸于实践, 使读者尽快进入开发者角色. 此外, 下册还初步介绍了游戏设计原理和游戏引擎的使用, 主要目的在于使游戏引擎开发者能够了解整个游戏开发过程和客户(游戏设计者)的需求.
本书最后给出了一个完整的三维游戏引擎实例, 该引擎采用C++语言开发, 基于Windows平台运行, 并且支持DirectX9. 我们鼓励读者在看懂实例的基础上进一步加入自己的想法, 不断完善, 从而增强实际动手能力, 成为一名专业的游戏引擎开发人员.
由于时间仓促, 翻译中出现的任何不妥之处还请各位读者见谅. 在一年多的翻译过程中, 复旦大学的领导和老师给予了大力的支持和帮助, 同时我们还得到了复旦大学计算机科学与工程系高性能可视化仿真实验室多位同学的协助. 在这里, 特向以下协助翻译的同学表示大力感谢:金万军. 顾源泓. 张睿. 牟涛. 滕莉. 陈峥. 李宏宇. 施荣杰. 岳军. 李晨佳. 周斌. 杨树林. 陆瀛海. 吴鸿智. 杜浩. 葛云鹏. 曹杰. 曹贡献. 张蕊. 吴若寒. 雷迦吟. 罗毅. 陈珊珊.
译者
2004年11月
Alan Watt 英国谢菲尔德大学计算机科学系讲师,是该校计算机图表学研究室主任,曾经编写过多本优秀著作,包括《3D计算机图形学》和《The Computer Lmage》。
Fabio Policarpo 工作在里约热内卢的软件开发者,他是Paralelo计算机公司的创始人,目前正致力于三维动作多玩家游戏的研究。
这本书的目的在于介绍游戏制作中一些先进的技术. 主要分为三个部分:
(1) 一般过程, 包括
构造过程――游戏系统所需要的离线处理过程
实时过程――游戏引擎执行的应用无关的过程
软件设计――如何用科学的设计把所有相关元素整合起来, 如何将应用和游戏引擎结合.
(2) 实时渲染过程. 实时渲染的理论和目前已有的实践将在各自的章节中加以介绍. 另一章介绍几何处理, 也就是多边形网格理论中一些重要的和容易忽略的问题.
(3) 角色动画的理论和实践.
在文章中这些问题将结合一个具体的游戏系统Fly3D SDK 2.0 加以讲述, 这样做的目的是在一个实际的游戏系统中尽可能多的引出文中介绍的那些技术. 由于这里考虑了理论又考虑了实践, 所以我们必须选择一个特殊的设计方式. 我们希望这种特殊化不会对读者理解整体原理造成较大影响.
并不是所有文中介绍的技术都在Fly3D中得到实现, 一些章节是纯理论的. 然而, 就是在这些理论的章节中, 大多数的重要方法也已被独立的实现了. 对此, 我们希望感兴趣的读者能得到足够的知识, 从而可以在我们提供的引擎或者他们自己的引擎上实现这些技术.
在书写本书的时候(2002年8月), 游戏与其他应用结合的潜力很大. 用较低的处理代价实现较复杂的场景现在已经可行了. 文中所提到的一个今后的发展目标就是编制工具用于除游戏以外的其他应用.
引擎就是执行游戏的系统, 应用程序就是像编辑器. BSP构造器等那样的工具. 通过这些工具, 游戏能够被设计, 并进行一些必要的预处理操来为引擎实时处理准备好游戏数据. 游戏引擎用来执行游戏, 使用离线阶段构造好的有效数据结构. 除了有效地渲染静态内容, 引擎必须也能处理动态物体间的交互以及游戏与玩家间的交互.
介绍了一个基本的游戏引擎和相关的BSP理论. 文中我们还涉及了用在Fly3D第二版中的更先进的技术. 这些发展体现了一种经验的演化和新的不断优化的过程. 我们希望这些结果代表了游戏系统发展的现状.
系统的特性有:
-/+ 完全插件导向
-/+ 支持复杂地形和封闭环境的BSP/PVS绘制管理. BSP的一般递归.
+ 通过使用凸集的伪入口和A*算法自动的寻找路径
+ 至多有8通道的固定功能的着色器
- 多纹理支持
+ 着色器集成了硬件化的顶点编程和像素编程.
-/+ 为静态的几何结构创制带有柔和阴影的光照贴图
- 带有雾贴图的三维雾
- 考虑距离衰减的动态变色光源被用来重绘光照贴图和动态物体
+ 动态网格(带有动画混合(animation blending)的顶点变形)
+ 带有骨架的动态网格(带有动画混合(animation blending)的骨骼/皮肤)
+ 用反向动力学进行Mocap的重定位
O 支持着色器的网格文件格式(.F3D)
O 活动骨架的网格文件形式(.K3G)
+ 几种面片的类型:大面片(超过三个顶点), 三角形带, 三角形扇, 三角形汤(tri-soup)和曲面片.
- 对于使用双二次曲面的曲面片进行动态的LOD
+ 硬件渲染选项, 包括卡通/侧影轮廓线渲染
- 动态阴影—使用stencil的容积阴影.
- 采用客户/服务器架构的多用户支持(使用DirectPlay)
O 立体声和3维音效支持(使用DirectSound)
- 鼠标键盘输入(使用DirectInput)
- Intel奔腾3的矢量和矩阵算数优化
O 直接从zip文件中读取数据
+ 带有实时预览的.fly文件脚本编辑器
+ 带有实时预览的.shr文件的着色器编辑器
O 带有3D Studio Max版本2, 3, 4的插件, 用于输出包含任意数量动画的.F3D和.K3G文件.
O 带有3D Studio Max版本3, 4的插件, 用于输入输出.FMP(Fly3D Map)文件.
O flyBuild map应用程序和flyBuild构造前端.
O Quake的关卡转换器, 以使用与Quake3兼容的关卡编辑器
-代表在[WATT01]中描述了的部分
+代表本书涉及的部分
O代表没有涉及在文章中涉及但出现在光盘中的应用软件.
引擎和SDK的功能列表被用来让开发者能够用尽可能低的处理代价实现高级的视觉效果. 这种发展以及艺术制作工具的演化已经成为现代游戏的一种重要方面, 因为它使得设计家和艺术家能够集中于创作. 它也将程序员和艺术家在游戏制作过程中扮演的角色分割开来. 我们将在第三章中给出典型例子.
随着硬件的飞速发展以及更高级的管理和渲染应用的发展, 更高的复杂度变得可能, 为游戏引擎开发出了出了游戏之外更多潜在的应用. 引擎现在已经被应用到如下领域:
三维游戏:两种游戏类型在文中被广泛的作为例子.
通常的第一视角射击游戏, 玩家在一个复杂的场景中漫游.
非线性的角色动画类型, 主角被玩家操纵在环境中自主的漫游, 并与周围的物体交互.
三维互联网应用/游戏:提供ActiveX控制, 包括Fly3D所有的功能. 互联网上实时的三维模拟是非常直观的. 可能的应用包括三维环境中购物, 三维浏览和三维行销应用.
三维建筑的实施漫游: 游戏引擎另一个潜在的应用是实时的建筑内部的展现. 图P.1(彩图)显示了游戏引擎在购物超市和公寓的设计中被用作一个CAAD工具.
通用的三维可视化:复杂性主要来源于几何形状的复杂和高级渲染技术的需要. 我们设计了一个包含这样场景的例子—火星部分表面的多边形表示. (见图1.7)