DEV Community

Ashish
Ashish

Posted on

SpaceX just delivered some very strange cargo to the International Space Station

弱視(lazy eye)向けVRトレーニングにおける「左右独立提示」の実装メモ

きっかけ:宇宙で人工網膜を作るというニュース

SpaceXがISSへ届けた貨物に、宇宙で人工網膜を作るための技術が含まれていた——というニュースを読みました。視覚の研究が微小重力環境にまで広がっているのは素直に面白い。地上の実験室では重力が邪魔をする細胞の自己組織化を、軌道上で観察しようという発想自体が、視覚というテーマの射程の広さを感じさせます。

ただ、研究が臨床に届くまでのタイムラインは長い。研究室の成果がランダム化比較試験を経て標準治療になるまでには、数年から十年単位の時間がかかります。そこで今回は、その待ち時間のあいだにXRアプリ側で「今日できること」の実装論点を整理します。題材は弱視(lazy eye)向けのVRトレーニングです。

背景:ダイコプティック刺激とは

弱視の古典的介入は遮蔽(パッチ)。優位眼を物理的に隠し、弱い目を働かせます。ただしこれは両眼の統合そのものを練習する設計ではありません。片目を覆っているあいだ、脳は両眼の像を統合する処理を一度「使わない」わけです。

ダイコプティック(両眼視)アプローチは、左右の目に別々の刺激を提示し、優位眼を意図的に弱めながら、両目が協力して1つの知覚を作る状態へ導きます。パッチが「弱い目を鍛える」のに対し、こちらは「両眼の協調そのものを再学習させる」という違いがあります。

実装の3つの論点

1. 提示の分離

左右のディスプレイに独立した映像を描画できることが前提。片目にのみターゲットを出す、片方のレイヤーを減光・低コントラスト化する、といった制御が必要です。

// 概念的な擬似コード
if (stage === 1) {
  renderTargetOnlyTo(amblyopicEye);
}
if (stage === 2) {
  dimLayer(dominantEye, 0.7); // 抑制解除
}
if (stage === 4) {
  applyDisparity(bothEyes, withinPanumArea);
}
Enter fullscreen mode Exit fullscreen mode

ここで最初にぶつかるのが、ステレオレンダリングのパイプラインをどう組むかという問題です。UnityであればXRSettingsのeye textureを、UnrealであればIStereoRenderingの実装を触ることになります。左右のカメラを個別に制御する以上、片目だけレイヤーを非表示にする・コントラストを下げるといった操作は、シェーダー側のuniformで切り替えるのが素直な設計です。フレームごとに左右で異なる描画パラメータを渡すため、CPU側のロジックとGPU側のステートを分離しておかないと、後からステージ遷移の条件を差し替えるときに辛くなります。

2. 融合制御

最終段階では、左右の像にわずかな視差(disparity)と輻輳(vergence)のオフセットを与え、Panumの融合領域内に収めます。ここを外すと二重像になり、トレーニングにならず負荷だけが増えます。Panumの融合領域は中心窩付近で狭く、周辺視野ほど広がるため、対象オブジェクトが視野のどこに置かれるかで許容できる視差量が変わります。画面中央に固定するのか、周辺を動かすのかで、パラメータのチューニング方針は変わってきます。

3. 進行のゲート

パフォーマンス指標でステージ遷移を制御します。AmblyoPunchの例では、直近10回の結果で70%以上、斜視プロファイルでは最終融合の前に80%以上が目安とされています。閾値の設計は、厳しすぎると離脱を招き、緩すぎると効果が薄まるというトレードオフになります。ローリングウィンドウで直近N回を見る方式は、単純な累積スコアより急な上達と急な不調の両方に反応しやすいという利点があります。

AmblyoPunchの構成

Meta Quest用の「AmblyoPunch」は、この設計をゲームとしてまとめた例です。

  • Gaborパターンのコインをパンチ、赤いスパイクを回避、ハート3つ
  • 進行:村→都市→宇宙→月→火星→金星。オブジェクトは高速化・小型化、スパイクは拡大
  • 自動モード4段階:片目ウォームアップ → 抑制解除 → 再バランス → 融合トレーニング
  • 設定:弱視の左右、重症度(軽度/中等度/重度)、斜視タイプ(内斜視/外斜視)。左右設定の誤りは効果を逆転させるため、初期設定に確認UIを挟むべき
  • カスタムモード:単眼/両眼/融合の手動トグル(上級者向け)

Gaborパッチをゲームオブジェクトにしたのは、視覚科学の文脈では定番の選択です。特定の空間周波数と方位に選択的な刺激は、コントラスト感度のトレーニングと相性がよく、パンチという単純な操作に落とし込むことで、認知負荷をゲームの操作ではなく視覚処理そのものに集中させられます。

気をつけること

  • セッションは短時間から。疲労・VR酔いを考慮した休憩設計を
  • 状態の永続化:左右の目、重症度、斜視タイプはセッション間で保持する
  • 表現の一貫性:本作は医療機器ではない。ストア説明、UI、マーケティング文言を「トレーニング/支援ゲーム」で統一する

状態の永続化は地味ですが、ダイコプティック系のアプリでは効いてきます。左右の目の設定を毎回入れ直すのはユーザー体験として悪いだけでなく、誤設定のリスクを毎セッションに持ち込むことになります。ローカルに保存するにせよアカウントに紐付けるにせよ、初回設定を正とし、変更時には確認を挟むのが無難です。

リンク

AmblyoPunch (Meta Quest): https://www.meta.com/en-gb/experiences/amblyopunch/1239507485902689/

※本記事は医療アドバイスではありません。本作は医療機器・治療・治癒ではなく、眼科専門家の指導を補完するものです。

Top comments (0)