W3C๋ ๋ ๋๋ง ๋ฐ ์ปดํจํ ๊ณผ ๊ฐ์ GPU ์์ ์ ์ํํ๊ธฐ ์ํ API์ GPU์์ ์คํ๋๋ ํ๋ก๊ทธ๋จ ์์ฑ์ ์ํ ์ ฐ์ด๋ ์ธ์ด๋ฅผ ์ ์ํ๋ WebGPU ๋ฐ WGSL(WebGPU Shading Language) ์ฌ์์ ์ฒซ ๋ฒ์งธ ์ด์์ ๋ฐํํ์ต๋๋ค. ๊ฐ๋ ์ ์ผ๋ก Vulkan, Metal ๋ฐ Direct3D 12 API์ ์ ์ฌํ๋ฉฐ ์ฌ์์ Mozilla, Google, Apple ๋ฐ Microsoft์ ์์ง๋์ด๊ฐ ํฌํจ๋ ์์ ๊ทธ๋ฃน์์ ์ค๋น๋์์ต๋๋ค.
๊ฐ๋ ์ ์ผ๋ก WebGPU๋ Vulkan ๊ทธ๋ํฝ API๊ฐ OpenGL๊ณผ ๋ค๋ฅธ ๊ฒ๊ณผ ๊ฑฐ์ ๊ฐ์ ๋ฐฉ์์ผ๋ก WebGL๊ณผ ๋ค๋ฅด์ง๋ง ํน์ ๊ทธ๋ํฝ API๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ์ง ์๊ณ Vulkan, Metal ๋ฐ Metal์์ ๋ฐ๊ฒฌ๋๋ ๊ฒ๊ณผ ๋์ผํ ํ์ ์์ค ๊ธฐ๋ณธ ์์๋ฅผ ์ฌ์ฉํ๋ ๋ฒ์ฉ ๋ ์ด์ด์ ๋๋ค. ๋ค์ด๋ ํธ3D. WebGPU๋ ๊ตฌ์ฑ, GPU์ ๋ํ ๋ช ๋ น ์ฒ๋ฆฌ ๋ฐ ์ ์ก, ๊ด๋ จ ๋ฆฌ์์ค, ๋ฉ๋ชจ๋ฆฌ, ๋ฒํผ, ํ ์ค์ฒ ๊ฐ์ฒด ๋ฐ ์ปดํ์ผ๋ ๊ทธ๋ํฝ ์ ฐ์ด๋ ๊ด๋ฆฌ์ ๋ํ ๋ฎ์ ์์ค์ ์ ์ด ๊ธฐ๋ฅ์ JavaScript ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๊ณตํฉ๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด ์ค๋ฒํค๋ ๋น์ฉ์ ์ค์ด๊ณ GPU ์์ ํจ์จ์ฑ์ ๋์ฌ ๊ทธ๋ํฝ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ๋์ผ ์ ์์ต๋๋ค.
WebGPU๋ฅผ ์ฌ์ฉํ๋ฉด Vulkan, Metal ๋๋ Direct3D์ ์ง์ ์ก์ธ์คํ์ง๋ง ํน์ ํ๋ซํผ์ ์ฐ๊ฒฐ๋์ง ์๋ ๋ ๋ฆฝ ์คํํ ํ๋ก๊ทธ๋จ๋ณด๋ค ๋ ๋์์ง ์๊ฒ ์๋ํ๋ ์น์ฉ ๋ณต์กํ 3D ํ๋ก์ ํธ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. WebGPU๋ ๋ํ WebAssembly๋ก์ ์ปดํ์ผ์ ํตํด ๊ธฐ๋ณธ ๊ทธ๋ํฝ ํ๋ก๊ทธ๋จ์ ์น ์ง์ ํ์์ผ๋ก ํฌํ ํ๊ธฐ ์ํ ์ถ๊ฐ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. WebGPU์๋ 3D ๊ทธ๋ํฝ ์ธ์๋ ๊ณ์ฐ์ GPU๋ก ์คํ๋ก๋ํ๊ณ ์ ฐ์ด๋๋ฅผ ์คํํ๋ ๊ฒ๊ณผ ๊ด๋ จ๋ ๊ธฐ๋ฅ๋ ํฌํจ๋์ด ์์ต๋๋ค.
WebGPU์ ์ฃผ์ ๊ธฐ๋ฅ:
- ๋ณ๋์ ๋ฆฌ์์ค ๊ด๋ฆฌ, ์ค๋น ์์ ๋ฐ GPU์ ๋ํ ๋ช ๋ น ์ ์ก(WebGL์์๋ ํ๋์ ๊ฐ์ฒด๊ฐ ๋ชจ๋ ๊ฒ์ ๋์์ ๋ด๋นํจ) ์ธ ๊ฐ์ง ๋ณ๋์ ์ปจํ ์คํธ๊ฐ ์ ๊ณต๋ฉ๋๋ค. ํ ์ค์ฒ ๋ฐ ๋ฒํผ์ ๊ฐ์ ๋ฆฌ์์ค๋ฅผ ์์ฑํ๊ธฐ ์ํ GPUDevice; ๋ ๋๋ง ๋ฐ ๊ณ์ฐ ๋จ๊ณ๋ฅผ ํฌํจํ์ฌ ๊ฐ๋ณ ๋ช ๋ น์ ์ธ์ฝ๋ฉํ๊ธฐ ์ํ GPUCommandEncoder GPUCommandBuffer๋ฅผ GPU ์คํ ํ์ ์ ๋ฌํฉ๋๋ค. ๊ฒฐ๊ณผ๋ ํ๋ ์ด์์ ์บ๋ฒ์ค ์์์ ์ฐ๊ฒฐ๋ ์์ญ์์ ๋ ๋๋ง๋๊ฑฐ๋ ์ถ๋ ฅ ์์ด ๋ ๋๋ง๋ ์ ์์ต๋๋ค(์: ๊ณ์ฐ ์์ ์ ์คํํ ๋). ๋จ๊ณ๋ฅผ ๋ถ๋ฆฌํ๋ฉด ๋ฆฌ์์ค ์์ฑ ๋ฐ ํ๋ก๋น์ ๋ ์์ ์ ์๋ก ๋ค๋ฅธ ์ค๋ ๋์์ ์คํํ ์ ์๋ ์๋ก ๋ค๋ฅธ ํธ๋ค๋ฌ๋ก ๋ ์ฝ๊ฒ ๋ถ๋ฆฌํ ์ ์์ต๋๋ค.
- ์ํ ์ฒ๋ฆฌ์ ๋ํ ๋ค๋ฅธ ์ ๊ทผ ๋ฐฉ์. WebGPU๋ GPURenderPipeline๊ณผ GPUComputePipeline์ด๋ผ๋ ๋ ๊ฐ์ง ๊ฐ์ฒด๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด๋ฅผ ํตํด ๊ฐ๋ฐ์๊ฐ ๋ฏธ๋ฆฌ ์ ์ํ ๋ค์ํ ์ํ๋ฅผ ๊ฒฐํฉํ ์ ์์ผ๋ฏ๋ก ๋ธ๋ผ์ฐ์ ๊ฐ ์ ฐ์ด๋ ์ฌ์ปดํ์ผ๊ณผ ๊ฐ์ ์ถ๊ฐ ์์ ์ ๋ฆฌ์์ค๋ฅผ ๋ญ๋นํ์ง ์์ ์ ์์ต๋๋ค. ์ง์๋๋ ์ํ์๋ ์ ฐ์ด๋, ์ ์ ๋ฒํผ ๋ฐ ์์ฑ ๋ ์ด์์, ๊ณ ์ ๊ทธ๋ฃน ๋ ์ด์์, ๋ธ๋ ๋ฉ, ๊น์ด ๋ฐ ํจํด, ๋ ๋๋ง ํ ์ถ๋ ฅ ํ์์ด ํฌํจ๋ฉ๋๋ค.
- Vulkan์ ๋ฆฌ์์ค ๊ทธ๋ฃนํ ๋๊ตฌ์ ๋งค์ฐ ์ ์ฌํ ๋ฐ์ธ๋ฉ ๋ชจ๋ธ์ ๋๋ค. ๋ฆฌ์์ค๋ฅผ ๊ทธ๋ฃน์ผ๋ก ๊ทธ๋ฃนํํ๊ธฐ ์ํด WebGPU๋ ๋ช ๋ น ์์ฑ ์ ์ ฐ์ด๋์์ ์ฌ์ฉํ๊ธฐ ์ํด ๋ค๋ฅธ ์ ์ฌํ ๊ฐ์ฒด์ ์ฐ๊ฒฐํ ์ ์๋ GPUBindGroup ๊ฐ์ฒด๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด๋ฌํ ๊ทธ๋ฃน์ ์์ฑํ๋ฉด ๋๋ผ์ด๋ฒ๊ฐ ํ์ํ ์ค๋น ์์ ์ ๋ฏธ๋ฆฌ ์ํํ ์ ์๊ณ ๋ธ๋ผ์ฐ์ ๊ฐ ๊ทธ๋ฆฌ๊ธฐ ํธ์ถ ๊ฐ์ ๋ฆฌ์์ค ๋ฐ์ธ๋ฉ์ ํจ์ฌ ๋น ๋ฅด๊ฒ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ๋ฆฌ์์ค ๋ฐ์ธ๋ฉ์ ๋ ์ด์์์ GPUBindGroupLayout ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ๋ฏธ๋ฆฌ ์ ์ํ ์ ์์ต๋๋ค.
์ถ์ฒ : opennet.ru