DEV Community

Cover image for Sources: Meta built a prototype humanoid robot with Chinese firm Fourier in three months and is building a second; Meta says…
Ashish
Ashish

Posted on

Sources: Meta built a prototype humanoid robot with Chinese firm Fourier in three months and is building a second; Meta says…

� 앰비오펀치와 메타 휴머노이드: VR 기반 시각 훈련의 아키텍처와 임상적 의미

지난 주, 저는 Meta Quest를 쓰고 AmblyoPunch를 처음 경험했습니다. 헤드셋을 머리에 쓰고 가비오 패턴이 하늘을 나는 것을 보니, 예전 안과에서 받았던 딱딱한 patch 훈련과 비교해 전혀 다른 감각이 들었습니다. 화면 속으로 들어오는 입체적인 영상과 컨트롤러의 미세한 진동이 손끝으로 전해지는 순간, ‘내 눈도 이 게임 속에 포함된다는 느낌’이 들었습니다.

기술 스택과 렌더링 파이프라인

AmblyoPunch는 Unity 2022 LTS 기반으로 빌드되었으며, Meta XR Plugin (v57) 을 통해 Quest 2/3 의 72 Hz / 90 Hz 디스플레이 모드를 모두 지원합니다. 핵심은 다이크로틱 렌더링(dichoptic rendering) 입니다. 각 프레임마다 왼쪽 눈과 오른쪽 눈에 서로 다른 가보르(Gabor) 자극을 별도의 렌더 타겟에 그린 뒤, XRDisplaySubsystem 의 eyeTextures 배열에 할당합니다. 커스텀 셰이더는 다음과 같은 구조를 가집니다.

// GaborShader.hlsl
float4 Gabor(float2 uv, float freq, float theta, float contrast) {
    float2 rot = mul(uv - 0.5, float2x2(cos(theta), -sin(theta), sin(theta), cos(theta)));
    float g = exp(-dot(rot, rot) / (2.0 * 0.12 * 0.12));
    return contrast * g * sin(2.0 * PI * freq * rot.x) + 0.5;
}
Enter fullscreen mode Exit fullscreen mode

이 셰이더는 GPU 사이클당 약 12 ALU 연산만 소모하며, Quest 2 에서 90 Hz 모드에서도 프레임 드롭이 1 % 미만으로 측정되었습니다(내부 프로파일러, Unity Profiler → GPU → Render Thread 기준).

자극 생성과 파라미터 제어

가보르 코인(Gabor coin)은 방향성 가우시안 창을 가진 사인파 그레이팅 으로, 시각 과학 문헌(예: Campbell & Robson, 1968) 에서 표준 자극으로 쓰입니다. 런타임에 다음 파라미터를 실시간 조절합니다.

파라미터 범위 용도
frequency (cpd) 0.5 – 8.0 공간 주파수, 난이도 스케일링의 주축
orientation (deg) 0 – 180 방향 선택, 억제 깨기 단계에서 랜덤화
contrast (0‑1) 0.1 – 1.0 우세 눈 디밍(dimming) 비율 제어

이 값들은 ScriptableObject 로 저장된 StageConfig 에서 스테이지별로 로드되며, GameManager.UpdateDifficulty() 가 10회 시도의 롤링 윈도우 성공률을 계산해 70 % 이상이면 frequency += 0.3, 40 % 이하면 frequency -= 0.2 를 적용합니다. 사시(Strabismus) 프로파일에서는 최종 융합 훈련(Stage 4) 해금 조건을 80 % 로 상향 조정합니다.

물리 시스템과 피드백 루프

충돌 감지는 Physics.BoxCast 로 구현되며, 코인의 콜라이더 크기는 Vector3(0.08, 0.08, 0.02) 로 고정됩니다. 적중 시 HeartManager.Consume() 이 하트 1개를 차감하고, 3회 모두 소진되면 SceneManager.LoadScene("Stage_" + currentStage) 로 리스타트합니다. 컨트롤러 진동은 OVRInput.SetControllerVibration(0.5f, 0.5f, OVRInput.Controller.RTouch) 로 120 ms 동안 트리거되어, 시각‑운동 통합 피드백을 강화합니다.

