麻烦在投射阴影的物体上使用三个j的toonshader

时间:2018-06-02 15:53:50

标签: three.js shader shadow

我正在创建一个使用MeshToonMaterial投射和接收阴影的球体,但这会在最黑暗的部分给我一个不规则的阴影。

有不规则阴影的球体: Sphere with irregular shadow

仔细观察球体: Closer look at the sphere

光是:

light = new THREE.PointLight(0xffffff, 0.8, 18);
light.position.set(-3,6,-3);
light.castShadow = true;
light.shadow.camera.near = 0.1;
light.shadow.camera.far = 25;
light.shadowBias = 0.0015;
scene.add(light);

球体是:

mesh = new THREE.Mesh
(
    new THREE.SphereBufferGeometry( 1, 32, 16 ), 
    new THREE.MeshToonMaterial({color:0xff4444})
);
mesh.position.y += 1;
mesh.receiveShadow = true;
mesh.castShadow = true;
mesh.position.set(-2.5, 3/2, 2.5);
scene.add(mesh);

渲染器:

renderer = new THREE.WebGLRenderer();
renderer.setSize(800,400);
renderer.shadowMap.enabled = true;
renderer.shadowMap.type = THREE.PCFSoftShadowMap;

我尝试过其他模型和阴影贴图类型,结果相似。

如果我设置:

mesh.castShadow = false;

然后我得到的是:

Good looking sphere

这几乎就是我所寻找的风格,但我也需要它来施放阴影。

我想避免使用额外的球体投射阴影。

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:0)

禁用在球体网格上接收阴影将阻止使用投射阴影渲染阴影,但它仍会在平面上投射阴影。

NotFoundError: /home/g_cloud/exe_paul/1epoch1000; No such file or directory

但是,这意味着球体也不会从其他物体上投射任何阴影。

除此之外,看起来问题与香椿着色器处理投射阴影的方式有关。