阴影渲染的MeshDepthMaterial问题

时间:2017-10-11 20:20:31

标签: three.js

阴影仅显示部分但不显示整个对象。 在我的情况下,我有一个树,并为它设置MeshDepthMaterial,因为树的叶子是透明的。但阴影只有树干,没有任何树叶。 我的模型是通过OBJLoader添加的,所以我不确定问题是否是由模型引起的。

这是我的代码:

    loader.load("/uploads/rs/373/nqkcjvs8/bamboopalm.json", function(o) {
        var mesh = o.getObjectByName("Cylinder06");
        var mat = mtloader.load("/uploads/rs/373/nqkcjvs8/bamboopalm_1k.jpg");
        let matalpha = mtloader.load("/uploads/rs/373/nqkcjvs8/bamboopalm_1k_alpha.jpg");
        mat.anisotropy = 16;
        mesh.material = new THREE.MeshPhongMaterial({
            map:mat,
            alphaMap: matalpha,
            side: THREE.DoubleSide,
            alphaTest: .5
        });
        var depthMaterial = new THREE.MeshDepthMaterial({
            depthPacking: THREE.RGBADepthPacking,
            alphaMap: matalpha,
            alphaTest: .5
        });
        mesh.castShadow = mesh.receiveShadow = true;
        mesh.position.set(0, -50, 0);
        var scale = 10;
        mesh.scale.set(scale, scale, scale);
        mesh.customDepthMaterial = depthMaterial;
        scene.add(mesh);
    });

这是一个在线演示:OBJLoader Tree

如你所见,阴影只有树干,没有任何树叶。

1 个答案:

答案 0 :(得分:1)

在渲染阴影时,three.js会剔除前脸。如果你想让你的(平面)棕榈叶投下阴影,你需要设置

renderer.shadowMap.renderSingleSided = false;

有关详细信息,请参阅this answer

我强烈建议您更新到three.js的最新版本。我还建议你添加一个帮手,然后收紧你的影子相机视锥,以改善阴影效果。

dLight.shadowCameraHelper = new THREE.CameraHelper( dLight.shadow.camera );
scene.add( dLight.shadowCameraHelper );

three.js r.87