WGSL 언어 서버 프로젝트가 커뮤니티의 뜨거운 환영을 받으며 시작되었을 무렵, 드미트리는 완전히 새로운 종류의 도전을 마주하게 되었다. 이번에는 웹 개발자가 아닌, 메타(Meta)의 리얼리티 랩(Reality Labs) 소속 연구원들이 그를 찾아온 것이다.
리얼리티 랩은 VR(가상현실)과 AR(증강현실)의 미래를 만드는, 세계 최고의 연구소 중 하나였다. 그들의 리드 그래픽스 연구원인 ‘유리’가 드미트리와의 화상 회의에서 운을 뗐다.
“드미트리, 저희는 지금 웹의 미래가 2D 화면을 넘어, 3차원 공간 그 자체가 될 것이라고 믿습니다. 저희는 이 비전을 ‘메타버스(Metaverse)’라고 부르죠. 그리고 저희는 WebGPU가 그 비전을 실현할 가장 중요한 열쇠라고 생각합니다.”
그는 현재의 VR/AR 헤드셋의 한계를 설명했다.
“현재 대부분의 VR/AR 경험은 사용자가 헤드셋에 직접 설치해야 하는 네이티브 애플리케이션 형태입니다. 이건 마치 20년 전, 웹사이트를 보기 위해 매번 프로그램을 설치해야 했던 시절과 같습니다. 저희는 사용자가 단지 링크 클릭 한 번만으로, 브라우저 안에서 몰입감 높은 가상 세계에 즉시 진입할 수 있는 미래를 만들고 싶습니다.”
이것은 WebXR(Web eXtended Reality)이라는 이름으로 이미 논의되던 개념이었다. 하지만 유리는 훨씬 더 근본적인 기술적 난관을 제기했다.
“문제는 ‘성능’과 ‘지연 시간(Latency)’입니다. VR 렌더링은 극도로 까다롭습니다. 우리는 양쪽 눈에 각각 고해상도의 이미지를, 초당 90프레임 이상으로 꾸준히 렌더링해야 합니다. 단 한 프레임이라도 지연되면, 사용자는 즉시 멀미를 느끼게 되죠. 그런데 WebGPU의 현재 파이프라인은 이런 실시간성에 최적화되어 있지 않습니다.”
그는 구체적인 문제를 지적했다.
“가장 큰 병목은 ‘포즈(Pose) 예측’입니다. 사용자가 머리를 돌리는 순간, 저희는 그 움직임을 즉시 감지하고, 1/1000초 안에 다음 프레임이 렌더링될 시점의 머리 위치와 방향을 예측해야 합니다. 그리고 이 예측된 ‘포즈’ 정보(뷰 행렬)를 GPU에 전달해야 하죠. 하지만 WebGPU에서는 이 모든 과정이 너무 많은 단계를 거칩니다. CPU에서 포즈를 계산하고, 자바스크립트를 통해 버퍼에 쓰고, queue.submit
을 통해 GPU에 전달되기까지의 시간이 너무 깁니다. 이 지연 시간 때문에 화면이 머리의 움직임을 미세하게 따라오지 못하는 ‘잔상 효과(Judder)’가 발생합니다.”
이것은 드미트리가 지금까지 다루어왔던 문제들과는 차원이 다른, 인간의 인지 시스템과 직접적으로 연결된 문제였다.
유리는 대담한 제안을 했다.
“만약… GPU가 직접, 마지막 순간에 포즈를 업데이트할 수 있다면 어떨까요? CPU는 대략적인 뷰 행렬만 미리 보내놓고, 렌더링이 시작되기 직전에, GPU가 하드웨어 센서로부터 최신 포즈 정보를 직접 읽어와 뷰 행렬을 마지막으로 한번 더 보정해주는 겁니다.”
이것은 ‘레이트 스페이스 워핑(Late Space Warping)’ 또는 ‘포즈 리프로젝션(Pose Reprojection)’이라고 불리는, VR 렌더링의 핵심 최적화 기술이었다. 하지만 이것을 웹 표준 API로 구현하는 것은 상상조차 하기 힘든 일이었다.
드미트리는 이 제안이 가진 엄청난 잠재력과 동시에, 그 안에 숨겨진 위험성을 즉시 간파했다.
“GPU가 직접 하드웨어 센서에 접근한다고요? 그건… 브라우저의 모든 보안 모델을 우회하는 일입니다. 엄청난 보안 위험을 감수해야 합니다.”
유리가 반박했다.
“물론 직접 접근은 아닙니다. 브라우저가 안전한 방식으로, 매 프레임마다 최신 포즈 정보만을 담은 특별한 읽기 전용 버퍼를 WebGPU에 제공해주는 겁니다. 셰이더는 이 버퍼를 읽어서 최종 렌더링에 반영하기만 하는 거죠.”
이 논의는 W3C에 ‘WebXR Device API’와 ‘WebGPU’의 연동이라는, 새로운 차원의 안건을 제시했다.
두 개의 다른 워킹 그룹이, 가상과 현실의 교차점이라는 하나의 목표를 위해 만나야 했다.
논의는 쉽지 않았다.
어떻게 포즈 데이터를 안전하고 효율적으로 전달할 것인가?
양쪽 눈을 위한 렌더링(Stereo Rendering)을 어떻게 효율적으로 처리할 것인가? drawInstanced
를 사용해 한 번의 드로우 콜로 양쪽 눈의 이미지를 모두 그리는 ‘멀티뷰(Multiview)’ 렌더링 확장 기능이 필요하다는 아이디어가 나왔다.
렌더링된 결과물의 해상도가 VR 헤드셋의 렌즈 왜곡에 맞춰 보정되어야 하는데, 이 ‘렌즈 왜곡 보정(Lens Distortion Correction)’을 개발자가 직접 해야 하는가, 아니면 브라우저가 알아서 처리해주어야 하는가?
드미트리는 이 거대한 논의의 중심에서, 다시 한번 조율자의 역할을 맡았다.
그는 WebXR 팀과 협력하며, VR/AR의 특수한 요구사항이 WebGPU의 핵심 철학을 해치지 않으면서도, 효율적으로 구현될 수 있는 접점을 찾아 나섰다.
그는 깨달았다.
자신이 만들고 있는 것이 이제 더 이상 2D 화면을 위한 기술이 아니라는 것을.
그것은 인간의 시각과 두뇌를 속이고, 가상의 세계를 현실처럼 느끼게 만드는, 새로운 현실을 창조하는 도구의 기반이 되고 있었다.
그의 코드는 이제, 모니터라는 평면의 감옥을 탈출하여, 사용자의 눈 바로 앞에서 펼쳐지는 무한한 3차원 공간의 법칙을 새로 쓰는, 중대한 전환점을 맞이하고 있었다.