Фото на входе, код на выходе: собираю 3D-объект для лендинга без мегабайтов меша — и отвечаю на три собственных возражения
«Фото → 3D» последние годы означало одно: нейросеть выдаёт готовый меш, вы качаете файл на 30–80 мегабайт, грузите его в браузер и молитесь, чтобы он влез в бюджет по памяти. img2threejs предлагает другой выход: на входе фотография, на выходе — код на TypeScript, который собирает объект из примитивов и процедурных шейдеров прямо в Three.js. Ни меша, ни текстур, ни скачивания.
Тезис простой: для веба код выгоднее бинарника. Дальше — три возражения, которые у меня были, и что на них отвечает проект.
«Качество будет хуже фот
ограмметрии»
Да, будет. Это не скан объекта, а реконструкция по одному снимку: оригинал виден только с одной стороны, скрытые грани достраиваются зеркалом, а не выдумкой. Репозиторий сам пишет об этом в разделе «Honesty about limits»: сильная сторона — предметы с жёсткими формами, персонажи выходят стилизованными, а не фотореалистичными, и фраза «по этому снимку заявленной точности не достичь» — нормальный ожидаемый результат. Мне такая честность в README нравится больше обещаний «100% похожести».
«Агент сожжёт токены, пока это ваяет»
Здесь наоборот: вся архитектура сделана вокруг экономии. Валидацию, гейты, сборку листов сравнения и состояние конвейера держат Python-скрипты, а модель тратит токены только на визуальное суждение и код — смотрит один лист, где референс стоит рядом с рендером, и решает: прошло или нет. Генерация идёт по проходам и не переписывает модель целиком, а строгий гейт останавливает слабую спецификацию до первой строки Three.js. Скрипты — чистый Python 3.10+ без зависимостей, PNG читают через struct и zlib: ставить нечего и отлаживать нечего.
«Ещё один генератор, который выдаст мусор»
Конвейер разбит на этапы: blockout → структура → форма → материал → поверхность → свет → интерактив → оптимизация, и каждый проходит визуальную приёмку. Перед генерацией собирается опись деталей, которые и делают объект узнаваемым: глянец, фаски, винты, гравировки, потёртости — и каждая должна лечь в реальный компонент или материал. На выходе — JSON-спецификация и фабрика createObjectNameModel(), возвращающая THREE.Group с узлами, сокетами и коллизиями в userData, чтобы модель можно было анимировать, а не только разглядывать.
Что я проверил сам
16,5 тыс. звёзд, лицензия Apache-2.0, язык Python, последний коммит 13 сентября, версия 2.0.0. Работает под Claude Code, Codex и OpenCode — к одному агенту не привязан. В галерее 15 демок: наушники Sony WF-1000XM3, велосипед
BMX, скины ножей из CS2 с отдельными гейтами покрытия компонентов, домик Дораэмона. Три демки помечены как placeholder — рендерятся, но работой автора ещё не считаются.
Я не стану обещать клиенту, что по одному фото мы отдадим точную модель товара. Но как способ получить вращаемый объект для лендинга — без мегабайтов, без загрузки ассетов и с кодом, который можно править руками, — это первый инструмент такого рода, который я поставил себе в проект.
https://github.com/img2threejs/img2threejs
#apet #3d #AI #img2threejs
Post #2946
8
