如何修改/替换 Cg 片段着色器中的像素位置?

Mr.*_*Boy 2 shader cg pixel-shader fragment-shader

是否可以使用 Cg 修改片段(像素)着色器中的像素坐标?我确信此类功能在第二代/第三代着色器中可用,但我不知道确切的配置文件或如何做到这一点。

Bah*_*bar 5

不,这是不可能的。

您可以在片段着色器中修改的唯一坐标是 Z,进入 Z 缓冲区。即使这样也会影响性能,因为它会破坏一些优化(例如 Hierarchical Z)。

X 和 Y 位置在片段着色器执行之前设置(在Rasterizer中)。典型的光栅化器实际上至少生成 2x2 的像素块,并且硬件并不真正单独处理像素,一直到混合阶段。

有些人倾向于模仿这种类型的特征,即生成超出必要数量的像素,并丢弃无关的像素。

不过,您听说过的功能可能是曲面细分。它不是作为片段着色器的一部分完成的,而是管道的一个单独部分,允许生成额外的几何体。

最终,您可以使用什么技术取决于您想要实现的目标。但各种 API(无论是 Cg、OpenGL 还是 DirectX)从未支持对 X 和 Y 进行全面修改,因为硬件无法做到这一点。