В сети разошлось короткое демо разработчика Конрада Речко. На первый взгляд ничего сверхъестественного: кадр с обычной веб‑камеры, поверх которого можно двигать виртуальный источник света.

Самое интересное начинается, когда человек поднимает руку. Свет оказывается за ладонью и мгновенно исчезает. Перемещается к лицу — часть свечения перекрывает голова. Уходит в сторону — меняется освещение поверхности.

Выглядит так, будто в комнате действительно появился дополнительный источник света. Хотя камера по‑прежнему снимает обычное плоское RGB‑видео и никакого LiDAR в эксперименте нет.

Речко называет технику depth‑aware light injection. Демо работает прямо в браузере, исходный код открыт, а внутри одновременно используются компактная модель оценки глубины DepthART, WebGPU и TypeGPU.

Но называть происходящее просто «ИИ‑освещением» было бы не совсем точно. Нейросеть здесь отвечает только за одну, хотя и ключевую часть задачи: пытается понять относительную глубину сцены. Сам свет, окклюзия и отрисовка остаются задачей обычной компьютерной графики.

Именно эта связка делает эксперимент интереснее самого визуального эффекта.

Как веб‑камера вообще понимает, что рука находится перед стеной

Обычная камера получает цвет каждого пикселя, но не расстояние до объекта. Для неё ладонь, лицо и стена находятся на одной двумерной картинке.

Задача monocular depth estimation, или монокулярной оценки глубины, состоит в том, чтобы восстановить информацию о геометрии сцены по одному изображению.

В данном случае этим занимается DepthART. Это семейство компактных моделей для оценки глубины, представленное в июле 2026 года. Авторы специально ориентировали его на устройства, где тяжёлые модели компьютерного зрения использовать неудобно: от настольных GPU до Jetson. Например, для DepthART‑S они приводят результат 245 FPS при разрешении 448×448 на RTX A6000 в FP32 и 102 FPS на Orin NX 8 GB в своём тестовом режиме.

Для TypeGPU модель дополнительно конвертировали в собственный формат. Самый компактный вариант relative-s-448-balanced занимает около 13,7 МБ. Часть вычислений там выполняется в FP16, при этом чувствительные операции оставлены в FP32.

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

Условно вся цепочка выглядит так:

  1. Веб‑камера даёт RGB‑кадр.

  2. DepthART строит карту относительной глубины.

  3. Из неё вычисляется представление поверхности, необходимое для освещения.

  4. GPU‑шейдер рассчитывает положение виртуального света, окклюзию и итоговый цвет пикселей.

  5. Готовый кадр сразу выводится на экран.

[Здесь хорошо поставить рядом Camera / Depth / Normals / Relit из демо]

И вот здесь есть важное уточнение.

Нет, камера не научилась измерять расстояние до руки

В описании подобных демонстраций часто появляется формулировка вроде «ИИ определяет расстояние до каждого объекта». Она понятная, но для этого проекта слишком смелая.

Используемая в TypeGPU версия DepthART выдаёт affine‑invariant relative disparity, а не metric depth. Это прямо указано в описании опубликованных весов.

Грубо говоря, система может получить картину:

ладонь ближе → лицо дальше → стена ещё дальше.

Но из этого не следует, что она знает: «ладонь находится в 54 сантиметрах от камеры».

Для эффекта освещения этого оказывается достаточно. Чтобы понять, должен ли виртуальный свет оказаться перед рукой или скрыться за ней, абсолютные сантиметры во многих случаях просто не нужны. Важнее правильно восстановить взаимное расположение поверхностей.

Поэтому сравнивать такую систему с полноценным датчиком глубины стоит осторожно. Даже сам Речко отмечал в обсуждениях, что специализированное железо при наличии доступа к нему остаётся быстрее и точнее хорошо оптимизированной нейросети.

Это эффектная демонстрация monocular depth estimation, но не программная замена LiDAR во всех возможных задачах.

А где здесь берётся свет

Карта глубины сама по себе ничего не освещает.

После inference система дополнительно обрабатывает полученную геометрию и формирует данные о поверхности. Дальше начинается уже знакомая графическому движку работа: положение виртуального источника света сопоставляется с геометрией кадра.

В исходниках проекта есть отдельные compute pipelines для подготовки depth‑данных и поверхности, а затем render pipeline для relighting. В параметры рендера передаются положение и цвет источника, интенсивность, exposure, specular, shadow и occlusion.

Поэтому момент с ладонью выглядит убедительно.

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

ИИ здесь предоставляет графическому алгоритму информацию о структуре сцены. Всё остальное делает GPU.

Те самые 8 миллисекунд

Ещё одна цифра, которую легко неправильно пересказать, — 8 мс на кадр.

Речко действительно пишет примерно о 8 миллисекундах на M4 Pro. Но речь идёт именно об inference модели глубины с разрешением 448×448, который состоит примерно из 250 GPU dispatches. Это не опубликованный benchmark полного пути от получения изображения с камеры до вывода готового кадра.

Разница существенная.

Тем не менее результат достаточно быстрый, чтобы использовать полученную глубину при интерактивном рендеринге. Для сравнения, бюджет кадра при 60 FPS составляет примерно 16,7 мс. Это не означает, что всё приложение укладывается в 8 мс, но показывает, почему подобный inference уже можно включать в real‑time pipeline.

