web-graphic.md
๐ก์น ๊ทธ๋ํฝ์ด๋? (WebGL, OpenGL, WebGPU)
| ๋ชฉํ | ์น ๊ทธ๋ํฝ์ ๋ํด์ ๊ฐ๋จํ ์์๋ณด์. | | -------- | ------------------------------------------------ | | ํ์ต๋ด์ฉ | ์น ๊ทธ๋ํฝ ๊ธฐ๋ณธ ๊ฐ๋ , WebGL๊ณผ OpenGL, WebGPU ์๊ฐ | | ๋์ด๋ | ๐ฅ |
๐ ๋ ํผ๋ฐ์ค
- ๋ธ๋ผ์ฐ์ ์ ํ๋์จ์ด ๊ฐ์: https://learn.microsoft.com/en-us/troubleshoot/developer/browsers/core-features/gpu-hardware-acceleration
- WebGL ์ข์ ๋ฌธ์ ๐: https://webglfundamentals.org/webgl/lessons/ko/
https://github.com/gfxfundamentals/webgl-fundamentals- 100์ด ๋ง์ WebGL ์์๋ณด๊ธฐ: https://www.youtube.com/watch?v=f-9LEoYYvE4
- OpenGL: https://registry.khronos.org/OpenGL-Refpages/es2.0/xhtml/
- WebGPU: https://www.youtube.com/watch?v=m6T-Mq1BPXg
https://developer.chrome.com/blog/webgpu-release/ > https://developer.mozilla.org/en-US/docs/Web/API/WebGPU_API- WebGL & WebGPU ๊ด๋ จ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- spline https://spline.design/
- Three.js https://threejs.org/
- Babylon.js https://www.babylonjs.com/
- (ML) Tensorflow https://www.tensorflow.org/js?hl=ko
1. ์น ๊ทธ๋ํฝ์ ๋ํด์ ๐ผ
์น ๊ทธ๋ํฝ์ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ์์ ์น ๋ธ๋ผ์ฐ์ ์ ์ํด ๋ ๋๋ง๋ฉ๋๋ค. ์น ๋ธ๋ผ์ฐ์ ๋ ์น ํ์ด์ง์ ๊ทธ๋ํฝ ์์(์ด๋ฏธ์ง, ๋์์, ์ ๋๋ฉ์ด์ ๋ฑ)์ ํ๋ฉด์ ๋๋๋งํ๊ธฐ ์ํด GPU์ ์ฌ์ฉํฉ๋๋ค.
ํ๋์จ์ด ๊ฐ์ Hardware Acceleration ์ด๋?
https://learn.microsoft.com/en-us/troubleshoot/developer/browsers/core-features/gpu-hardware-acceleration
ํ๋์จ์ด ๊ฐ์์ ๊ทธ๋ํฝ๊ณผ ํ ์คํธ ๋๋๋ง์ CPU์์ GPU๋ก ์คํ๋ก๋ํ์ฌ ์ฒ๋ฆฌํ๋ ๊ธฐ๋ฅ์ ๋๋ค. ์ด๋ฅผ ํตํด ๊ทธ๋ํฝ ์์ ์ ์ฒ๋ฆฌ ์๋๊ฐ ํฅ์๋๊ณ ๋ ๋ณต์กํ ๊ทธ๋ํฝ ํจ๊ณผ์ ์ ๋๋ฉ์ด์ ์ ์ํํ๊ฒ ๋ ๋๋งํ ์ ์๊ณ , ๋์์ CPU๋ ๋ค๋ฅธ ์์ ์ ์ํํ ์ ์์ต๋๋ค.
์ผ๋ฐ์ ์ผ๋ก 3D ๊ทธ๋ํฝ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณต์กํ ์กฐ๋ช , ํ ์ค์ฒ, ๊ทธ๋ฆผ์, ๋ฌผ๋ฆฌ ์๋ฎฌ๋ ์ด์ ๋ฑ์ ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค. ์ด๋ฌํ ์์ ์ ๋ง์ ๊ณ์ฐ๊ณผ ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ํ์๋ก ํ๋๋ฐ, ์ด๋ ํ๋์จ์ด ๊ฐ์์ GPU์ ์ฑ๋ฅ์ ํ์ฉํ์ฌ ์์ ์ ๋น ๋ฅด๊ณ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํฉ๋๋ค. ์ด๋ ์์ ๋ฐ ์์ฑ ์ฒ๋ฆฌ, ๋ฐ์ดํฐ ์๊ฐํ, ์ธ๊ณต์ง๋ฅ ๋ฑ ๋ค๋ฅธ ์์ญ์์๋ ์ฌ์ฉ๋ ์ ์์ต๋๋ค.
GPU, Graphics Proccessing Unit ๋ฅผ ์ฌ์ฉํ๋ ์ด์
์ปดํจํฐ๊ฐ 60fps์์ ๊ทธ๋ํฝ์ ๋๋๋งํ๋ ค๋ฉด ์๋ง์ linear algebra (์ ํ ๋์) ํน์ matrix multiplication (ํ๋ ฌ ๊ณฑ์ ) ๊ณ์ฐ์ ํ์๋ก ํฉ๋๋ค.
์ฑ๋ฅ๊ณผ ํจ์จ์ฑ
๊ทธ๋ํฝ ๋ ๋๋ง์ ๋งค์ฐ ๋ง์ ์์ ๋ฐ์ดํฐ(๋ฒํ ์ค, ํ ์ค์ฒ, ์กฐ๋ช ์ ๋ณด ๋ฑ)๋ฅผ ์ฒ๋ฆฌํ๊ณ , ๋ณต์กํ ๊ทธ๋ํฝ ์๊ณ ๋ฆฌ์ฆ์ ์ํํด์ผ ํฉ๋๋ค. ์ด๋ฌํ ์์ ์ ๋ณ๋ ฌ ์ฒ๋ฆฌ์ ๊ณ ์ฑ๋ฅ ๋ฒกํฐ ์ฐ์ฐ์ ํ์๋ก ํฉ๋๋ค.
CPU๋ ์ผ๋ฐ์ ์ผ๋ก ์ฝ์ด ์๊ฐ ์ ํ๋์ด ์๊ณ , ์ง๋ ฌ์ ์ธ ์์ ์ ๋ ์ ํฉํ ์ค๊ณ๋ฅผ ๊ฐ๊ณ ์์ต๋๋ค. ๋ฐ๋ฉด์ ๊ทธ๋ํฝ ๊ฐ์๊ธฐ์ธ GPU๋ ๋ง์ ์์ ๋ณ๋ ฌ ์ฒ๋ฆฌ ์ ๋์ ๊ฐ์ง๊ณ ์์ด ๋์์ ๋ง์ ์์ ์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
| | ์ ํฉํ ์์ | ํน์ง | | --- | ------------- | -------------------------------------- | | CPU | ์ง๋ ฌ์ ์ธ ์์ | ์ฝ์ด ์๊ฐ ์ ํ๋์ด ์์ | | GPU | ๋ณ๋ ฌ์ ์ธ ์์ | ๋ง์ ์์ ์ฝ์ด์ ๋ฒกํฐ ์ฐ์ฐ ์ ๋์ ๊ฐ์ง |
๋ฐ๋ผ์ GPU๋ ๊ทธ๋ํฝ ๋ ๋๋ง ์์ ์ ํนํ๋ ์ํคํ ์ฒ๋ฅผ ๊ฐ์ง๊ณ ์์ด, ๋์์ ์ฌ๋ฌ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ ์ ํฉํ๋ฏ๋ก CPU๋ณด๋ค ๋ ๋์ ์ฑ๋ฅ๊ณผ ํจ์จ์ฑ์ ์ ๊ณตํ ์ ์์ต๋๋ค.
2. OpenGL & WebGL ๐
WebGL์ HTML5์ ํจ๊ป ๋ฑ์ฅํ์์ผ๋ฉฐ, ๋๋ถ๋ถ์ ์ฃผ์ ์น ๋ธ๋ผ์ฐ์ (Chrome, Firefox, Safari, Edge ๋ฑ)์์ ์ง์๋ฉ๋๋ค. OpenGL๊ณผ WebGL์ ํฌ๋ก๋ ธ์ค ๊ทธ๋ฃน Khronos Group์์ ๋ด๋นํฉ๋๋ค.
OpenGL, Open Graphic Library
1992๋ ๋ถํฐ ์ฌ์ฉํด์จ OpenGL์ 2D ๋ฐ 3D ๊ทธ๋ํฝ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ๊ธฐ ์ํ ํฌ๋ก์ค ํ๋ซํผ API์ ๋๋ค. ์ฃผ๋ก C ๋๋ C++๋ก ์์ฑ๋์์ผ๋ฉฐ ์ปดํจํฐ์ ๊ทธ๋ํฝ ์นด๋(GPU)๋ฅผ ์ฌ์ฉํ์ฌ ๊ทธ๋ํฝ ์์ ์ ์ํํ ์ ์๋๋ก ํฉ๋๋ค. ์น ํ๊ฒฝ์์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ์ธ๋ถ ํ๋ฌ๊ทธ์ธ์ ํ์๋ก ํฉ๋๋ค.
WebGL, Web Graphic Library
WebGL์ด๋ ์ธํฐ๋ ํฐ๋ธํ 2D ๋ฐ 3D ๋ฐฑํฐ ๊ทธ๋ํฝ์ ๊ตฌํํ๊ธฐ ์ํ ์๋ฐ์คํฌ๋ฆฝํธ API ์ ๋๋ค. ํด๋ผ์ด์ธํธ์ GPU๋ฅผ ์ฌ์ฉํ๋ฉฐ, ์ธ๋ถ ํ๋ฌ๊ทธ์ธ(ex ํ๋์) ์์ด ์ง์ ์น ์ ํ๋ฆฌ์ผ์ด์ canvas์ ํ๋์จ์ด ๊ฐ์ ๊ทธ๋ํฝ์ ์ ์ฉํ ์ ์์ต๋๋ค.
์ฌ์ฉ ์์: 3D Web Design, Games(unity engine), Data Visualization, Physics simulations
| | OpenGL | WebGL | | -------------- | ----------------------------------------------- | ------------------------- | | ์ฌ์ฉ ์์ ์๊ธฐ | ์ด๊ธฐ, 1992 | HTML5, 2011 | | ์ ์ | ๋ค์ดํฐ๋ธ ๊ทธ๋ํฝ ๋ผ์ด๋ธ๋ฌ๋ฆฌ | ์น ํ์ค ๊ทธ๋ํฝ ๋ผ์ด๋ธ๋ฌ๋ฆฌ | | ํ๋ซํผ | ํฌ๋ก์ค ํ๋ซํผ API, ๋ฐ์คํฌํฑ ๋ฐ ๋ชจ๋ฐ์ผ ์ด์ ์ฒด์ | ์น ๋ธ๋ผ์ฐ์ | | ์ธ์ด | C, C++ ๋ฑ | JavaScript |
3. ๊ฐ์ ๋ ๋ค์ดํฐ๋ธ ๊ทธ๋ํฝ API ๐
2014๋ ๋ถํฐ 2016๋ ์ฌ์ด์๋ ์ ์ ๋์์ง๋ ๊ทธ๋ํฝ ๋ ๋๋ง ์์ค๊ณผ, ๋จธ์ ๋ฌ๋ ๋ฐ ์๋ก์ด ๋ ๋๋ง ์๊ณ ๋ฆฌ์ฆ์ ์ํ ์๋ก์ด ๋ค์ดํฐ๋ธ GPU API ๋ค์ด ๋ฐํ๋์์ต๋๋ค.
์ด ๊ธฐ๊ฐ์ ๋ฆด๋ฆฌ์ฆ๋ GPU API๋ก๋ ํฌ๋ก๋ ธ์ค ๊ทธ๋ฃน(Khronos Group)์ด ๊ฐ๋ฐํ Vulkan๊ณผ OpenGL ๋ฐ WebGL์ ๋์ฒดํ๋ ๋ชฉ์ ์ผ๋ก ๋ง๋ค์ด์ง ์ ํ์ Metal, ๊ทธ๋ฆฌ๊ณ ๋ง์ดํฌ๋ก์ํํธ์ Direct3D 12๊ฐ ์์ต๋๋ค.
| Vulkan | Metal | Direct3D12 | | ------------------------------------ | ----------------------------- | --------------------------- | | Khronos Group | Apple | Microsoft | | ํฌ๋ก์ค ํ๋ซํผ ๊ทธ๋ํฝ ๋ฐ ์ปดํจํ API | ์ ํ์ ์์ฒด ๊ทธ๋ํฝ API | ๋ง์ดํฌ๋ก์ํํธ์ ๊ทธ๋ํฝ API | | ๋ค์ํ ์ด์ ์ฒด์ (Windows, macOS ๋ฑ) | macOS, iOS | Windows, Xbox | | C, C++, Vulkan API | Objective-C, Swift, Metal API | C++, C#, Direct3D API |
Vulkan์ ํฌ๋ก๋ ธ์ค ๊ทธ๋ฃน์ด ๊ฐ๋ฐํ ์ ๋ ๋ฒจ GPU API๋ก, ๋์ ์ฑ๋ฅ๊ณผ ๋ค์ํ ํ๋ซํผ์์์ ํฌ๋ก์ค ํ๋ซํผ ์ง์์ ๋ชฉํ๋ก ํฉ๋๋ค. Vulkan์ ๋ ๋๋ง, ์ปดํจํ ๋ฐ ๊ฐ์ํ๋ ๊ทธ๋ํฝ ์์ ์ ์ํ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฉฐ, ๊ฐ๋ฐ์๊ฐ ํ๋์จ์ด์ ์ธ๋ถ ์ฌํญ์ ์ง์ ์ ์ดํ ์ ์๋ ์ ์์ค API์ ๋๋ค.
Metal์ ์ ํ์ด macOS ๋ฐ iOS์์ OpenGL์ ๋์ฒดํ๊ธฐ ์ํด ๋์ ํ ์์ฒด ๊ทธ๋ํฝ API์ ๋๋ค. Metal์ ๋น ๋ฅธ ์ฑ๋ฅ๊ณผ ์ ์ ๋ ฅ ์๋ชจ, ๋ฎ์ ์ค๋ฒํค๋ ๋ฑ์ ํน์ง์ผ๋ก ํ๋ฉฐ, ์ ํ์ ํ๋์จ์ด ๋ฐ ์ํํธ์จ์ด ํตํฉ์ ์ต์ ํ๋ ์ค๊ณ๋ฅผ ๊ฐ์ถ๊ณ ์์ต๋๋ค.
Direct3D 12๋ ๋ง์ดํฌ๋ก์ํํธ๊ฐ Windows ์ด์ ์ฒด์ ์ฉ์ผ๋ก ๊ฐ๋ฐํ ์ ์์ค GPU API์ ๋๋ค. Direct3D 12๋ ๋ค์ค ์ค๋ ๋ฉ ๋ฐ ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ์ง์ํ์ฌ CPU ๋ฐ GPU ๊ฐ์ ํจ์จ์ ์ธ ์์ ๋ถ๋ฐฐ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค. ์ด๋ฅผ ํตํด ๋์ ์ฑ๋ฅ๊ณผ ์ต์ ํ๋ ๊ทธ๋ํฝ ๋ ๋๋ง์ ์ ๊ณตํฉ๋๋ค.
์ด๋ฌํ ์๋ก์ด GPU API๋ ๋ ๋์ ์ฑ๋ฅ๊ณผ ์ ์ด๋ ฅ์ ์ ๊ณตํ์ฌ ๋ ๋ณต์กํ๊ณ ํ์ค๊ฐ ์๋ ๊ทธ๋ํฝ ๋ ๋๋ง์ ๊ตฌํํ ์ ์๊ฒ ๋์์ต๋๋ค. ๊ฐ๋ฐ์๋ค์ ์ด๋ฌํ API๋ฅผ ์ฌ์ฉํ์ฌ ๋์ ์์ค์ ๊ทธ๋ํฝ ํ์ง๊ณผ ์ฑ๋ฅ์ ๋ฌ์ฑํ๋ฉฐ, ๋จธ์ ๋ฌ๋ ๋ฐ ์๋ก์ด ์๊ณ ๋ฆฌ์ฆ์ ์ ์ฉํ ํ์ ์ ์ธ ๊ทธ๋ํฝ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ์ ์์ต๋๋ค.
์ ์์ค GPU API & ๊ณ ์์ค GPU API
์ ์์ค GPU API๋ ๊ทธ๋ํฝ ์ฒ๋ฆฌ๋ฅผ ์ํ ํ๋์จ์ด ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ ํ๋ก๊ทธ๋๋ฐ API๋ก, ๊ฐ๋ฐ์์๊ฒ ํ๋์จ์ด์ ์ธ๋ถ ์ฌํญ์ ์ง์ ์ ์ผ๋ก ์ ๊ทผํ๊ณ ์ ์ดํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ์ด๋ ๊ณ ์์ค ๊ทธ๋ํฝ API๋ณด๋ค ๋ ๋ฎ์ ์์ค์ ์ถ์ํ๋ฅผ ์ ๊ณตํ์ฌ ๋ ๋ง์ ์ ์ด์ ์ต์ ํ๋ฅผ ํ ์ ์๊ฒ ํฉ๋๋ค.
๊ณ ์์ค GPU API(์: OpenGL, DirectX 11)๋ ๊ฐ๋ฐ์๊ฐ ๊ทธ๋ํฝ ์์ ์ ์ถ์ํ๋ ์ธํฐํ์ด์ค๋ฅผ ํตํด ์ํํ๋๋ก ์ค๊ณ๋์์ต๋๋ค. ์ด๋ฌํ API๋ ๊ฐ๋ฐ์๊ฐ ๊ทธ๋ํฝ ์์ ์ ๋ ๊ฐ๋จํ๊ฒ ์ฒ๋ฆฌํ ์ ์๋๋ก ํด์ฃผ์ง๋ง, ํ๋์จ์ด์ ์ธ๋ถ ์ฌํญ์ด๋ ์ต์ ํ ์ต์ ์ ๋ํ ์ง์ ์ ์ธ ์ ๊ทผ์ ์ ํ์ ์ ๋๋ค.
| | ์ ์์ค GPU API | ๊ณ ์์ค ๊ทธ๋ํฝ API | | ---------------------- | ---------------------------- | ---------------------------- | | ์ถ์ํ ์์ค | ๋ฎ์ | ๋์ | | ํ๋์จ์ด ์ ๊ทผ | ์ง์ ์ | ์ ํ์ | | ๊ฐ๋ฐ์ ์๊ตฌ ์ฌํญ | ๊ณ ์ฑ๋ฅ ๋ ๋๋ง ๋ฐ ์ต์ ํ | ๊ทธ๋ํฝ ์์ | | ์ ์ฐ์ฑ | ๋์ | ์ ํ์ | | ์ฃผ๋ก ์ฌ์ฉ๋๋ API ์ข ๋ฅ | Vulkan, Metal, DirectX 12 ๋ฑ | OpenGL, DirectX 11, WebGL ๋ฑ |
4. WebGPU ๐
Chrome ships WebGPU - Chrome Developers
WebGPU๋ ์์ ์ค๋ช ํ ์๋ก์ด GPU API๋ฅผ ์น ํ๊ฒฝ ๊ธฐ๋ฐ์์ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ ์๋ก์ด ์น ๊ทธ๋ํฝ API์ ๋๋ค. W3C์ โGPU for the Webโ๊ณผ ํจ๊ป ํ๊ณ ์์ผ๋ฉฐ, Apple, Google, Mozilla, Microsoft, Intel ๋ฑ ๋ง์ ํ์ฌ์ ํ์ ํ๊ณ ์์ต๋๋ค.
2023๋ ํ์ฌ Goolge Chrome 113์์ ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค!
WebGL์ ๊ณ์นํ์ฌ, ์น์์ Vulkan, Metal, DirectX 12์ ๊ฐ์ ๋ชจ๋ API๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ฏ๋ก, ์น์ฌ์ดํธ๊ฐ ๋ธ๋ผ์ฐ์ ์ WebGL์ด ์๋, ์ ์ ์ GPU๋ฅผ ์ฌ์ฉํ๊ณ ์ ์ดํ ์ ์์ต๋๋ค.
์ด๋ ๊ทธ๋ํฝ ๋๋๋ง ๋ฟ๋ง ์๋๋ผ, ๋จธ์ ๋ฌ๋์๋ ๋ง์ ๋ณํ์ ์ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค. (์๋ฅผ ๋ค์ด ๋ธ๋ผ์ฐ์ ์์ฒด์์ AI ๋ชจ๋ธ์ ์คํํ ์๋ ์์ต๋๋ค.)
๋ํ Javascript์๋ง ๊ตญํ๋ ๊ฒ์ด ์๋๋ผ, Rust์ wgpu์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ฝ๋๋ฅผ ์์ฑํ๊ณ WebAssembly๋ก ์ปดํ์ผํ์ฌ ์ ์ ๋ธ๋ผ์ฐ์ ์์ ์ฌ์ฉํ ์๋ ์์ต๋๋ค.
๊ทธ ์ธ์ ์์ธํ ์ถ๊ฐ ๋ฐ ๋ณํ ๋ด์ฉ์ Google Chrome Developers ๋ก!
- 2023 ecosystem
- WebGPU ์ํ ํ์ธํ๊ธฐ https://webgpu.github.io/webgpu-samples/samples/helloTriangle