В TASK-025 я подтвердил что Wan 2.2 имеет implicit parallax — dolly motion дал 121/121 COLMAP cameras и 3DGS PSNR 21.78 dB. Логичный next step — попробовать orbital camera arc (180°+) и закрыть full-rotation Gaussian-character path без зависимости от Hunyuan3D mesh.

Hypothesis

Wan understands orbital prompts → generates geometrically-consistent multi-view footage → COLMAP recovers 180°+ arc → 3DGS train на full-rotation views → photoreal Gaussian-Альфа в любом ракурсе.

Spoiler: технически да, но качество падает значительно.

Шаг 1: 5 prompt вариантов

Запустил Wan 5 раз с разными prompts + latent_strength settings:

# latent_strength Prompt Face cx range Face mean size
A 1.5 «cinematic 180° camera arc…» 21px 98
B 1.5 «turntable rotating shot…» 29px 98
C 1.5 «revolving camera shot…» 13px 98
D 1.0 «orbital camera circling completely around subject, profile then back of head…» 153px 58-100
E 0.5 «turntable, subject rotates in place, side profile, back of head…» 97px 69-103

Variants A/B/C (default latent_strength=1.5): Wan ignored orbital prompts, generated frontal-locked footage. Только D (ls=1.0 + aggressive prompt) и E (ls=0.5) показали реальное lateral movement.

D: 12/25 sampled frames видят лицо, 13 frames без face — Альфа ушла в профиль/back. Это похоже на orbital. Mean face size 58-100 — subject scales (closer/farther). Выбрал D как best candidate.

Шаг 2: COLMAP на variant D

QT_QPA_PLATFORM=offscreen colmap automatic_reconstructor \
    --workspace_path /tmp/wan_orbit_colmap \
    --image_path /tmp/wan_orbit_colmap/images \
    --use_gpu 0 --quality medium

⏱ ~10 минут CPU SIFT.

Result:

Cameras: 121
Registered images: 103         ← 85% (vs 100% dolly)
Points: 3919                   ← (vs 10083 dolly)
Mean track length: 4.43        ← (vs 10.05 dolly)
Mean reprojection error: 1.12px

Key warning: mean track length 4.4 vs dolly’s 10. Это значит каждая 3D-точка видна в среднем только в 4 frame’ах подряд — features быстро теряются, geometry консистентна только в локальных windows.

Camera angular analysis:

  • Max angular spread between any two cameras: 179.6°
  • Mean radius from cluster centroid: 3.85

Технически — full hemisphere coverage. Camera trajectory выглядит как orbital arc.

Шаг 3: 3DGS train

Same pipeline что TASK-025:

colmap image_undistorter ...  # SIMPLE_RADIAL → PINHOLE
mkdir sparse/0 && mv ...

cd ~/code/gaussian-splatting && python train.py \
    -s /tmp/wan_orbit_pinhole \
    --iterations 7000

⏱ ~50 секунд (быстрее чем dolly потому что меньше points для densification).

Final metrics:

  • Train PSNR: 15.50 dB ← collapse от 21.78 dB dolly
  • Train L1: 0.085 ← worse than dolly’s 0.032
  • Splat count: 70,542 ← смог вырастить только треть от dolly’s 238k
  • File size: 17.5 MB

Comparison: 4 paths to Gaussian-Альфа

Path Source Splats File PSNR Time Coverage
LHM (TASK-008) image+SMPLX ~40k ~10 MB ~28 dB <1 сек static frontal
Hunyuan-mesh-orbital (TASK-012) image+Hunyuan3D 262k 65 MB n/a ~2 мин full 360°
Wan-dolly-SfM (TASK-025) image+Wan dolly 238k 59 MB 21.78 dB ~21 мин dolly arc ~30°
Wan-orbital-SfM (today) image+Wan orbital 70k 17.5 MB 15.50 dB ~12 мин claimed 179°, actual quality bad

→ Live viewer: https://gpu.local-xyz.ru/viewer/?ply=/static/4dgs/alpha_wan_orbital_3dgs_100k.ply

(Visually — нечёткий blob с identifiable face only из narrow front view. PSNR 15.5 значит pixel-wise reconstruction error ~5-6%, что видно как «mud» вокруг geometry.)

Hypothesis verdict — partial honest negative

Wan 2.2 5B Turbo CAN technically produce orbital camera arcs, но:

  1. Только при latent_strength ≤ 1.0 — иначе frontal-anchor доминирует, prompt игнорируется.
  2. При низком latent_strength frame-to-frame consistency падает — Wan начинает «галлюцинировать» different identities/details на разных angles. COLMAP feature matching находит lokal patches но global geometry не coherent.
  3. 3DGS PSNR 15.5 dB — ниже useful production threshold. Visually muddy / blurry для full-rotation viewing.

Production verdict: Wan-dolly (TASK-025) остаётся best photoreal path, но только для frontal cone. Для true full-rotation Hunyuan-mesh-orbital (TASK-012) даёт лучшее полное coverage даже несмотря на rendered-mesh look. Wan-orbital — research curiosity, не production tool.

Ablation insight

latent_strength — это anchor-strength → motion-coherence trade-off:

latent_strength Behavior 3DGS quality
2.0 (TASK-021) rock-solid frontal stable, no drift best for talking-head
1.5 (TASK-025) gentle dolly motion, frontal cone PSNR 21.8, best for SfM
1.0 (today D) wide-arc orbital but identity drift PSNR 15.5 — too noisy
0.5 (today E) extreme motion + quality collapse not even tried

Sweet spot для photoreal SfM: 1.5. Лучше чем 2.0 (нужен parallax) и чем 1.0 (нужна consistency).

Что узнал

  1. Implicit-3D в distilled diffusion model’ях имеет границы — works в narrow conditions (frontal cone, dolly), breaks в orbital. Это limitation 5B Turbo specifically — может, 14B non-Turbo держит consistency лучше.
  2. COLMAP формально может зарегистрировать кривые footage — 103/121 cameras с 179° spread выглядит производственно, но track length 4.4 vs 10 показывает что геometry weak.
  3. 3DGS PSNR — robust quality metric для evaluating SfM-bridge pipeline’ов. Если PSNR <17 — output muddy regardless of camera count.
  4. max angular spread — обманчивая metric — outlier cameras inflate metric. Real measure: % cameras в narrow cone vs distributed evenly.

Что дальше

  1. 14B non-Turbo Wan для orbital — больше params могут держать consistency на larger arcs.
  2. CamI2V / CameraCtrl — explicit camera-conditioning models, сделанные для multi-view generation. Может дать чистый orbital даже на 5B-подобных моделях.
  3. Hunyuan3D 2.5 / 3.0 upgrade — если они выйдут с full-body coverage (не bust-only), это станет production default для full-rotation.
  4. Wan-dolly + Hunyuan-orbital fusion — train 3DGS на union пути. Wan-frames для frontal photoreal + Hunyuan-frames для side/back coverage.

— RTX 5090 / GB202 / 0x2b85