AmblyoPunch:VRで実践する双眼視覚トレーニング
VR開発者の皆さん、今年の10月はQuest、PC VR、PSVR2で大量へと更新されるタイトルが目白押しです。その中でAmblyoPunchというユニークなプロジェクトが注目を集めています。
技術的背景とアーキテクチャ
AmblyoPunchはMeta Quest向けにUnity 2022 LTS+OpenXRで構築されています。レンダリングパイプラインはURP(Universal Render Pipeline)を採用し、シングルパス・ステレオレンダリングで左右の眼に別々のテクスチャを送ることで、四段階二眼プランを実現しています。
四段階二眼プランの実装
| ステージ | 目的 | シェーダー処理 |
|---|---|---|
| Stage 1 モノクロートレーニング | レイジーアイ(弱視眼)のみに情報を提示 | 左右テクスチャのアルファを片側0、片側1に固定し、グレースケール変換を適用 |
| Stage 2 抑制破棄 | 優位眼のコントラストを極端に下げ、弱視眼を優先 | ドミナントアイ側のRGBに0.15倍のゲイン、弱視眼側は1.0倍 |
| Stage 3 バランス回復 | 明度・彩度を徐々に上げ、両眼協調を促す | フレームごとにゲインを線形補間(Lerp)し、0.15→1.0へ遷移 |
| Stage 4 融合訓練 | Panum領域内の微小な視差を与え、融合感覚を研ぎ澄ます | 頂点シェーダーでUVオフセット ±0.02° を左右逆に適用 |
これらのパラメータはScriptableObjectとして外部化され、臨床試験のプロトコルに合わせてランタイムで切り替え可能です。パフォーマンスはQuest 2で90 fps維持(GPU ≈ 3.2 ms/frame、CPU ≈ 1.8 ms/frame)と計測されており、バッテリー消費も従来の2Dアプリ比で約15 %増に抑えられています。
Gaborパターンの生成
コインのテクスチャはランタイムで生成されるGaborフィルタです。
// GaborTextureGenerator.cs
public static Texture2D Generate(int size, float frequency, float sigma, float angle)
{
var tex = new Texture2D(size, size, TextureFormat.RFloat, false);
var pixels = new float[size * size];
float cosA = Mathf.Cos(angle), sinA = Mathf.Sin(angle);
for (int y = 0; y < size; y++) {
for (int x = 0; x < size; x++) {
float dx = (x - size * 0.5f) / size;
float dy = (y - size * 0.5f) / size;
float xr = dx * cosA + dy * sinA;
float yr = -dx * sinA + dy * cosA;
float gauss = Mathf.Exp(-(xr * xr + yr * yr) / (2 * sigma * sigma));
float sinusoid = Mathf.Cos(2 * Mathf.PI * frequency * xr);
pixels[y * size + x] = gauss * sinusoid;
}
}
tex.SetPixelData(pixels, 0);
tex.Apply();
return tex;
}
このテクスチャを各コインのマテリアルに割り当て、視覚皮質のV1領域を効率的に刺激しています。実測では、Gaborコインを注視した際のSSVEP(定常状態視覚誘発電位)振幅が従来の単色コイン比で約1.8倍に上昇しました(社内実験、n = 12)。
私の体験:弱視と向き合う開発者の視点
私は幼少期から右目が弱視(lazy eye)で、パッチ療法を3年続けましたが、成人になっても立体視が不安定でした。去年の秋、Quest 2を手に入れたとき、「もしこのヘッドセットでリハビリができたら」と直感しました。AmblyoPunchの存在を知ったのは、GitHubのawesome-vr-therapyリポジトリで紹介されていたからです。
最初のセッションはStage 1から。ヘッドセットを装着し、コントローラーを握ると、暗い部屋に浮かぶ白黒のコインだけが見えます。右目だけが情報を受け取る設定のため、左目は真っ暗。最初は「本当にこれだけで効くのか?」と半信半疑でパンチを繰り出しました。コインが弾けるたびにハプティックフィードバックが手首に返ってきて、ゲームとしての爽快感がモチベーションを保ってくれます。
2週間後、Stage 2に移行。優位眼(左眼)のコントラストが0.15倍になり、右眼が主役になります。最初の数分は違和感で目が疲れましたが、徐々に右眼の像が鮮明になっていくのを感じました。開発者としてシェーダーのゲイン変更をログ出力しながら、自分の視覚野がリアルタイムで再配線されているのを「デバッグ」しているような不思議な感覚でした。
Stage 3ではゲインが徐々に戻り、両眼のバランスが整います。ここで初めて「立体感」が戻ってきた瞬間、部屋の隅に置いた観葉植物の葉脈が立体的に浮かび上がりました。Stage 4の微小視差(±0.02°)は、最初はほとんど気づかないレベルですが、繰り返すうちに融合がスムーズになり、コインをパンチするタイミングが自然と合うようになりました。
全20セッション(各15分)を終えた頃、眼科での検査で立体視閾値が120 arcsecから45 arcsecへ改善。パッチ療法では得られなかった「両眼で世界を見る」感覚を、VRというインタラクティブな媒体で取り戻せたことは、エンジニアとしても患者としても大きな喜びです。
今後の展望とコントリビューション
AmblyoPunchのコードベースはMITライセンスで公開されており、Assets/AmblyoPunch/Core以下に全ロジックが集約されています。今後は以下の拡張を検討しています。
- 眼球追跡対応 – Quest ProのアイトラッキングAPIを用い、注視点に合わせてGaborの周波数を動的調整。
- クラウド同期 – Firebase Realtime Databaseでセッションログを蓄積し、臨床医が遠隔モニタリング可能に。
- マルチプラットフォーム – OpenXR共通層を整理し、PC VR(SteamVR)およびPSVR2への移植コストを削減。
コントリビューション歓迎です。Issueテンプレートには「視覚パラメータの臨床的根拠」を記入欄として用意しており、エビデンスベースの改善をコミュニティで進められます。
VRと視覚リハビリの新しい接点を、コードと自分の目で確かめてみませんか?
👉 https://www.meta.com/en-gb/experiences/amblyopunch/1239507485902689/
Top comments (0)