0

使用 Three.JS r81 我遇到了一个问题,即使用自定义深度着色器通过透明材质投射阴影。当我的场景中只有一棵树时,阴影看起来很棒。第二个我添加到右侧大约 100 个单位的简单盒子中,阴影失去了投射它们的透明材料的所有透明度。关闭盒子上的阴影效果为零。

这是阴影的外观

这是我添加一个框时发生的情况

有趣的是,如果我将盒子移近树,阴影似乎会自行纠正。另外,我使用的是轨道摄像机,围绕场景旋转会使阴影在围绕树旋转时从好到坏来回移动。

我的灯设置得很基本:

var directionalLight = new THREE.DirectionalLight(0xffffff, 1);
directionalLight.position.set(120, 120, 120);

directionalLight.castShadow = true;
directionalLight.shadow.camera.right = 250;
directionalLight.shadow.camera.left = -250;
directionalLight.shadow.camera.top = 250;
directionalLight.shadow.camera.bottom = -250;
directionalLight.shadow.camera.far = 300;
directionalLight.target.position.x = 80;

directionalLight.shadow.mapSize.width = directionalLight.shadow.mapSize.height = 1024;
directionalLight.shadow.bias = -0.0003;
directionalLight.shadow.camera.scale.x = 0.25;
directionalLight.shadow.camera.scale.y = 0.25;

scene.add(directionalLight);

我已经弄乱了光影设置中的几乎所有值,但没有任何积极影响。

我知道 Three.js 中的影子系统在过去一年中发生了一些变化,但不确定是我的问题还是库中可能存在的错误。有任何想法吗?

4

1 回答 1

0

看来这一切都是因为我犯了一个愚蠢的错误。我的着色器材质制服使用的是mesh.material,而不是mesh.material.map。更改后,它工作正常。

var uniforms = { texture: { type: "t", value: mesh.material.map } }

shaderLibrary[libraryName] = new THREE.ShaderMaterial({
                            uniforms: uniforms,
                            vertexShader: vertexShader,
                            fragmentShader: fragmentShader,
                        });  
于 2016-09-30T20:18:08.210 回答