WebGL 2.0, 더 높은 곳을 향하여.

452025년 08월 25일4

WebGL 1.0이 웹의 표준으로 완벽하게 자리 잡았을 무렵, 기술의 최전선에 있던 개발자들은 서서히 새로운 갈증을 느끼기 시작했다. WebGL 1.0은 혁명적이었지만, 그 기반이 된 것은 2007년에 발표된 OpenGL ES 2.0이었다. 5년이 넘는 시간 동안 GPU 하드웨어는 눈부시게 발전해 있었고, WebGL 1.0의 기능은 어느덧 ‘오래된’ 기술처럼 느껴지기 시작했다.

  • “수만 개의 오브젝트를 한 번의 그리기 호출(Draw Call)로 처리하고 싶은데, gl.drawArrays는 너무 비효율적입니다.”
  • “텍스처로 사용할 수 있는 데이터 포맷이 너무 제한적이에요. 3D 텍스처나 정수형 텍스처도 지원해 주세요.”
  • “셰이더 안에서 할 수 있는 일이 더 많아졌으면 좋겠습니다. 조건문이나 루프를 더 자유롭게 쓰고 싶어요.”

이러한 요구들은 다시 크로노스 그룹의 WebGL 워킹 그룹으로 모여들었다. 2012년부터 이미 물밑에서 논의되던 차세대 WebGL, 즉 WebGL 2.0 프로젝트가 마침내 공식적으로 수면 위로 떠올랐다.

그들의 목표는 명확했다. WebGL 1.0의 성공적인 모델을 유지하되, 더 현대적인 그래픽스 기술을 웹으로 가져오는 것.
이번에도 그들은 기반이 될 기술을 선택해야 했다. 그리고 그 답은 이미 정해져 있었다. 바로 OpenGL ES 3.0이었다.

OpenGL ES 3.0은 2.0의 완벽한 상위 호환(Backward-compatible)이었다. 기존의 모든 ES 2.0 코드는 ES 3.0 환경에서 그대로 동작했다. 이 특성은 WebGL 2.0의 가장 중요한 설계 원칙이 되었다. 즉, 모든 WebGL 1.0 코드는 WebGL 2.0 컨텍스트에서도 수정 없이 동작해야 한다.

이 원칙 아래, 워킹 그룹은 OpenGL ES 3.0의 수많은 신기능들 중에서 어떤 것을 WebGL 2.0에 포함시킬지 논의하기 시작했다.

가장 먼저 추가된 핵심 기능 중 하나는 ‘인스턴스드 렌더링(Instanced Rendering)’이었다.
gl.drawArraysInstancedgl.drawElementsInstanced 라는 새로운 API가 도입되었다. 이 기능을 사용하면, 똑같은 3D 모델(예: 나무 한 그루)을 수천, 수만 번 그릴 때, 그리기 호출을 한 번만 하면서 각각의 나무에 다른 위치, 다른 크기, 다른 색상을 적용할 수 있었다. 숲이나 군중을 렌더링하는 데 필요한 성능을 획기적으로 개선할 수 있는 기술이었다.

‘다중 렌더 타겟(Multiple Render Targets, MRT)’ 기능도 추가되었다.
이전에는 프래그먼트 셰이더가 단 하나의 프레임버퍼에만 색상을 출력할 수 있었다. 하지만 MRT를 통해, 한 번의 렌더링 패스에서 물체의 색상, 표면 법선 벡터, 깊이 값 등 여러 종류의 정보를 동시에 여러 개의 텍스처에 렌더링할 수 있게 되었다. 이는 ‘디퍼드 렌더링(Deferred Rendering)’과 같은 고급 렌더링 기법을 구현하는 데 필수적인 기능이었다.

셰이더 언어인 GLSL도 버전 3.00 ES로 업그레이드되었다. 새로운 버전의 GLSL은 문법이 더 명확해지고, 더 많은 내장 함수와 더 나은 제어 흐름(루프, 조건문)을 제공하여 개발자들이 훨씬 더 정교하고 복잡한 셰이더를 작성할 수 있게 해주었다.

이 외에도 3D 텍스처, 텍스처 배열, 정수형 셰이더 attribute, 변환 피드백(Transform Feedback) 등 수많은 고급 기능들이 WebGL 2.0의 명세서에 포함되었다.

WebGL 1.0을 만들 때와 마찬가지로, 이 모든 기능은 웹 환경에 맞게 보안 검증과 API 재설계 과정을 거쳤다. 하지만 이번에는 상황이 조금 달랐다. 1.0을 통해 이미 한 번 겪었던 과정이었기에, 워킹 그룹은 훨씬 더 성숙하고 효율적으로 표준화 작업을 진행할 수 있었다.

WebGL 2.0은 1.0을 대체하는 것이 아니었다. 그것은 1.0이라는 단단한 기반 위에 쌓아 올리는 증축 공사와 같았다. 개발자들은 자신의 프로젝트에 필요한 기능 수준에 따라 1.0 컨텍스트를 사용할지, 2.0 컨텍스트를 사용할지 선택할 수 있게 될 터였다.

WebGL의 여정은 멈추지 않았다. 하드웨어의 발전과 개발자들의 요구에 발맞춰, 웹 그래픽스의 한계를 더 높은 곳으로 밀어 올리기 위한 또 다른 도전이 시작되고 있었다. 혁신은 끝이 아니라, 계속 이어지는 과정임을 WebGL 2.0 프로젝트가 증명하고 있었다.