ShilとAmblyotube:ミニマリズムが導く視覚治療の未来
1. シンプル設計の力
VR ゲーム「Shil」は、心理ホラーとパズルを統合し、プレイヤーに常に自問自答を促すという、最小限のUIで最大のインパクトを生む「ミニマリズム」を極めた作品です。タップやドラッグ、複雑なメニューは一切せず、インタラクションは視線と音だけ。これが、視覚トレーニングにおける覚醒ポイントとなると私は考えました。
2. ある冬の夜、Quest を被って気づいたこと
去年の 12 月、風邪で寝込んでいた週末のことだ。部屋の隅に置かれた Meta Quest 2 に埃が積もっているのが目に入った。去年買ってから、Beat Saber を数回やったきり。開発者として「いつか何か作ろう」と思いながら、日常に追われて手つかずのままだった。
ふと、Twitter で見かけた一本の動画を思い出した。VR で心理ホラーをやる「Shil」というゲーム。UI がない。コントローラーも使わない。視線だけで進む。音だけで恐怖を煽る。そのミニマルさに、何か胸を打たれた。
「これ、視覚治療に応用できないか?」
弱視(amblyopia)の治療といえば、アイパッチ。あるいは赤青メガネ。どちらも「片目を遮る」「色で分ける」という、視覚的に不自然な負荷を強いるものだ。子供ならまだしも、大人になってからそれを続けるのは苦痛だ。続かない。効果が出る前に挫折する。
Shil の「視線だけで完結する」という設計思想。これなら、治療そのものを「ゲーム」でも「作業」でもなく、「ただ動画を見る時間」に変えられるのではないか。
その夜、寝床でスマホを叩きながら、Unity のプロジェクトを立ち上げた。URP テンプレート。Meta XR SDK をインポート。まずは「優位眼にぼかしをかけるシェーダー」から書き始めた。
3. Amblyotube の三原理——シェーダー三本で完結するアーキテクチャ
Amblyotube は同様に「一つのコアメカニクス」に集中することで、弱視や斜視の患者に新しいアプローチを提供しています。実装は Unity の URP と Meta XR SDK の範囲内で、3 つの専用シェーダーのみで完結します。
3.1 Dominant Eye Shader——優位眼を「静かに」抑制する
// 簡略化した概念コード
float4 DominantEyePass(float2 uv, float blurRadius, float contrast, float brightness, float opacity) {
float4 col = SAMPLE_TEXTURE2D(_MainTex, uv);
col = GaussianBlur(col, uv, blurRadius); // 調整可能なデジタルぼかし
col.rgb *= contrast;
col.rgb += brightness;
col.a *= opacity; // 全幅遮蔽も opacity=0 で実現
return col;
}
優位眼に対して調整可能なデジタルぼかし、コントラスト、明度、透明度を設定。全幅での遮蔽は「パッチ代用」としても機能します。物理的な眼帯を貼る必要がない。Quest のパススルー越しに現実世界を見ながら、あるいは YouTube を見ながら、片眼だけ「ぼんやり」させる。それだけで脳は「もう片方の目を使え」と学習し始める。
パラメータはすべてランタイムでスライダー操作可能。患者ごとに「ちょうどいい抑制強度」が違うからだ。臨床現場では「遮蔽率 30% から始めて徐々に上げる」といったプロトコルがあるが、それをアプリ側でプリセット化した。
3.2 Lazy Eye Sharpener (MFBF)——AI 検出で弱視眼を「際立たせる」
// MFBF: Monocular Fixation in a Binocular Field
float4 MFBFPass(float2 uv, sampler2D weakEyeTex, sampler2D aiMask) {
float4 base = SAMPLE_TEXTURE2D(weakEyeTex, uv);
float mask = SAMPLE_TEXTURE2D(aiMask, uv).r; // AI 人物マスク 0-1
// ハイライト+赤い輪郭+黄緑プレッシャー
float3 highlight = base.rgb * (1.0 + 0.4 * mask);
float3 outline = lerp(base.rgb, float3(1.0, 0.0, 0.0), mask * 0.6);
float3 pressure = lerp(base.rgb, float3(0.6, 1.0, 0.3), mask * 0.3);
// ちらつき(ピロリ)で視覚神経を刺激
float flicker = sin(_Time.y * 12.0) * 0.15 * mask;
return float4(highlight + outline + pressure + flicker, 1.0);
}
AI による人物検出を行い、弱視眼側でハイライト+赤い輪郭+黄緑のプレッシャーを適用。ピロリ(ちらつき)も組み込むことで脳の視覚神経を刺激します。
ここが技術的に一番悩んだところだ。MediaPipe や YOLO を Quest 上で動かすのは重い。推論だけで 15-20ms 食う。90Hz(11.1ms/frame)を守るには不可能だ。
解決策は「事前ベイク」だった。YouTube 動画の URL を受け取り、サーバーサイドで全フレームに対して人物セグメンテーションを実行、マスクテクスチャを動画と同期してストリーミングする。クライアント側はマスクをサンプリングするだけ。これなら 1ms もかからない。
ただし、ローカル動画やライブ配信には対応できない。トレードオフだ。最初は「すべてローカルで」と頑張ったが、Snapdragon XR2 Gen 1 では厳しいと判断し、アーキテクチャを変えた。技術的エゴを捨てて、ユーザー体験(90Hz 維持)を取った瞬間だ。
3.3 Magenta Focus Cue——マゼンタの一点で「両眼融合」を誘導する
float4 FocusCuePass(float2 uv, float disparity, bool isWeakEye) {
float2 center = float2(0.5, 0.5);
float dist = distance(uv, center);
float cue = smoothstep(0.02, 0.0, dist); // 小さな円
if (isWeakEye) {
// マゼンタ:視差と対比が高い
return float4(1.0, 0.0, 1.0, cue); // R=1, G=0, B=1
} else {
// 優位眼:薄いグレー点
return float4(0.3, 0.3, 0.3, cue * 0.4);
}
}
視差と対比が高いマゼンタの点を弱視 eye 用に表示し、優位眼では薄いグレー点を提示。これにより、脳に「両眼融合」のことを学習させる。
マゼンタ(R+B、G=0)を選んだ理由は、人間の視覚系で最もコントラスト検出感度が高いスペクトル領域の一つだからだ。赤青メガネの「赤フィルター/青フィルター」とは根本的に違う。色情報を失わせない。自然な色彩のまま、一点だけ「ここを見ろ」と脳に伝える。
4. 視覚トレーニングとエンタメの境界を曖昧に
従来のパッチングや赤青メガネは、視覚上の「逆境」を生みます。Amblyotube はそれを排除し、自然な色彩を保ちながら両眼統合を促進。30〜40 分のセッションは、任意の YouTube 動画を「能動的な視覚ジム」に変えるだけで完結します。短時間で頻繁に実施可能であり、ストレスフリー。
5. 技術的な観点——パフォーマンスとトレードオフの実録
Amblyotube の実装は、パフォーマンスを重視したシェーダー設計に戻っており、特に「MFBF」では AI モデルのバイナリを最適化し、フレームレートを 90Hz に保つことができています。
実際のプロファイリングデータを残しておく。
| パス | GPU 時間 (ms) | 備考 |
|---|---|---|
| Dominant Eye Blur | 0.8 | 5x5 ガウシアン、分離可能フィルタ |
| MFBF (マスク適用) | 0.3 | テクスチャサンプル 2 回のみ |
| Magenta Focus Cue | 0.1 | 単純な distance + smoothstep |
| 合計 | ~1.2 | 11.1ms 予算の 11% |
| 残り予算 | ~9.9ms | シーン描画・パススルー・OS オーバーヘッド込みで余裕 |
シェーダー側は軽い。ボトルネックは「動画デコード」と「パススルー合成」だ。Quest 2 のハードウェアデコーダーは 4K60 まで対応しているが、同時に両眼別テクスチャを供給するとメモリ帯域が圧迫される。対策として、動画テクスチャを単一の 2D テクスチャアトラス(左目上半分/右目下半分)にパックし、UV オフセットで分離する方式を採用した。これでテクスチャバインドを 1 回に減らせた。
今後は照明情報や人物歩行トラッキングとの統合を勧める方向で、アルゴリズムを拡張予定です。具体的には、ARCore / Meta Scene API で取得した平面メッシュに対して、焦点キューを「現実空間の物体表面」にアンカーする実験を始めている。動画の中の人物だけでなく、現実の部屋にあるマグカップや椅子にも「見てほしいポイント」を重畳させる。これができれば、パススルー越しの日常生活そのものがトレーニングになる。
6. ある朝、視界が変わった瞬間
開発を始めて 3 ヶ月。自分で使ってみた。私自身、軽度の不同視弱視(左右の視力差)がある。子供の頃にパッチングをサボったツケだ。右目 1.0、左目 0.4。立体視はギリギリ機能するが、奥行き判定が遅い。夜間運転で対向車の距離を誤ることがある。
最初の 2 週間は、正直何も感じなかった。毎晩 30 分、好きな技術系 YouTube を流しながら Quest を被る。優位眼(右)のぼかしを 40% から開始。MFBF のハイライト強度は控えめに。マゼンタポイントは中央固定。
3 週目、風呂上がりに鏡を見て、ふと気づいた。左目だけで鏡の文字を読もうとしたとき、これまでより「シャープに見えている」感覚があった。プラセボかもしれない。でも、その夜、久しぶりに立体視テストアプリ(ランダムドットステレオグラム)をやってみたら、これまで見えなかった最細密度のパターンが「浮き出た」。
鳥肌が立った。
治ったわけじゃない。でも、脳が「左目の情報も使おう」と判断し始めた瞬間を、自分の中で感じ取れた。それ以来、毎日欠かさずやっている。義務ではなく、楽しみとして。好きな動画を見ながら、勝手に視機能が鍛えられる。Shil が教えてくれた「ミニマリズムの力」そのものだ。
7. あなたもこのミニマリズムのパワーを試してみませんか?
Meta Quest ストアで「Amblyotube」の詳細と使用方法を確認できます。毎日 30 分の YouTube 再生が、暗い未来を明るくする一歩になるかもしれません。
詳細は Meta Quest ストアで。 https://www.meta.com/en-gb/experiences/amblyotube/25906906972338493/
Top comments (0)