프래그먼트 깊이 셰이더의 early-Z 최적화 복원
구글 Chrome 개발자 블로그 발표에 따르면, Chrome 155 및 156 버전의 WebGPU 구현에 새로운 WGSL 언어 확장인 fragment_depth가 추가되었습니다. 기존 WebGPU 파이프라인에서는 개발자가 셰이더 내부에서 @builtin(frag_depth)를 사용해 픽셀 깊이 값을 직접 수정할 경우, 래스터라이저의 고유 깊이와 계산된 깊이의 차이를 하드웨어가 사전에 알 수 없어 early-Z 컬링 기능이 강제로 비활성화되는 구조적 문제가 있었습니다.
이번 업데이트를 통해 개발자는 깊이 비교 모드로 less 또는 greater를 선언문에 직접 지정할 수 있게 되었습니다. 출력 깊이가 보간된 깊이에 비해 어느 방향으로 변하는지 드라이버에 명시함으로써, GPU가 불필요한 프래그먼트 연산을 파이프라인 전단에서 미리 폐기하는 early-Z 최적화를 안전하게 유지할 수 있습니다.
해당 확장을 사용하려면 브라우저 런타임에서 navigator.gpu.wgslLanguageFeatures.has("fragment_depth") 호출을 통해 지원 여부를 먼저 확인해야 하며, 셰이더 코드 최상단에 requires fragment_depth; 지시문을 작성해야 합니다.
비정렬 블록 텍스처 압축 지원과 에셋 파이프라인 단순화
기존 WebGPU 규격은 BC, ETC2, ASTC 등 주요 블록 압축 포맷을 적용할 때 텍스처 해상도가 반드시 4×4 등 고정 블록 단위의 배수로 정렬되도록 요구해 왔습니다. 이로 인해 임의 해상도를 가진 텍스처 에셋을 사용할 때는 모서리에 불필요한 패딩을 채워 넣거나 이미지를 강제로 리사이징해야 하는 작업 부하가 발생했습니다.
새롭게 도입된 texture-compression-unaligned 기능은 이러한 블록 크기 제약을 해제합니다. 개발자는 정렬되지 않은 치수의 압축 텍스처도 원본 해상도와 압축 충실도를 유지한 채 그대로 GPU 메모리에 올릴 수 있습니다. 이 기능은 GPUAdapter.features.has("texture-compression-unaligned") 검사를 거친 뒤 requiredFeatures 목록에 명시하여 활성화할 수 있습니다.
해당 기능은 오픈소스 기여를 통해 W3C 표준 규격 및 CTS(Conformance Test Suite) 테스트 스위트에 공식 통합된 결과물로, 외부 그래픽스 커뮤니티의 기술 제안이 엔진 사양에 직접 반영된 사례입니다.
선형 광색역 캔버스와 고효율 버텍스 포맷의 실무적 의의
WebGPU 캔버스(GPUCanvasContext)에 srgb-linear 및 display-p3-linear 색공간이 사전 정의 형식으로 편입된 점은 물리 기반 렌더링(PBR) 파이프라인 구성에서 상당한 실무적 개선을 제공합니다. 픽셀 값과 물리적 휘도 사이의 선형 관계를 브라우저 디스플레이 계층까지 직접 유지함으로써, 톤매핑 전 단계의 조명 계산이나 안티앨리어싱 과정에서 발생하던 감마 보정 왜곡을 최소화할 수 있습니다.
특히 광색역 및 HDR 모니터를 타깃으로 할 때 rgba16float 버퍼 포맷과 display-p3-linear 색공간을 결합하면 웹 환경에서도 전문 데스크톱 그래픽스 소프트웨어 수준의 색 재현 정밀도를 확보할 수 있게 됩니다.
이와 더불어 새롭게 추가된 정점 포맷 snorm10-10-10-2(VertexFormat::Snorm10_10_10_2)는 32비트 단일 워드 안에 부호 있는 10비트 정규화 정수 3개와 2비트 부가 데이터를 패킹하는 구조를 갖춥니다. 3D 노멀 벡터를 전송하면서 남는 2비트에 플래그나 스칼라 값을 함께 포함할 수 있어, 지오메트리 버퍼의 메모리 대역폭을 절감하고 캐시 효율을 높이는 데 효과적인 도구가 됩니다.
플랫폼별 구현 확장 현황과 백엔드 지원
플랫폼 하부 구현을 담당하는 Dawn 라이브러리의 기능 확장도 함께 진행되었습니다. 리눅스 환경에서는 최신 엔비디아(NVIDIA) 드라이버를 탑재한 장치를 대상으로 WGSL 16비트 부동소수점 연산(shader-f16)이 지원 대상에 편입되어 연산량 집약적인 셰이더의 성능을 개선할 수 있는 기반이 마련되었습니다.
Windows D3D12 백엔드에서는 WGPUAdapterPropertiesD3D 구조체를 통해 어댑터의 고유 식별자인 DXGI LUID 조회가 가능해졌습니다. 이를 통해 다중 GPU 환경에서 운영체제 수준의 장치 식별 및 리소스 관리를 더욱 정밀하게 수행할 수 있습니다.
또한 안드로이드, 리눅스, 윈도우 환경 전반에서 바인드리스(Bindless) 렌더링 프리뷰가 초기 실험 기능 플래그 형태로 제공되기 시작해, 향후 대규모 드로 콜 파이프라인의 오버헤드를 줄이기 위한 기반 작업이 본격화되고 있음을 보여줍니다.
하드웨어 편차 및 실무 도입 시 검토 사항
이번 업데이트가 제공하는 기능들은 웹 3D 렌더링 파이프라인의 효율을 분명히 높여주지만, 프로덕션 환경에 전면 도입하기 전에는 명확한 조건 검토가 필수적입니다. 공식 발표는 fragment_depth 확장을 통해 early-Z 컬링을 유지함으로써 렌더링 오버헤드를 막는다는 기술적 메커니즘을 설명하고 있으나, 특정 씬이나 하드웨어별 실제 프레임레이트(FPS) 개선 수치나 공식 벤치마크는 제시하지 않았습니다. 개발자는 자사 프로젝트의 셰이더 복잡도에 따라 실제 이득을 직접 프로파일링해야 합니다.
또한 리눅스 환경의 shader-f16 지원은 최신 엔비디아 드라이버에 한정되어 있으며, 타사 GPU(AMD, 인텔)나 구형 드라이버 환경에서의 지원 시점은 불명확합니다. 바인드리스 렌더링 역시 아직 실험 단계로 macOS 및 iOS 환경 지원 로드맵이 공개되지 않은 상태입니다.
따라서 개발팀은 새로운 기능 플래그를 필수 요구 조건으로 강제하기보다는 feature detection API를 통해 미지원 환경에 대한 폴백 셰이더와 텍스처 패딩 처리 로직을 병행 유지하는 방어적 아키텍처를 구성해야 합니다.
출처
Chrome for Developers의 원출처와 본문에 표시한 참고자료를 바탕으로 한국어로 재구성했습니다. ‘ARCH.B 분석’은 자료를 읽고 덧붙인 편집 해석입니다.
What's New in WebGPU (Chrome 155-156) (새 창)