内容简介:本书延续了畅销书《GPU精粹》的第1卷,细述了在今天的图形处理器(GPU)上最新的可编程技术。随着GPU进入手机、手持游戏设备和游戏机领域,GPU专业知识在今天的竞争环境中显得更为重要。实时图形程序员会发现用于建立高级的视觉特效、管理复杂场景的策略和高级图像处理技术的最新算法。读者还会学到一些新方法,把GPU的强大处理能力运用到其他计算密集型程序中,比如科学计算和金融。书中有20章专门讲述GPGPU编程,从基本的概念到高级技术。本书提供了一些专家撰写的最前沿的GPU编程技术,为读者介绍了利用GPU巨大功能的实用方法。
“GPU精粹”的第1卷构思于2003年春季,即在第一代完全可编程的GPU出现不久之后。结果,书在一年之内就发行了,而且很快变成了一本畅销书,书中提供了一些最佳想法,让您可以尽可能地利用最新的可编程图形硬件。 GPU编程是一个变化快速的领域,而且写续篇的时机已经成熟。自从出现可编程图形处理器以来,它们以难以置信的速度变得更快更灵活。早期的可编程GPU只在顶点级支持可编程,而今天复杂的逐像素程序已经很常见了。一年前,实时GPU程序的长度经常是几十条指令,而今年的GPU可以处理有上百条指令的复杂程序,并仍可以以交互的速率渲染。可编程的图形甚至已经超越了PC并快速地扩展到控制台、手持式游戏设备和移动电话。 直到最近,关注性能的开发者可能仍在考虑用汇编语言编写GPU程序。然而,现在高级GPU编程语言已经普及,开发者为GPU编写汇编程序而烦恼已经极其罕见了,这要感谢编译器的进步和GPU能力的快速提高。作为对比的是,游戏开发者从使用CPU汇编语言发展到用高级语言写游戏花费了多年时间。 这种快速的变化自然使“精粹”风格的书适合于汇集这种尖端技术,并把它扩散到开发者论坛。通过公认专家编写的特色章节,本书提供了该领域中众多最令人兴奋的新思路。 图形硬件和编程环境的革新已经在该如何使用可编程性方面激发了进一步的革新。虽然可编程着色一直是离线软件渲染的主要产品,但在GPU上,可编程性的出现导致了用于可编程着色的各种新技术的发明,现在的发展远远地超过了程序化模式生成和纹理合成, GPU上着色器尖端技术的使用正在快速进入全新的领域,这引领了动画、光照和粒子系统等方面新技术的发展。 GPU的灵活性和速度已经培养了对“在GPU上做超越计算机图形的计算”的浓厚兴趣:在GPU上的通用计算(或GPGPU)。“GPU精粹”系列中的本书用了大量篇幅讲解这个新主题,包括GPGPU编程技术的简介、若干代表性的应用和关键算法的深入讨论。随着GPU性能的增长继续强于CPU的增长,对越来越多的程序员来说,这些主题将会越来越重要,因为GPU将对很多计算密集型应用提供更好的结果。 基于这种背景,我们为参与《GPU精粹2》发出一个公开号召。而得到的回应是压倒性的:在开放提交的短时间内就收到了150多章的提议,包括关于GPU编程的各个主题。本书只能包含其中的1/3;许多优秀的提议无法被包括进来纯粹是因为篇幅所限。编辑们很艰难地把那些内容削减成本书的48章。我们感谢提交了提议的每个人。 本书中的内容都通过了一系列严格的复审过程,本书的编辑、各章的作者以及在某些情况下来自NVIDIA的其他书评人都仔细地读过这些内容并给出了改进或修改建议。由于书评人为本书提供了高质量的反馈,因此最终内容的质量有了显著地改进。我们感谢所有的书评人,他们为本书的编撰付出了大量时间和努力。 读者对象 我们希望读者熟悉计算机图形学和GPU编程的基础,包括图形API,如Direct3D和OpenGL,以及GPU语言,如HLSL,GLSL和Cg。对GPGPU编程感兴趣的读者可能发现对并行编程的概念有一些基本了解是有帮助的。 游戏、可视化应用程序和其他交互式应用程序的开发者,以及计算机图形学的研究者,将会发现本书是一个无价的日常资源。尤其是下一代控制台的开发者将会发现很多及时和可用的内容。 范例 本书附有CD-ROM,内容包含书中所描述技术的代码示例、视频和其他示范。这张CD-ROM是对书中想法的有价值的补充。在很多情况下,由作者提供的可实践范例将会提供更多的启迪。您可以在本书的网站找到样章、更新的CD-ROM内容和补充材料等。 致谢 本书融入了许多人的巨量工作。首先,撰稿人在很短的时间内写了很多很好的章节。他们的努力已经成为有价值的、及时的且能启发思维的合集。 部分编辑Kevin Bjorke,Cem Cebenoyan,Simon Green,Mark Harris,Craig Kolb和Matthias Wloka——在本书上花费了很多时间,他们与作者一起修改、润色章节,直到它们变得出色为止,和作者商议最好的GPU编程实践,并且友善地提醒他们截止期限。没有这些编辑们的专注和奉献,我们现在仍然处于提交的提议状态。Chris Seitz也细心地关注有关本书编撰过程中的许多法律、后勤和商业问题。 NVIDIA公司的其他人也是本书的贡献者。我们在此感谢Spender Yuen,他耐心地在书的图片和封面上做了令人惊奇的工作。当插图的数量超过150幅后,Helen Ho也来帮忙了。我们感谢Caroline Lie和她的团队,他们持续不断地支持我们的项目。同样地,在我们进行项目开发时,Teresa Saffaie和Catherine Kilkenny总是乐意帮着我们审稿。Jim Black协调开发者和撰稿者之间的通信,包括Tim Sweeney,感谢他为本书撰写了这么精彩的序言。 Addison-Wesley的Peter Gordon,Julie Nahil和Kim Boedigheimer监管了这个项目,并帮助督促生产流水线,我们才可以尽可能及时地发行本书。Christopher Keane的审稿技巧和Jules Keane的协助不可估量地改善了内容,最后完成的时候,Curt Johnson为本书的上市提供了帮助。 NVIDIA管理团队一些成员的支持对本项目的成功是功不可没的。Mark Daly和Dan Vivoli发现了为“GPU精粹”系列增加第2卷的价值并始终支持本书。Nick Triantos给了Matt时间为这个项目工作并在若干GPGPU章节上给予了反馈。Jonah Alben和Tony Tamasi对关于GeForce 6系列架构的章节提供了深刻见解和有价值的反馈。我们真诚地感谢Jen-Hsun Huang,他建立了这个项目,构建出创新的、具有挑战性的和深谋远虑的环境,使NVIDIA公司成为一个如此令人愉快的工作地点。 最后,我们感谢NVIDIA公司的所有的同事,感谢他们一天天推进计算机图形学的发展,他们的努力使这一项目成为可能。 Matt Pharr,NVIDIA公司 Randima (Randy) Fernando,NVIDIA公司 序 在专门用于PC图形绘制的硬件出现之前,工业上的第一个3D立体游戏用了基于CPU的软件渲染。那时,受John Carmack在Doom和Quake上的先锋程序启发,我写了第一个Unreal Engine。尽管CPU很慢,分辨率很低,但20世纪90年代中期成了图形和游戏时间上的分水岭。几乎每个月都出现新的视觉效果,其中以Quake的光照贴图和阴影与Unreal的彩色光和体雾这样的里程碑最为显著。随着固定功能3D加速器的出现,那个时代渐渐逝去了。由于缺乏驱动革新和变异的可编程性,3D游戏变得模糊了。 今天,3D图形进入了新的复兴时代,由完全可编程的GPU(Graphic Processing Units,图形处理单元)驱动,拥有了超过十年前上千倍的图形处理能力。现代的高级编程语言联合难以置信的并行计算能力,使今天的GPU引燃了革新和创造的强大爆炸,可以轻易地完成实时的模糊阴影、精确的照明模型和真实的材质影响。但是可编程性最重要的好处是,只要可以找到一个算法来表达您的想法,就能用GPU完成一切工作。本书示范了很多这样由想法变成的算法。 下面看一下当今的图形程序员所拥有的资源。首先,您可以访问一个执行可编程着色算法的GPU,每秒可以进行几百亿次浮点运算,它是您的工具。如果您可以把问题移入像素和顶点的范畴内,就可以利用GPU的强大功能。其次,您有一个CPU,是系统的通用计算引擎。CPU发送指令给图形处理单元、管理资源,并与外部世界交互。最后,您有美工的内容——纹理贴图、网格和其他多媒体数据,GPU可以在渲染过程中组合、过滤和程序化地修改它们。 本书中的精华在于把这些资源以新的方式用于渲染真实感场景、处理图像和产生特效。这么做,许多原来的图形规则可能被打破了。GPU快而灵活,使用户可能多次渲染一个给定的对象,把场景分解成它的组件——灯光、阴影、反射和后期处理效果等。也可以用GPU完成非图形任务,如碰撞检测、物理和数值计算;在纹理贴图中可以编码着色程序用的任意数据,如向量、位置或查找表。虽然具有真实感的效果已经在GPU上实现,但它不是唯一选择:还有非真实渲染技术,如卡通着色,夸张的运动模糊和光扩散(bloom),以及在好莱坞产品中时常见到的其他效果。 在我写Unreal最初的软件渲染器7年之后,我的公司开始开发一种新的游戏引擎——Unreal Engine 3。它是针对今天的现代GPU能力设计的。它拥有难以置信的功能!以前需要建立300个多边形的带有静态光和纹理贴图的场景,现在则可以把带有真实感材质特效的动态逐像素光照和阴影组合进有上百万个多边形的场景。我们已经体会到了程序员和美工可以获得的能力和灵活性的爆炸性增长。但是,当很多东西已经在图形的发展中改变时,一些事实仍然保持不变:图形需要工程学、艺术性和发明的独特组合,任何一个都是无可取代的;随着硬件性能指数般地增加,创新正以难以置信的速度发展,并且图形编程充满极大乐趣! 在本书中,您将学到很多新知识,并提高洞察力,还会了解很多简单整洁的想法,它们都可以轻易地在今天的图形硬件上应用。但是这里提供的技术只是您冒险旅途的一个出发点——真正的乐趣和机遇在于,发现新的方法来定制和组合这些精华,并且发明出新东西。 Tim Sweeney Epic Games的创办人和技术指导 截图来自Unreal Engine 3的技术演示