Проблема с использованием toonshader в три js на объектах, которые отбрасывают тень - PullRequest
0 голосов
/ 02 июня 2018

Я создаю сферу, которая отбрасывает и получает тени с 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 голосов
/ 04 июня 2018

Отключение получения теней на сетчатой ​​сетке предотвратит его отрисовку с отбрасываемыми тенями, но все равно будет отбрасывать тень на плоскости.

mesh.receiveShadow = false

Однако этоозначает, что сфера не будет отбрасывать тени от других объектов.

Кроме этого, возникает проблема с тем, как шейдер toon обрабатывает отбрасывание теней.

...