计算着色器,它们在哪里适合管道?

时间:2012-11-20 03:49:09

标签: shader hlsl directx-11

我整天都在这里,并开始放弃它。我找不到有关计算着色器的大量信息。最好的来源是“使用Direct3D 11进行实际渲染和计算”,不幸的是它并没有太大的帮助。它帮助我理解了一些理论,但我仍然不知道如何实现任何理论。

我正在研究与该书中创建的粒子系统类似的东西。除了我的粒子系统基本上只有粒子显示在3d网格中(没有像重力/力/等)。这是出于教育目的,如果我得到这个工作,我将能够解决我认为的其余部分。

我不明白的是计算着色器如何适应管道。我想我明白我需要做什么,但我不知道我应该如何让它发挥作用。

我需要以某种方式使用填充了所有粒子位置的缓冲区为计算着色器设定种子。 (比方说,1024x1024x1缓冲区)。然后我需要这个计算着色器将每个位置作为顶点输出到我的顶点着色器,然后管道的其余部分是标准的(顶点着色器完成所有变换,我的几何着色器将顶点扩展为四边形,我的像素着色器呈现它。)

我甚至不知道这是否正确,但听起来是对的。即使是这样,我也不知道我将如何做到这一点。如何将计算着色器的输出提供给顶点着色器?我最初如何开始为计算着色器设定种子?我如何确保计算着色器不会丢弃粒子缓冲区? (否则,我每次都必须提供粒子,这会破坏(最终)用粒子移动等粒子系统的目的,因为我必须在CPU上完成所有这些)

有很多未知数,并且我觉得即使开始编写这些着色器,我也应该知道这一切。我找不到任何垫脚石。

1 个答案:

答案 0 :(得分:3)

计算着色器不是graphicspipeline的一部分。它是一个易于使用GPGPU的工具,因此您可以更轻松地使用图形设备的计算能力来实现非渲染,例如粒子移动。如果要将其用于粒子系统,则应首先使用计算着色器计算粒子位置。然后,将普通代码中的输出填充到顶点缓冲区中进行渲染。 AFAIK没有直接的方法将输出传递给renderpipeline,但我不熟悉计算着色器。 有趣的链接可能是那里的documentationexample。 graphicspipeline显示在此page