(渲染粒子)我应该学习着色器还是OpenCL
(rendering particles) Should I learn shader or OpenCL?
我正在尝试运行 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/
我与亚斯没有任何关系。
- 使用std::vector的OpenCL矩阵乘法
- 学习多线程C++:添加线程不会使执行速度更快,即使它看起来应该
- 我是 c++ 的新手.学习基本知识后,我想做井字游戏.对于印刷板,我在下面写代码,但它显示错误
- 神经网络不学习.卡在50%
- 在学习数据结构之前对STL有一个了解是好的吗?
- OpenCL 内核参数中的字符***?
- 如何将经过训练的机器学习模型保存在python中并将其加载到C++中进行预测?
- 在 NVIDIA GEFORCE GTX 1050 上下载适用于 Windows 10 的 openCL 1.2
- OpenCL 是否支持向量作为内核参数?
- 向量加法代码 OpenCL 返回 clCreateKernel 错误 -46
- 提高 OpenCL 的性能
- openCL 内核返回垃圾值,尽管没有错误
- 学习 c++,编译错误"no matching function for call"
- OpenCL 内核计时测量 0 秒或导致 SIGABRT
- 0xc000007b Windows 上的 OpenCL 库的加载时间错误
- OpenCL 在 NVIDIA 和 Intel GPU 上启动内核时CL_INVALID_COMMAND_QUEUE
- 学习数据结构和算法的简单方法
- OpenCL 代码卡在写入输出缓冲区上
- 我正在尝试学习如何在 c++ 中传递指针,但出现错误:没有用于调用"test"的匹配函数。我做错了什么?
- (渲染粒子)我应该学习着色器还是OpenCL