W3C, WebGPU ํ‘œ์ค€ ์ดˆ์•ˆ ๊ณต๊ฐœ

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

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€