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

时间:2017-10-10 19:27:53

标签: performance glsl shader matrix-multiplication

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

  1. 在完全由用户定义的着色器管道

      

    vs - > tcs - > tes - > gs - > FS

    前4个阶段可以用于这样的操作:

    gl_Position = MPV_matrices * vec4(in_pos, 1);
    

    哪个阶段对此更有效?它是硬件还是版本依赖?

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

    在效率方面是否有意义?

  3. 谢谢!

1 个答案:

答案 0 :(得分:1)

  1. 此类转换通常用于VS

    这是因为几何和teselation通常不用于基本着色器。而在Fragment中,这意味着你需要在每个片段的基础上进行乘法运算,这比每个顶点要多得多,因此性能下降......所以人们习惯于将这种变换放入VS而不考虑太多。

  2. 自定义输入/输出变量

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

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

    要考虑的另一件事是准确性: