哪个着色器阶段对矩阵变换更有效
which shader stage is more effitient for matrix transformation
我有 2 个关于 glsl 效率的问题。
在完全用户定义的着色器管线中
vs -> tcs -> tes -> gs -> fs
前4个stage可以这样操作:
gl_Position = MPV_matrices * vec4(in_pos, 1);
哪个阶段更有效?它取决于硬件还是版本?
许多关于使用 GLSL 的教程都展示了在着色器之间传递顶点位置的示例,而不是仅使用内置变量 gl_Position
.
在效率方面有意义吗?
谢谢!
此类Transform在VS中常用
那是因为基本着色器通常不使用几何和细分。在 Fragment 中,这意味着您需要在每个片段的基础上进行乘法运算,这比在每个顶点中发生的次数要多得多,因此性能会下降……因此人们习惯于将此类转换放入 VS 中,而不会考虑太多。
自定义input/output变量
我们有时需要多个坐标系中的顶点,使用内置插值器通常比在每个片段基础上进行变换更快。
例如,我有时需要同时使用 3 个坐标系(屏幕、世界、TBN)才能在 FS 中进行正确的计算。
要考虑的另一件事是准确性,请参阅:
- ray and ellipsoid intersection accuracy improvement
我有 2 个关于 glsl 效率的问题。
在完全用户定义的着色器管线中
vs -> tcs -> tes -> gs -> fs
前4个stage可以这样操作:
gl_Position = MPV_matrices * vec4(in_pos, 1);
哪个阶段更有效?它取决于硬件还是版本?
许多关于使用 GLSL 的教程都展示了在着色器之间传递顶点位置的示例,而不是仅使用内置变量
gl_Position
.在效率方面有意义吗?
谢谢!
此类Transform在VS中常用
那是因为基本着色器通常不使用几何和细分。在 Fragment 中,这意味着您需要在每个片段的基础上进行乘法运算,这比在每个顶点中发生的次数要多得多,因此性能会下降……因此人们习惯于将此类转换放入 VS 中,而不会考虑太多。
自定义input/output变量
我们有时需要多个坐标系中的顶点,使用内置插值器通常比在每个片段基础上进行变换更快。
例如,我有时需要同时使用 3 个坐标系(屏幕、世界、TBN)才能在 FS 中进行正确的计算。
要考虑的另一件事是准确性,请参阅:
- ray and ellipsoid intersection accuracy improvement