THREE.js: отбрасывание теней в виде тени и полутени

Я пытаюсь построить модель грядущего полного солнечного затмения 21 августа в THREE.js. Используя инструментарий НАСА SPICE, я смог получить чрезвычайно точные прямоугольные геометрические координаты Солнца и Луны для каждой минуты дня, используя инерциальную систему координат J2000, ориентированную на Землю.

После установки DirectionalLight в месте нахождения Солнца и наведения его на Землю я смог создать тень, которая пересекает Землю в нужное время и по правильной карте, согласно НАСА. Проблема в том, что тень НАМНОГО больше, чем маленькая тень луны в зоне Umbra. Насколько я могу судить, THREE.js отбрасывает равномерную тень как на умбру, так и на полутень:

Моя демонстрация здесь (подождите около двух секунд, чтобы началось затмение, пожалуйста.) И вот проблема:

Хорошая схема умбры и полутени из этой лекции:

Я проверил и перепроверил данные эфемерид и не верю, что проблема в том, что Луна слишком близко или слишком велика. Вместо этого я попытался заменить источник света на SpotLight, который имеет penumbra настройки, но тень была чрезвычайно пикселирована, и, основываясь на официальном демо, кажется, что умбра четко не отличается от полутени.

Я подумал, что проблема может заключаться в том, что DirectionalLightShadow использует орфографическую камеру, но зернистая тень, которую я получил с помощью SpotLight, имела точно такую ​​же проблему размера, хотя и более зернистую.

Мой код для направленного света в значительной степени из коробки:

var sunLight = new THREE.DirectionalLight(0xffffff, 1);
sunLight.decay = 1;
sunLight.intensity = 2;
sunLight.castShadow = true;
sunLight.shadow.mapSize.width = 1024 * 2;
sunLight.shadow.mapSize.height = 1024 * 2;
sunLight.shadow.camera.near = 0;
sunLight.shadow.camera.far = constants.AU * DISTANCE_SCALE * 10;
scene.add(sunLight);
sunLight.target = earth;

Полный исходный код

Я не очень хорошо понимаю shadowMaps, поэтому я надеюсь, что в THREE или WebGL есть скрытый способ отбрасывать тень, которая полностью перекрывает источник света, в отличие от большей части. Я не уверен, что в этом проблема, но сходство моей тени с полутенью ужасно близко.

0 ответов

Другие вопросы по тегам