前言
之前在看 DirectX 12 的示例代码的时候,看到一个用 GPU 跑的 N-body simulation 的效果,感觉很酷炫,然后偶然发现 Unity 居然支持使用 Compute shader,于是便尝试在 Unity 上复刻了一个。
Compute Shader
Compute Shader 是运行在 GPU 上的程序,但是不同于 Vertex Shader 与 Pixel Shader 之类运行于 Graphic pipeline 上的程序,不会直接参与图形绘制,而是做一些计算并输出。可以完成一部分传统由 CPU 完成的工作从而减轻 CPU 开销,特别适合用于做各种并行的计算。Unity 中可以直接创建 Computer Shader ,并且使用类 ComputeShader 来访问调用。
Compute Buffer
我们往往需要使用 Compute Shader 的计算做过作为实际图形渲染的参数,因此需要 StructuredBuffer 之类的中间缓冲用于交换数据,这些缓冲在脚本层被抽象为类 ComputeBuffer。
初始化 Compute Buffer
首先我们定义粒子的数据结构,每个粒子拥有自己的当前坐标、速度、颜色。
然后再在脚本中初始化数据
将指定数目粒子随机均匀分