И здесь мы подходим к самой интересной части проекта.

Главный трюк происходит между нейросетью и рендером

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

Работать это, вероятно, тоже будет.

Только появляется ненужное движение данных между компонентами.

В реализации Речко inference DepthART написан непосредственно на TypeGPU. Результирующий depth buffer остаётся на GPU и используется следующими вычислениями там же.

Это видно и в открытом коде.

Сначала кадр камеры импортируется как external texture. Затем создаётся один command encoder. Внутри compute pass последовательно выполняются inference, оценка диапазона, стабилизация, подготовка глубины и данных поверхности. После этого через тот же encoder начинается render pass с relighting, а в конце вся работа отправляется на выполнение.

Получается примерно такая цепочка:

camera → DepthART → disparity → surface → lighting → render

Вместо постоянного путешествия промежуточных результатов через CPU.

Речко отдельно подчёркивает именно это: depth buffer не приходится вытаскивать с GPU ради дополнительной синхронизации или передачи между разными системами. Inference, освещение и отрисовка проходят через один command encoder.

На мой взгляд, именно здесь находится главная ценность демонстрации.

Виртуальный фон или красивый свет можно реализовать множеством способов. Гораздо интереснее возможность использовать результат локальной модели как обычный ресурс следующего GPU‑этапа почти сразу после inference.

Зачем здесь TypeGPU

TypeGPU — открытый toolkit поверх WebGPU от Software Mansion. Его задача — сделать работу с GPU из TypeScript удобнее и безопаснее с точки зрения типов, в том числе позволить писать shader‑функции непосредственно на TypeScript с последующей генерацией WGSL.

Сам WebGPU в этом случае даёт браузеру доступ к современному GPU rendering и general‑purpose compute. TypeGPU становится слоем, на котором разработчики собрали inference конкретной нейросети и последующую графику.

И это важный сдвиг.

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

По сути, нейросеть превращается в один из этапов рендера.

Значит ли это, что из обычной камеры получилась 3D‑камера

Нет. И именно здесь лучше не переоценивать красивую демонстрацию.

Одна RGB‑камера по‑прежнему видит сцену только с одной позиции. DepthART восстанавливает предполагаемую глубину из изображения, а не сканирует пространство физическим сенсором. Используемая модель выдаёт относительную disparity. Разрешение depth inference в демо составляет 448×448.

Поэтому правильнее говорить о 2,5D‑представлении текущего кадра, достаточном для определённого класса визуальных эффектов.

У системы нет информации о поверхностях, которых камера не видит. Ошибка модели глубины автоматически становится ошибкой освещения. Тонкие объекты, сложные границы, отражения, прозрачные поверхности и неоднозначная геометрия остаются сложными случаями для monocular depth estimation в целом.

Так что красивый момент с рукой доказывает вполне конкретную вещь: современная компактная depth‑модель уже может достаточно быстро дать графическому движку полезное приближение геометрии сцены.

Не больше. Но и не меньше.

Зачем это нужно кроме красивого света

Самое очевидное применение — видеосвязь и стриминг. Если приложение знает относительную глубину сцены, фон можно обрабатывать с учётом расположения человека и предметов, а виртуальные объекты корректнее размещать перед человеком или за ним.

Дальше идут браузерные AR‑эффекты, интерактивные инсталляции, игры, виртуальные камеры, композитинг и VFX. В обсуждении проекта на Reddit разработчики довольно быстро начали спрашивать о TouchDesigner, Blender, работе с обычным видео и совмещении depth estimation с другими моделями компьютерного зрения. Сам тред за несколько дней собрал больше 1,5 тысячи голосов.

Но интереснее конкретных сценариев сама архитектура.

Когда segmentation, depth estimation, tracking и другие локальные модели могут работать рядом с графикой и обмениваться GPU‑ресурсами без постоянного возврата к CPU, браузер начинает выглядеть совсем иначе.

Не как место, где нейросеть отдельно «что‑то распознала», а как среда, где ML inference становится частью графического pipeline.

Monocular Light Injection пока остаётся небольшим open‑source демо. Но оно очень хорошо показывает, к чему движется локальный компьютерный vision: модели уменьшаются, inference ускоряется, а граница между «нейросетью» и обычным rendering‑кодом становится всё менее заметной.

Именно поэтому десятисекундный ролик со светящейся точкой оказался интереснее, чем кажется.

Исходники и материалы

Интерактивное демо: Monocular Light Injection в TypeGPU
Исходный код: репозиторий TypeGPU на GitHub
Конвертированные веса: DepthART для TypeGPU на Hugging Face
Оригинальная работа о компактной версии DepthART: DepthART: Scaling Foundation Monocular Depth to Tiny Models
Обсуждение реализации: тред в r/GraphicsProgramming.

Если вам интереснее не только читать про новые AI‑технологии, но и тестировать их руками, в SYNTX.AI собраны 100+ инструментов для работы с текстом, изображениями и видео без необходимости оформлять отдельную подписку на каждый сервис.

Для читателей Хабра оставлю промокод CTRLAI со скидкой 20%.