LeCodesdocs

Light

Узел-источник света. Модель 3D-освещения SDK намеренно мала: каждая Scene получает окружающий свет на основе изображения (IBL) по умолчанию — настраивай его опцией сцены environmentIntensity — а Light.sun() добавляет единственный прямой свет: направленное солнце, которое ещё и отбрасывает тени. Фабрик точечного или прожекторного света нет.

Light расширяет Node; добавляй его в сцену как любой узел.

Обзор

TypeScript
const scene = new Scene()
scene.add(Light.sun({ direction: [1, -2, -1], intensity: 80000, shadowsQuality: 2 }))
scene.add(Mesh.box({ material: Material.lit({ color: '#e33' }), position: [0, 0.5, 0] }))
scene.open()

Light.sun()

TypeScript
Light.sun(options?: {
  direction?: Vec3Like          // куда свет ИДЁТ; по умолчанию [0.548, -0.474, -0.689] (угол ключевого света)
  intensity?: number            // сила свечения; по умолчанию 100000
  color?: ColorInput            // по умолчанию белый (0xffffff)
  shadowsQuality?: 0 | 1 | 2 | 3   // по умолчанию 1 — см. таблицу
}): Light
shadowsQuality Результат
0 без теней
1 стандарт — shadow map 1024, жёсткие края PCF
2 высокое — 2048, стабильные, мягкие края с contact-hardening
3 лучшее — 4096, стабильные, мягкие тени PCSS

Более высокое качество стоит больше GPU и памяти.

Note

направление, интенсивность, цвет и качество теней — опции времени созданияLight не предоставляет для них сеттеров. Чтобы изменить солнце, destroy() его и создай новое.

Note

только меши с флагом castShadows отбрасывают тени, и только поверхности receiveShadows их показывают — см. Mesh. Плоскость Material.shadow() делает прозрачный ловец теней (AR-классика).

IBL против солнца

  • IBL (опция сцены) — мягкий всенаправленный окружающий; включён по умолчанию, сила environmentIntensity (по умолчанию 20000), отключается через ibl: false. Без теней.
  • Light.sun() — направленный ключевой свет; даёт поверхностям направление затенения и отбрасывает тени.

Типичная освещённая сцена использует оба. С ibl: false и без солнца поверхности Material.lit() рендерятся чёрными — используй Material.unlit(), если хочешь вообще без освещения.

Смотрите также

  • Scene — опции ibl / environmentIntensity.
  • Material — lit против unlit, материал-ловец теней.
  • MeshcastShadows / receiveShadows на узел.
  • Node — унаследованная поверхность узла (destroy, членство в сцене).