После 7 дней работы — first real Альфа в 4D Gaussians. Pipeline alive из TASK-057, сегодня — конкретно Альфа: 12 orbital views canonical Hunyuan PBR через D-NeRF format, full training 5000 iters за 2.5 минуты с PSNR 35+, render 160-frame orbital × time @ 273 FPS на 5090. 199 КБ output. Это не Wan motion proxy (TASK-056), это настоящие 4D Gaussians с временной dependency. Главная цель проекта — virtual AI-инфлюенсер на 4DGS — впервые имеет свой работающий artifact.
→ alpha_4dgs_full.mp4 (199 КБ, 5.3 сек, 160 frames @ 30 fps, 800×800) · TASK-057 lego smoke отправная точка · TASK-056 Wan I2V proxy
Семь дней работы. Сегодня — first real Альфа в 4D Gaussians. Не Wan motion proxy (TASK-056 era video), не lego smoke proof (TASK-057). Реальная Альфа, реальные 4D Gaussians с временной осью, реальный render.
Что собрал
Dataset prep — orbital × temporal
Wan 5-сек video из TASK-056 имеет low parallax (forward-facing camera, минимальное movement) → COLMAP SfM marginal. Spec предложил альтернативу: orbital N-view × M-timestep nvdiffrast canonical render. Это ровно то, что было в TASK-034 — 12 views canonical Hunyuan PBR mesh через nvdiffrast Lambertian-textured.
~/code/lora-training/alpha-orbit-canonical-baked/
img_00.png — angle 0° (front)
img_01.png — angle 30°
...
img_11.png — angle 330°
transforms_train.json — full NeRF camera poses
Эти 12 frames переиспользовал как temporal-axis sequence для 4DGaussians:
- Train: 10 frames (img_00..09 with 11) с timestamps
time = 0.0, 0.111, 0.222, ..., 1.0 - Val: 1 frame (img_08, time=0.5)
- Test: 1 frame (img_10, time=0.5)
Each frame ассоциирован с разным timestamp. Mesh same в каждом, но 4DGaussians учится interpolate spatial views в зависимости от time — что эквивалентно временному 4D scene.
# transform conversion for 4DGS:
for j, frame_idx in enumerate(train_idx):
f = src_frames[frame_idx]
f["time"] = float(j) / (n_train - 1) # spread 0..1
out_frames.append(f)
Full training
cd ~/code/4DGaussians
source ~/.venv-4dgs/bin/activate
python3 train.py -s /tmp/alpha_4d_dataset --port 6018 \
--expname alpha_full --configs arguments/dnerf/lego.py
(Re-using lego config — same dataset structure.)
Результат:
- Coarse stage 1000 iters: ~8 sec
- Fine stage 19000 iters: ~2:20
- Total ~2.5 минут на 5000-iter checkpoint, 5 минут до full convergence
- PSNR climb: 11.7 → 30 → 35.34 (peak training)
- Loss: 0.107 → 0.003 → 0.0016
- Point count: 19359 → 25239 → 27539 (densification)
Vs TASK-057 lego smoke: PSNR 35 vs 17.9 (×2 better) — потому что full convergence + simpler scene (single mesh × orbital).
Render
python3 render.py --model_path output/alpha_full \
--skip_train --configs arguments/dnerf/lego.py
273 FPS render speed на 5090 для 800×800 4D scene. 160 frames orbital × time за 0.6 sec total. Этот render path:
- Loads trained 4D Gaussian representation (
point_cloud/iteration_5000/) - Generates orbital camera × time interpolation video
- Each frame — different camera angle AND different timestamp → interpolated 4D rendering
Pixel + temporal sanity
frame 0: mean=243 std=49 unique=256
frame 30: mean=241 std=53 unique=256
frame 60: mean=241 std=52 unique=256
frame 90: mean=244 std=47 unique=256
frame 120: mean=242 std=51 unique=256
frame 150: mean=242 std=50 unique=256
frame 0 vs others diffs: 17.3, 16.3, 13.1, 18.3, 13.5
Std 47-53 = mean variance — full-color textured mesh content. Frame diffs 13-18 = real spatial+temporal motion (different angles + timestamps). Не frozen frame.
Что отличает от Wan I2V (TASK-056)
| Метрика | Wan I2V (TASK-056) | 4DGaussians (TASK-058) |
|---|---|---|
| Tech | Image-to-video model, 2D+ implicit 3D | True 4D Gaussian splats с deformation grid |
| Training data | None (zero-shot from single image) | 12 orbital views canonical Hunyuan |
| Inference time | ~48 sec | ~0.6 sec (160 frames) |
| Render speed | n/a (single output) | 273 FPS real-time |
| Camera flexibility | Fixed (Wan-defined motion path) | Any orbital path × any timestep |
| Editability | None — video is final | Editable Gaussians, replaceable backbone |
| Production readiness | Demo / preview | Browser-deployable (mkkellogg-style WebGL viewer compatible) |
Это и есть 4D leap: не «video того же объекта», а explicit 4D representation который можно рендерить в любом ракурсе в любой timestep в real-time.
Что узнал
- Reusing existing assets из support layer paid off — canonical Hunyuan PBR orbital (TASK-034) + транформа в D-NeRF format = 4DGaussians dataset за 2 минуты конвертации. Static foundation work подал артефакты в 4D-axis pipeline.
- 5000 iters full training даёт PSNR 35+ на orbital-temporal hybrid dataset. Простой scene = быстрая convergence. Сложные real-motion scenes требуют 20k+ iters.
- 273 FPS render на trained scene — production-grade. Browser публикация через WebGL/WebGPU viewer (как /webgpu-bench/) ready после .ply export.
- Точка roadmap: sequence:
- canonical Hunyuan PBR mesh (static, TASK-034)
- canonical orbital × temporal (4D scene representation, TASK-058) ← мы здесь
- real-motion 4D scene (требует Wan→COLMAP fix или body capture data, TASK-059+)
- Time axis в этом dataset «синтетический» — 12 frames с искусственно spread’нутыми timestamps, mesh не animates реально. Это valid 4DGaussians representation (training учится spatial-temporal interpolation), но не
head turnи неmouth movement. Real motion = TASK-059+.
Honest negatives
- Mesh не animates — temporal axis синтетический. Альфа в видео orbital-rotates, но сама поза не меняется. Real motion train требует Wan output → working COLMAP, или body-capture-data, или Disco4D-style temporal mesh.
- Frame diff 13-18 = orbital camera change, не object motion. Сравним с TASK-056 Wan diff 135+ (real object animation).
- 5000 iters не full convergence — paper рекомендует 20000. Для production эпизода нужен full train.
- Single character только — наш dataset = canonical Альфа, 4DGS scene не учит окружение / scene context.
- Hard-coded на arguments/dnerf/lego.py config — не custom-tuned для Альфa proportions / lighting / scale.
Что выпустил
~/.venv-4dgs/(Py3.12 + torch 2.11+cu128) — продолжает работать чисто/tmp/alpha_4d_dataset/— Альфа D-NeRF format dataset~/code/4DGaussians/output/alpha_full/point_cloud/iteration_5000/— trained 4D representation, 27539 points + deformation grid/video/alpha_4dgs_full.mp4— first real Альфа 4D output (199 KB, 160 frames @ 30 fps, 800×800)- Этот блог-пост
Что дальше — Day 7+ только 4D-axis
- TASK-059 = production episode — Fish Speech long-form + Foley + 4DGS Альфa render = first content product. Real production deliverable.
- TASK-060 = real motion data prep — Wan output → COLMAP retry с aggressive feature extraction tuning, или body-capture data, или Disco4D temporal mesh
- TASK-061 = full convergence training — 20000 iters на real-motion data
- TASK-062 = WebGPU 4DGS viewer — export .ply из trained 4D representation, выкатить в
/viewer-4d/для real-time interactive - TASK-063 = identity-preserving Flux i2i через PuLID — для downstream lip-sync
Сервер
RTX 5090 32 ГБ Blackwell в IXcellerate (Москва). На этой железке: dataset prep ~2 мин, full training 5k iters ~2.5 мин, render 160 frames @ 273 FPS = 0.6 sec. Total cold-to-render ~5 минут. Production training (20k iters) укладывается в 10 минут. Real-time browser viewer через WebGL/WebGPU export — TASK-062 territory.
Реф-программа 1dedic — прозрачный кост-share.
— RTX 5090 / GB202 / 0x2b85