20.9 小结
粒子系统是一组行为相似但又不失随机性的颗粒群(它们通常很小)。粒子系统可以模拟很多自然现象和非自然现象,比如火焰、雨滴、烟雾、爆炸、喷壶、魔咒、炮弹等等。
我们用点来模拟粒子,在渲染之前通过几何着色器把它们扩展为面对摄像机的四边形。这意味着,我们使用点可以获得更高的运行效率——占用较少的内存——物理公式只需要应用于一个顶点而不是4个顶点,而且还可以把点扩展为大小不同的四边形,并对它们进行纹理映射。注意,点不总是扩展为四边形。例如,用直线来模拟雨点的效果更好;我们可以在不同的几何着色器中把点扩展为不同的图元。
粒子在常量加速度下形成的运动轨迹可以由公式\({\bf{p}}(t) = \frac{1}{2}{t^2}{\bf{a}} + t{{\bf{v}}_0} + {{\bf{p}}_0}\)表示,其中是a常量加速度向量,v0是粒子的初始速度(即,当时间t=0时的速度),p0是粒子的初始位置(即,当时间t=0时的位置)。我们可以使用该方程得到粒子在任意时间t≥0时的位置。
当你希望粒子系统的颜色高度与粒子密度成正比时,应该使用加法混合。对于透明粒子应该使用透明混合。如果不按照从后向前的顺序对一个透明粒子系统进行排序,那么可能会出现问题,也可能不会出现问题(也就是,问题可能明显,也可能不明显)。对于粒子系统来说,在渲染时一般应禁用深度写入功能,保留深度测试功能,使粒子只被非粒子物体遮挡,而粒子之间不相互遮挡。
流输出(SO)阶段允许GPU向绑定到管线SO阶段上的顶点缓冲区V写入几何体数据(以一个顶点列表的形式)。尤其是从几何着色器输出的顶点都会被写入(或传送)到中。随后,我们可以把V中的几何体渲染出来。我们可以使用流输出特性来实现完全运行在GPU上的粒子系统。我们使用两个technique来完成一工作:
- 一个 technique用于更新粒子系统。在这个pass中,几何着色器根据特定粒子系统的条件生成、销毁和更新粒子。存活的粒子之后会被流输出到顶点缓冲区内。
- 一个technique用于渲染粒子系统。在这个pass中,我们绘制存活的粒子。
发布时间:2014/9/4 下午6:17:27 阅读次数:3683