(渲染粒子)我应该学习着色器还是OpenCL

(rendering particles) Should I learn shader or OpenCL?

本文关键字:OpenCL 学习 粒子 我应该      更新时间:2023-10-16

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

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

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

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

这种方法或编码风格不是要避免的吗?

为什么?

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

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

GPU 和 API 存在以供使用。根据需要使用它;不允许使用您认为应该如何使用 API 来限制您。

我还没有学习如何使用 OpenCL 并使用 GPU 多线程的强大功能来直接声明和传递我想要的代码吗?

昨天,我会说"是"。但是,今天发布了:OpenGL计算着色器。

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

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

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

即便如此,也不需要计算着色器来生成数据。人们使用变换反馈和几何着色器来执行实例化渲染的 LOD 和视锥剔除。不要害怕跳出"OpenGL绘制东西"框框思考。

要在OpenCL中模拟粒子,您应该尝试"Yet Another Shader Editor"/http://yase.chnk.us/- 它消除了所有棘手的部分,并让您深入了解对粒子控制算法进行编码。在您的浏览器中。无需下载,无需创建帐户,只需更改您找到的任何示例。这是一场爆炸。

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

我与亚斯没有任何关系。