我有一个有大量光源(大约350个)的地图定义。当我尝试创建THREE.PointLight对象并将它们添加到场景中时,我得到以下错误以及低FPS:
three.js:29438 THREE.WebGLProgram: shader error: 0 gl.VALIDATE_STATUS false gl.getProgramInfoLog Fragment shader active uniforms exceed MAX_FRAGMENT_UNIFORM_VECTORS (1024).
这是什么意思?场景中是否存在THREE.PointLight对象的限制?当你有很多光源时,有什么好的做法可以保持高性能吗?
现在想到的唯一想法是以某种方式减少光源的数量,只留下我真正需要的光源。
答案 0 :(得分:4)
此错误表示您已超过片段着色器中的最大制服数。此限制由您的图形卡和/或驱动程序决定。您可以转到http://webglreport.com/进行检查。
在您的系统上看起来限制为1024. Three.js灯通常使用6-10个制服,具体取决于灯光类型和材质。如果您使用~350盏灯,那么您可以超越此限制。
一般来说,350个离散灯很多,可能比您需要的更多。使用更多的灯也是计算密集型的。典型的WebGL场景只有少数几个。您可能想要考虑其他技术来实现您的目标。