Я пытаюсь заставить направленный свет двигаться вместе с игроком. Я делаю это, чтобы улучшить качество тени, чтобы размеры теневой камеры могли быть меньше. Когда игрок двигается, тени немного бродят. Похоже, что он не следует за игроком достаточно близко.
У меня есть следующая проблема, проиллюстрированная в этом ОЧЕНЬ БЕДНОМ качественном гифке;
Есть ли лучший способ сделать это? Или я забыл что-то обновить? Любой совет приветствуется:)
В классе игрока у меня есть объект, к которому я прикрепляю камеру и использую этот объект в качестве цели для освещения. Затем в функции player.update я устанавливаю положение источника света со смещением относительно положения объекта.
class Player{
constructor(){
this.object = new THREE.Object3D();
scene.add( this.object );
this.object.add( camera );
this.directionalLightOffset = new THREE.Vector3(-5000, 2, 5);
this.directionalLight = new THREE.DirectionalLight( 0xffffff, 0.85 );
scene.add( this.directionalLight);
this.directionalLight.position.copy( this.directionalLightOffset );
this.directionalLight.castShadow = true;
this.directionalLight.shadow.mapSize.width = 750;
this.directionalLight.shadow.mapSize.height = 750;
this.directionalLight.shadow.camera.left = -2000;
this.directionalLight.shadow.camera.right = 2000;
this.directionalLight.shadow.camera.top = -2000;
this.directionalLight.shadow.camera.bottom = 2000;
this.directionalLight.shadow.camera.near = 0.5;
this.directionalLight.shadow.camera.far = 90000;
this.directionalLight.target = this.object;
}
update(){
this.directionalLight.position.copy( this.object.position );
this.directionalLight.add( this.directionalLightOffset );
}
}