Статус: Planned (замысел; детали обговариваются). Кода освещения ещё нет —
слой презентации (код Assets/_Project/Scripts/Presentation/) свет не упоминает. Это план направления
и тулинг-контур, не «как есть».
План динамического 2D-освещения: как хотим, чтобы свет читался в бою и на экранах, и каким пайплайном получаем normal-карты, НЕ рисуя их руками на каждый кадр анимации.
Связано: слой презентации (код
Assets/_Project/Scripts/Presentation/) · Planning - Roadmap (Фаза 7, презентация) · Meta - Tech Changelog & Decisions.
Намерение (дизайн)
- Динамический 2D-свет в бою и на экранах — не плоская равномерная засветка, а свет с направлением и цветом, дающий сцене объём и настроение.
- Иногда — тёмные/затемнённые сцены, где свет читается интереснее: контраст, акценты на источниках (факелы, заклинания, ауры), драматургия боя через освещение. Не вся игра тёмная — это инструмент под отдельные арены/моменты.
- Свет должен работать с боевым фидбэком (вспышки удара, VFX-искры, death-эффекты как
источники света) — стык с слой презентации (код
Assets/_Project/Scripts/Presentation/) и джусом.
Дизайн-намерение Макса. Конкретика (какие арены тёмные, палитра, сила теней) — позже.
Технологическая база (proposed)
- URP 2D Renderer — уже в проекте (
Assets/Settings/Renderer2D.asset).Light2D(Freeform / Spot / Global / Point) и тени доступны из коробки, отдельный пакет не нужен. - Normal maps заводятся как secondary textures спрайтов (
_NormalMap) →Light2Dдаёт объём «по форме» спрайта. Обязателен point-фильтр и тот же импорт, что у диффуза, иначе на пиксель-арте свет «поедет» по пикселям. - Открытый вопрос: нужны ли normal-карты вообще на всех юнитах, или части сцен хватит
плоского
Light2D+ rim/emission. На мелких юнитах в движении эффект normal часто теряется. Решаем пробой на одном герое до раскатки на всех. (proposed)
Тулинг: генерация normal-карт (не рисуем руками)
Ключевая проблема — не рисовать normal вручную на каждый кадр анимации. Решается генерацией, не рисованием.
| Инструмент | Роль | Статус |
|---|---|---|
| Laigter (azagaya, opensource) | Автогенератор normal + specular + occlusion + parallax из спрайтов/атласов. Есть CLI (--no-gui) и пресеты → батч по папке. | Принято (Макс одобрил) |
| Aseprite (уже в проекте) | Точечный контроль normal конкретного кадра через Lua-скрипты, если генератор где-то фейлит. | Запасной, по нужде |
| SpriteIlluminator (Codeandweb) | Платная альтернатива Laigter с бОльшим ручным контролем. | Не берём без нужды |
Пайплайн Laigter (разделение труда)
- Макс (один раз): в GUI Laigter настраивает вид normal на одном типовом спрайте → Save preset.
- Никси (батч): PowerShell-скрипт зовёт
laigter.exe --no-gui -d "<папка/спрайт>" --r "<preset>" -nпо всем спрайтам → рядом кладутся<name>_n.png. Новый юнит = закинул спрайты, перегнали батч. - Никси (импорт): normal-текстуры заводятся как secondary textures с point-фильтром
и цепляются к
Light2D(автоматизируется через Unity MCP, не руками по каждой).
CLI-флаги Laigter:
--no-gui(без окна),-d(диффуз/папка),--r(пресет-профиль),-n/-c/-o/-p(normal / curvature / occlusion / parallax). Источник: Laigter docs.
Отложено / за скобками
- 3D→2D bake-пайплайн («путь Dead Cells»: 3D-модель → рендер спрайтов + запечённые
normal автоматически). Идеальный свет, но смена всего арт-контура на 3D — оверкилл для
соло-инди-масштаба. Не берём, если не решим уходить в 3D-контур персонажей. (
proposed) - Точная драматургия тёмных сцен, палитра света, конфиги теней — дизайн, обговаривается отдельно.
Порядок работ (черновой, proposed)
- Проба на одном юните end-to-end: пресет Laigter → батч-скрипт → secondary normal →
Light2Dна тест-герое → play-QA Макса: «стоит ли овчинка выделки». - Если да — батч-скрипт на все спрайты + авто-импорт secondary-текстур.
- Свет сцен/арен (Global + локальные источники), тёмные арены как отдельный пресет.
- Стык с боевым фидбэком: VFX/удары/смерти как источники света.
Верстается после того, как обсудим детали. Сейчас — зафиксированное направление.