阴影中的工件,使用标准的MeshPhongMaterial

3

我遇到了有关阴影的问题。下面是我遇到的问题的图片:

图片胜过千言万语

输入图像描述

我不明白为什么那里会有那些线条,它应该完全被照亮!我不明白为什么实际的阴影看起来非常平滑,边界对我想做的事情足够好,但是我却在所有地方都有这些线条。

我的光线配置:

var dirLight = new THREE.DirectionalLight(0xfeffaf, 1);
dirLight.position.set(dimensions.middlePoint.x, 
    dimensions.middlePoint.y + ( dimensions.lengthY / 2),
    dimensions.middlePoint.z + dimensions.lengthZ);
dirLight.target.position.set(
    dimensions.middlePoint.x, 
    dimensions.middlePoint.y, 
    dimensions.minZ);
dirLight.castShadow = true;
dirLight.shadowDarkness = 0.4;
dirLight.shadowMapWidth = 1024;
dirLight.shadowMapHeight = 1024;
dirLight.shadowCameraNear = 1;
dirLight.shadowCameraFar = dimensions.lengthY * 2;
dirLight.shadowCameraLeft = - dimensions.lengthX / 2;
dirLight.shadowCameraRight = dimensions.lengthX / 2;
dirLight.shadowCameraTop = dimensions.lengthY / 2;
dirLight.shadowCameraBottom = -dimensions.lengthY / 2;
dirLight.shadowBias = 0.0000005;
scene.add(dirLight);

然后是我的渲染配置:

threeRender = new THREE.WebGLRenderer({ antialias: true });
threeRender.shadowMap.enabled = true;
threeRender.shadowMap.renderReverseSided = false;
threeRender.shadowMapSoft = true;
threeRender.shadowMapType = THREE.PCFSoftShadowMap;

请告诉我如何解决这个问题,并指引我朝着正确的方向去解决它。非常感谢。


请查看http://stackoverflow.com/questions/34778864/strange-behaviour-of-shadowing-in-threejs/34779433#34779433。 - WestLangley
@WestLangley非常感谢。我已经阅读了很多,然后遇到了这个github问题。这个问题已经被实现了吗?我可以试试吗?它似乎解决了性能和痤疮/彼得潘的问题,所以你可以想象为什么我想试一试。 - tfrascaroli
我相信它已经被实现了。你为什么不去检查并确认一下呢? - WestLangley
1个回答

3
增加您的shadowBias值。这个现象被称为阴影痤疮。

enter image description here

查看此链接以获取更多细节。


哦,哇,我以为是反过来的,一直在让它变小!但有一件事:现在我没有任何阴影:S - tfrascaroli
增加阴影图的分辨率(宽度和高度),减小阴影视锥体(shadowCameraXXX...)的大小。ShadowCameraNear 应尽可能大。 - user80667
你提供的链接非常有帮助。我不知道如何称呼这个问题,这是我的第一个问题(我无法正确搜索它)。你的解决方案是正确的,尽管仅仅将值增加并没有完全解决问题,因为阴影消失了。我对它取反(-0.006),现在一切看起来都很好。非常感谢你,我接受了你的答案。 - tfrascaroli

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接