WebGL片段着色器可以有多大?

3

我正在使用WebGL片段着色器进行光线追踪,计划使用一个动态生成的包含场景中所有物体的片段着色器。当我往场景中添加新物体时,就需要在片段着色器中添加一些代码行,因此它可能会变得非常大。那么片段着色器能达到多大才能正常工作?它是否取决于显卡?

3个回答

3
“安全”的答案是它取决于你的硬件和驱动程序,但实际上它们可以相当巨大。JustSid所说的性能确实适用(更大的着色器==更慢的着色器),但听起来你并不是特别追求60FPS。
有关着色器限制的更深入分析,请查看http://en.wikipedia.org/wiki/High_Level_Shader_Language。该页面介绍了Direct X着色器,但所有着色器约束也适用于GLSL。

1
有各种限制导致着色器大小的局限。这取决于驱动程序/ GPU,但也取决于机器和WebGL。一些WebGL实现(如Chrome)会运行内部计时器。如果单个GL命令耗费太长时间,它们将终止WebGL(“糟糕,WebGL遇到了问题”)。当一个着色器编译时间过长时,就可能会发生这种情况。
以下是一个愚蠢的100k着色器示例,我通过脚本在着色器本身中生成了一个网格。它可以在我的MacBook Pro上的macOS上运行。它也可以在我的iPhone6 +上运行。但是,当我尝试在Windows上运行时,DirectX驱动程序花费太长时间尝试对其进行优化,而Chrome将其杀死。

我喜欢在着色器中加入几何图形,也喜欢使用有符号距离场和光线行进等技术来玩耍,但这些技术更像是解谜或娱乐。 它们在性能方面并不理想。例如,这个基于SDF的着色器在我的笔记本电脑上全屏只能以每秒1帧的速度运行,而我的笔记本电脑可以以合理的帧率显示《侠盗猎车手5》中的洛圣都

如果你想要更好的性能,应该使用更标准的技术,将几何图形放入缓冲区,并进行正向或延迟渲染。


0

您不希望创建大型片段着色器,因为它们往往会非常快地消耗性能。如果可能的话,您应该在CPU或顶点着色器上进行任何计算,而不是针对每个像素。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接