11

我正在尝试运行 100000 个和更多的粒子。我一直在观看许多演示着色器和 OpenCL 强大功能的教程和其他示例。

在我观看的一个示例中,粒子的位置是根据您的鼠标指针(您用一只手握住并且光标在屏幕上的物理设备)的位置计算的。每个粒子的位置存储为 RGB。R是x、G y 和B、z。并传递给像素着色器。然后将每个颜色像素绘制为粒子的位置。

然而,我对这种方法感到荒谬。

  • 是不是应该避免这种方法或编码风格?
  • 我不应该学习如何使用 OpenCL 并使用 GPU 的多线程功能来直接声明和传递我想要的代码吗?
4

2 回答 2

13

是不是应该避免这种方法或编码风格?

为什么?

着色器的全部意义在于让您能够做您想做的事情,更有效地表达您想要做的事情,并让您自己更好地控制硬件。

您永远不应该害怕将某些东西重新用于不同的功能。纹理不存储颜色;它们存储数据可以是颜色,但也可以是其他内容。您越早停止将纹理视为图片,您作为图形程序员的工作就会越好。

GPU 和 API 存在以供使用。随心所欲地使用它;不要让你认为应该如何使用 API 来限制你。

我不应该学习如何使用 OpenCL 并使用 GPU 的多线程功能来直接声明和传递我想要的代码吗?

昨天,我会说“是”。然而,今天发布了:OpenGL 计算着色器

事实上,OpenGL ARB 和 Khronos 创建了这种着色器类型等等,这默认了 OpenCL/OpenGL 互操作并不是为渲染目的生成数据的最有效方式。毕竟,如果是这样,OpenGL 就没有必要拥有通用的计算功能。有 3 个版本的 GL 4.x 没有提供此功能。它现在在这里的事实基本上是 ARB 说,“是的,好的,我们需要这个。”

如果由许多制造硬件的人组成的 ARB 认为 CL/GL 互操作不是最快的方法,那么很明显应该使用计算着色器。

当然,如果你现在就尝试做某事那将无济于事;只有 NVIDIA 支持计算着色器。甚至那只是在测试版驱动程序中。AMD 需要几个月的时间才能获得对它们的支持,而在这种支持变得足够稳固和稳定以供使用之前,还需要更多的时间。

即便如此,您也不需要计算着色器来生成数据。人们已经使用变换反馈和几何着色器来进行 LOD 和截锥剔除以进行实例渲染。不要害怕在“OpenGL 绘制东西”框之外思考。

于 2012-08-07T02:12:33.587 回答
1

要在 OpenCL 中模拟粒子,您应​​该尝试“Yet Another Shader Editor” /http://yase.chnk.us/ - 它消除了所有棘手的部分,让您开始着手编写粒子控制算法的代码。在您的浏览器中。无需下载,无需创建帐户,只需更改您找到的任何示例。这是一个爆炸。

https://lotsacode.wordpress.com/2013/04/16/fun-with-particles-yet-another-shader-editor/

我与 yase 没有任何关系。

于 2013-04-17T09:01:11.647 回答