2012년, 구글의 지도 서비스인 구글 맵스(Google Maps)는 이미 웹의 필수 서비스로 자리 잡고 있었다. 사용자들은 평면의 2D 지도 위에서 길을 찾고, 위성 사진을 보며, 스트리트 뷰를 통해 거리의 풍경을 탐험했다. 편리했지만, 그 경험은 여전히 ‘사진을 보는 것’에 가까웠다.
하지만 구글 맵스 팀 내부에서는 거대한 변화가 준비되고 있었다. 그들의 목표는 지도를 ‘보는 것’에서 ‘체험하는 것’으로 바꾸는 것이었다. 그리고 그 야심 찬 계획의 중심에는 바로 WebGL이 있었다.
당시 구글 맵스는 2D 타일 이미지를 이어 붙여 보여주는 방식을 사용했다. 사용자가 지도를 확대하거나 이동하면, 브라우저는 서버에 새로운 타일 이미지를 요청하고 받아와서 화면에 그렸다. 이 방식은 효율적이었지만, 진정한 3D 경험을 제공하기에는 근본적인 한계가 있었다.
구글 맵스 팀은 완전히 새로운 접근법을 시도했다.
그들은 전 세계의 위성 사진과 항공 사진 데이터를 단순한 2D 이미지가 아니라, 고도(Elevation) 정보를 포함한 3D 지형 데이터로 재구성했다. 그리고 도시 지역의 모든 건물에 대해서는, 그 형태와 높이를 담은 3D 모델 데이터를 구축했다.
이제 남은 과제는 이 방대한 3D 데이터를 어떻게 브라우저에서 실시간으로 렌더링할 것인가였다. 해답은 명백했다.
구글 맵스 렌더링 엔진의 심장을 WebGL로 교체하는 것.
이것은 엄청난 규모의 프로젝트였다. 수억 명이 사용하는 서비스의 핵심 엔진을 교체하는 것은 달리는 자동차의 바퀴를 가는 것과 같은 위험한 작업이었다.
새로운 구글 맵스의 렌더링 파이프라인은 WebGL의 모든 잠재력을 극한까지 끌어냈다.
- 사용자의 현재 시점에 맞춰, 서버는 필요한 지형과 건물 데이터를 작은 조각(Tile) 단위로 브라우저에 스트리밍한다.
- 브라우저는 이 데이터를 받아 WebGL 버퍼에 채워 넣는다.
- WebGL은 이 데이터를 바탕으로 3D 지형과 건물을 삼각형 메시(Mesh)로 만들어낸다.
- 지형과 건물의 표면에는 고해상도 위성 이미지가 텍스처로 입혀진다.
- 셰이더는 이 모든 것을 실시간으로 렌더링하며, 사용자의 마우스 움직임에 따라 카메라의 각도와 높이를 부드럽게 조절한다.
몇 달간의 개발과 테스트 끝에, 마침내 ‘The New Google Maps’라는 이름으로 베타 버전이 공개되었다.
사용자들이 처음 경험한 변화는 ‘확대/축소’였다. 더 이상 단계별로 이미지가 바뀌는 것이 아니었다. 마우스 휠을 돌리자, 위성 사진 속의 지구가 우주에서 대기권으로, 대기권에서 도시 상공으로, 마치 비행기에서 뛰어내리는 것처럼 끊김 없이 부드럽게 확대되었다.
가장 극적인 변화는 지도 우측 하단의 ‘기울이기(Tilt)’ 버튼을 눌렀을 때 일어났다.
평면이었던 지도가 45도 각도로 기울어지며, 숨겨져 있던 Z축이 모습을 드러냈다. 납작했던 건물들이 입체적인 모습으로 솟아올랐고, 도시는 미니어처 모형처럼 생생한 공간으로 변모했다. 사용자들은 샌프란시스코의 언덕을 느끼고, 뉴욕의 마천루 사이를 날아다니며, 그랜드 캐니언의 웅장한 협곡을 내려다볼 수 있었다.
이전에는 스트리트 뷰를 통해서만 볼 수 있었던 3D의 경험이, 이제 지도 전체로 확장된 것이다.
구글 맵스의 WebGL 도입은 단순한 기능 추가가 아니었다. 그것은 WebGL이 더 이상 개발자들의 실험적인 데모나 일부 마니아를 위한 기술이 아님을 증명하는 결정적인 사건이었다. 전 세계에서 가장 널리 사용되는 웹 서비스 중 하나가 그 핵심 기술로 WebGL을 채택했다는 사실은, WebGL이 이제 웹의 ‘주류’ 기술이 되었음을 알리는 선언과도 같았다.
블라디미르는 자신의 브라우저에서 새롭게 변신한 구글 맵스를 실행해 보았다. 그가 처음 꿈꿨던, 웹이라는 평면의 캔버스 위에 살아 숨 쉬는 3차원 세상을 그리고 싶다는 소망. 구글의 엔지니어들은 그 꿈을 가장 거대하고 현실적인 형태로 구현해내고 있었다. 그는 도시의 스카이라인을 천천히 둘러보며, 자신의 코드가 세상과 연결되는 방식에 대해 깊은 감회에 젖었다.