リアルタイム動画アップスケーリング アーキテクチャ
UpscalePlayerは、iOSデバイス上でMetal GPUを活用したリアルタイム動画アップスケーリングを実現するアプリケーションです。低解像度の動画を高品質に拡大しながら、60fpsでスムーズに再生します。
動画 → GPU処理 → 画面表示
動画デコード・再生制御
GPUフレーム処理
アルゴリズム選択・統括
Apple標準のMetal Performance Shadersを使用。ハードウェア最適化済みで最も高速。
| クラス | 用途 |
|---|---|
| MPSImageBilinearScale | バイリニア補間(最速) |
| MPSImageLanczosScale | ランチョス補間(高品質) |
| MPSImageGaussianBlur | ノイズ除去 |
| MPSImageConvolution | シャープニング |
独自のMetal Compute Shaderによる高度な処理。
| シェーダー | 説明 |
|---|---|
| bicubicUpscale | 4x4ピクセル領域のキュービック補間 |
| lanczosUpscale | 6x6ピクセル、sinc関数ベース |
| edgeAwareUpscale | Sobelエッジ検出+適応補間 |
| sharpenTexture | アンシャープマスク |
アニメ映像に特化した画質改善フィルター群。
| フィルター | 効果 |
|---|---|
| animeLineDarken | 線画を検出して強調 |
| animeLineThin | 線画を細くシャープに |
| animeBilateralDenoise | エッジ保持デノイズ |
| animeColorBoost | フラット領域の彩度強調 |
Core Image + CIFilterによる高度な画像処理。将来的にはESRGAN等のMLモデルを統合可能。
フィルターは以下の順序で適用されます(左から右へ):
CVMetalTextureCacheCreateTextureFromImageを使用したゼロコピー変換。CPU/GPU間のメモリコピーを回避し、高速処理を実現。
フィルターが全てOFFの場合、GPU処理をスキップしてソーステクスチャを直接使用。不要な処理を回避。
選択されたアルゴリズム(Bilinear/Bicubic/Lanczos/AI)でテクスチャを拡大。
Metal Compute Shaderで各フィルターを順次適用。GPUの並列処理能力を活用。
MTKViewのdrawableにテクスチャをコピーし、present()で表示。
フィルター不要時は処理をスキップ。CPU/GPU両方の負荷を削減。
CVMetalTextureCacheによるゼロコピー変換。メモリコピーを排除。
サイズ変更時のみ新規作成。毎フレームの割り当てを回避。
waitUntilCompleted()を削除。CPU/GPUが並列動作。
| カテゴリ | 技術 | 用途 |
|---|---|---|
| UI | SwiftUI, UIKit | ユーザーインターフェース |
| 動画デコード | AVFoundation | AVPlayer, AVAsset による動画読み込み・デコード |
| GPU処理 | Metal, MetalKit, MPS | リアルタイム画像処理・アップスケーリング |
| 画像処理 | Core Image, Core Video | フィルター・ピクセルバッファ管理 |
| 機械学習 | Core ML | 将来のAI超解像モデル統合用 |
| フレーム同期 | CADisplayLink | 60Hz画面リフレッシュ同期 |
4×4ピクセルの領域から、3次多項式による重み付きサンプリングを行います。
特徴: バイリニアより滑らか、ランチョスより高速
Lanczos-3アルゴリズムは6×6ピクセル領域から、sinc関数による重み付きサンプリング。最高品質。
特徴: 最高品質、エッジが鮮明、処理負荷高
アニメ映像に特化した4段階の処理パイプライン
周囲より暗いピクセルを検出し、さらに暗くすることで線画を強調します。
エッジを保持しながらノイズを除去。アニメの平坦な領域を綺麗に。
線画ピクセルを明るい方向にシフトして細くします。
フラットな領域の彩度を上げて、アニメらしい鮮やかさを実現。
Equirectangular(正距円筒図法)からPerspective(透視投影)への変換
| モード | 説明 |
|---|---|
| VR360 | 全天球(360°×180°)マッピング |
| VR180 | 半球(180°×180°)マッピング |
| SBS (Side-by-Side) | 左右分割ステレオ |
| TaB (Top-and-Bottom) | 上下分割ステレオ |
| アルゴリズム | 速度 | 品質 | エッジ保持 | 推奨用途 |
|---|---|---|---|---|
| Bilinear | リアルタイムプレビュー | |||
| Bicubic | バランス型、汎用 | |||
| Lanczos | 高品質、写真・実写 | |||
| EdgeAware | 文字、UI、グラフィック | |||
| Anime4K | アニメ専用 | |||
| MLSR (AI) | 最高品質、静止画 |
16.67ms / frame
1080p動画処理時
フィルター有効時
最先端のAI超解像モデルをCore MLとして統合。4K→8Kの超高解像度化に対応。
High Dynamic Range動画のサポート。Wide Color Gamut (P3/Rec.2020) に対応。
| 方式 | 品質 | 速度 | 推奨機種 |
|---|---|---|---|
| Optical Flow | 中 | ⚡⚡⚡ | iPhone 13以降 |
| RIFE (AI/ML) | 高 | ⚡⚡ | iPhone 14 Pro以降 |
| DAIN (深度対応) | 最高 | ⚡ | iPhone 15 Pro以降 |
ジャイロセンサーによるVR視点制御。ピンチジェスチャーでFOV調整。
Core VideoとMetalの橋渡し。ゼロコピーでピクセルバッファをGPUテクスチャに変換。
GPUでの汎用計算。Compute Shaderをコンパイル・実行するパイプライン。
画面リフレッシュレート(60Hz/120Hz)に同期したタイマー。
AVPlayerから各フレームをCVPixelBufferとして取得。Metal互換フォーマット指定可能。
ボタンをクリックして処理フローを確認
アップスケーリング処理を有効にするには、「フィルター有効」をONにする必要があります。
💡 フィルター効果が不要でもアップスケーリングだけ使いたい場合は、フィルターをONにしてプリセットを「Soft」に設定すると効果が控えめになります。
マスタースイッチ - これをONにしないとアップスケーリングが動作しません。
| プリセット | 線強調 | 線細化 | ノイズ除去 | 色彩強調 |
|---|---|---|---|---|
| Standard | 50% | 40% | 50% | 30% |
| Soft | 30% | 20% | 70% | 20% |
| Sharp | 70% | 60% | 30% | 40% |
| Strong | 90% | 80% | 20% | 60% |
アニメの輪郭線を検出し、より暗く(濃く)します。
太い線を細くしてシャープな印象に。高解像度向け。
エッジを保持しながら平坦部分のノイズを除去(Bilateral Filter)。
アニメの平坦な塗り部分の彩度を上げて鮮やかに。
動画の種類と求める品質に応じて選択してください。
| アルゴリズム | 処理方式 | 特徴 | 推奨用途 | GPU負荷 |
|---|---|---|---|---|
| Bilinear | 2×2ピクセル補間 | 最速、ぼやける | バッテリー節約時 | |
| Bicubic | 4×4ピクセル補間 | バランス型 | 一般的な動画 | |
| Lanczos | 6×6 Sinc関数補間 | 高品質、シャープ | 実写、写真 | |
| MPS | Metal Performance Shaders | Apple最適化 | 汎用 | |
| Anime4K | Lanczos + Animeフィルター | アニメ特化 | アニメ、イラスト | |
| MLSR (AI) | Core ML 機械学習 | 最高品質 | 静止画、スローモーション | |
| Adaptive | 自動選択 | スケール率で切替 | 様々な解像度 |
これらの設定はフィルターOFFでも適用されます(独立した処理)。
映像全体の明るさを調整。暗いシーンを見やすくしたり、眩しさを軽減。
明暗の差を調整。高くするとメリハリが出る、低くすると柔らかい印象に。
色の鮮やかさを調整。0でモノクロ、高くすると色が濃くなる。
エッジを強調してくっきりした印象に。アップスケール後に適用すると効果的。
追加の画質向上オプション。これらはUpscalingEngine経由で処理されます。
アップスケール後にエッジ強調を適用。ぼやけを軽減。
圧縮ノイズやグレインを除去。古い動画や低ビットレート動画向け。
斜め線やエッジのギザギザ(ジャギー)を滑らかに。
これらの後処理オプションは設定UIに存在しますが、UpscalingSettingsに保存されます。
実際の処理への反映はupscalingEngine.settings経由で行われ、フィルターがONの場合にのみアップスケール処理と一緒に適用されます。
| 設定カテゴリ | 設定項目 | フィルターOFF時 | フィルターON時 |
|---|---|---|---|
| アップスケーリング | アルゴリズム選択 | ❌ 適用されない | ✅ 適用される |
| Animeフィルター | ❌ 適用されない | ✅ 適用される | |
| 画質調整 | 明度 (Brightness) | ✅ 独立して適用 | ✅ 適用される |
| コントラスト | ✅ 独立して適用 | ✅ 適用される | |
| 彩度 (Saturation) | ✅ 独立して適用 | ✅ 適用される | |
| Vibrance | ✅ 独立して適用 | ✅ 適用される | |
| 後処理 | シャープネス有効 | ⚠️ 設定のみ保存 | ✅ 適用される |
| ノイズ除去有効 | ⚠️ 設定のみ保存 | ✅ 適用される | |
| アンチエイリアス | ⚠️ 設定のみ保存 | ✅ 適用される | |
| エフェクト | Film Grain | ✅ 独立して適用 | ✅ 適用される |