【问题标题】:ThreeJS - Point light shadow acting like a spot lightThreeJS - 点光阴影像聚光灯一样
【发布时间】:2017-01-24 23:23:33
【问题描述】:

我有一个带有环境光和点光的场景,我希望在网格下方有阴影,如图所示,但中心部分周围有一个阴影区域。

看起来点光源像聚光灯一样投射阴影。 如果我减少light.position.z,灰色区域会消失,但阴影的位置会发生变化(它们不再位于网格下方)。

我用代码创建了一个小提琴:https://jsfiddle.net/ytmc6kxm/1/

如何在不减小距离的情况下消除圆圈周围的灰色区域? 我可以用定向灯做到这一点吗? 为什么我在定向光下看不到任何阴影?

谢谢!

【问题讨论】:

    标签: javascript html three.js


    【解决方案1】:

    定向阴影使用正交投影,这需要适当的窗口。从 -5 到 5 的默认窗口不会覆盖整个场景。添加

    light.shadow.camera.left = -300
    light.shadow.camera.top = -300
    light.shadow.camera.right = 300
    light.shadow.camera.bottom = 300
    

    使用定向光时会出现阴影。

    至于为什么点阴影会被剪裁,好像是three.js中的一个bug,与this line in shadowmap_pars_fragment.glsl有关:

        // dp = distance from light to fragment position
        float dp = ( length( lightToPosition ) - shadowBias ) / 1000.0;
    

    缩放参数将所有物体置于距离点光源超过 1000 单位的阴影中。其他阴影类型直接使用阴影空间中的投影坐标获取深度,因此它们没有这个溢出问题。将SpotLight 替换为PointLight“修复”问题。为什么点光源是这样实现的?不知道。正确的做法是向三个.js 的人发布问题。

    【讨论】:

    • 非常感谢!!效果很好!你打开了一个问题吗?我可以做到,但我认为如果你按照你似乎比我知道的多得多的方式去做会更好:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-29
    • 2015-08-31
    • 2016-10-19
    相关资源
    最近更新 更多