如何确保灯不会照亮角落后面的墙壁?

How to ensure that a light doesn't lit walls behind corner?

美好的一天,我正在使用 Babylon JS 玩 webgl,我需要有关灯光的建议。我创建了一个测试洞穴,并在一面墙上放了一个手电筒 (BABYLON.PointLight)。但是灯光也照亮了角落后面的墙壁。见截图:

var light = new BABYLON.PointLight("light1", new BABYLON.Vector3(x, y, z), scene);
light.intensity = 0.5
light.range = 50;

这个洞穴不是一个单一的网格,而是由单独的矩形面组成的。我怎样才能确保被点亮的墙角后面的墙没有被点亮?

提前谢谢你。 Vojtech

灯光仅根据从像素到灯光的方向、像素的法线(表面角度)和观察方向为像素着色。因此,光本身不考虑光源是否实际到达像素,必须通过阴影算法单独计算。

正如所建议的那样,您可以为灯光添加阴影。显然,点光源的阴影已在 v2.3 中引入(参见 http://www.html5gamedevs.com/topic/18285-point-light-shadow-mapping/)。另一件可以尝试的事情是将范围设置为较低的数字,这样光线就不会到达后墙。 yourLight.range = 0.5 之类的东西可能会起作用。

要记住的一件事是场景中最多只能有 4 个灯(这是为了确保性能的限制)。