GPU Based Particle Using DirectX9

小明 2011-09-20 6,021 views

今天工作不多,于是又想起了之前看过的一片文章,叫做基于GPU的大规模粒子系统,是ShaderX3上的一片文章,反复看了一下这篇文章,发现在文章最后说到的渲染粒子的方法我一直存有疑问。它给的方法是用点精灵画粒子,而且说这样比用三角形要省3到4倍的顶点数据,还详细讲了怎么解决点精灵无法绕Z轴旋转的问题。我想它说的应该就是Dx提供的Sprite接口吧。可如果是这样的话这个东西是没法实现的。首先它没办法使用shader,那么就无法完成根据前面GPU算出的粒子属性画粒子。其次这个东西并不会比三角形剩顶点,它内部应该也是用到了三角形的顶点数据,只不过接口上给人的感觉是只需要画一个点就行了。

还有一点一直想不清楚。我确实可以取到每帧更新的粒子属性,它存在于纹理贴图中,但是我要画粒子的时候怎么去取呢,在VS中传进去的是表示粒子的两个三角形的顶点和纹理坐标,我怎么在VS中采样存储粒子属性的贴图呢?

这两个问题一直没想明白,明天继续想。因为公司的引擎是扒拉过来的,现在只用DX9渲染,GS不能用,那么做这个GPU上的粒子系统还是有点意思的。关键是ShaderX3这篇文章根本没有代码,我觉得老外是不是也跟国内大学生写论文一样啊,那些理论挺有道理,可真正变成现实还有很多工作要做,可他就没实际写代码就把论文发了。看到国内有个博客翻译了这篇文章,据他说他实现了文章中的代码,可看他贴出来的东西完全跟那论文是两回事。看来把这个东西做做好还是很有必要的。

    一块砖头已落地!

    1. 博主文章确实不错,有空来我的网站看看,黄金网http://www.huangjin5.org/我自己设计做出来的。


    欢迎拍砖!