Light
Узел-источник света. Модель 3D-освещения SDK намеренно мала: каждая Scene
получает окружающий свет на основе изображения (IBL) по умолчанию — настраивай его опцией сцены
environmentIntensity — а Light.sun() добавляет единственный прямой свет: направленное солнце,
которое ещё и отбрасывает тени. Фабрик точечного или прожекторного света нет.
Light расширяет Node; добавляй его в сцену как любой узел.
Обзор
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()
Light.sun(options?: {
direction?: Vec3Like // куда свет ИДЁТ; по умолчанию [0.548, -0.474, -0.689] (угол ключевого света)
intensity?: number // сила свечения; по умолчанию 100000
color?: ColorInput // по умолчанию белый (0xffffff)
shadowsQuality?: 0 | 1 | 2 | 3 // по умолчанию 1 — см. таблицу
}): LightshadowsQuality |
Результат |
|---|---|
0 |
без теней |
1 |
стандарт — shadow map 1024, жёсткие края PCF |
2 |
высокое — 2048, стабильные, мягкие края с contact-hardening |
3 |
лучшее — 4096, стабильные, мягкие тени PCSS |
Более высокое качество стоит больше GPU и памяти.
направление, интенсивность, цвет и качество теней — опции времени создания — Light не
предоставляет для них сеттеров. Чтобы изменить солнце, destroy() его и создай новое.
только меши с флагом castShadows отбрасывают тени, и только поверхности receiveShadows их
показывают — см. Mesh. Плоскость Material.shadow()
делает прозрачный ловец теней (AR-классика).
IBL против солнца
- IBL (опция сцены) — мягкий всенаправленный окружающий; включён по умолчанию, сила
environmentIntensity(по умолчанию 20000), отключается черезibl: false. Без теней. Light.sun()— направленный ключевой свет; даёт поверхностям направление затенения и отбрасывает тени.
Типичная освещённая сцена использует оба. С ibl: false и без солнца поверхности Material.lit()
рендерятся чёрными — используй Material.unlit(), если хочешь вообще без освещения.