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


我试图运行100000和更多的粒子。 我一直在观看许多教程和其他示例,它们展示了着色器和OpenCL的强大功能。

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

但是我对这种方法感到很荒谬。

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

12905
2017-08-07 01:43


起源

+1用于向我解释计算机鼠标是什么。 - Christian Rau
@ChristianRau哦天啊,起初我以为你在哪里开玩笑,但后来我读了它。史诗 - thecoshman


答案:


是不是要避免使用这种方法或编码风格?

为什么?

着色器的整个要点是让您能够做您想做的事情,更有效地表达您想要做的事情,并让您自己更好地控制硬件。

你永远不应该, 曾经 害怕为某种不同的功能重新定位。纹理不存储颜色;他们存储 数据, 哪一个 能够 是颜色,但它也可以是其他东西。你越早停止将纹理视为图片,你作为图形程序员就会越好。

存在要使用的GPU和API。用它作为  觉得合适;不允许您认为应该如何使用API​​来限制您。

我不知道如何使用OpenCL并使用GPU多线程的强大功能来直接声明并传递我想要的代码吗?

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

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

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

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

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


13
2017-08-07 02:12



非常感谢你,我没想到会有如此详细的解释。 <3 <3 <3我将尝试着重于学习更多关于OpenGL和着色器的知识。我太偏心了,无法在盒子外思考。大多数时候我尝试过一些我认为是聪明方法的东西,而不是反直觉,换句话说就是糟糕的编码例子。所以我认为从那以后我尝试使用代码和其他可以按照预期合并的实用程序。我将尝试为我的粒子项目构建着色器,但我仍然害怕丑陋,违反直觉的代码的可能性。这是你眼前的答案 - BlueBug
你曾说过“不要害怕在”OpenGL绘制东西“之外思考。”它实际上是让我自己思考或做事。我的意思是我倾向于将自己与其他人比较,因为我知道外面有很多人,而且非常了解细节。另外还有很多关于图形编程的好教程和视频,我也不太了解。在编程方面,我通常感觉非常小。我所做的主要是遵循教程或模仿别人已经建立的东西(照明和其他东西)。 - BlueBug
这就是我们所有人的开始,@ user1217203。去那里创造一些东西! - Steven Lu


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

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

我不以任何方式与yase有关系。


1
2018-04-17 09:01