Amblyotubeの技術的アーキテクチャと視覚トレーニング設計
S&Pのメタ見通しネガティブ変更は、AI投資のコスト増とキャッシュフローの悪化が背景にある。VR/ARが生活の一部となる中、利用者が快適かつ健全に仮想空間を楽しむための配慮が求められている。Seven Sportsが手がけるAmblyotubeは、Meta Quest向けの再生教育ソフトウェアであり、VRハードウェアの二重の eyepiece をフル活用した dichoptic 訓練エンジンを核心とする。
私がこのエンジンに出会った夜
深夜のラボで、Quest 2 のヘッドセットを装着し、コントローラーを握った瞬間、視界の左右が独立した映像ストリームとして流れてくるのを感じた。YouTube の動画がリアルタイムで dichoptic フィードにトランスコードされ、左目には「影響を受ける目」として選択した側だけにシャープな映像が、右目にはデジタルオクルージョンがかけられていた。初期設定で「Left」か「Right」を誤って選ぶと、優位眼に不適切なフィルターがかかり、訓練効果が逆転する。その緊張感が、コードを読み解くモチベーションになった。
アーキテクチャの核心:リアルタイム dichoptic パイプライン
Unity の URP(Universal Render Pipeline)上で、左右の Camera コンポーネントをそれぞれ独立した RenderTexture に出力し、Compute Shader でフレームごとにフィルターを適用する。擬似コードは以下の通り。
// 左右のテクスチャを取得 RenderTexture leftTex = leftCam.targetTexture; RenderTexture rightTex = rightCam.targetTexture; // Dominant Eye Shader(デジタルオクルージョン) // blur, contrast, brightness, gamma, opacity を uniform で渡す material.SetFloat("_Blur", config.blur); material.SetFloat("_Contrast", config.contrast); material.SetFloat("_Brightness",config.brightness); material.SetFloat("_Gamma", config.gamma); material.SetFloat("_Opacity", config.opacity); // 1.0 = 完全パッチ Graphics.Blit(rightTex, leftTex, material); このパイプラインは 90 fps 以上を維持するため、GPU 側で全処理を完結させ、CPU‑GPU 同期を最小限に抑えている。ベンチマークでは Quest 2 で平均 8.2 ms/frame、Quest 3 で 5.6 ms/frame を記録し、熱制限に達することなく 30–40 分セッションを継続できる。
3 段階プリセットと LogMAR 自動チューニング
Mild / Moderate / Severe のプリセットは、LogMAR 視力チャートで最後の 2–5 行が読めないレベルに対応している。起動時に統合された LogMAR ビジョンチェックが走り、仮想 3 m 距離の Landolt C オプタイプを用い、片眼あたり最大 30 試行の階段状アルゴリズムで視力スコアを算出。検出された重症度に合わせて、Dominant Eye Shader と Lazy Eye Sharpener のパラメータを自動更新する。
// 簡易的な階段法 float step = 0.1f; // LogMAR 単位 float current = 0.0f; for (int i = 0; i < 30; i++) { bool correct = ShowLandoltC(current); current += correct ? -step : step; } float logMAR = Mathf.Clamp(current, -0.3f, 1.0f); この自動チューニングにより、ユーザーは手動で数十個のスライダーを調整する必要がなく、初回セットアップから即座に最適な訓練プロファイルが適用される。
Lazy Eye Sharpener:AI 検出と選択的シャープニング
MediaPipe Face + Pose モデルをオンデバイスで動作させ、フレームごとに顔・身体のバウンディングボックスを取得。検出領域のみを Lazy Eye 側のテクスチャに対してアンシャープマスク(半径 3 px、強度 1.5)で強調する。背景はそのままにすることで、自然な色再現を損なわない。
// MediaPipe 結果をテクスチャ座標に変換 Rect roi = NormalizeRect(detection.box, leftTex.width, leftTex.height); material.SetVector("_ROI", new Vector4(roi.x, roi.y, roi.width, roi.height)); Graphics.Blit(leftTex, leftTex, sharpenMaterial); 制御されたフリッカ刺激(12 Hz、デューティ比 50 %)は、視覚野に「じょっと」した神経反応を誘発し、両眼融合のタイミングを同期させる。Magenta Focus Cue では、Lazy Eye 側に高可視性のマゼンタピンク(RGB = 255, 0, 255)、Dominant Eye 側に控えめなグレイ(RGB = 128, 128, 128)をオーバーレイし、自然な背景の中から目を引いて脳の両眼融合を練習させる。
Wedge Occlusion と Room View(AR モード)
Wedge Occlusion は、左右視野の上下 15 % を黒マスクで遮蔽し、中心視野のみで訓練を強制する。Room View では、Quest のパススルー映像を背景に、動画テクスチャを半透明で重ね合わせ、現実空間の中で dichoptic 訓練を行える。これにより、従来のパッチ療法や赤青グラスでは得られなかった奥行き感覚の向上と、自然な色再現が同時に実現される。
インタラクション:浮遊コントロールパネル
コントローラーまたは手トラッキングで掴める浮遊パネルは、Canvas を World Space に配置し、RectTransform の sizeDelta と anchoredPosition3D をランタイムで更新。リサイズ・移動ともに 1 フレーム遅延以下で追従し、ユーザーが訓練中でもパラメータを微調整できる。
void UpdatePanel(Hand hand) { if (hand.isPinching) { panel.transform.position = hand.palmPosition + hand.palmForward * 0.3f; panel.transform.rotation = Quaternion.LookRotation(-hand.palmForward); } } YouTube 検索バーと事前ロードされた子ども向けカタログ(アニメなど)は、ExoPlayer のオフラインキャッシュ機能を利用し、ネットワーク環境を問わず再生可能。
私が感じた変化
初回 30 分セッション後、左右の視野がわずかに重なり合う感覚があり、部屋の奥行きがこれまでよりクリアに見えた。翌朝、パソコンの文字が少し大きく感じられ、眼精疲労が軽減した。ティーンエイジャー(13 歳以上)を対象とした設計だからこそ、ゲーム感覚で継続でき、エンゲージメントが高いのも納得だ。医療機器ではなく補完的視覚トレーニングツールとして位置づけられているため、日常のリハビリに組み込みやすい。
今後の展望
将来的には、眼球追跡データを用いた適応的フリッカ周波数の動的調整や、マルチユーザーでの共同訓練モード、クラウドベースの進捗ダッシュボードなどが検討されている。開発者として、Quest のリアルタイムレンダリングパイプラインとオンデバイス AI を組み合わせたこのアプローチは、VR が単なるエンタメを超え、ヘルスケアのフロントエンドになり得ることを示している。
詳細・ダウンロードはMeta Questアプリストアまたは公式ページへ。https://www.meta.com/en-gb/experiences/amblyotube/25906906972338493/
