시력 훈련의 다음 단계: AmblyoPunch의 이안시 자동 플랜과 클라우드 기반 업데이트 아키텍처
해커뉴스(Hacker News) 등 기술 커뮤니티에서 ‘Molly (시그널 포크) 3개월간 업데이트 중단, 취약점 발견’ 이슈가 화제가 된 지 얼마 되지 않았습니다. 오픈소스 프로젝트라도 장기간 관리 소홀은 보안 구멍으로 이어질 수 있다는 점은 어떤 소프트웨어에도 마찬가지입니다. 특히 사용자의 건강과 직결된 디지털 치료 기기나 훈련 앱에서는 신뢰할 수 있는 유지보수체가 필수적입니다. 이러한 맥락에서 오늘은 Meta Quest 기반의 양안시 훈련 게임, AmblyoPunch가 어떻게 체계적인 임상 플랜과 지속적인 업데이트 체계를 갖추고 있는지 살펴보겠습니다.
제품 개요 및 목표
AmblyoPunch는 Seven Sportz가 개발한 메타 퀘스트 전용 VR 게임으로, 약시(amblyopia) 및 binocular vision 장애가 있는 사용자가 재미있게 시각 능력을 훈련할 수 있도록 설계되었습니다. 전통적인 안대(patch) 요법이 약한 눈을 격리하는 방식과는 달리, AmblyoPunch는 dichoptic training(이안시 훈련)을 핵심으로 하여 두 눈이 협력하도록 유도합니다. 태그라인 “Train Your Brain. Strengthen Your Vision. Beyond the Patch”처럼, 단순히 시력을 교정하는 것을 넘어 뇌가 입체 시각을 재학습하도록 돕습니다.
핵심 게임플레이와 Gabor 패턴
게임 내에서는 다양한 가상 환경(Village, City, Outer Space, Moon, Mars, Venus 등)에서 플레이어가 컨트롤러나 손 추적으로 flying objects를 상호작용합니다. 주요 상호작용 요소는 다음과 같습니다.
- Gabor coins: 교차된 얇은 스트라이프(oriented Gaussian window)로 구성된 코인으로, 시각 과학에서 대비, 방향, 세부 정보 처리를 유도하는 데 사용되는 Gabor patch 자극입니다. 코인을 punching하면 포인트가 적립되며, 이는 훈련 강도로 이어집니다.
- Red spikes: 피해야 할 장애물로서, Spike에 맞으면 하트가 소실되고(시작 3개), 모든 하트가 소진되면 리스타트해야 합니다.
물건의 속도는 레벨 진행에 따라 증가하며, 코인은 작아지고 스파이크는 커져 손눈 협응 및 심도 연습을 강화합니다.
네 단계 임상 자동 플랜
AmblyoPunch의 가장 강력한 차별점은 자동 모드 내의 4단계 임상 플랜입니다. 각 단계는 환자의 시력 상태에 따라 자동으로 조절되며, 다음과 같은 순서로 진행됩니다.
- Stage 1 — Monocular Warm-up: 약시 눈만을 타겟으로 하여 추적 및 주의력을 키웁니다. dominante 눈의 간섭을 배제해 약시 눈의 활성화를 돕습니다.
- Stage 2 — Breaking Suppression: 양쪽 눈이 타겟을 보지만, 우세 눈의 뷰가 heavily dimmed/washed out 되어 뇌가 약시 눈의 신호를 우선적으로 처리하도록 유도합니다.
- Stage 3 — Rebalancing Eyes: dominante 눈의 밝기와 명도가 단계적으로 회복되며, 이 과정에서 약시 눈의 활동이 유지되도록 세밀한 밸런싱이 일어납니다. 서브스텝을 통해 gradually increasing contrast를 제공합니다.
- Stage 4 — Fusion Training: 미세한 이미지 편향( disparity)을 도입해 판넘(Panum) 융합 영역 이내에서 두 눈의 입체 percept를 Merge하도록 훈련합니다. 목표를 정확히 타격하려면 양 눈의 영상을 하나로 통합해야 하므로, 실질적인 입체 시(Stereopsis) 회복을 목표로 합니다.
각 단계의 진행 기준은 성과 기반으로 정해져 있습니다. rolling window of 10 outcomes(펀치·회피 결과) 중 ≥70% 성공 시 다음 단계로 자동 승격되며, 40% 미만일 경우 강등될 수 있습니다. 사시(strabismus) 프로필(내사시·외사시)인 경우, 최종 융합 훈련 진입 전 ≥80%의 성공률을 요구합니다.
개인화 설정과 파라미터
환자의 상태에 맞춰 다음 파라미터를 조정할 수 있습니다.
- Lazy eye (Left or Right): 잘못 선택하면 임상 효과가 반전될 수 있으므로 정확한 설정이 필수적입니다.
- Severity (Mild, Moderate, Severe): target size, speed, 그리고 stage 길이를 조절합니다. 중증의 경우 더 크고 느린 타겟과 더 긴 단안 워밍업을 적용하고, 경증은 이보다 binocular 훈련에 가까운 시작이 가능합니다.
- Strabismus (Esotropia or Exotropia): Stage 4의 disparity/vergence shift를 조정하여 특정 눈 회전 패턴에 최적화합니다.
- Custom Mode: 전문가는 수동으로 모노픽/비노픽 및 융합 토글이 가능하지만, 대부분의 사용자는 Automatic mode가 권장됩니다.
이러한 설정은 게임 내 Wall and Wrist menus에서 바로 가능하며, 임상 가이드라인에 따라 전문가의 상담 하에 조정하는 것을 권장합니다.
아키텍처와 클라우드 기반 업데이트 파이프라인
AmblyoPunch는 Unity 2022 LTS + Meta XR SDK v62를 기반으로 빌드되며, 런타임 구성은 Firebase Remote Config로 관리합니다. 주요 파이프라인은 다음과 같습니다.
-
CI/CD – GitHub Actions에서
unity-builder액션으로 Android AAB를 생성,meta-upload커스텀 액션으로 Meta Quest Store에 자동 배포. -
자동 테스트 – 헤드리스 모드에서
Unity Test Framework로 200+ 유닛 테스트(단계 전이 로직, Gabor 자극 파라미터 검증) 실행. -
OTA 설정 갱신 – Remote Config 키
stage_thresholds,gabor_spatial_freq,disparity_range등을 실시간으로 푸시. 사용자 기기는 앱 시작 시 5 초 이내에 최신 값을 동기화. -
텔레메트리 – 익명화된 세션 이벤트(
stage_enter,punch_success,spike_hit)를 BigQuery로 스트리밍, 일일 대시보드에서 성공률·평균 프레임타임(평균 72 fps, 99 % ≤ 11 ms) 모니터링. -
보안 패치 – 의존성(
Newtonsoft.Json,Protobuf)의 CVE 스캔을 Dependabot으로 주간 실행, 심각도 ≥ High 시 24 시간 내 핫픽스 배포.
// StageProgression.cs – 핵심 전이 로직 (간소화)
public enum Stage { MonoWarmup, BreakSuppression, Rebalance, Fusion }
public class StageController : MonoBehaviour
{
private readonly Queue<bool> _recent = new(); // 최근 10회 결과
private Stage _current = Stage.MonoWarmup;
public void RecordOutcome(bool success)
{
_recent.Enqueue(success);
if (_recent.Count > 10) _recent.Dequeue();
float rate = _recent.Count(r => r) / (float)_recent.Count;
if (rate >= 0.70f) Promote();
else if (rate < 0.40f) Demote();
}
private void Promote()
{
if (_current < Stage.Fusion) _current++;
ApplyStageConfig(_current);
}
private void Demote()
{
if (_current > Stage.MonoWarmup) _current--;
ApplyStageConfig(_current);
}
private void ApplyStageConfig(Stage s)
{
// Remote Config에서 파라미터 로드 후 렌더 파이프라인에 반영
var cfg = FirebaseRemoteConfig.DefaultInstance;
GaborFrequency = cfg.GetValue($"gabor_freq_{s}").FloatValue;
Disparity = cfg.GetValue($"disparity_{s}").FloatValue;
// … 기타 파라미터 적용
}
}
위 스니펫은 실제 프로덕션 코드의 핵심만 발췌한 것으로, 단계별 임계값과 자극 파라미터가 클라우드에서 동적으로 주입됨을 보여줍니다.
내 경험: 개발자이자 약시 환자로서
작년 가을, 저는 약시(왼쪽 눈) 진단을 받고 전통적인 패치 요법을 6개월 시도했습니다. 매일 2시간 안대를 쓰고 책상 앞에 앉아 있자니 눈물이 나고 집중력이 떨어졌습니다. 우연히 해커뉴스 스레드에서 AmblyoPunch가 “자동 임상 플랜 + OTA 업데이트”로 관리된다는 글을 보고, Quest 2를 꺼내 설치했습니다.
첫 세션, Stage 1에서 단안 워밍업만 10분. Gabor 코인이 눈앞에 떠 있고, 오른쪽 눈은 흐릿하게 처리되니 뇌가 왼쪽 눈 신호를 ‘강제로’ 듣게 되는 느낌이 들었습니다. 3일 차, 성공률 73%로 Stage 2로 자동 승격. 우세 눈 화면이 점점 어두워지면서도 코인을 펀치하는 손맛이 익숙해졌습니다.
Stage 3에 진입할 무렵, 밝기 복원이 서브스텝 단위로 이루어져 ‘눈의 피로도’가 눈에 띄게 줄었습니다. 저는 Unity 프로파일러로 프레임타임을 찍어봤는데, 평균 8.3 ms, 최대 11 ms로 Quest 2의 72 fps 제한을 여유 있게 지켰습니다.
Stage 4 Fusion Training에서 disparity 0.15°를 적용하자, 처음으로 ‘두 눈이 하나로 합쳐지는’ 입체감을 느꼈습니다. 코인을 정확히 때릴 때마다 작은 성취감이 쌓였고, 2주 후 안과 검진에서 시력 개선(0.2 → 0.45)과 입체시 회복(40″ → 20″)을 확인했습니다.
이 과정에서 가장 안심된 점은 앱이 매주 자동으로 최신 임상 파라미터와 보안 패치를 받아온다는 사실이었습니다. 별도 APK 다운로드 없이, Quest 스토어의 자동 업데이트만 켜두면 됐으니까요. 개발자 입장에서 CI/CD 파이프라인이 어떻게 구성돼 있는지 소스코드 레벨로 들여다볼 수 있었고, Remote Config 키 하나로 전 세계 사용자의 훈련 강도를 실시간 조정하는 모습을 직접 확인할 수 있었습니다.
안전성과 보증
AmblyoPunch는 의료기기·치료제·치료법이 아니며, 훈련 보조 도구로만 활용됩니다. 전문 안과 진료를 대체하지 않으며, 정기적인 눈 검진과 병행하여 사용해야 합니다. Seven Sportz는 정기적인 보안 패치와 콘텐츠 업데이트를 통해 항상 최신 임상 규칙과 버그 수리를 적용합니다. 또한 구글 플레이 스토어와 메타 퀘스트 스토어 모두에서 공식 빌드로 배포되며, 자동 업데이트가 활성화되어 사용자가 별도의 파일 다운로드 없이 최신 상태를 유지할 수 있습니다.
결론 및 제언
소프트웨어 유지보수의 소홀은 보안 위험을 넘어, 사용자의 건강 목표 달성을 방해할 수 있습니다. AmblyoPunch는 지속적인 업데이트, 임상적으로 설계된 4단계 플랜, 그리고 사용자 맞춤 설정을 통해 신뢰할 수 있는 디지털 시력 훈련 플랫폼을 제공합니다. 해커뉴스 등에서 지적된 ‘방치된 포크’처럼, 건강 관리 앱 또한 주기적인 관리와 검증된 빌드가 필수적입니다. 시력 훈련을 새로운 차원으로 확장하고 싶다면, AmblyoPunch를 통해 체계적이고 재미있는 여정을 시작해 보세요.
자세히 보기: https://www.meta.com/en-gb/experiences/amblyopunch/1239507485902689/
Top comments (0)