DEV Community

Ashish
Ashish

Posted on

Verstappen wins sprint after Russell crashes out

視覚OSをQuestでリビルドする——フェルスタッペンの0.3秒と、私の4年間の弱視との対話

あの夜、シンガポールの街灯がぼやけて見えた

2024年9月。シンガポールGPスプリントをリビングで観ていた。ラッセルがトップを走行中、ターン10でリアが流れ、ウォールにヒット。黄旗、セーフティカー、そしてフェルスタッペンが冷静にトップでチェッカーを受けた。

解説者が「信じられない反応速度だ」と言った瞬間、私の胸の奥で何かがひっくり返った。

あの0.3秒。ライバルのクラッシュを認識し、ラインを変え、ブレーキポイントを修正し、タイヤ温度を維持しながらコーナーを抜ける。そのすべてを支えているのは、両目が正しく連携し、立体視・動体視力・周辺視野をフル並列で処理できていることだ。

私は生まれつき左目が弱視(アンブリオピア)だ。子供の頃、眼科で「アイパッチを1日2時間貼りなさい」と言われ、幼稚園の昼寝時間にこっそり剥がして怒られた記憶がある。大学生になってコンタクトレンズで矯正視力は1.0まで出るようになった。でも「見えている」のと「使えている」は違った。

「見えているのに使えていない」というバグ

階段を降りるとき、最後の一段で足が宙ぶらりになる。キャッチボールでボールが手元で大きく見えてから慌ててグローブを閉じる。駐車場で車庫入れのとき、バックモニターの距離感と実感覚がズレて、何度も前後進を繰り返す。

眼科医に相談しても「矯正視力は出てますよ」「両眼視機能検査? まあ、問題ない範囲です」で終わる。でも違うんだ。自分の視覚OSに、微妙だが確実なフレームドロップがある。片目ずつは60fpsで動いているのに、合成出力が30fpsに落ちているような——そんな感覚。

従来のアイパッチ療法は「弱視眼の単眼視力を上げる」単機能パッチだ。V1皮質の眼優位性カラムを弱視眼寄りにシフトさせる。だが実世界のタスクは両眼融像(fusion)と立体視(stereopsis)を前提とする。片目ずつ60fpsでも、合成時にフレームドロップが起きれば意味がない。

VRというサンドボックスで、視覚ランタイムを書き換える

そんなとき、開発者コミュニティで『AmblyoPunch』の話を目にした。Seven SportzというスタジオがMeta Quest向けにリリースした、ビジョントレーニングゲームだ。

最初は「またゲーミフィケーションか」とスルーしようとした。だが技術仕様を読んで、手が止まった。

Gaborパッチ刺激。空間周波数・コントラスト・配向をパラメトリックに制御し、V1単純細胞・複雑細胞を選択的に駆動する。視覚科学の教科書そのものだ。

4段階の異眼視パイプライン。これ、実装視点で見ると見事なカリキュラム学習だ:

# 概念的なステージ遷移ロジック(実装はUnity/C#)
class DichopticCurriculum:
    def __init__(self, profile: UserProfile):
        self.stage = 1
        self.window = RollingWindow(10)  # 直近10試行

    def evaluate(self, success: bool):
        self.window.push(success)
        rate = self.window.success_rate()

        if self.stage < 4 and rate >= 0.70:
            self.stage += 1
        elif rate < 0.40:
            self.stage = max(1, self.stage - 1)
        # 斜視プロファイルはstage 4進入に0.80要求
Enter fullscreen mode Exit fullscreen mode

Stage 1: 単眼ウォームアップ

弱視眼のみにGaborコインを提示。優位眼はブラックアウト。これは「弱視眼モードへの強制コンテキストスイッチ」だ。抑制スコトマを物理的にバイパスし、V1の眼優位性カラムをリセットする。

Stage 2: 抑制打破

両眼提示だが、優位眼側のレンダーターゲットをアルファブレンドで大幅減光(推定10-20%透過)。両眼視野は維持しつつ、弱視眼信号の相対ゲインを上げる。「見えているのに使えていない」抑制を、レンダリングパイプラインレベルで解除する発想が秀逸だ。

Stage 3: リバランシング

優位眼透過率を段階的に100%へ復帰。弱視眼が主導権を握った状態で両眼バランスを再校正する。ここで可塑性の臨界期間を模した適応的スケジューリングが働く——重症度設定(Mild/Moderate/Severe)でステージ長とターゲットサイズ・速度をスケーリングしている。

Stage 4: 融像トレーニング

Panumの融像領域(約±15分角)内で意図的な微小視差を注入。左右画像をわずかにシフトさせ、プレイヤーが「一つのコイン」として知覚しパンチできるかで、皮質レベルの融像機能をリアルタイム評価する。内斜視/外斜視プロファイルでは水平vergance要求を動的オフセット。80%ゲートで最終ステージへ。

私がQuestを被って、最初の1週間で起きたこと

初日。村ステージ(Stage 1)。左目だけに現れるGaborコインをパンチする。右目は真っ暗。違和感しかない。でも3分もすると、左目だけで「コインの向き(縦縞・横縞・斜め)」がわかるようになっている。Gaborの配向選択性が、使われていなかった神経回路を起こしている感覚。

3日目。Stage 2に進んだ。右目が薄暗く、左目がクリア。最初は「二重に見える」——脳が二つの像を統合できていない証拠だ。でもコインをパンチし続けていると、ふと「あ、一つに見える」瞬間がある。Panum領域内で融像が成立した瞬間だ。ハートが減らない回数が増える。

1週間後。Stage 3の中盤。両目ともほぼ等しい明るさ。コインが小さく、速くなっている。でもパンチできる。スパイクを避けられる。ワールドが村→都市→宇宙と進む。スコアが伸びるたびに、自分の視覚OSのフレームレートが上がっている気がする。

現実世界で「フレームドロップ」が減った瞬間

ある雨の夜、駅の階段を降りていた。最後の一段で、足が自然に着地した。宙ぶらりにならなかった。ボールを投げられたとき、グローブが自然に閉じた。駐車場で、一発で車庫入れが決まった。

劇的な変化ではない。でも確実に、自分の視覚ランタイムの合成パイプラインが最適化された。左右のフレームを受け取り、視差を計算し、単一の立体シーンとしてレンダリングする——その処理が、ドロップフレームなしで60fps出せるようになった。

フェルスタッペンの0.3秒にはまだ遠い。でも、自分の視覚OSを自分でデバッグし、パッチを当て、リビルドできる——その事実の方が、私には価値がある。

医療機器ではない。治療でもない。眼科医の指導のもとで使う、視覚協調トレーニングのゲーム化だ。だがGabor空間周波数設計、異眼視コントラスト操作、Panum領域活用の4ステージ構成は、視覚科学のエビデンスをVRランタイムにそのまま移植した稀有な実装だ。

あなたの視覚OSにも、見えないフレームドロップがあるかもしれない。Questを被って、コードでパッチの先へ踏み出してみないか。

https://www.meta.com/en-gb/experiences/amblyopunch/1239507485902689/

Top comments (0)