2017-10-10 73 views
2

我有兩個關於glsl效率的問題。哪個着色器階段更有效矩陣轉換

  1. 在完全用戶定義着色器管線

    VS - > TCS - > TES - > GS - > FS

    第一4個階段都能夠被用於這樣的操作:

    gl_Position = MPV_matrices * vec4(in_pos, 1); 
    

    哪個階段更有效率呢?它是硬件還是版本相關?

  2. 有關使用GLSL是示出了正在傳遞的着色器之間的頂點位置,而不是使用內置變量僅gl_Position例子很多教程。

    在效率方面有意義嗎?

謝謝!

回答

1
  1. 這種變換是在VS

    這是因爲幾何形狀和teselation通常不用於基本的着色器常用。在片段中,這意味着你需要在每個片段的基礎上進行乘法運算,這比每個頂點要多得多,因此性能會下降......所以人們習慣於將這種轉換放到VS中,而不要過多地考慮它。

  2. 自定義輸入/輸出變量

    我們有時需要頂點在不止一個座標系,它通常是更快地使用比每個片段的基礎上變換插值inbuild。例如我有時需要3個座標系統(屏幕,世界,TBN)才能在FS中正確計算。

    另一個要考慮的是準確度見:

+0

你的推理完全脫落,也可以不寫,也不在片段着色器讀取'gl_Position'階段,'gl_Position'被固定功能階段(原始程序集,裁剪,剔除和光柵化)在*(和**可能**導致)片段着色器e xecution。關於現代GPU的「效率」,從硬件角度來看,在頂點與片段着色器之間做事,除了明顯考慮每個頂點做事情,還是每個片段做它們之外。 –