HemisphereLight

HemisphereLight — это вид освещения, который моделирует рассеянное световое окружение, исходящее сверху и снизу сцены. В отличие от DirectionalLight или PointLight, этот источник света не имеет конкретной позиции и не создаёт резких теней, а добавляет мягкое освещение, имитируя атмосферное или небесное освещение.

Конструктор выглядит следующим образом:

const light = new THREE.HemisphereLight(skyColor, groundColor, intensity);
  • skyColor — цвет света, падающего сверху (небо).
  • groundColor — цвет света, отражающегося от земли или нижней поверхности.
  • intensity — сила света, по умолчанию 1.

Пример создания базового освещения:

const hemiLight = new THREE.HemisphereLight(0xffffff, 0x444444, 1.0);
hemiLight.position.set(0, 200, 0);
scene.add(hemiLight);

Особенности и поведение

  • HemisphereLight симулирует двухцветное освещение, что позволяет объектам выглядеть естественно при дневном освещении.
  • Свет падает равномерно со всех направлений сверху, а нижняя часть объекта освещается цветом groundColor.
  • Несмотря на возможность установки позиции, свет не имеет точного источника, и положение влияет лишь на ориентацию градиента освещения, а не на интенсивность или тени.

Свойства объекта HemisphereLight

  • color: Основной верхний цвет (skyColor).
  • groundColor: Нижний цвет, отражающий свет от земли.
  • intensity: Множитель яркости света.
  • position: Позиция в пространстве, влияющая на направление освещения.
  • shadow: По умолчанию HemisphereLight не отбрасывает тени, но в последних версиях Three.js можно использовать с дополнительными настройками для создания эффектов мягких теней через LightProbe или комбинирование с DirectionalLight.

Использование с материалами

HemisphereLight хорошо взаимодействует с материалами, поддерживающими физически корректное освещение (PBR), такими как MeshStandardMaterial и MeshPhysicalMaterial. Он особенно эффективен для имитации окружающего света в ландшафтных сценах, интерьерах с окнами или моделировании дневного света:

const geometry = new THREE.SphereGeometry(50, 32, 32);
const material = new THREE.MeshStandardMaterial({ color: 0x8888ff });
const sphere = new THREE.Mesh(geometry, material);
scene.add(sphere);

В сочетании с HemisphereLight объект будет получать мягкое верхнее освещение и тёплое отражение от нижней части.

Настройка интенсивности и цветов

Выбор skyColor и groundColor позволяет добиться разных эффектов:

  • Дневной свет: верх — белый или голубой, низ — серо-голубой.
  • Закат/рассвет: верх — тёплый оранжевый, низ — холодный фиолетовый.
  • Ночной свет: верх — тёмно-синий, низ — почти чёрный или холодный синий.

Пример создания мягкого закатного света:

const sunsetLight = new THREE.HemisphereLight(0xffcc66, 0x663366, 0.8);
scene.add(sunsetLight);

Комбинирование с другими источниками света

HemisphereLight часто используется как окружающий свет для сцены в паре с DirectionalLight или PointLight, чтобы добавить реалистичное освещение без резких теней:

const dirLight = new THREE.DirectionalLight(0xffffff, 0.5);
dirLight.position.set(100, 200, 100);
scene.add(dirLight);

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

Производительность

HemisphereLight является лёгким источником света, так как не вычисляет тени и не требует сложных расчётов освещённости. Это делает его идеальным для сцен с большим количеством объектов, когда важно быстрое рендеринг-окружение.

Применение в анимациях

Поскольку свет не имеет реальной позиции и интенсивность равномерна, HemisphereLight удобно использовать в анимациях, где требуется динамическая смена освещения, например, имитация дня и ночи. Изменение цвета и интенсивности в реальном времени создаёт естественные эффекты:

function updateLighting(time) {
    hemiLight.color.setHSL(0.6, 1, Math.max(0.2, Math.sin(time) * 0.5 + 0.5));
    hemiLight.groundColor.setHSL(0.1, 1, Math.max(0.1, Math.cos(time) * 0.3 + 0.3));
}

Эта техника позволяет плавно менять освещение сцены без пересчёта сложных теней или дополнительных источников света.

Резюме ключевых преимуществ

  • Двухцветное рассеянное освещение.
  • Не создаёт резких теней, лёгкий в производительности.
  • Отлично работает с PBR-материалами.
  • Простота комбинирования с другими источниками света.
  • Подходит для анимаций и динамического освещения сцены.

HemisphereLight — базовый инструмент для создания естественного и мягкого окружного освещения в трехмерных сценах, особенно в ландшафтных и интерьерных визуализациях.