unity3d引擎程序员养成
标准学习流程
1. 《C++ Primer》英文版(第四或第五版)
必须完整阅读并完成书中所有习题。渲染程序设计较为复杂,后期会用到 C++ 的全部特性,C++ 掌握得越好,后续学习会越轻松。建议阅读英文版,计算机领域常用词汇有限,打好英文基础后,查询 Stack Overflow 等网站会更加便捷。
2. 《Introduction to 3D Game Programming with DirectX 11》(经典龙书)
这是渲染入门书籍,介绍了很多基本渲染算法,需认真阅读并完成习题。
3. 《Practical Rendering and Computation with Direct3D 11》
详细介绍了 D3D11 的架构和 API,是一本不错的参考书,可与龙书配合阅读。
4. 数学库选择
推荐使用 Eigen 数学库,它易于使用。
单纯学习 DirectX,以上三本书足够,认真学习大约需要一年时间,其中 C++ 学习半年,D3D 学习半年。做习题至关重要,不做习题相当于没学。如果只是单纯想做游戏,掌握这些内容基本足够;但如果想设计渲染引擎,真正的挑战才刚刚开始。
入门基础要求
与玩游戏相比,开发游戏要复杂得多。除了掌握通用编程技巧,还需要具备扎实的图形学、物理和数学基础。在国内,由于相关资料匮乏,初学者往往不知从何入手。以下是一些入门方法和容易上手的资料。
首先,要精通一门高级语言,如 C++ 或 C#。其次,要有良好的英文阅读能力,这对于游戏开发者来说是最重要且最基本的技能之一,因为大部分资源都是英文的,不要依赖他人翻译,应逐渐尝试阅读英文资料。
刚开始学习时,需要选择一门图形 API,通常在 DirectX 和 OpenGL 中选择。如果考虑跨平台,OpenGL 是首选;如果只在微软平台开发,DirectX 是首选。由于本文作者对 OpenGL 了解较少,下面的资料主要与 DirectX 相关。作为准备工作,需要到 DirectX Develop Center 下载最新版的 DirectX SDK。
入门书籍推荐
入门书籍非常关键,推荐《Introduction to 3D Game Programming with DirectX 9.0》(去年好像出了中文版),即传说中的龙书,这是最好的 DirectX 入门教材,作者 Frank Luna 深入浅出地讨论了 DirectX 的各个方面。另外,可搭配《DirectX 9 Graphics the Definitive Guide to Direct3D》,虽然书名看似权威,但实际上是入门基础书籍。读完这两本书,基本能熟悉 DirectX。如果想学习 XNA 也同理,因为 XNA 基于 DirectX。
更新(2010.11.6):《Introduction to 3D Game Programming with DirectX 9.0》的第二版《xxx, A Shader Approach》也可以找到。
学习时要注意,不要一开始就看图形学的书,此时对图形编程缺乏基本的感性认识,阅读起来可能会一头雾水。不要将网上的教程和论坛提问作为主要学习途径,选择一本好书进行系统学习,效率更高。也不要急于看 SDK 里的例子,很多图形学基本原理仅通过读代码难以理解。一些年代久远的书,如《windows 游戏编程大师技巧》《3D 游戏编程大师技巧》,不建议阅读,因为对于现代 GPU 来说,很多早期技术和优化技巧已经过时,图形编程发展迅速,GPU 1 - 2 年就会有一代产品革新。
巩固拓展阶段
入门之后,就到了巩固知识和拓展视野的阶段,此时阅读计算机图形学相关书籍比较合适。强烈推荐《Real - Time - Rendering》,这是所有图形程序员的必读书籍和参考手册,最近刚出了第三版(更新:已有电子版)。可惜国内只有第二版,稍显陈旧,但如果找不到第三版,也值得一读。国内其他以图形学命名的书籍普遍枯燥、过时,只需阅读其中二维三维变换和曲线曲面表示的部分即可。如果发现数学基础薄弱,有三本为游戏程序员量身定制的数学书:《3D Math Primer for Graphics and Game Development》《Mathematics for 3D Game Programming and Computer Graphics》和《Essential Mathematics Guide 2nd Edition》,第一本书有中文版,最后一本是 2008 年出版的新书。
更新(2010.11.6):看完上述入门书籍后,应花时间完整阅读 DirectX 文档和部分示例,加深对 DirectX 整个系统和函数的理解。会发现普通论坛里 60% 的问题文档中都有解答。
入门之后,没有固定的学习路线,可根据个人兴趣方向进行学习。
Shader 方面
- 《Cg_tutorial》和《The Complete Effect and HLSL Guide》是不错的入门材料,还有 SDK 文档也可参考。
- 《Shaders for Game Programmers and Artists》有大量入门示例。
- 《Advanced Lighting And Materials With Shaders》详细介绍了各种光照模型和技术。
- 《GPU Gems》1 - 3 册是必读的,虽然 1、2 册有中文版,但部分翻译不太理想,建议直接看英文版。
- ShaderX 系列很经典,每年出版一本,包含最新的实时渲染技术,现已出到第 6 册,但网络上只能找到 1 - 3 册。1、2 册大部分 shader 用 asm 编写,理解原理后转换为 HLSL 并不难。
- Nvidia SDK 和 ATI SDK 也是学习 shader 的重要资源。
- 还有刚出版的《Programming Vertex, Geometry, and Pixel Shaders》。
更新(2010.4.30):ShaderX 已出版第 7 册,后续版本因版权原因改名为《GPU Pro: Advanced Rendering Techniques》,仍每年出版一本。
更新(2010.11.6):很多图形学新书在淘宝能买到单翻印的纸版,包括 ShaderX 系列等。
更新(2014.6.24):Shader 系列包括 Shader1 - 7 + GPU Pro1 - 5;GPU Gems 为 GPU Gems 1 - 3。
更新(2010.11.6):关于 ShaderX 和 GPU Gems,有人询问较老几册是否值得看以及看不懂怎么办。个人看法仅供参考:这两本书收录的是前沿技术,虽各册之间无连续性,但很多技术基于之前的方法。有时间建议从第一本开始看。两本书都像论文集,章节间连续性不强,可选择感兴趣的部分阅读。例如对阴影感兴趣,就看阴影相关章节,能了解阴影技术近 10 年的发展变化,很有价值。而且很多前沿、实验性技术受硬件限制,通常 2 - 3 年后才可能普及,现在看以前的几册也不会太“过时”。这类书内容广泛,涉及图形学的各个方面,如 2D、3D、图像处理、AI、游戏构架、GPGPU 等,特别是 GPU Gems 更偏重学术研究,很多技术不一定能应用到产品中,有些章节看不懂很正常。
地形方面
- 《Real Time 3D Terrain Engines Using C++ And DX9》全面讨论了地形渲染的各种技术,至少应浏览第 5 - 9 章。之后可到 virtual terrain 查阅近期的地形渲染技术。 更新(2010.11.6):经常用 PIX 分析电脑上的游戏,地形渲染部分通常较易分析,能快速了解当前流行的地形渲染方法。
模型导入和动画方面
- 《Advanced Animation with DirectX》,有这一本书就足够了。 更新(2010.5.5):《Character Animation With Direct3D》已容易找到,该书介绍了最新的游戏动画技术,作者是 Xbox360 大作《Alan Wake》的开发人员,可替代上面提到的书。
物理方面
- 《Game Physics》和《Game Physics Engine Development》都不错。
- 《Real - time Collision Detection》是碰撞检测方面最好的书。
- 《3D Game Engine Design, 2nd》的第 8、9 章也值得一看。
LOD 方面
《Level of Detail for 3D Graphics》
光线追踪方面
- 《Physical - Based Rendering – From Theory to Implementation》 更新(2010.4.30):有一本免费的入门教程《Another Introduction to Ray Tracing》 更新(2010.11.6):该书已有第二版,某网站有翻印版出售。
引擎设计方面
目前这方面没有特别好的书,可能核心内容较少有人愿意撰写。
- 《3D Game Engine Architecture Engineering Real - Time Applications with Wild Magic》只有第三章值得一读。
- 《3D Game Engine Programming》可选择部分感兴趣的章节阅读,总体讲解较浅。 更新:《3D Game Engine Design, Second Edition》出了影印版本,是《3D Game Engine Architecture Engineering》的更新版,强烈推荐。
- 最近发现《Pro OGRE 3D Programming》不错,200 多页短小精悍,能让读者快速了解既有引擎的设计和构架。 更新(2010.7.15):新出的《Game Engine Architecture》(Jason Gregory 版本)非常不错,如果只推荐一本引擎方面的书,首选这本,传说已有扫描电子版。 更新(2010.6.28):《Game Engine Gems》是关于引擎设计的新系列丛书,与 ShaderX 类似,每年出版一本,目前已出版第一册,已有电子版。
AI 与游戏编程方面
- 《Programming Game AI by Example》很不错,好像有中文版。
- 备选《Artificial Intelligence for Games》(已有第二版)。
- 《AI Programming Wisdom》系列也是必读作品,但目前网络上只有 1 - 2 册。 更新(2010.5.28):《AI Game Engine Programming》已较容易找到,虽名不副实,未完全介绍“one for all”类型的引擎,也无具体算法讨论,但针对不同类型游戏的 AI 设计做了详细介绍,可作为参考性书籍阅读。
网络方面
作者表示自己是网络方面的“小白”,未提供相关内容。
综合方面
- 《Game Programming Gems》系列内容广泛,文章质量参差不齐,可选择性阅读。
- 历年 GDC、Gamefest、Siggraph 等大型会议的论文也值得关注。
- 那些“All in one”或声称几天教会写 FPS 游戏的书不要读,这类书往往什么都涉及,但都没讲清楚。
网络资源推荐
- http://www.gamedev.net/:除了大量教程,论坛多年积累的内容丰富多样。善用论坛搜索功能,会发现无论自身水平如何,总能找到比自己更早遇到相同问题并给出解决方案的人。
- Nvidia 和 ATI 的开发者中心
- creators.xna.com:XNA 官方网站
- http://www.gamasutra.com/:与 GameDev 类似
- http://www.beyond3d.com/:这里不仅讨论软件,还能看到对硬件构架的分析
- http://www.gameres.com/:国内唯一比较专业的游戏编程网站,但与 GameDev 相比略显逊色。
此外,别忘了收集各大论坛里高手的博客。最后,仅仅看书是不够的,多实践、多编程才是提升能力的关键。