我在WebGL片段着色器中進行光線追蹤,計劃使用包含場景中對象的動態生成片段着色器。當我將一個對象添加到場景中時,我將在片段着色器中添加一些行,因此它可能會變得非常大。它有多大可以繼續工作?它依賴於顯卡嗎?WebGL片段着色器有多大?
回答
「安全」的答案是它取決於你的硬件和驅動程序,但實際上它們可能會非常瘋狂。 JustSid關於性能的說法確實適用(更大的着色器==較慢的着色器),但聽起來你並不是完全瞄準60FPS。
要更深入地瞭解着色器極限,請查看http://en.wikipedia.org/wiki/High_Level_Shader_Language。該頁面是關於Direct X着色器的,但所有着色器約束也適用於GLSL。
您不想創建大量片段着色器,因爲它們傾向於非常快地耗盡性能。如果可能的話,您應該在CPU或頂點着色器中進行任何計算,但不是每個像素。
對於着色器的大小有多種限制。這是驅動程序/ 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。
如果你想要性能,你應該使用更多的標準技術,將你的幾何體放入緩衝區,並進行前向或延遲渲染。
- 1. WebGL的片段着色器透明度
- 2. WebGL片段着色器構造函數錯誤 - 參數太多
- 3. WebGL多重着色器
- 4. GLSL:頂點着色器無片段着色片段着色器
- 5. 在片段着色器中指定webGL多維數據集的顏色
- 6. OpenGL片段着色器VS DirectX片段着色器
- 7. webgl中的頂點和片段着色器值
- 8. 在WebGL片段着色器中繪製網格
- 9. 在WebGL片段着色器中奇怪的浮點運算
- 10. 如何通過片段着色器透明WebGL對象?
- 11. WebGL片段着色器是否支持outerProduct?
- 12. WebGL片段着色器不能正確分支if語句
- 13. 結合多個opengl片段着色器
- 14. 多重採樣和片段着色器
- 15. 片段着色器:在着色器中沒有統一名稱
- 16. AS3 Stage3D片段着色器?
- 17. 如何發送多個紋理到WebGL中的片段着色器?
- 18. 優化WebGL着色器?
- 19. WebGL的着色器錯誤
- 20. 具有片段着色器的OpenGL SetPixel
- 21. 片段着色器中紋理的最大數量是多少
- 22. WebGL/three.js片段着色器 - 用alpha透明顏色覆蓋alpha透明紋理
- 23. OpenGL - 頂點着色器顏色沒有傳遞給片段着色器
- 24. 具有多個輸出的iOS片段着色器
- 25. 着色器程序到節點+片段着色器
- 26. 從幾何着色器的片段着色器
- 27. 將表面着色器轉換爲片段着色器
- 28. 頂點着色器和片段着色器
- 29. Three.js着色器(WebGL着色器)中的旋轉
- 30. 的WebGL:應用多顏色着色器4個三角形