三个JS阴影不透明度

时间:2017-09-04 22:52:19

标签: javascript canvas 3d three.js shadow

嘿所有我在画布上加载了一个自定义模型,一切正常。我得到的唯一问题是我没有胶水如何让我的阴影在模型本身上透明(模型应该投射并接收阴影)。

我的代码如下:

var loader = new THREE.JSONLoader();
    loader.load('model/p3.json', handle_load);

    var mesh;
    function handle_load(geometry, materials) {

        var material = new THREE.MeshPhongMaterial();

        mesh = new THREE.Mesh(geometry,material);

        scene.add(mesh);
        mesh.position.z = 0;
        mesh.position.y = 0;
        mesh.rotation.y = 5;


        //LIGHT
        var ambient = new THREE.AmbientLight(0xffffff, 0.15);
        ambient.target = mesh;

        scene.add(ambient);

        var light = new THREE.DirectionalLight(0xffffff, 1);
        light.target = mesh;
        light.castShadow = true;
        light.position.z = -150;
        light.position.y = 150;
        light.position.x = 150;
        light.shadow.bias = 0;
        light.shadowDarkness = 0.2;
        light.shadow.mapSize.width = 2048 * 2;
        light.shadow.mapSize.height = 2048 * 2;
        scene.add(light);
        mesh.receiveShadow = true;
        mesh.castShadow = true;

    }

    var shadowmaterial = new THREE.ShadowMaterial();
    shadowmaterial.opacity = 0.2;


    var material2 = new THREE.MeshPhongMaterial({
        color: 0xffffff,
    });

    var geometry3 = new THREE.PlaneGeometry(500, 500, 100, 100);
    var mesh3 = new THREE.Mesh(geometry3, shadowmaterial);
    mesh3.rotation.x = -90 * Math.PI / 180;
    mesh3.position.y = 0;
    scene.add(mesh3);

     mesh3.receiveShadow = true;

渲染如下所示:

enter image description here

我感谢每一位帮助

1 个答案:

答案 0 :(得分:0)

因为您的网格物体始终是灰色的,而地面是白色的,所以阴影中总是有对比度的。根据我的发现,阴影旨在将这种物理逼真性内置到其中,从而不允许直接调整某些阴影属性,而这些阴影属性通常是通过调整材质和光照来实现的。

您可以将平面材质的颜色改为灰色而不是白色,从而提高光强度。或增亮您的网格材料并降低光强度。

您也可以添加更多灯光并进行调整。增大环境光并减小方向会降低阴影对比度。其他种类的灯光也会产生影响。

您还可以播放材质的不同方面,以使白色更暗,从而影响阴影。一个例子是反射率。因此,如果您降低了方向性但希望它仍对方向性做出反应,则可能会影响反射率和镜面反射。