哪个着色器阶段对矩阵变换更有效

which shader stage is more effitient for matrix transformation

我有 2 个关于 glsl 效率的问题。

  1. 在完全用户定义的着色器管线中

    vs -> tcs -> tes -> gs -> fs

    前4个stage可以这样操作:

    gl_Position = MPV_matrices * vec4(in_pos, 1);
    

    哪个阶段更有效?它取决于硬件还是版本?

  2. 许多关于使用 GLSL 的教程都展示了在着色器之间传递顶点位置的示例,而不是仅使用内置变量 gl_Position .

    在效率方面有意义吗?

谢谢!

  1. 此类Transform在VS中常用

    那是因为基本着色器通常不使用几何和细分。在 Fragment 中,这意味着您需要在每个片段的基础上进行乘法运算,这比在每个顶点中发生的次数要多得多,因此性能会下降……因此人们习惯于将此类转换放入 VS 中,而不会考虑太多。

  2. 自定义input/output变量

    我们有时需要多个坐标系中的顶点,使用内置插值器通常比在每个片段基础上进行变换更快。

    例如,我有时需要同时使用 3 个坐标系(屏幕、世界、TBN)才能在 FS 中进行正确的计算。

    要考虑的另一件事是准确性,请参阅:

    • ray and ellipsoid intersection accuracy improvement