Как я устал дублировать .blend-файлы и написал свою Git для 3D
Вместо предисловия
Compare на вкладке Selected Object работает некорректно — его сломал ИИ. Код аддона не самый «чистый», и вообще это, по сути, прототип. И вообще я потратил своё время и деньги, поэтому ваши гневные отзывы можете отправлять Деду Морозу в письменном виде. Когда ты моделишь в Blender, особенно если это что‑то сложное, очень быстро приходит момент, когда хочется сохранить «этот вариант»… и «этот тоже… а вдруг переделаю?»
И тут у тебя в папке уже 10 копий:
model_v2.blend model_v2_FINAL.blend model_v2_final_ACTUALLY.blend model_old_backup_really_old.blend
Пару месяцев назад я именно так и мучился, пытаясь придумать красивую топологию для модели. Вертел сцену, сохранял копии, создавал дубликаты объектов — надоело. И я решил написать с помощью ИИ свою систему контроля версий, заточенную под 3D.
Так родилась Difference Machine. Сначала это был небольшой аддон, который сохранял выделенные mesh-объекты как JSON‑файлы с геометрией, материалами и полным пакетом текстур. Это было неэффективно и занимало много места, так как текстуры каждый раз дублировались. Через пару итераций система превратилась в полноценную систему контроля версий.
Почему не просто Git?
Git, конечно, штука отличная. Но он плохо дружит с бинарниками. Да, есть Git LFS — но это отдельный сервис, плюс ограничения, плюс ещё один слой сложности. А я хотел просто: один бинарник, один плагин — и всё работает «из коробки».
Поэтому я написал Forester — это своего рода «Git, но для 3D». Работает как привычный Git: add, commit, branch, checkout, diff, stash… Но при этом изначально заточен под двоичные файлы, особенно .blend.
Название «Forester» («Лесник») отсылает к управлению «ветками», а вся система — к роману «Машина различий» (Difference Engine).
Что умеет Difference Machine?
Система состоит из двух частей:
1. Forester — CLI‑движок на Go
Это основа, написанная на Go, которая работает из терминала. Она умеет:
- Двухэтапный коммит как в Git:
add→commit. - Diff для текстовых файлов с поддержкой side‑by‑side сравнения.
- Reflog — журнал операций, который позволяет восстанавливать «удалённые» коммиты.
- Garbage Collection — автоматическая очистка старых данных с настройкой срока хранения.
- Блокировка файлов — для командной работы.
- Хуки —
pre-commit,post-checkoutи другие. - Stash — временное сохранение изменений без коммита.
2. Аддон для Blender — графический интерфейс
Чтобы не лезть в терминал, я сделал плагин для Blender. Он позволяет:
- Инициализировать репозиторий в один клик.
- Создавать коммиты, ветки, теги.
- Просматривать историю и сравнивать версии.
- Загружать отдельные объекты из коммитов — можно посмотреть, как выглядела модель в прошлом, не переключая всю сцену.
- Сохранять объекты как ассеты — выделил объект, нажал — он сохраняется в отдельный
.blendв папкеassets. - Работать со
stashпрямо из интерфейса.
Как безопасно удалять коммиты?
Forester использует механизм reflog, как и Git, но более прозрачно:
forester commit --delete— помечает коммит на удаление.forester gc— удаляет только те коммиты, у которых истёк срок хранения вreflog(по умолчанию — 90 дней).forester gc --dry-run— показывает, что будет удалено, без реального удаления.
В отличие от Git, где нужно помнить про git gc, здесь всё происходит автоматически и с возможностью предварительного просмотра.
А как же облако и командная работа?
Удалённых репозиториев, как в GitHub, пока нет. Forester — это локальная система.
Но ничто не мешает вам положить проект на NAS или просто синхронизировать папку через Syncthing / rsync / любой другой инструмент.
Плагин поддерживает блокировку файлов — так что несколько человек могут работать над проектом, не перетирая изменения друг друга.
Важное преимущество: ваши данные остаются у вас, а не у корпораций.
Что в планах?
Сейчас я с ИИ делаю GUI. Но я не команда из десятка разработчиков — просто один дизайнер интерфейсов, который для своего хобби устал плодить .blend.backup_03.blend.
Если будет интерес сообщества, можно развивать:
- Плагины для других 3D‑редакторов (Maya, 3ds Max).
- Облачный хостинг типа GitHub, но для 3D‑проектов.
- Встроенную рендер‑ферму — запускаешь разные версии сцены параллельно.
- CI/CD для игровых проектов — автоматическая сборка и тестирование.
Если кто‑то заинтересуется — возможно, расширим функционал. Но пока это мой личный инструмент, который, возможно, не нужен никому.
Репозиторий на Github
Установщик на Яндексе