OpenGL着色器
OpenGL着色器简介
粒子系统是大量冒烟、灰尘、烟尘、烟尘、雨等自然现象的方法的通用名称。
为了模拟由粒子组成的自然现象,我们通常像设置每个粒子的其他属性(速度、颜色等)一样设置位置,然后在幕后执行以下步骤:
更新每个粒子的属性。此步骤通常涉及一些数学计算(从简单到极其复杂 - 具体取决于现象的类型)。
渲染粒子(作为常规彩色点或要显示在广告牌上的纹理)。
以前,步骤 1 通常切换到 CPU(处理器)。应用程序访问顶点缓冲区,通过其内容,并更新绝对每个粒子的属性。步骤 2 没有任何根本性差异,因此它由 GPU(图形处理器)执行,就像渲染的其余部分一样。但这种方法有两个问题:
将粒子更新到 CPU 需要 OpenGL 驱动程序将顶点缓冲区的内容从 GPU 内存(对于 PCI 总线上的独立显卡)复制到 CPU 内存中。我们感兴趣的现象通常由大量的粒子组成。10,000 个粒子在给定区域中并不罕见。如果每个粒子占用 64 KB,并且我们以 60 帧速率(正常值)运行,则意味着我们必须每秒从 GPU 向 CPU 发送 640K 来回发送 640K。这将对应用程序的性能产生负面影响。随着粒子数量的增加,效果只会增加。
更新粒子属性意味着使用不同的传入数据运行相同的数学公式。这是分布式计算的一个很好的例子,GPU是如此之好。在 CPU 上处理意味着升级过程的顺序。如果您的处理器有多个内核,我们可以利用它们并减少总处理时间,但这需要应用程序的额外工作。在 GPU 上运行升级过程意味着我们可以轻松轻松地获得并行计算。
DirectX10 引入了一项称为流输出的新功能,该功能对粒子系统非常方便。OpenG