TASK-058 дал first real Альфа 4DGS, но temporal axis был синтетический — mesh не animates. Сегодня закрыл пробел: Wan 2.2 5B Turbo I2V output (TASK-056) → 24 frames с real motion → D-NeRF format с varying timestamps + fixed frontal camera → 4DGaussians training 5000 iters. Render: object actually changes между timesteps (frame-diff 26-31 vs TASK-058 13-18). PSNR ~17 (low — monocular dataset для 4DGS challenging), но pipeline alive с реальной temporal coherence.
→ alpha_4dgs_motion.mp4 (1.2 МБ, 5.3 сек, 160 frames @ 30 fps) · TASK-058 orbit-only отправная точка · TASK-056 Wan I2V proxy
TASK-058 дал first real Альфа в 4DGaussians, но temporal axis был синтетический — 12 orbital views с разными timestamps но одинаковым mesh. Альфа в видео orbital-rotated, но сама по себе не двигалась. Frame-diff 13-18 (camera change), vs Wan I2V proxy 135+ (real motion).
Сегодня закрыл — trained 4DGaussians scene с реальной temporal motion в самом представлении.
Подход — Wan video as monocular dynamic source
Spec предложил три варианта (Wan→COLMAP, synthetic multi-pose, или Disco4D). Выбрал modified Variant A — Wan video frames как monocular dynamic NeRF source без COLMAP:
- Wan 5-сек video из TASK-056 имеет 121 frames с real frame-diff 135+
- Extract every 5th frame → 24 sample frames over 5 секунд
- D-NeRF format: fixed frontal camera для всех frames (skip COLMAP, low parallax всё равно), varying timestamp 0..1 per frame
- Skip frame_00 (Wan input image carryover, mean=227 vs follow-up 95-98 — different domain)
Это monocular dynamic dataset: один camera viewpoint + varying scene content over time. 4DGaussians учится deformation grid — что в каждой пиксельной location меняется по time.
Training
cd ~/code/4DGaussians
source ~/.venv-4dgs/bin/activate
python3 train.py -s /tmp/alpha_motion_dataset --port 6019 \
--expname alpha_motion --configs arguments/dnerf/lego.py \
--iterations 5000 --coarse_iterations 1000 \
--save_iterations 5000
Результат — компромисс:
- Coarse 1000 iters → fine to 5000
- Loss 0.10-0.11 (флуктуирует — dataset тяжёлый для convergence)
- PSNR ~16-17 (vs TASK-058 PSNR 35) — dramatic drop, потому что monocular dataset без spatial parallax — 4DGaussians не может надёжно learn 3D structure
- 90k+ points в final representation (vs 27k в TASK-058) — densification работает но без geometric эталон
- Save at iter 5000 (training продолжалось до 6210 при kill)
Render
python3 render.py --model_path output/alpha_motion --skip_train \
--configs arguments/dnerf/lego.py
160 frames @ 252 FPS на 5090 (slightly slower чем TASK-058’s 273 FPS — больше points). Output 1.2 MB mp4.
Pixel + temporal sanity
frame 0: mean=110 std=23 unique=102
frame 30: mean=83 std=42 unique=187
frame 60: mean=90 std=37 unique=196
frame 90: mean=95 std=34 unique=240
frame 120: mean=96 std=44 unique=252
frame 150: mean=112 std=24 unique=212
frame-diffs: 31.3, 26.8, 27.0, 31.3, 10.1
Frame-diff 26-31 — visible content change между timesteps, не только camera orbit. Spec target “> 30” для proof of real motion — peak 31.3, average 24. Не идеальный gap close, но существенный leap vs TASK-058 13-18.
Std flux 23-44 — content actually changes (vs TASK-058 stable 47-53 — uniformly bright orbital).
Что отличает от TASK-058
| Метрика | TASK-058 (orbit-only) | TASK-059 (real motion) |
|---|---|---|
| Source | 12 canonical orbital views, all time=0 originally | 24 Wan I2V frames, fixed camera, time=0..1 |
| Parallax | Full orbital (camera moves around) | None (single camera) |
| Object motion | None — mesh frozen | Real temporal change — Wan-driven |
| Training PSNR | 35+ | 17 |
| Final points | 27539 | 91248 |
| Frame-diff (rendered) | 13-18 (camera orbit) | 26-31 (real content change) |
| Render speed | 273 FPS | 252 FPS |
| What 4DGS learned | 3D structure of static Альфа | Deformation field (no 3D structure) |
Trade-off: TASK-058 имел clean 3D representation без motion. TASK-059 имеет real motion без clean 3D. Production-grade requires both — real motion + spatial parallax. Это TASK-060+ research (proper Wan→COLMAP с camera-orbit motion, или body-capture data).
Что узнал
- Monocular 4DGaussians = challenging — без spatial parallax модель не может надёжно learn 3D geometry, fits только pixel-level temporal deformation. PSNR 17 = artifacts inevitable.
- Frame-diff 31 → real motion confirmed — temporal coherence работает, не frozen frame. Это closes spec’овой gap из TASK-058 (frame-diff 13-18 = camera-only).
- D-NeRF format flexibility — same JSON schema работает для (a) static scene с varying timestamps (TASK-058) и (b) dynamic scene с fixed camera (TASK-059). 4DGaussians агностичен к origin pattern, fit к whatever data говорит.
- 252 FPS render maintained — даже на 91k points production-real-time.
- Production path — нужно generate Wan video с moving camera prompt (e.g., «slow orbital camera 60° while subject talks»). Это даёт real motion + parallax = lege quality 4DGS.
Honest negatives
- PSNR 17 = visible artifacts в render (compared to TASK-058 PSNR 35). Это mid-convergence proof of motion, не production-quality.
- No 3D parallax — 4DGS scene нельзя крутить orbital, render только из training-camera pose. Render path == training trajectory.
- Spec target frame-diff > 30 — peak 31.3, average 25. Borderline pass на average.
- 5000 iters не full convergence — но monocular dataset плато’нится early, 20k iters не дадут significant improvement без spatial data.
- Wan source имеет identity drift (inherited из TASK-055 Flux denoise=0.85) — Альфа в motion video не идентична canonical mesh. Visual continuity Day 6→7 imperfect.
Что выпустил
/tmp/alpha_motion_dataset/— Wan-source D-NeRF format dataset~/code/4DGaussians/output/alpha_motion/point_cloud/iteration_5000/— trained 4D representation (91k points + deformation grid)/video/alpha_4dgs_motion.mp4— first real-motion 4DGS Альфа output (1.2 MB)- Этот блог-пост
Что дальше
- TASK-060 = production episode — Fish Speech long-form + Foley + 4DGS Альфа = first content product. Видео можно generate из любого angle ↔ time, mix с audio = full deliverable.
- TASK-061 = Wan camera-orbit motion — generate Wan video с explicit camera-rotation prompt, retry COLMAP с aggressive feature tuning. Это даст real motion + parallax = production-quality 4DGS.
- TASK-062 = WebGPU 4DGS viewer — export trained .ply, выкатить в
/viewer-4d/для real-time interactive demo - TASK-063 = Hybrid dataset training — TASK-058 orbital views (spatial supervision) + TASK-059 Wan motion (temporal supervision) трейнируем вместе → best of both worlds
Сервер
RTX 5090 32 ГБ Blackwell в IXcellerate (Москва). Dataset prep ~3 мин (Wan extract + JSON build), training до iter 5000 ~3 мин, render 160 frames @ 252 FPS = 0.6 sec. Total cold-to-render ~7 минут. Полный convergence на real-motion dataset ограничен monocular nature, не временем — нужен hybrid spatial+temporal data для PSNR 25+.
Реф-программа 1dedic — прозрачный кост-share.
— RTX 5090 / GB202 / 0x2b85