22 lines
3.6 KiB
Markdown
22 lines
3.6 KiB
Markdown
# [[Three.js WebGPURenderer|Three.js WebGPURenderer]]
|
|
|
|
## 📌 Brief Summary
|
|
Three.js WebGPURenderer는 2025년 r171 버전부터 프로덕션 환경에 도입된 그래픽 렌더러로, 브라우저가 3D 그래픽을 처리하는 방식에 근본적인 전환을 가져왔습니다 [1-3]. 복잡한 설정 없이 `three/webgpu`에서 모듈을 불러와 사용할 수 있으며, 브라우저가 WebGPU를 지원하지 않을 경우 자동으로 WebGL 2로 대체(fallback)되는 기능을 제공합니다 [2, 4, 5]. 드로우 콜(Draw call)이 많은 장면이나 컴퓨트 셰이더(Compute Shader)가 필요한 복잡한 효과에서 기존 대비 2~10배 이상의 성능 향상을 가능하게 합니다 [5, 6].
|
|
|
|
## 📖 Core Content
|
|
* **초기화 및 호환성 처리:**
|
|
WebGPURenderer를 사용하기 위해서는 GPU 어댑터 및 디바이스를 요청하는 비동기 초기화(`await renderer.init()`)가 필수적이며, 이를 누락하면 렌더링이 소리 없이 실패합니다 [2, 7]. 모든 주요 브라우저에서 WebGPU를 지원하지 않더라도 자동으로 WebGL 2로 전환하여 호환성을 유지하므로 별도의 코드 패스를 작성할 필요가 없습니다 [4]. 필요에 따라 테스트나 디버깅을 위해 `forceWebGL: true` 옵션을 사용하여 강제로 WebGL 모드로 렌더링할 수도 있습니다 [8].
|
|
* **성능 및 컴퓨트 셰이더(Compute Shader) 활용:**
|
|
이 렌더러의 가장 큰 강점 중 하나는 컴퓨트 셰이더의 지원입니다. 이를 통해 50,000개 수준에서 병목이 생기던 CPU 기반 입자 시스템이나 물리 시뮬레이션을 GPU로 오프로드하여 수백만 단위까지 실시간으로 처리할 수 있습니다 [9-12]. 컴퓨트 연산이 포함된 씬을 렌더링할 때는 GPU 작업의 올바른 동기화를 위해 일반 `render()` 대신 `await renderer.renderAsync(scene, camera)` 함수를 사용해야 합니다 [13].
|
|
* **TSL(Three Shader Language)과의 통합:**
|
|
커스텀 셰이더나 포스트 프로세싱 구현 시 TSL을 사용하는 것이 표준으로 자리 잡았습니다 [4, 14]. TSL로 작성된 코드는 WebGPU용 WGSL과 WebGL용 GLSL 양쪽으로 자동 컴파일되어 코드를 두 번 작성할 필요가 없습니다 [4, 15]. WebGPU 환경의 포스트 프로세싱 역시 기존 `pmndrs/postprocessing` 라이브러리 대신 TSL 노드를 기반으로 한 Three.js의 내장 포스트 프로세싱 파이프라인을 사용합니다 [14].
|
|
* **메모리 및 렌더링 구조 최적화:**
|
|
WebGPURenderer는 렌더 루프 과정에서 불필요한 객체 할당을 제거하여 가비지 컬렉터 부하를 방지하고, 리소스를 바인드 그룹(Bind group)으로 묶어 배치(Batch) 처리하는 구조를 채택하여 성능을 최적화했습니다 [11, 16]. 실제로 3D 데이터 플랫폼인 Segments.ai는 이 렌더러로 마이그레이션하여 수백만 개의 포인트 클라우드를 렌더링할 때 100배의 성능 향상을 거두었습니다 [17, 18].
|
|
|
|
## 🔗 Knowledge Connections
|
|
- **Related Topics:** [[TSL (Three Shader Language)|TSL (Three Shader Language)]], [[Compute Shaders|Compute Shaders]], WebGL 2 fallback
|
|
- **Projects/Contexts:** [[Segments.ai|Segments.ai]], [[Expo 2025 Osaka|Expo 2025 Osaka]]
|
|
- **Contradictions/Notes:** 소스는 WebGPU가 분명한 성능 우위를 제공하지만, 기존의 WebGL 기반 프로젝트가 이미 60fps로 부드럽게 실행되고 있으며 성능 한계에 부딪히지 않았다면 무리해서 시급히 마이그레이션할 필요는 없다고 조언합니다 [9, 19, 20].
|
|
|
|
---
|
|
*Last updated: 2026-04-19* |