Тени ThreeJS забавно ведут себя возле стен

Итак, я работаю с тенями в ThreeJS. Я использую перспективную камеру с WebGLRenderer. Настройки освещения такие.

var light = new THREE.SpotLight(0xdddddd, 1);
light.castShadow = true;
light.shadow = new THREE.LightShadow(new THREE.PerspectiveCamera(60, 1, 1, 2500));
light.shadow.bias = 0.0001;
light.shadow.mapSize.width = 1024;
light.shadow.mapSize.height = 1024;
light.position.set(100, 800, 0);

То, что я получаю, это обрезанная тень, когда я приближаюсь к стене. Я играл с Shadow Bias, однако для меня это полный удар в темноте.

Что я получаю, так это странное поведение тени. Я приложил скриншот и обвел его красным вместе со стрелкой, указывающей на него. Обратите внимание, как тень обрезана, как если бы свет отражался от стены и компенсировал тень. Любой способ избежать этого?

введите здесь описание изображения


person Dale    schedule 05.10.2016    source источник
comment
Похоже, усеченная часть теневой камеры сужается, используйте помощник теневой камеры, чтобы проверить ее, и просто попробуйте увеличить ее с 60, скажем, 90.   -  person Falk Thiele    schedule 06.10.2016
comment
Я думаю, вы правы, так как в итоге я создал пример, как вы указали. Я просто не уверен, как настроить его на 90.   -  person Dale    schedule 06.10.2016
comment
В конце концов я понял это. Спасибо. Мой свет был на 45 градусов и слишком близко. С помощью помощника я настроил его, и все сработало отлично. Напишите это, и я дам вам кредит как ответ.   -  person Dale    schedule 07.10.2016


Ответы (1)


Скорее всего, теневая камера слишком узкая. Вы можете проверить это с помощью помощника теневой камеры:

var helper = new THREE.CameraHelper( light.shadow.camera );
scene.add( helper );

Размер теневой камеры ограничен из-за производительности, но вы можете настроить каждую плоскость в соответствии с вашими потребностями или просто увеличить ее угол (например, с 60 до 90):

light.shadow = new THREE.LightShadow(new THREE.PerspectiveCamera(90, 1, 1, 2500));

person Falk Thiele    schedule 06.10.2016