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

Pro*_*gga 5 shader hlsl directx-11

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

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

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

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

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

有很多未知数,我觉得我甚至可以开始编写这些着色器.我找不到任何垫脚石.

Gni*_*how 3

计算着色器不是图形管道的一部分。它是一个简单的 GPGPU 工具,因此您可以以更简单的方式将图形设备的计算能力用于非渲染目的,例如粒子运动。如果您想将其用于粒子系统,则应首先使用计算着色器计算粒子位置。然后,将普通代码中的输出填充到顶点缓冲区中以进行渲染。据我所知,没有直接的方法将输出传输到渲染管道,但我对计算着色器不太熟悉。您感兴趣的链接可能是那里的文档示例。图形管道显示在此