msplat (rayanht/msplat) は Apple Silicon native 3DGS の direct baseline であり、本実装 Phase I との比較の前提として M4 Max で実測した。<strong>Lego 30K iter で 3 分 40 秒 / 検証 PSNR 35.48 dB / 208k splats</strong> を達成、本実装 Phase H (12500 iter, 11m48s, 36.26 dB) に対し <strong>wallclock 3.2× 高速</strong>かつ <strong>PSNR は -0.78 dB</strong>。chair 7K iter は 17.58s / 33.81 dB。<strong>ただし materials は 7K で PSNR 8.80 dB / splats 367 と densification が壊れた</strong> — msplat は scene robustness が本実装より弱い決定的証拠。msplat の Pareto vector は『速さ + 中-高品質』、本実装の Pareto vector は『+0.5-1 dB の品質 + 全 scene robust + scene-adaptive iter』で対立。Pareto plot は <code>docs/strategy/msplat-vs-otake-pareto.png</code>。卒論 §5 (実験) の direct baseline として確定。
msplat (rayanht/msplat) v1.1.3 を M4 Max で実測した結果、速度では明確に劣勢 (Lego 30K で msplat 3.2× 高速)、PSNR では本実装が +0.5-21 dB の幅で勝つ、materials は msplat の densify が壊れて本実装が決定的優位。Pareto vector が明確に直交し、A (Reframing narrative) の killer figure が完成。
msplat = 速さ vector (Lego 30K で 3m40s / 35.48 dB)、本実装 Phase I = 品質 + robustness vector (8 scene 中 5 scene で PSNR 35+、materials も robust)。msplat の materials 7K で PSNR 8.80 dB / splats 367 は densification 壊れた決定的失敗で、本実装の materials 12500 = 29.97 dB / 8s splat 268k と +21 dB の差。これは A (Reframing narrative) の核 evidence: 「本実装は kernel-level 速さでは msplat に負けるが、scene-adaptive な品質追求と全 scene robustness で勝つ」。B (G.2 backport) は NO-GO 維持 — msplat は CHANGELOG v1.1.3 で『Fused SH backward into Adam』『Fused SSIM』『Pre-allocated per-tile bins』を既に実装済、本実装が追いつく実装コストは大、第 2 回 ultracode adversarial verify の refuted 結論と整合。E (msplat 著者接触) は materials 破綻を issue 報告する道筋が PR チャンスとして有効。Pareto plot: docs/strategy/msplat-vs-otake-pareto.png。
| scene | iter | wallclock | 検証 PSNR | SSIM | splats | 備考 |
|---|---|---|---|---|---|---|
| Lego | 7,000 | 20.6s | 31.56 | 0.9622 | 63,929 | 標準動作 |
| **Lego** | **30,000** | **219.8s (3m40s)** | **35.48** | **0.9832** | **208,215** | **標準動作、本 spike の主要数値** |
| chair | 7,000 | 17.58s | 33.81 | 0.9761 | 38,220 | 標準動作 |
| **materials** | **7,000** | **11.61s** | **8.80** | **0.7795** | **367** | **❌ densification 壊れた、msplat の bug** |
| scene | 本実装 Phase I (iter) | 本実装 wallclock | 本実装 PSNR | msplat (iter) | msplat wallclock | msplat PSNR | Δ PSNR (本実装 - msplat) |
|---|---|---|---|---|---|---|---|
| **Lego** | 12,500 | 11m48s | **36.26** | 30,000 | **3m40s** | 35.48 | **+0.78 ✓** |
| chair | 12,500 | 18m35s | **35.88** | 7,000 | 17.58s | 33.81 | **+2.07 ✓** (iter 数違い) |
| **materials** | 12,500 | 10m59s | **29.97** | 7,000 | 11.61s | 8.80 | **+21.17 ✓✓ (msplat 破綻)** |
| ficus | 30,000 | 21m40s | 34.28 | N/A | N/A | N/A | 未計測 (msplat 30K は Lego/chair のみ) |
| drums | 30,000 | 1h05m | 27.22 | N/A | N/A | N/A | 同上 |
| hotdog | 30,000 | 28m17s | 37.37 | N/A | N/A | N/A | 同上 |
| mic | 30,000 | 33m29s | 36.62 | N/A | N/A | N/A | 同上 |
| ship | 30,000 | 39m46s | 30.88 | N/A | N/A | N/A | 同上 |
| **mean (Lego/chair/materials)** | - | **13m47s** | **34.04** | - | **16m** | **26.03** | **+8.01 dB / wallclock 0.86× (msplat やや速い)** |
| 最適化 / 機能 | msplat v1.1.3 | 本実装 | 本実装の優位性 |
|---|---|---|---|
| Fused SH backward into Adam | ✅ (CHANGELOG v1.1.3) | ❌ | msplat 優位 — 600 MB/iter readback 削減 |
| Fused SSIM (V-fwd + H-bwd) | ✅ (CHANGELOG v1.1.3) | ❌ | msplat 優位 — 130 MB/iter buffer 削減 |
| Pre-allocated per-tile bins | ✅ (CHANGELOG v1.1.3) | ❌ | msplat 優位 — `prefix_sort_pack` 19→10% |
| Tile-local bitonic sort | ✅ | ❌ | msplat 優位 |
| GPU-resident densify | ✅ | ✅ (Phase 5 M-3.x) | 互角 |
| Per-stage GPU profiling | ✅ (PROFILE_STAGES) | ✅ (SPLAT_TIMING) | 互角 |
| **scene-adaptive iter budget** | ❌ | ✅ **(Phase I の核)** | **本実装優位** |
| **opacity decay (緩やか減衰)** | ❌ (opacity reset のみ) | ✅ **(Phase D の核)** | **本実装優位** |
| **SH degree 段階上昇** | ❌ | ✅ **(Phase G.3 の核)** | **本実装優位** |
| **brush convention 整合性** | △ (white_bg のみ) | ✅ **(Phase A+B+F)** | **本実装優位 — 評価条件 explicit** |
| **materials scene robust** | ❌ (8.80 dB / 367 splats) | ✅ (29.97 dB / 268k) | **本実装決定的優位 ★** |
| **multi-cam Adam invariance 実証** | ❌ | ✅ (H.A regression) | **本実装優位 (reproducibility)** |
| **MCMC noise calibration lesson** | ❌ | ✅ (Phase 5 mcmc-3-defects) | **本実装優位 (methodological)** |
| **wgpu cross-vendor** | ❌ (Metal only) | ✅ (Rust+wgpu+Metal) | **本実装優位 — CUDA path も可能** |
| ICB (Indirect Command Buffer) | 未確認 | ❌ | 両者未実装 (G.2 backport 候補) |
| Argument buffer (bindless) | 未確認 | ❌ | 両者未実装 |
| fp16 forward | 未確認 | ❌ (Phase F.2 falsified) | 両者効果薄 |
| unified memory zero-copy loss path | 未確認 | ✅ (Phase 5 M-3.x) | 本実装優位の可能性 |
| stage | msplat Lego 7K (median ms/iter, n=21000) | msplat Lego 30K (median ms/iter, n=36500) | 備考 |
|---|---|---|---|
| proj_sh_fwd | 0.564 | 9.868 | SH 計算 + projection、splat 数で大きく変動 |
| prefix_sort_pack | 6.786 | 20.250 | msplat の bitonic sort、本実装の radix sort と比較対象 |
| rast_fwd | 11.345 | 45.094 | ラスタライズ forward |
| loss_fwd | 18.788 | 20.660 | L1+SSIM forward (Fused SSIM の恩恵) |
| loss_bwd | 23.177 | 24.229 | L1+SSIM backward |
| rast_bwd | 25.087 | 92.446 | **ラスタライズ backward — 本実装も同じく dominant stage** |
| proj_sh_bwd_adam | 2.017 | 47.802 | **Fused SH backward + Adam (msplat の独自最適化)** |
| grad_stats | 0.189 | 1.182 | gradient 統計収集 |
| **TOTAL** | **87.955ms** | **261.531ms** | msplat per-iter 時間、本実装 Phase D は 82 ms/iter 相当 |
docs/strategy/msplat-vs-otake-pareto.png)。docs/strategy/msplat-vs-otake-pareto.pngdocs/strategy/make_msplat_pareto.py/tmp/msplat-spike/results-7k.json + /tmp/msplat-spike/bench-30k.logdocs/strategy/2026-06-25-next-steps-deep-dive-v2.mddocs/findings/p1-axis1-phase-i-scene-adaptivedocs/findings/p1-d-multi-scene-rechaindocs/findings/p1-axis1-phase-h-lego-pareto-sweephttps://github.com/rayanht/msplathttps://raw.githubusercontent.com/rayanht/msplat/main/CHANGELOG.md