使一个场景中的网格受到另一个场景中的灯光的影响

时间:2017-05-17 09:35:47

标签: three.js

我有一个简单的场景,包括房间,几个光源和播放器。玩家网格应始终呈现在房间网格之上。根据{{​​3}}问题的接受答案,我应该创建两个不同的场景:一个用于房间,一个用于玩家。事实上在这种情况下一切正常,除了一件事 - 玩家网格将不再受到来自房间场景的光源的影响。当然我可以在播放器场景上复制光源,但在我看来,这似乎是一个糟糕的决定(我认为会出现阴影问题)。

这个问题有什么简单的解决方案吗?

2 个答案:

答案 0 :(得分:1)

不直接,您必须复制照明。并且阴影可能确实会产生伪影(但是在场景的其余部分前面神奇地浮动3D对象,人们可能想知道如何定义阴影的预期行为: - )。

如果你想强制一个对象在顶部,但仍然是同一个场景的一部分,你应该考虑修改 renderOrder 禁用z-testing 宾语。例如,请参阅using renderOrder in three.js

答案 1 :(得分:1)

如果将Object3d的图层属性与Layers object结合使用呢? 我没有尝试过多使用它,但是从文档中,layers属性表示你可以让一个对象成为多个层的成员。

所以你可以让灯光成为第0层 1的成员,大多数对象只有第0层,而玩家只有第1层。这样你就可以做到基本相同的技术与两个场景一样,只有1个场景和2个层,其中灯光是0和1的成员,其余只属于1个类别。

然后渲染场景,选择第0层,切换到1,再次渲染。我没有多次使用这个属性,但我认为它可以满足您的需求 - 这样您只需定义一次所有内容并在图层之间切换。对于玩家等级的阴影,你可能会创建一个隐形版本的玩家,只是在不渲染的情况下投射阴影并将其放在与关卡相同的图层上。