WebGPU가 데이터 동기화와 같은 저수준 문제들을 해결하며 내실을 다지는 동안, 웹의 상위 계층에서는 전혀 다른 종류의 혁명이 조용히 준비되고 있었다. 이번에는 그래픽스 엔지니어들이 아닌, 웹의 ‘표현’을 책임지는 CSS 워킹 그룹이 그 중심에 있었다.
그들의 오랜 숙원은, 자바스크립트의 개입 없이, CSS만으로 웹 요소에 풍부하고 동적인 효과를 적용하는 것이었다. 그들은 그 꿈을 ‘후디니(Houdini)’라는 이름의 프로젝트로 구체화하고 있었다.
후디니 프로젝트의 핵심 중 하나는 ‘페인트 워크릿(Paint Worklet)’이었다.
페인트 워크릿은 개발자가 직접, 특정 DOM 요소가 화면에 그려지는 방식(Paint)을 자바스크립트 코드로 정의할 수 있게 해주는 기술이었다. 개발자는 더 이상 브라우저가 제공하는 background-color
나 border-radius
같은 제한된 속성에 얽매일 필요가 없었다.
하지만 페인트 워크릿에도 한계는 있었다. 그 안에서 사용할 수 있는 그래픽 API는 2D 캔버스(Canvas 2D)뿐이었다. 복잡한 3D 효과나 고성능 그래픽 연산을 수행하는 것은 불가능했다.
바로 그 지점에서, CSS 워킹 그룹과 WebGPU 워킹 그룹의 운명적인 만남이 이루어졌다.
CSS 워킹 그룹의 한 리더가 드미트리에게 연락을 취해왔다.
“드미트리, 저희는 지금 웹 디자인의 미래를 바꾸려 하고 있습니다. 만약… 페인트 워크릿 안에서 WebGPU를 직접 사용할 수 있다면, 상상도 못 할 일들이 가능해질 겁니다.”
그의 제안은 대담했다.
웹 페이지의 모든 버튼, 모든 입력창, 모든 div 태그가, 자신만의 작은 3D 렌더링 엔진을 가질 수 있게 된다는 의미였다.
예를 들어, 개발자는 CSS 코드 단 몇 줄만으로 이런 일을 할 수 있게 된다.
.my-button {
background-image: paint(webgpu-shader, /* WGSL 코드 */);
}
my-button
클래스를 가진 모든 버튼의 배경이, 이제 정적인 이미지가 아니라, 실시간으로 렌더링되는 WebGPU 셰이더의 결과물이 되는 것이다. 버튼 위로 마우스를 올리면, 배경에서 물결이 일렁이거나, 빛의 입자들이 춤을 추는 동적인 효과를 쉽게 구현할 수 있었다.
이것은 웹 디자인과 그래픽 프로그래밍의 경계를 완전히 허무는 시도였다.
하지만 기술적인 난관은 거대했다.
드미트리가 문제를 제기했다.
“페인트 워크릿은 렌더링의 가장 민감한 단계에서, 메인 스레드와 독립적으로 동작합니다. 만약 수백 개의 버튼이 각자 자신만의 GPUDevice
를 생성하고 파이프라인을 컴파일한다면, 브라우저는 순식간에 마비될 겁니다. 자원 관리 모델을 근본적으로 다시 설계해야 합니다.”
두 워킹 그룹은 이 문제를 해결하기 위해 머리를 맞댔다.
긴 논의 끝에, 그들은 ‘공유 리소스 모델(Shared Resource Model)’이라는 해법을 찾아냈다.
하나의 웹 페이지는 단 하나의 GPUDevice
만을 가진다.
모든 페인트 워크릿은 이 공유된 디바이스를 함께 사용한다.
파이프라인이나 셰이더와 같이, 여러 요소에서 재사용될 수 있는 자원들은 한 번만 생성되어 캐시에 저장된다.
각 페인트 워크릿은 렌더링 시점에, 이 공유된 자원들을 가져와 자신만의 그리기 명령(Command Buffer)을 생성하여 제출하기만 하면 된다.
이 모델은 자원의 중복 생성을 막고, 시스템의 부하를 최소화하면서도, 개발자에게는 놀라운 수준의 표현력을 제공해주었다.
Dawn 팀과 크롬 렌더링 팀(Blink)의 엔지니어들은 이 새로운 아키텍처를 구현하기 위한 공동 프로젝트에 착수했다.
그들은 이제 브라우저의 가장 깊은 두 개의 엔진, 즉 렌더링 엔진(Blink)과 그래픽 엔진(Dawn)을 하나의 파이프라인으로 엮는, 전례 없는 수준의 통합 작업을 진행해야 했다.
몇 달 후, 크롬 카나리 버전에 이 기능의 첫 번째 프로토타입이 탑재되었다.
한 웹 디자이너는 이 기능을 이용해, 스크롤 위치에 따라 표면의 재질이 실시간으로 변하는, 살아있는 듯한 배경을 만들어냈다.
다른 개발자는 CSS만으로, 텍스트의 각 글자 주변에 사실적인 그림자와 네온 효과를 주는 셰이더를 구현했다.
자바스크립트 코드 한 줄 없이, 오직 CSS와 WGSL만으로 이루어진 창조물들이었다.
드미트리는 이 결과물들을 보며, 자신이 시작했던 여정의 의미를 다시 한번 생각했다.
그는 단지 개발자들을 위한 고성능 API를 만든 것이 아니었다.
그는 디자이너와 아티스트들이, 자신들의 상상력을 코드의 제약 없이 마음껏 펼칠 수 있는, 새로운 종류의 ‘디지털 캔버스’를 세상에 선물한 것이었다.
WebGPU는 이제 그래픽 프로그래머들만의 전유물이 아니었다.
그것은 웹을 구성하는 가장 기본적인 요소, CSS의 심장부로 흘러 들어가, 웹의 미학 자체를 근본적으로 바꾸는, 조용하지만 가장 강력한 혁명의 동력이 되어가고 있었다.