首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WebGL灯数限制

WebGL灯数限制
EN

Stack Overflow用户
提问于 2014-02-14 13:56:12
回答 2查看 857关注 0票数 1

上下文:我在玩Three.js和一些PointLight 这里

快速搜索后,WebGL和OpenGL似乎只允许少量光源(同时)。这听起来似乎是大多数3d场景的共同要求。喜欢展示一条长长的街道,沿途灯火辉煌。或者就像在这个小场景中,上面有10多门大炮同时开火。是使用延迟渲染器的唯一解决方案(我不知道我在说什么,但这种技术是Google的答案,它的演示看起来很棒)。

最简单的解决方案是创建一个片段着色器来计算8组灯吗?然后使用某种混合技术(再说一遍:‘完全从这些主题开始’?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-14 16:18:47

很好的演示。

除了性能方面的考虑外,不应该是个问题WebGLRenderer的灯数。(是的,如果你有很多灯,WebGLDeferredRenderer会更好。))

我认为这是一个three.js错误。请注意,您正在生成控制台错误。

问题是,您正在实例化一个光线,并在第一个呈现之前设置它对false的可见性。如果您在开始时将每个灯的可见性设置为true,则演示将无错误地运行。

three.js r.66.

编辑:@gero3已经修复了three.js r.67dev分支中的这个bug。

票数 1
EN

Stack Overflow用户

发布于 2014-02-15 21:56:51

WebGL和OpenGL ES2.0对灯光没有任何限制。Three.js可能会。旧的OpenGL之前的着色。使用着色器,您可以自己编写,因此尽可能多地使用硬件的内存/资源限制。

延迟渲染可以更快的对更多的灯。对于堆叠溢出来说,这可能是个太大的话题了。也许其他人能胜任这项任务。简短的版本是,不是像大多数着色器那样计算像素的最终颜色,而是将大量数据(未亮色、法线、位置)存储到多个纹理中。在此之后,不同的着色器会读取这些纹理并计算光照。由于各种各样的原因,最终可能会变得更快。它不能处理透明度的限制。

这里有一个关于OpenGL的教程,它可能很有用。你可以解剖几个three.js 示例

注意:延迟呈现通常要求缓冲区扩展具有表现性。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21781303

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档