YAML Metadata Warning:empty or missing yaml metadata in repo card
Check out the documentation for more information.
worldsculpt-pipeline
Статус: ✅ пайплайн прошёл целиком. scene.glb 299 МБ, 13 объектов, опубликован.
Текстуры: ❌ не наложены — причины и обход в TEXTURES.md.
Дата старта: 2026-09-20.
Документы: с чего начать
| Файл | О чём | Кому |
|---|---|---|
PIPELINE.md |
как повторить прогон: стадии и тайминги, контракт путей, все патчи, правило наблюдения | тому, кто будет запускать |
DATASET.md |
данные: что метод просит на вход, как разметить, какие объекты воспроизводимы, а какие нет | тому, кто будет готовить свои данные |
TEXTURES.md |
текстуры: что мешает, почему прогон был геометрическим, три варианта дальше | тому, кто хочет материалы |
STATUS.md |
дневник эксперимента: хронология, все блокеры и как они решались, полная таблица ловушек | тому, кто разбирается, «почему так» |
results/ |
510 файлов: scene.glb, scene_mesh.glb, обзорные PNG, 24 рендера, видео |
тому, кому нужен результат |
1. Что это за проект
WorldSculpt (Alaya Lab + Univ. of Tokyo, arXiv 2609.05416, сентябрь 2026) — генеративная «скульптовка» сцены: берёт сцену с готовой разметкой объектов и выдаёт композиционный меш, то есть отдельные меши на каждый объект, собранные в одну сцену.
Формально на входе:
| Что | Формат |
|---|---|
| кадры | NNN.png |
| маски объектов по кадрам | masks/<объект>/NNN.png |
| 3D-боксы объектов в мировых координатах | transforms.json → instances[].aabb_world |
| карты глубины (опционально) | depth_gt/NNN.png |
На выходе: _crops/ (вырезки объектов), _recon/ (меши по объектам), _scene/scene.glb (сцена целиком).
Внутри: Pixal3D (дообученный на перекрытых объектах)
- TRELLIS.2 (базовое окружение) + DINOv3.
2. Почему это интереснее гауссиан
Три причины, и все три — прямые ответы на то, на чём умер прошлый проект.
- Выход — меш, а не гауссианы. Прошлый результат нельзя было даже показать: 246 292
гауссианы по 0.0003 радиуса дают 0.03–0.14 пикселя на экране, Blender их не рисует.
Меш (
scene.glb) Blender открывает штатно. Это снимает главную практическую боль. - Вход — данные с готовой разметкой, а не сырые фото. Прошлый проект убило качество
исходников: 8 бит, фон 5/255, весь объект в 30 уровнях из 256. Здесь авторы дают свой
размеченный бенчмарк. Урок из
CLOSED.md(«начинать с данных, а не с кода») выполняется автоматически. - Есть с чем сравнить. Опубликованы результаты авторов — значит, метод рабочий, и наш риск лежит в сборке окружения, а не в самой идее.
3. Результат
/vol/output/marble_serene_living_room_countryside_view/
_recon/obj01..obj13/ mesh.pt + ss_coords.npz + ss_render.png
_scene/scene.glb 299 027 036 байт <- ЦЕЛЬ
_scene/scene_mesh.glb 299 017 124 байт
_scene/mesh_scene_3d.png обзор: 13 мешей + AABB + камеры
_scene/mesh_scene_topdown.png
_scene/renders/scene.mp4 24 кадра @ 10 fps
_scene/renders/view00..23.jpg
Валидация GLB: magic glTF, version 2, declared length == фактическому размеру,
generator trimesh, 13 мешей / 13 узлов с именами obj01..obj13, 0 материалов
(прогон геометрический — см. TEXTURES.md). 6 209 074 вершины, 12 499 862 треугольника,
один буфер 299 016 120 Б, bbox ≈ 4 × 8.3 × 2.7 м.
Открывается в Blender 5.2 без аддонов. Сцена приходит с Z вверх, а импортёр glTF
ожидает Y вверх, поэтому лежит на боку — лечение rotation_euler = (-90°, 0, 0) на корневых
объектах, подробности в PIPELINE.md §6.
Публикация: hf upload rc=0, 510 файлов, 2 меша →
livadies/worldsculpt-pipeline/results/marble_serene_living_room_countryside_view.
4. Данные
Целевая сцена marble_serene_living_room_countryside_view: 24 кадра 1280×720, 13 объектов,
у каждого мировой AABB в transforms.json, маски по кадрам, карты глубины. Выбрана потому,
что это пример из README авторов (самый обкатанный путь) и она ровно того размера, чтобы
прогон стоил единицы долларов.
Главное ограничение: свои данные подключить нельзя — разметки нет
WorldSculpt работает не с фотографиями, а с размеченной сценой, и «разметка» здесь —
не «приложить маску», а целый конвейер, которого в репозитории нет. Полный разбор — в
DATASET.md §2; коротко:
| Что нужно | Чем это делают | Есть в репозитории? |
|---|---|---|
| позы камер и внутренние параметры | SfM/COLMAP или _step2/transforms.npz |
нет |
| маски объектов по кадрам | SAM / GroundingDINO + трекинг | нет |
| 3D-боксы объектов в мировых координатах | вывод из масок, глубины и поз | нет |
_step1/{vipe,da3,moge_anchor}_out.npz |
ViPE, Depth Anything 3, MoGe | нет |
_step2/transforms.npz |
отдельный шаг, ничем не описан | нет |
Практический вывод. Пока этот конвейер не воспроизведён, единственные данные, на которых
WorldSculpt запускается, — бенчмарк авторов (Marble и UE-MeshyScene), где разметка
уже лежит готовой. Свои фотографии — это не «следующий шаг», а отдельный проект
сопоставимого размера, причём без критерия правильности.
Про интернет-архив: не подходит
Проверено — не подходит. Репозиторий не умеет делать вход из фотографий: его точка входа
требует _step1/*.npz и _step2/transforms.npz, а ни один скрипт в репозитории их не
создаёт. Поиск по archive.org по subject:(photogrammetry) OR subject:(3D scan) даёт
3855 записей, но это готовые 3D-модели (Thingiverse), софт и книги — формата
«кадры + маски по объектам + мировые 3D-боксы» там нет.
5. Что нужно, чтобы это запустить
| Требование | Вес / объём | Статус |
|---|---|---|
| Данные Marble | 347 МБ | ✅ скачано, проверено |
| LoRA WorldSculpt | 341 МБ | ✅ на томе (steps=15000) |
Pixal3D + _mv-варианты + декодеры |
44 ГБ | ✅ на томе, проверено по размерам |
| Окружение TRELLIS.2 | 6 CUDA-расширений из исходников | ✅ venv 7.8 ГБ на томе |
| GPU | H100 (sm_90) | ⚠️ Modal, платно — единицы долларов за прогон |
Окружение TRELLIS.2 по setup.sh — это torch 2.7.0+cu126, flash-attn 2.8.3, плюс
компилируемые из исходников nvdiffrast, nvdiffrec, CuMesh, FlexGEMM, o-voxel, плюс NATTEN.
Шесть-семь CUDA-расширений. Это была самая тяжёлая часть проекта — и она пройдена.
Почему вес скачивания — не проблема
7 МБ/с с Hugging Face — это скорость этой машины. Но веса качает контейнер на Modal,
у которого нормальный интернет (200+ МБ/с). Локально 44 ГБ не качаются вообще: на HF уходит
только текстовая полезная нагрузка. Приём отработан и в прошлом проекте —
см. livadies/blender-3dgs-pipeline, §1.6.
6. Ключевые блокеры (все решены)
Полный разбор — в STATUS.md, здесь только суть.
Блокер 1: канал связи с Modal. Клиент на этой машине рвёт gRPC-поток каждые 3–4 минуты
(StreamTerminatedError на AppHeartbeat). Обход: окружение собирается не в слоях образа,
а функцией внутри работающего контейнера, в venv на томе. Контейнер не зависит от клиента
и переживает обрыв.
Блокер 2: компилятор. Базовые образы NVIDIA CUDA экспортируют CXX=clang++, но clang
не ставят, а torch берёт CXX для финальной линковки — все объектные файлы собираются
успешно, падает на ссылке, и выглядит это как проблема в коде. Лечение: CC=gcc, CXX=g++.
Блокер 3: gated-репозиторий briaai/RMBG-2.0. pixal3d_image_to_3d.py:123 строит модель
удаления фона безусловно, до чтения любых флагов, а pipeline.json называет gated-репозиторий.
Лечение: единственная правка исходников за проект (modal_ws_patch.py) — rembg делается
необязательным, двумя правками, потому что по отдельности ни одна не работает. Подробности
и почему модель не нужна — в PIPELINE.md §3.
7. Чего здесь делать не будем
- Не подключать фото из интернет-архива — пути нет, см. §4.
- Не менять
SAMPLER,SS_STEP,SHAPE_STEPбез причины.inference.shспециально не имеет значений по умолчанию: неверныйSS_STEPдаёт правдоподобную сцену из не тех весов, и заметить это потом почти невозможно. - Не запускать на A100 «на всякий случай», если NATTEN под sm_90 собрался: расхождение с конфигурацией авторов превратит отладку в гадание.
🙏 Благодарности
WorldSculpt (Alaya Lab, Univ. of Tokyo), Pixal3D, TRELLIS.2, DINOv3, Modal.