Repository navigation
v0.9.0 — Рельеф по глубине: нейросеть прямо в приложении
Высота картинки больше не обязана следовать яркости. Новый источник рельефа строит её по глубине — по тому, что на снимке ближе, а что дальше: лицо выступает из фона, предмет поднимается над столом, независимо от того, светлее он или темнее. Нейросеть вшита в приложение и работает на вашем компьютере: интернет не нужен, картинка никуда не уходит. Если у вас уже есть готовая карта глубины, её можно подставить вместо нейросети. Режим «по яркости» остался режимом по умолчанию и считается ровно так же, как раньше.
🧠 Рельеф по глубине
- Три источника рельефа в блоке «Режим глубины»: яркость картинки (по умолчанию), глубина от нейросети и карта глубины из файла. Цвет каждого филамента — средний цвет картинки внутри своего слоя глубины, поэтому предмет переднего плана получает собственные филаменты, а не смешивается с фоном той же яркости.
- Depth Anything V2 Small (квантованная, 27 МБ) на ONNX Runtime Web, в отдельном потоке: интерфейс не замирает. Первая оценка занимает несколько секунд (около 5 с на тестовой картинке 640×480, включая загрузку модели), потом результат переиспользуется — ползунки, размер и число цветов пересчитываются без повторной оценки.
- Только порядок, не расстояния. Глубина говорит «ближе / дальше»; миллиметры задают основание и максимальная высота. Для картинок, которые нейросеть прочитала наоборот, и для эффекта врезанного изображения есть «Инвертировать глубину». Если на картинке почти нет перепада глубины, рельеф строится по яркости — плоская плита с полосами цвета никому не нужна.
- Контраст, «Детали», сглаживание, дизеринг и слияние близких цветов работают поверх глубинного рельефа так же, как поверх яркостного. Переключатель «светлое / тёмное выше» и режим «по цветам изображения» при глубине неактивны, а режим каталога катушек и глубина взаимоисключают друг друга.
- Если модель не загрузилась, картинка всё равно обрабатывается по яркости, причина видна под переключателем, а повторный выбор после исправления работает.
🗺️ Своя карта глубины
- PNG, 8 или 16 бит — серый, серый с прозрачностью, RGB, RGBA. 16 бит читаются собственным декодером без потерь: плавный градиент печатается плавным склоном, а не террасами (
<canvas>браузера свёл бы его к 8 бит). - По умолчанию светлее — ближе; для обратного соглашения включается инверсия. Полностью прозрачные пиксели остаются на уровне основания при любом направлении глубины, поэтому вырезка с прозрачным фоном печатается без ступеньки вокруг.
- Карта растягивается под картинку (если пропорции разные, приложение скажет), плоский фон остаётся одним слоем, а не режется на полосы. Однотонная карта не используется — рельеф строится по яркости.
- Ограничения: файл до 64 МБ, до 16 мегапикселей (4096×4096), без чересстрочной развёртки; повреждённый или неподдерживаемый файл даёт понятную ошибку и не ломает текущий результат.
- Карту можно получить из любой программы глубины или из Blender; готовый путь через Unique3D описан в README как направление (самим конвейером внутри приложения мы не пользуемся — он требует видеокарту NVIDIA).
💾 Проекты и экспорт
- Источник рельефа и «инвертировать» запоминаются в настройках, в проекте и в шагах отмены/повтора. Старые проекты открываются по яркости, как раньше.
- Карта из файла входит в сохранённый проект — вместе с картинкой, потому что палитра записана в порядке слоёв глубины и имеет смысл только с тем же рельефом. Если при открытии рельеф восстановить не удалось (карта повреждена, модель недоступна), проект открывается по яркости с автоматическими цветами и сообщением — накладывать сохранённые цвета на другой порядок слоёв хуже, чем не накладывать.
Describe.txtи 3MF называют источник рельефа: вместо «светлое выше» пишется «relief from a depth map», а в метаданных 3MF появилисьReliefSourceиInvertDepth.
🔒 Офлайн и лицензии
- Всё считается локально. Модель и рантайм WebAssembly вшиты в приложение, политика безопасности страницы по-прежнему не пускает запросы наружу — это закреплено тестом.
- Лицензии вшитых компонентов лежат в сборке: модель Depth Anything V2 Small — Apache-2.0, ONNX Runtime — MIT; тексты и уведомления о стороннем коде — в
THIRD_PARTY_NOTICES.txtиTHIRD_PARTY_NOTICES_ONNXRUNTIME.txtв корне приложения. Другие размеры модели (Base, Large) выпущены под некоммерческой лицензией и не включены.
⚠️ Что стоит знать при обновлении
- Размер вырос. Из-за вшитой модели и рантайма deploy-пакет
hueforge-web-deploy-v0.9.0.zipвесит около 25 МБ (было доли мегабайта), установщик настольной версии тоже заметно больше; автообновление скачает его целиком. - Крупная карта глубины декодируется в основном потоке: лимит в 16 мегапикселей ограничивает паузу, но на слабом ПК большая карта даст заметную задержку.
- Как проверено. 523 автотеста, плюс прогон в реальном Chromium (production-сборка и dev-сервер) и в Electron под Linux (из каталога и из
app.asar) на настоящей модели; установщик для Windows собирает CI.
Полный changelog: v0.8.9...v0.9.0