现场光源多如何处理?
How to handle many light sources on the scene?
我有一个带有大量光源(大约 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 个对象的限制?当你有很多光源时,有什么好的做法可以保持高性能吗?
现在唯一想到的就是减少光源的数量,只留下我真正需要的。
此错误意味着您已经超出片段着色器中的最大制服数量。此限制由您的显卡 and/or 驱动程序决定。您可以前往 http://webglreport.com/ 查看。
看起来在您的系统上限制是 1024。Three.js 灯通常使用 6-10 个制服,具体取决于灯的类型和 material。鉴于您使用的是约 350 盏灯,因此您吹得超过了这个限制是有道理的。
一般来说,350 个离散灯很多,可能远远超出您的需要。使用更多的灯也是计算密集型的。典型的 WebGL 场景只有少数几个。您可能需要考虑其他技术来实现您想要的。
我有一个带有大量光源(大约 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 个对象的限制?当你有很多光源时,有什么好的做法可以保持高性能吗?
现在唯一想到的就是减少光源的数量,只留下我真正需要的。
此错误意味着您已经超出片段着色器中的最大制服数量。此限制由您的显卡 and/or 驱动程序决定。您可以前往 http://webglreport.com/ 查看。
看起来在您的系统上限制是 1024。Three.js 灯通常使用 6-10 个制服,具体取决于灯的类型和 material。鉴于您使用的是约 350 盏灯,因此您吹得超过了这个限制是有道理的。
一般来说,350 个离散灯很多,可能远远超出您的需要。使用更多的灯也是计算密集型的。典型的 WebGL 场景只有少数几个。您可能需要考虑其他技术来实现您想要的。