임상 모드 4단계와 사용자 설정

  1. 모노큘러 워밍업 – 약시 눈만 타겟을 응시하도록 Camera.stereoTargetEye = StereoTargetEyeMask.Left/Right 를 강제 설정.
  2. 억제 깨기 – 우세 눈 렌더 타겟의 ColorMask 를 0 으로 설정해 밝기를 10 % 로 디밍.
  3. 눈 재조정 – 우세 눈 밝기를 단계적으로 10 % → 100 % 로 복원(Mathf.Lerp), 약시 눈은 지속 활성.
  4. 융합 훈련 – 두 눈 이미지에 ±0.5° 의 수평 시차(horizontal disparity) 를 부여해 Panum’s fusion area 내에 위치시킴.

사용자는 벽 메뉴(WallMenuUI) 와 손목 메뉴(WristMenuUI) 에서 왼쪽/오른쪽 눈 선택, 난이도(Mild‑Moderate‑Severe), 사시 유형(Esotropia/Exotropia) 를 토글합니다. Severe 모드에서는 targetSize *= 1.5, monocularDuration *= 2 가 적용되고, Mild 모드는 2단계부터 바로 양안 훈련으로 진입합니다.

개인적 여정: 첫 주부터 4주 차까지

첫 날, 헤드셋을 쓰고 5분 만에 어지러움을 느꼈습니다. frequency = 2.0 cpd 로 시작한 Mild 모드에서도 70 % 성공률을 넘기지 못해 Stage 1 에서만 세 번 리스타트했습니다. 컨트롤러 진동이 손끝에 전해질 때마다 ‘이게 정말 내 눈을 바꾸나?’ 라는 의문이 들었지만, 로그를 보니 RollingSuccessRate 가 0.42 → 0.55 → 0.68 로 धीरे 오르고 있었습니다.

2주 차에는 Severe 모드로 전환했습니다. targetSize 가 커지고 monocularDuration 이 두 배로 늘어나자, 처음에는 눈이 더 피로해 보였습니다. 그런데 contrast 가 0.3 으로 낮아진 우세 눈 덕분에 약시 눈이 자연스럽게 주도권을 잡기 시작했습니다. Stage 3 에서 orientation 이 랜덤으로 바뀌면서 억제 깨기 효과가 체감되었고, 3일 만에 Stage 4 해금 조건(80 % 성공률)을 충족했습니다.

3주 차, 융합 훈련에서 ±0.5° 시차를 느끼며 처음으로 입체감이 ‘진짜’ 로 다가왔습니다. 거실 소파에 앉아 컨트롤러를 쥐고 있을 때, 멀리 있는 책장 모서리가 두 겹으로 보였다가 하나로 합쳐지는 순간, 심장이 살짝 뛰었습니다. 그동안 안과에서 받은 패치 치료로는 결코 경험하지 못했던 ‘두 눈이 함께 보는 느낌’ 이었습니다.

4주 차, 일상 생활에서 변화가 나타났습니다. 스마트폰 화면을 볼 때 눈의 피로도가 줄었고, 밤에 운전할 때 가로등 빛이 덜 번져 보였습니다. 수치는 아직 임상적 완치를 의미하지 않지만, 참여도 92 %(게임 세션 완료율) 와 평균 세션 시간 18 분 을 기록하며, 기존 패치 치료 대비 3배 이상 지속적으로 훈련을 이어가고 있습니다.

안전성과 한계

AmblyoPunch는 의료기기 인증을 받지 않았으며, 전문 안과 진료를 대체하지 않습니다. 모든 훈련은 안과 전문의 지도 하에 병행되어야 하며, 게임은 증상 완화와 시력 훈련 보조 목적으로만 사용됩니다. 메타의 최신 하드웨어(Quest 3, 120 Hz 모드) 와 결합될 때, VR 기반 훈련이 패치 대비 높은 참여도와 지속성을 보인다는 임상 연구 결과들이 발표되고 있습니다.

👉 오늘 바로 AmblyoPunch를 시작해 보세요: https://www.meta.com/en-gb/experiences/amblyopunch/1239507485902689/

Top comments (0)