2011-12-11 146 views
2

我在WebGL片段着色器中進行光線追蹤,計劃使用包含場景中對象的動態生成片段着色器。當我將一個對象添加到場景中時,我將在片段着色器中添加一些行,因此它可能會變得非常大。它有多大可以繼續工作?它依賴於顯卡嗎?WebGL片段着色器有多大?

回答

2

「安全」的答案是它取決於你的硬件和驅動程序,但實際上它們可能會非常瘋狂。 JustSid關於性能的說法確實適用(更大的着色器==較慢的着色器),但聽起來你並不是完全瞄準60FPS。

要更深入地瞭解着色器極限,請查看http://en.wikipedia.org/wiki/High_Level_Shader_Language。該頁面是關於Direct X着色器的,但所有着色器約束也適用於GLSL。

0

您不想創建大量片段着色器,因爲它們傾向於非常快地耗盡性能。如果可能的話,您應該在CPU或頂點着色器中進行任何計算,但不是每個像素。

1

對於着色器的大小有多種限制。這是驅動程序/ GPU,但它也取決於機器和WebGL。一些WebGL實現(chrome)運行一個內部計時器。如果一個GL命令花費太長時間,他們會殺死WebGL(「Rats,WebGL遇到障礙」)。當着色器花費很長時間進行編譯時會發生這種情況。

下面是愚蠢的示例 100k着色器,其中我通過腳本運行模型以在着色器中生成網格。它在我的Macbook Pro上運行在macOS上。它也運行在我的iPhone6 +上。但是當我在Windows中嘗試時,DirectX驅動程序花費太長時間試圖對其進行優化,而Chrome會將其殺死。

在你的着色器中添加幾何圖形很有意思​​,它有趣的是用簽名的距離場和射線進行類型的東西,但這些技巧更多的是益智/玩物。 他們不以任何方式表現。作爲一個典型的例子this SDF based shader在我的筆記本電腦上以每秒1幀左右的速度運行,然而我的筆記本電腦能夠以合理的幀率顯示all of Los Santos from GTV5

如果你想要性能,你應該使用更多的標準技術,將你的幾何體放入緩衝區,並進行前向或延遲渲染。