Welcome

首页 / 软件开发 / .NET编程技术 / 在游戏中充分利用可编程的GPU

在游戏中充分利用可编程的GPU2011-04-12 博客园 effulgent在文章开始之前,借此园地真诚向我最亲爱的咪宝道歉,我谨记自己严重的错误,以此为 训,所有朋友作证,我将克己自重,痛改前非。我充分意识到GPU海量的吞吐和强悍的浮点计 算能力,将极高提高程序性能,也能让充分发挥显卡的价值,GPU作为电脑上2个可编程的高 性能芯片之一,长期以来都没得到普通程序员应有的重视,主要因为其编程麻烦,资料工具 欠缺。这里我将叙述我的游戏编程中尽可能多的使用GPU做事的一些经验,主要是想表达一种 合理使用计算机资源的一种思想吧。

我对DX10和SM3.0都不熟悉,所以更有用的GS数据输出,甚至于更强大的CUDA都不在本文 叙述范围之内,这里更多讨论SM2.0和DX9,相信大部分朋友都应该具备实践的条件。专业的 GPGPU都利用科学计算作为实例,我觉得不妥,还是简单点好,在这里我说说如何将公告板的 所有几何计算都放到GPU里去。

公告板对于图形程序员都再熟悉不过,就是让几何体(通常是四边形)总是面对相机,其 实就是一个旋转过程,最简单的就是雪花,草丛等等,在这里我要讲一个稍微复杂点的例子 ,比如魔兽中的锁链魔法,或者天空中的分形闪电,其实这些都是链接在2个点之间的一条或 多条几何体面片,一段可能是一个四边形,也可能是多个四边形,如下图:

如果一段不是一个面片就用不着旋转了,所以我们主要说上面那种情况。法师对一个或多 个目标发送带链接的魔法,其实就是在目标之间生成链接的面片,并且面片上进行相关的纹 理动画,当目标之间方位不断改变时还要进行几何变换等操作。原理很简单,就是让所有面 片都能面对观众,这样在特定方向观看时才不会有严重失真的表现,我们主要看如何把所有 计算都塞到GPU中去。

首先我们 必须在CPU中生成所有需要的顶点,因为没有GS的GPU不能生成顶点。比如我们要从A点生成一 条几何条带到B点,我们生成8个中间点,共10个点。通过相邻的2个点,我们可以求出2个点 的中间点,Pmid= (Pi + Pi+1) / 2,我们为第一个段 生成4个顶点,后续的段因为共用前一个段的后2个顶点,所以后面的每段只需要2个顶点,每 个顶点的几何坐标设置为本段的中间点坐标Pmid,这样每个段的顶点都是窝在一 起的,我们需要在VS里将其扩展成四边形,但我们需要信息,当前顶点该如何扩展,如下图 :