๊ณ ์ฑ๋ฅ ์น ๊ทธ๋ํฝ์ ํ์์ ์ธ WebGL GPU ๋ฉ๋ชจ๋ฆฌ ์ต์ ํ๋ฅผ ์ํ ๊ณ ๊ธ ๊ธฐ๋ฒ ๋ฐ ๋ค์ค ๋ ๋ฒจ ๋ฉ๋ชจ๋ฆฌ ์ ๋ต์ ํ๊ตฌํฉ๋๋ค.
WebGL GPU ๋ฉ๋ชจ๋ฆฌ ๊ณ์ธต์ ๊ด๋ฆฌ: ๋ค์ค ๋ ๋ฒจ ๋ฉ๋ชจ๋ฆฌ ์ต์ ํ
๊ณ ์ฑ๋ฅ ์น ๊ทธ๋ํฝ ๋ถ์ผ์์ ๊ทธ๋ํฝ ์ฒ๋ฆฌ ์ฅ์น(GPU) ๋ฉ๋ชจ๋ฆฌ์ ํจ์จ์ ์ธ ํ์ฉ์ ๋ฌด์๋ณด๋ค ์ค์ํฉ๋๋ค. ์น ์ ํ๋ฆฌ์ผ์ด์ ์ด 3D ๋ ๋๋ง, ๊ฒ์, ๋ณต์กํ ๋ฐ์ดํฐ ์๊ฐํ์ ๊ฐ์ ๋ถ์ผ์์ ์๊ฐ์ ์ถฉ์ค๋์ ์ํธ ์์ฉ์ฑ์ ํ๊ณ๋ฅผ ๋ํ๊ฐ์ ๋ฐ๋ผ GPU ๋ฉ๋ชจ๋ฆฌ์ ๋ํ ์๊ตฌ๋ ๊ทน์ ์ผ๋ก ์ฆ๊ฐํฉ๋๋ค. WebGL์ ํ๋ฌ๊ทธ์ธ ์์ด ๋ชจ๋ ํธํ ์น ๋ธ๋ผ์ฐ์ ๋ด์์ ๋ํํ 2D ๋ฐ 3D ๊ทธ๋ํฝ์ ๋ ๋๋งํ๊ธฐ ์ํ JavaScript API๋ก, ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง๋ง ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ์ธก๋ฉด์์๋ ์๋นํ ์ด๋ ค์์ ์๊ฒจ์ค๋๋ค. ์ด ๊ธ์ ์ ์ธ๊ณ์ ์ผ๋ก ๋ ๋ถ๋๋ฝ๊ณ ๋ฐ์์ฑ์ด ๋ฐ์ด๋๋ฉฐ ์๊ฐ์ ์ผ๋ก ํ๋ถํ ์น ๊ฒฝํ์ ์ ๊ณตํ๊ธฐ ์ํด WebGL GPU ๋ฉ๋ชจ๋ฆฌ ๊ณ์ธต์ ๊ด๋ฆฌ์ ์ ๊ตํ ์ ๋ต, ํนํ ๋ค์ค ๋ ๋ฒจ ๋ฉ๋ชจ๋ฆฌ ์ต์ ํ์ ์ด์ ์ ๋ง์ถฐ ์์ธํ ์ดํด๋ด ๋๋ค.
WebGL์์ GPU ๋ฉ๋ชจ๋ฆฌ์ ์ค์ํ ์ญํ
๋๊ท๋ชจ ๋ณ๋ ฌ ์ํคํ ์ฒ๋ฅผ ๊ฐ์ถ GPU๋ ๊ทธ๋ํฝ ๋ ๋๋ง์ ํ์ํฉ๋๋ค. ๊ทธ๋ฌ๋ ๋ ๋๋ง์ ํ์ํ ํ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ์ํด ์ผ๋ฐ์ ์ผ๋ก VRAM(Video Random Access Memory)์ด๋ผ๊ณ ํ๋ ์ ์ฉ ๋ฉ๋ชจ๋ฆฌ์ ์์กดํฉ๋๋ค. ์ฌ๊ธฐ์๋ ํ ์ค์ฒ, ์ ์ ๋ฒํผ, ์ธ๋ฑ์ค ๋ฒํผ, ์ ฐ์ด๋ ํ๋ก๊ทธ๋จ ๋ฐ ํ๋ ์ ๋ฒํผ ๊ฐ์ฒด๊ฐ ํฌํจ๋ฉ๋๋ค. ์์คํ RAM๊ณผ ๋ฌ๋ฆฌ VRAM์ ์ผ๋ฐ์ ์ผ๋ก ๋ ๋น ๋ฅด๊ณ GPU์ ํ์ํ ๊ณ ๋์ญํญ, ๋ณ๋ ฌ ์ก์ธ์ค ํจํด์ ์ต์ ํ๋์ด ์์ต๋๋ค. GPU ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ณ๋ชฉ ํ์์ด ๋๋ฉด ์ฑ๋ฅ์ด ํฌ๊ฒ ์ ํ๋ฉ๋๋ค. ์ผ๋ฐ์ ์ธ ์ฆ์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๋ฒ๋ฒ ๊ฑฐ๋ฆผ ๋ฐ ํ๋ ์ ๋๋กญ: GPU๊ฐ ํ์ํ ๋ฐ์ดํฐ์ ์ก์ธ์คํ๊ฑฐ๋ ๋ก๋ํ๋ ๋ฐ ์ด๋ ค์์ ๊ฒช์ด ์ผ๊ด๋์ง ์์ ํ๋ ์ ์๋๋ฅผ ์ ๋ฐํฉ๋๋ค.
- ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ ์ค๋ฅ: ์ฌ๊ฐํ ๊ฒฝ์ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ฌ์ฉ ๊ฐ๋ฅํ VRAM์ ์ด๊ณผํ๋ฉด ์ถฉ๋ํ๊ฑฐ๋ ๋ก๋๋์ง ์์ ์ ์์ต๋๋ค.
- ์๊ฐ์ ํ์ง ์ ํ: ๊ฐ๋ฐ์๋ ๋ฉ๋ชจ๋ฆฌ ์ ์ฝ ์กฐ๊ฑด์ ๋ง์ถ๊ธฐ ์ํด ํ ์ค์ฒ ํด์๋ ๋๋ ๋ชจ๋ธ ๋ณต์ก์ฑ์ ์ค์ฌ์ผ ํ ์ ์์ต๋๋ค.
- ๊ธด ๋ก๋ฉ ์๊ฐ: ๋ฐ์ดํฐ๊ฐ ์์คํ RAM๊ณผ VRAM ๊ฐ์ ์ง์์ ์ผ๋ก ์ค์๋์ด์ผ ํ๋ฏ๋ก ์ด๊ธฐ ๋ก๋ฉ ์๊ฐ ๋ฐ ํ์ ์์ ๋ก๋ฉ ์๊ฐ์ด ๊ธธ์ด์ง๋๋ค.
๊ธ๋ก๋ฒ ์ฌ์ฉ์๋ฅผ ์ํด ์ด๋ฌํ ๋ฌธ์ ๋ ๋์ฑ ์ฆํญ๋ฉ๋๋ค. ์ ์ธ๊ณ ์ฌ์ฉ์๋ ๊ณ ์ฑ๋ฅ ์ํฌ์คํ ์ด์ ๋ถํฐ ์ ํ๋ VRAM์ ๊ฐ์ง ์ ์ฌ์ ๋ชจ๋ฐ์ผ ์ฅ์น์ ์ด๋ฅด๊ธฐ๊น์ง ๋ค์ํ ์ฅ์น์์ ์น ์ฝํ ์ธ ์ ์ก์ธ์คํฉ๋๋ค. ๋ฐ๋ผ์ ํจ๊ณผ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ ๋จ์ํ ์ต๊ณ ์ ์ฑ๋ฅ์ ๋ฌ์ฑํ๋ ๊ฒ๋ฟ๋ง ์๋๋ผ ๋ค์ํ ํ๋์จ์ด ๊ธฐ๋ฅ ์ ๋ฐ์ ๊ฑธ์ณ ์ ๊ทผ์ฑ๊ณผ ์ผ๊ด๋ ๊ฒฝํ์ ๋ณด์ฅํ๋ ๊ฒ์ ๋๋ค.
GPU ๋ฉ๋ชจ๋ฆฌ ๊ณ์ธต ๊ตฌ์กฐ ์ดํด
GPU ๋ฉ๋ชจ๋ฆฌ ์ต์ ํ ๋งฅ๋ฝ์์ "๊ณ์ธต์ ๊ด๋ฆฌ"๋ผ๋ ์ฉ์ด๋ ๋ค๋ฅธ ์์ค์ ์ ๊ทผ์ฑ ๋ฐ ์ฑ๋ฅ์ ๊ฑธ์ณ ๋ฉ๋ชจ๋ฆฌ ๋ฆฌ์์ค๋ฅผ ๊ตฌ์ฑํ๊ณ ์ ์ดํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. GPU ์์ฒด์๋ ๊ธฐ๋ณธ VRAM์ด ์์ง๋ง, WebGL์ ์ ์ฒด ๋ฉ๋ชจ๋ฆฌ ํ๊ฒฝ์ ์ด ์ ์ฉ ํ ์ด์์ ํฌํจํฉ๋๋ค. ์ฌ๊ธฐ์๋ ๋ค์์ด ํฌํจ๋ฉ๋๋ค.
- GPU VRAM: GPU๊ฐ ์ก์ธ์คํ ์ ์๋ ๊ฐ์ฅ ๋น ๋ฅด๊ณ ์ง์ ์ ์ธ ๋ฉ๋ชจ๋ฆฌ์ ๋๋ค. ์ด๊ฒ์ ๊ฐ์ฅ ์ค์ํ์ง๋ง ๊ฐ์ฅ ์ ํ์ ์ธ ๋ฆฌ์์ค์ด๊ธฐ๋ ํฉ๋๋ค.
- ์์คํ RAM(ํธ์คํธ ๋ฉ๋ชจ๋ฆฌ): ์ปดํจํฐ์ ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ์ ๋๋ค. GPU๊ฐ ์ฌ์ฉํ๋ ค๋ฉด ์์คํ RAM์์ VRAM์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์กํด์ผ ํฉ๋๋ค. ์ด ์ ์ก์๋ ์ง์ฐ ์๊ฐ ๋ฐ ๋์ญํญ ๋น์ฉ์ด ๋ฐ์ํฉ๋๋ค.
- CPU ์บ์/๋ ์ง์คํฐ: CPU์์ ์ง์ ์ก์ธ์คํ ์ ์๋ ๋งค์ฐ ๋น ๋ฅด๊ณ ์์ ๋ฉ๋ชจ๋ฆฌ์ ๋๋ค. ์ง์ ์ ์ธ GPU ๋ฉ๋ชจ๋ฆฌ๋ ์๋์ง๋ง, CPU์์ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ์ค๋นํ๋ฉด GPU ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ๊ฐ์ ์ ์ผ๋ก ๋์์ด ๋ ์ ์์ต๋๋ค.
๋ค์ค ๋ ๋ฒจ ๋ฉ๋ชจ๋ฆฌ ์ต์ ํ ์ ๋ต์ ๋ฐ์ดํฐ ์ ์ก ๋ฐ ์ก์ธ์ค ์ง์ฐ ์๊ฐ๊ณผ ๊ด๋ จ๋ ์ฑ๋ฅ ํ๋ํฐ๋ฅผ ์ต์ํํ๊ธฐ ์ํด ์ด๋ฌํ ์์ค์ ๊ฑธ์ณ ๋ฐ์ดํฐ๋ฅผ ์ ๋ต์ ์ผ๋ก ๋ฐฐ์นํ๊ณ ๊ด๋ฆฌํ๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค. ๋ชฉํ๋ ๊ฐ์ฅ ๋น ๋ฅธ ๋ฉ๋ชจ๋ฆฌ(VRAM)์ ์์ฃผ ์ก์ธ์คํ๋ ๊ณ ์ฐ์ ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์งํ๋ฉด์ ๋๋ฆฐ ๊ณ์ธต์์ ๋ ์ค์ํ๊ฑฐ๋ ๋๋ฌผ๊ฒ ์ก์ธ์คํ๋ ๋ฐ์ดํฐ๋ฅผ ์ง๋ฅ์ ์ผ๋ก ๊ด๋ฆฌํ๋ ๊ฒ์ ๋๋ค.
WebGL์์ ๋ค์ค ๋ ๋ฒจ ๋ฉ๋ชจ๋ฆฌ ์ต์ ํ์ ํต์ฌ ์์น
WebGL์์ ๋ค์ค ๋ ๋ฒจ ๋ฉ๋ชจ๋ฆฌ ์ต์ ํ๋ฅผ ๊ตฌํํ๋ ค๋ฉด ๋ ๋๋ง ํ์ดํ๋ผ์ธ, ๋ฐ์ดํฐ ๊ตฌ์กฐ ๋ฐ ๋ฆฌ์์ค ์๋ช ์ฃผ๊ธฐ์ ๋ํ ๊น์ ์ดํด๊ฐ ํ์ํฉ๋๋ค. ์ฃผ์ ์์น์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
1. ๋ฐ์ดํฐ ์ฐ์ ์์ ์ง์ ๋ฐ ํซ/์ฝ๋ ๋ฐ์ดํฐ ๋ถ์
๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ๋์ผํ๊ฒ ๋ง๋ค์ด์ง๋ ๊ฒ์ ์๋๋๋ค. ์ผ๋ถ ์์ ์ ์ง์์ ์ผ๋ก ์ฌ์ฉ๋์ง๋ง(์: ํต์ฌ ์ ฐ์ด๋, ์์ฃผ ํ์๋๋ ํ ์ค์ฒ), ๋ค๋ฅธ ์์ ์ ๊ฐํ์ ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค(์: ๋ก๋ฉ ํ๋ฉด, ํ์ฌ ํ์๋์ง ์๋ ์บ๋ฆญํฐ ๋ชจ๋ธ). ๋ฐ์ดํฐ๋ฅผ "ํซ"(์์ฃผ ์ก์ธ์ค๋จ) ๋ฐ "์ฝ๋"(๋๋ฌผ๊ฒ ์ก์ธ์ค๋จ)๋ก ์๋ณํ๊ณ ๋ถ๋ฅํ๋ ๊ฒ์ด ์ฒซ ๋ฒ์งธ ๋จ๊ณ์ ๋๋ค.
- ํซ ๋ฐ์ดํฐ: ์ด์์ ์ผ๋ก๋ VRAM์ ์์ด์ผ ํฉ๋๋ค.
- ์ฝ๋ ๋ฐ์ดํฐ: ์์คํ RAM์ ๋ณด๊ดํ๊ณ ํ์ํ ๋๋ง VRAM์ผ๋ก ์ ์กํ ์ ์์ต๋๋ค. ์ฌ๊ธฐ์๋ ์์ถ๋ ์์ ์์ถ ํด์ ๋๋ ์ฌ์ฉํ์ง ์์ ๋ VRAM์์ ํ ๋น ํด์ ํ๋ ์์ ์ด ํฌํจ๋ ์ ์์ต๋๋ค.
2. ํจ์จ์ ์ธ ๋ฐ์ดํฐ ๊ตฌ์กฐ ๋ฐ ํ์
๋ฐ์ดํฐ๊ฐ ๊ตฌ์กฐํ๋๊ณ ํ์์ด ์ง์ ๋๋ ๋ฐฉ์์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ๋ฐ ์ก์ธ์ค ์๋์ ์ง์ ์ ์ธ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ํ ์ค์ฒ ์์ถ: GPU ๋ค์ดํฐ๋ธ ํ ์ค์ฒ ์์ถ ํ์(๋ธ๋ผ์ฐ์ /GPU ์ง์์ ๋ฐ๋ผ ASTC, ETC2, S3TC/DXT ๋ฑ)์ ์ฌ์ฉํ๋ฉด ์๊ฐ์ ํ์ง ์์ค์ด ์ต์ํ๋๋ฉด์ VRAM ์ฌ์ฉ๋์ ๋ํญ ์ค์ผ ์ ์์ต๋๋ค.
- ์ ์ ๋ฐ์ดํฐ ์ต์ ํ: ์ ์ ์์ฑ(์์น, ๋ฒ์ , UV, ์์)์ ๊ฐ์ฅ ์์ ์ ํจ ๋ฐ์ดํฐ ์ ํ(์: ๊ฐ๋ฅํ ๊ฒฝ์ฐ UV์ ๊ฒฝ์ฐ
Uint16Array, ์์น์ ๊ฒฝ์ฐFloat32Array)์ผ๋ก ํฉํ๊ณ ํจ์จ์ ์ผ๋ก ์ธํฐ๋ฆฌ๋นํ๋ฉด ๋ฒํผ ํฌ๊ธฐ๋ฅผ ์ค์ด๊ณ ์บ์ ์ผ๊ด์ฑ์ ๊ฐ์ ํ ์ ์์ต๋๋ค. - ๋ฐ์ดํฐ ๋ ์ด์์: GPU ์นํ์ ์ธ ๋ ์ด์์(์: ๊ตฌ์กฐ์ฒด ๋ฐฐ์ด - AOS ๋ ๋ฐฐ์ด ๊ตฌ์กฐ์ฒด - SOA)์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ฉด ์ก์ธ์ค ํจํด์ ๋ฐ๋ผ ์ฑ๋ฅ์ด ํฅ์๋ ์ ์์ต๋๋ค.
3. ๋ฆฌ์์ค ํ๋ง ๋ฐ ์ฌ์ฌ์ฉ
GPU ๋ฆฌ์์ค(ํ ์ค์ฒ, ๋ฒํผ, ํ๋ ์ ๋ฒํผ)๋ฅผ ์์ฑํ๊ณ ์ญ์ ํ๋ ๊ฒ์ CPU ์ค๋ฒํค๋ ๋ฐ ์ ์ฌ์ ๋ฉ๋ชจ๋ฆฌ ํํธํ ์ธก๋ฉด์์ ๋น์ฉ์ด ๋ง์ด ๋๋ ์์ ์ผ ์ ์์ต๋๋ค. ํ๋ง ๋ฉ์ปค๋์ฆ์ ๊ตฌํํ๋ฉด ๋ค์์ ์ํํ ์ ์์ต๋๋ค.
- ํ ์ค์ฒ ์ํ๋ผ์ค: ์ฌ๋ฌ ๊ฐ์ ์์ ํ ์ค์ฒ๋ฅผ ํ๋์ ๋ ํฐ ํ ์ค์ฒ๋ก ๊ฒฐํฉํ๋ฉด ํ ์ค์ฒ ๋ฐ์ธ๋ฉ ์๊ฐ ์ค์ด๋ค์ด ์๋นํ ์ฑ๋ฅ ์ต์ ํ๊ฐ ์ด๋ฃจ์ด์ง๋๋ค. ๋ํ VRAM ์ฌ์ฉ๋์ ํตํฉํฉ๋๋ค.
- ๋ฒํผ ์ฌ์ฌ์ฉ: ์ ์ฌํ ๋ฐ์ดํฐ๋ฅผ ์ํด ์ฌ์ ํ ๋น๋ ๋ฒํผ ํ์ ์ ์งํ๋ฉด ๋ฐ๋ณต์ ์ธ ํ ๋น/ํ ๋น ํด์ ์ฃผ๊ธฐ๋ฅผ ํผํ ์ ์์ต๋๋ค.
- ํ๋ ์ ๋ฒํผ ์บ์ฑ: ๋ ๋๋ง ๋์ ํ ์ค์ฒ์ ๋ํ ํ๋ ์ ๋ฒํผ ๊ฐ์ฒด๋ฅผ ์ฌ์ฌ์ฉํ๋ฉด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ์ฝํ๊ณ ์ค๋ฒํค๋๋ฅผ ์ค์ผ ์ ์์ต๋๋ค.
4. ์คํธ๋ฆฌ๋ฐ ๋ฐ ๋น๋๊ธฐ ๋ก๋ฉ
์์ ๋ก๋ฉ ์ค์ ๋ฉ์ธ ์ค๋ ๋๊ฐ ๋ฉ์ถ๊ฑฐ๋ ์๋นํ ๋ฒ๋ฒ ๊ฑฐ๋ฆผ์ ์ ๋ฐํ๋ ๊ฒ์ ๋ฐฉ์งํ๋ ค๋ฉด ๋ฐ์ดํฐ๋ฅผ ๋น๋๊ธฐ์ ์ผ๋ก ์คํธ๋ฆฌ๋ฐํด์ผ ํฉ๋๋ค. ์ด๋ ์ข ์ข ๋ค์์ ํฌํจํฉ๋๋ค.
- ์ฒญํฌ ๋จ์ ๋ก๋ฉ: ๋๊ท๋ชจ ์์ ์ ์์ฐจ์ ์ผ๋ก ๋ก๋ํ๊ณ ์ฒ๋ฆฌํ ์ ์๋ ๋ ์์ ์กฐ๊ฐ์ผ๋ก ๋๋๋๋ค.
- ์ ์ง์ ๋ก๋ฉ: ์์ ์ ์ ํด์๋ ๋ฒ์ ์ ๋จผ์ ๋ก๋ํ ๋ค์, ์ฌ์ฉ ๊ฐ๋ฅํด์ง๊ณ ๋ฉ๋ชจ๋ฆฌ์ ์ ํฉํ๋ฉด ๊ณ ํด์๋ ๋ฒ์ ์ ์ ์ง์ ์ผ๋ก ๋ก๋ํฉ๋๋ค.
- ๋ฐฑ๊ทธ๋ผ์ด๋ ์ค๋ ๋: Web Worker๋ฅผ ํ์ฉํ์ฌ ๋ฉ์ธ ์ค๋ ๋ ์ธ๋ถ์์ ๋ฐ์ดํฐ ์์ถ ํด์ , ํ์ ๋ณํ ๋ฐ ์ด๊ธฐ ๋ก๋ฉ์ ์ฒ๋ฆฌํฉ๋๋ค.
5. ๋ฉ๋ชจ๋ฆฌ ์์ฐ ์ฑ ์ ๋ฐ ์ปฌ๋ง
๋ค์ํ ์ ํ์ ์์ ์ ๋ํ ๋ช ํํ ๋ฉ๋ชจ๋ฆฌ ์์ฐ์ ์ค์ ํ๊ณ ๋ ์ด์ ํ์ํ์ง ์์ ๋ฆฌ์์ค๋ฅผ ์ ๊ทน์ ์ผ๋ก ์ปฌ๋งํ๋ ๊ฒ์ ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ์ ๋ฐฉ์งํ๋ ๋ฐ ์ค์ํฉ๋๋ค.
- ๊ฐ์์ฑ ์ปฌ๋ง: ์นด๋ฉ๋ผ์ ๋ณด์ด์ง ์๋ ๊ฐ์ฒด๋ ๋ ๋๋งํ์ง ์์ต๋๋ค. ์ด๊ฒ์ ํ์ค ๊ดํ์ด์ง๋ง, ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํ ๊ฒฝ์ฐ ์ธ๋ก๋ ํ๋ณด๊ฐ ๋ ์ ์๋ ๊ด๋ จ GPU ๋ฆฌ์์ค(์: ํ ์ค์ฒ ๋๋ ์ ์ ๋ฐ์ดํฐ)๋ฅผ ์๋ฏธํ ์๋ ์์ต๋๋ค.
- ์์ธ ์์ค(LOD): ๋ฉ๋ฆฌ ๋จ์ด์ง ๊ฐ์ฒด์ ๋ํด ๋ ๋จ์ํ ๋ชจ๋ธ๊ณผ ์ ํด์๋ ํ ์ค์ฒ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ด๋ ๋ฉ๋ชจ๋ฆฌ ์๊ตฌ ์ฌํญ์ ์ง์ ์ ์ผ๋ก ์ค์ ๋๋ค.
- ์ฌ์ฉํ์ง ์๋ ์์ ์ธ๋ก๋: VRAM์์ ํ๋์ ์ก์ธ์ค๋์ง ์์ ์์ ์ ์ธ๋ก๋ํ์ฌ ์ ์์ ์ ์ํ ๊ณต๊ฐ์ ํ๋ณดํ๋ LRU(Least Recently Used)์ ๊ฐ์ ์ ๊ฑฐ ์ ์ฑ ์ ๊ตฌํํฉ๋๋ค.
๊ณ ๊ธ ๊ณ์ธต์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๊ธฐ๋ฒ
๊ธฐ๋ณธ ์์น์ ๋์ด์, ์ ๊ตํ ๊ณ์ธต์ ๊ด๋ฆฌ๋ ๋ฉ๋ชจ๋ฆฌ ์๋ช ์ฃผ๊ธฐ ๋ฐ ๋ฐฐ์น์ ๋ํ ๋ ๋ณต์กํ ์ ์ด๋ฅผ ํฌํจํฉ๋๋ค.
1. ์คํ ์ด์ง๋ณ ๋ฉ๋ชจ๋ฆฌ ์ ์ก
์์คํ RAM์์ VRAM์ผ๋ก์ ์ ์ก์ ๋ณ๋ชฉ ํ์์ด ๋ ์ ์์ต๋๋ค. ๋งค์ฐ ํฐ ๋ฐ์ดํฐ ์ธํธ์ ๊ฒฝ์ฐ ์คํ ์ด์ง๋ณ ์ ๊ทผ ๋ฐฉ์์ด ์ ์ฉํ ์ ์์ต๋๋ค.
- CPU ์ธก ์คํ
์ด์ง ๋ฒํผ: ์
๋ก๋๋ฅผ ์ํด
WebGLBuffer์ ์ง์ ์ฐ๊ธฐ๋ณด๋ค ๋ฐ์ดํฐ๋ฅผ ๋จผ์ ์์คํ RAM์ ์คํ ์ด์ง ๋ฒํผ์ ๋ฐฐ์นํ ์ ์์ต๋๋ค. ์ด ๋ฒํผ๋ CPU ์ฐ๊ธฐ์ ์ต์ ํ๋ ์ ์์ต๋๋ค. - GPU ์ธก ์คํ ์ด์ง ๋ฒํผ: ์ผ๋ถ ์ต์ GPU ์ํคํ ์ฒ๋ VRAM ์์ฒด ๋ด์์ ๋ช ์์ ์ธ ์คํ ์ด์ง ๋ฒํผ๋ฅผ ์ง์ํ์ฌ ์ต์ข ๋ฐฐ์น ์ ์ ์ค๊ฐ ๋ฐ์ดํฐ ์กฐ์์ ํ์ฉํฉ๋๋ค. WebGL์ ์ด์ ๋ํ ์ง์ ์ ์ธ ์ ์ด๊ฐ ์ ํ์ ์ด์ง๋ง, ๊ฐ๋ฐ์๋ WebGPU ๋๋ ํ์ฅ์ ํตํด ๋ ๊ณ ๊ธ ์คํ ์ด์ง๋ณ ์์ ์ ์ํด ์ปดํจํ ์ ฐ์ด๋๋ฅผ ํ์ฉํ ์ ์์ต๋๋ค.
์ฌ๊ธฐ์ ํต์ฌ์ ์ค๋ฒํค๋๋ฅผ ์ต์ํํ๊ธฐ ์ํด ์ ์ก์ ์ผ๊ด ์ฒ๋ฆฌํ๋ ๊ฒ์ ๋๋ค. ๋ฐ์ดํฐ๋ฅผ ์์ฃผ ์ ์ ์กฐ๊ฐ์ผ๋ก ์ ๋ก๋ํ๋ ๋์ , ์์คํ RAM์ ๋ฐ์ดํฐ๋ฅผ ๋์ ํ๊ณ ๋ ํฐ ๋ฉ์ด๋ฆฌ๋ฅผ ๋ ์์ฃผ ์ ๋ก๋ํฉ๋๋ค.
2. ๋์ ๋ฆฌ์์ค๋ฅผ ์ํ ๋ฉ๋ชจ๋ฆฌ ํ
์ ์, ์์ ๋ ๋๋ง ๋์ ๋๋ ํ๋ ์๋ณ ๋ฐ์ดํฐ์ ๊ฐ์ ๋์ ๋ฆฌ์์ค๋ ์๋ช ์ด ์งง์ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ์ด๋ฌํ ๋ฆฌ์์ค๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๋ ค๋ฉด ์ ์ฉ ๋ฉ๋ชจ๋ฆฌ ํ์ด ํ์ํฉ๋๋ค.
- ๋์ ๋ฒํผ ํ: VRAM์ ํฐ ๋ฒํผ๋ฅผ ์ฌ์ ํ ๋นํฉ๋๋ค. ๋์ ๋ฆฌ์์ค์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ์ํ ๊ฒฝ์ฐ ํ์์ ์น์
์ ์๋ผ๋
๋๋ค. ๋ฆฌ์์ค๊ฐ ๋ ์ด์ ํ์ํ์ง ์์ผ๋ฉด ํด๋น ์น์
์ ์ฌ์ฉ ๊ฐ๋ฅ์ผ๋ก ํ์ํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋น์ฉ์ด ๋ง์ด ๋ค ์ ์๋
gl.bufferDataํธ์ถ๊ณผDYNAMIC_DRAW์ฌ์ฉ์ ํผํ ์ ์์ต๋๋ค. - ์์ ํ ์ค์ฒ ํ: ๋ฒํผ์ ๋ง์ฐฌ๊ฐ์ง๋ก ์์ ํ ์ค์ฒ ํ์ ๊ด๋ฆฌํ์ฌ ์ค๊ฐ ๋ ๋๋ง ํจ์ค์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
WEBGL_multi_draw์ ๊ฐ์ ํ์ฅ ๊ธฐ๋ฅ์ ์ฌ์ฉ์ ๊ณ ๋ คํ์ฌ ๋ง์ ์์ ๊ฐ์ฒด๋ฅผ ํจ์จ์ ์ผ๋ก ๋ ๋๋งํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ด๋ ๋๋ก์ฐ ์ฝ ์ค๋ฒํค๋๋ฅผ ์ค์ฌ ๋ ๋ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์์
์ ํ ๋นํ ์ ์๋๋ก ํจ์ผ๋ก์จ ๊ฐ์ ์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ต์ ํํ ์ ์๊ธฐ ๋๋ฌธ์
๋๋ค.
3. ํ ์ค์ฒ ์คํธ๋ฆฌ๋ฐ ๋ฐ ๋ฐ๋งต ๋ ๋ฒจ
๋ฐ๋งต์ ๊ฐ์ฒด๊ฐ ๋ฉ๋ฆฌ์ ๋ณด์ผ ๋ ์๊ฐ์ ํ์ง๊ณผ ์ฑ๋ฅ์ ํฅ์์ํค๋ ๋ฐ ์ฌ์ฉ๋๋ ํ ์ค์ฒ์ ์ฌ์ ๊ณ์ฐ๋ ์ถ์ ๋ฒ์ ์ ๋๋ค. ์ง๋ฅ์ ์ธ ๋ฐ๋งต ๊ด๋ฆฌ๋ ๊ณ์ธต์ ํ ์ค์ฒ ์ต์ ํ์ ์ด์์ ๋๋ค.
- ์๋ ๋ฐ๋งต ์์ฑ:
gl.generateMipmap()์ ํ์์ ๋๋ค. - ํน์ ๋ฐ ๋ ๋ฒจ ์คํธ๋ฆฌ๋ฐ: ๋งค์ฐ ํฐ ํ ์ค์ฒ์ ๊ฒฝ์ฐ ๊ณ ํด์๋ ๋ฐ ๋ ๋ฒจ๋ง VRAM์ ๋ก๋ํ๊ณ ํ์์ ๋ฐ๋ผ ์ ํด์๋ ๋ฐ์ ์คํธ๋ฆฌ๋ฐํ๋ ๊ฒ์ด ์ ๋ฆฌํ ์ ์์ต๋๋ค. ์ด๊ฒ์ ์ ์ฉ ์์ ์คํธ๋ฆฌ๋ฐ ์์คํ ์ ์ํด ๊ด๋ฆฌ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ ๋ณต์กํ ๊ธฐ์ ์ด๋ฉฐ ์์ ํ ์ ์ด๋ฅผ ์ํด์๋ ์ฌ์ฉ์ ์ ์ ์ ฐ์ด๋ ๋ก์ง์ด๋ ํ์ฅ์ด ํ์ํ ์ ์์ต๋๋ค.
- ์ด๋ฐฉ์ฑ ํํฐ๋ง: ์ฃผ๋ก ์๊ฐ์ ํ์ง ์ค์ ์ด์ง๋ง, ์ ๊ด๋ฆฌ๋ ๋ฐ๋งต ์ฒด์ธ์์ ์ด์ ์ ์ป์ต๋๋ค. ์ด๋ฐฉ์ฑ ํํฐ๋ง์ด ํ์ฑํ๋์ด ์์ ๋ ๋ฐ๋งต์ ์์ ํ ๋นํ์ฑํํ์ง ์๋๋ก ํ์ญ์์ค.
4. ์ฌ์ฉ ํํธ๊ฐ ์๋ ๋ฒํผ ๊ด๋ฆฌ
WebGL ๋ฒํผ(gl.createBuffer())๋ฅผ ์์ฑํ ๋ ์ฌ์ฉ ํํธ(์: STATIC_DRAW, DYNAMIC_DRAW, STREAM_DRAW)๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด๋ฌํ ํํธ๋ฅผ ์ดํดํ๋ ๊ฒ์ ๋ธ๋ผ์ฐ์ ์ GPU ๋๋ผ์ด๋ฒ๊ฐ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ๋ฐ ์ก์ธ์ค ํจํด์ ์ต์ ํํ๋ ๋ฐ ์ค์ํฉ๋๋ค.
STATIC_DRAW: ๋ฐ์ดํฐ๋ ํ ๋ฒ ์ ๋ก๋๋๊ณ ์ฌ๋ฌ ๋ฒ ์ฝ์ต๋๋ค. ๋ณ๊ฒฝ๋์ง ์๋ ๊ธฐํํ ๋ฐ ํ ์ค์ฒ์ ์ด์์ ์ ๋๋ค.DYNAMIC_DRAW: ๋ฐ์ดํฐ๋ ์์ฃผ ๋ณ๊ฒฝ๋๊ณ ์ฌ๋ฌ ๋ฒ ๊ทธ๋ ค์ง๋๋ค. ์ด๋ ์ข ์ข ๋ฐ์ดํฐ๊ฐ VRAM์ ์์์ ์๋ฏธํ์ง๋ง CPU์์ ์ ๋ฐ์ดํธํ ์ ์์ต๋๋ค.STREAM_DRAW: ๋ฐ์ดํฐ๋ ํ ๋ฒ ์ค์ ๋๊ณ ๋ช ๋ฒ๋ง ์ฌ์ฉ๋ฉ๋๋ค. ์ด๋ ์์ ๋ฐ์ดํฐ์ด๊ฑฐ๋ ๋จ์ผ ํ๋ ์์ ์ฌ์ฉ๋จ์ ์์ฌํ ์ ์์ต๋๋ค.
๋๋ผ์ด๋ฒ๋ ์ด๋ฌํ ํํธ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฒํผ๋ฅผ VRAM์ ์์ ํ ๋ฐฐ์นํ ์ง, ์์คํ RAM์ ๋ณต์ฌ๋ณธ์ ์ ์งํ ์ง, ์ ์ฉ ์ฐ๊ธฐ ๊ฒฐํฉ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์ฌ์ฉํ ์ง ๊ฒฐ์ ํ ์ ์์ต๋๋ค.
5. ํ๋ ์ ๋ฒํผ ๊ฐ์ฒด(FBO) ๋ฐ ๋ ๋-ํฌ-ํ ์ค์ฒ ์ ๋ต
FBO๋ฅผ ์ฌ์ฉํ๋ฉด ๊ธฐ๋ณธ ์บ๋ฒ์ค ๋์ ํ ์ค์ฒ์ ๋ ๋๋งํ ์ ์์ต๋๋ค. ์ด๋ ๋ง์ ๊ณ ๊ธ ํจ๊ณผ(ํ์ฒ๋ฆฌ, ๊ทธ๋ฆผ์, ๋ฐ์ฌ)์ ํ์์ ์ด์ง๋ง ์๋นํ VRAM์ ์๋นํ ์ ์์ต๋๋ค.
- FBO ๋ฐ ํ ์ค์ฒ ์ฌ์ฌ์ฉ: ํ๋ง์์ ์ธ๊ธํ๋ฏ์ด FBO ๋ฐ ๊ด๋ จ ๋ ๋๋ง ๋์ ํ ์ค์ฒ๋ฅผ ๋ถํ์ํ๊ฒ ์์ฑํ๊ณ ํ๊ดดํ๋ ๊ฒ์ ํผํ์ญ์์ค.
- ์ ์ ํ ํ
์ค์ฒ ํ์: ๋ ๋๋ง ๋์์ ๋ํด ๊ฐ์ฅ ์์ ์ ํฉํ ํ
์ค์ฒ ํ์(์:
RGBA8๋์ (์ ๋ฐ๋๊ฐ ํ์ฉํ๋ ๊ฒฝ์ฐ)RGBA4๋๋RGB5_A1)์ ์ฌ์ฉํฉ๋๋ค. - ๊น์ด/์คํ
์ค ์ ๋ฐ๋: ๊น์ด ๋ฒํผ๊ฐ ํ์ํ ๊ฒฝ์ฐ
DEPTH_COMPONENT32F๋์DEPTH_COMPONENT16์ผ๋ก ์ถฉ๋ถํ์ง ๊ณ ๋ คํ์ญ์์ค.
์ค์ ๊ตฌํ ์ ๋ต ๋ฐ ์์
์ด๋ฌํ ๊ธฐ๋ฒ์ ๊ตฌํํ๋ ค๋ฉด ์ข ์ข ๊ฐ๋ ฅํ ์์ ๊ด๋ฆฌ ์์คํ ์ด ํ์ํฉ๋๋ค. ๋ช ๊ฐ์ง ์๋๋ฆฌ์ค๋ฅผ ๊ณ ๋ คํด ๋ด ์๋ค.
์๋๋ฆฌ์ค 1: ๊ธ๋ก๋ฒ ์ ์ ์๊ฑฐ๋ 3D ์ ํ ๋ทฐ์ด
๊ณผ์ : ์์ธํ ํ ์ค์ฒ๊ฐ ์๋ ๊ณ ํด์๋ 3D ์ ํ ๋ชจ๋ธ์ ํ์ํด์ผ ํฉ๋๋ค. ์ ์ธ๊ณ ์ฌ์ฉ์๊ฐ ๋ค์ํ ์ฅ์น์์ ์ก์ธ์คํฉ๋๋ค.
์ต์ ํ ์ ๋ต:
- ์์ธ ์์ค(LOD): ๊ธฐ๋ณธ์ ์ผ๋ก ์ ํด๋ฆฌ๊ณค ๋ชจ๋ธ๊ณผ ์ ํด์๋ ํ ์ค์ฒ๋ฅผ ๋ก๋ํฉ๋๋ค. ์ฌ์ฉ์๊ฐ ํ๋ํ๊ฑฐ๋ ์ํธ ์์ฉํจ์ ๋ฐ๋ผ ๊ณ ํด์๋ LOD ๋ฐ ํ ์ค์ฒ๋ฅผ ์คํธ๋ฆฌ๋ฐํฉ๋๋ค.
- ํ ์ค์ฒ ์์ถ: ASTC ๋๋ ETC2๋ฅผ ๋ชจ๋ ํ ์ค์ฒ์ ์ฌ์ฉํ๊ณ , ๋์ ์ฅ์น ๋๋ ๋คํธ์ํฌ ์กฐ๊ฑด์ ๋ฐ๋ผ ๋ค๋ฅธ ํ์ง ์์ค์ ์ ๊ณตํฉ๋๋ค.
- ๋ฉ๋ชจ๋ฆฌ ์์ฐ: ์ ํ ๋ทฐ์ด์ ๋ํ ์๊ฒฉํ VRAM ์์ฐ์ ์ค์ ํฉ๋๋ค. ์์ฐ ์ด๊ณผ ์ LOD ๋๋ ํ ์ค์ฒ ํด์๋๋ฅผ ์๋์ผ๋ก ๋ค์ด๊ทธ๋ ์ด๋ํฉ๋๋ค.
- ๋น๋๊ธฐ ๋ก๋ฉ: ๋ชจ๋ ์์ ์ ๋น๋๊ธฐ์ ์ผ๋ก ๋ก๋ํ๊ณ ์งํ๋ฅ ํ์๊ธฐ๋ฅผ ํ์ํฉ๋๋ค.
์: ์ํ๋ฅผ ์ ์ํ๋ ๊ฐ๊ตฌ ํ์ฌ. ๋ชจ๋ฐ์ผ ์ฅ์น์์๋ 512x512 ์์ถ ํ ์ค์ฒ๊ฐ ์๋ ์ ํด๋ฆฌ๊ณค ๋ชจ๋ธ์ด ๋ก๋๋ฉ๋๋ค. ๋ฐ์คํฌํฑ์์๋ ์ฌ์ฉ์๊ฐ ํ๋ํจ์ ๋ฐ๋ผ 2048x2048 ์์ถ ํ ์ค์ฒ๊ฐ ์๋ ๊ณ ํด๋ฆฌ๊ณค ๋ชจ๋ธ์ด ์คํธ๋ฆฌ๋ฐ๋ฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ด๋์๋ ํฉ๋ฆฌ์ ์ธ ์ฑ๋ฅ์ ๋ณด์ฅํ๋ ๋์์ ์ด๋ฅผ ๊ฐ๋นํ ์ ์๋ ์ฌ์ฉ์์๊ฒ๋ ํ๋ฆฌ๋ฏธ์ ์๊ฐ ํจ๊ณผ๋ฅผ ์ ๊ณตํฉ๋๋ค.
์๋๋ฆฌ์ค 2: ์น ์ค์๊ฐ ์ ๋ต ๊ฒ์
๊ณผ์ : ๋ง์ ์ ๋, ๋ณต์กํ ํ๊ฒฝ ๋ฐ ํจ๊ณผ๋ฅผ ๋์์ ๋ ๋๋งํด์ผ ํฉ๋๋ค. ๊ฒ์ ํ๋ ์ด์๋ ์ฑ๋ฅ์ด ์ค์ํฉ๋๋ค.
์ต์ ํ ์ ๋ต:
- ์ธ์คํด์ฑ:
gl.drawElementsInstanced๋๋gl.drawArraysInstanced๋ฅผ ์ฌ์ฉํ์ฌ ๋จ์ผ ๋๋ก์ฐ ์ฝ์์ ๋ค๋ฅธ ๋ณํ์ผ๋ก ๋์ผํ ๋ฉ์ฌ(์: ๋๋ฌด ๋๋ ์ ๋)๋ฅผ ๋ง์ด ๋ ๋๋งํฉ๋๋ค. ์ด๋ ์ ์ ๋ฐ์ดํฐ์ ํ์ํ VRAM์ ํฌ๊ฒ ์ค์ด๊ณ ๋๋ก์ฐ ์ฝ ํจ์จ์ฑ์ ํฅ์์ํต๋๋ค. - ํ ์ค์ฒ ์ํ๋ผ์ค: ์ ์ฌํ ๊ฐ์ฒด(์: ๋ชจ๋ ์ ๋ ํ ์ค์ฒ, ๋ชจ๋ ๊ฑด๋ฌผ ํ ์ค์ฒ)์ ํ ์ค์ฒ๋ฅผ ํฐ ์ํ๋ผ์ค๋ก ๊ฒฐํฉํฉ๋๋ค.
- ๋์ ๋ฒํผ ํ: ๋งค ํ๋ ์ ์ ๋ฒํผ๋ฅผ ํ ๋นํ๋ ๋์ ๋์ ํ์์ ํ๋ ์๋น ๋ฐ์ดํฐ(์: ์ธ์คํด์ฑ๋ ๋ฉ์ฌ์ ๋ณํ)๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.
- ์ ฐ์ด๋ ์ต์ ํ: ์ ฐ์ด๋ ํ๋ก๊ทธ๋จ์ ๊ฐ๊ฒฐํ๊ฒ ์ ์งํฉ๋๋ค. ์ฌ์ฉ๋์ง ์๋ ์ ฐ์ด๋ ๋ณํ์ ์ปดํ์ผ๋ ํ์์ด VRAM์ ์์ฃผํ์ง ์์์ผ ํฉ๋๋ค.
- ๊ธ๋ก๋ฒ ์์ ๊ด๋ฆฌ: ํ ์ค์ฒ ๋ฐ ๋ฒํผ์ ๋ํ LRU ์บ์๋ฅผ ๊ตฌํํฉ๋๋ค. VRAM์ด ๊ฑฐ์ ๊ฝ ์ฐจ๋ฉด ์ต๊ทผ์ ์ฌ์ฉ๋์ง ์์ ์์ ์ ์ธ๋ก๋ํฉ๋๋ค.
์: ํ๋ฉด์ ์๋ฐฑ ๋ช ์ ๋ณ์ฌ๊ฐ ๋ฑ์ฅํ๋ ๊ฒ์์์ ๊ฐ ๋ณ์ฌ์ ๋ํด ๋ณ๋์ ์ ์ ๋ฒํผ์ ํ ์ค์ฒ๋ฅผ ๊ฐ๋ ๋์ , ๋จ์ผ ๋ ํฐ ๋ฒํผ์ ํ ์ค์ฒ ์ํ๋ผ์ค์์ ์ธ์คํด์ฑํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด VRAM ์ฌ์ฉ๋๊ณผ ๋๋ก์ฐ ์ฝ ์ค๋ฒํค๋๊ฐ ํฌ๊ฒ ์ค์ด๋ญ๋๋ค.
์๋๋ฆฌ์ค 3: ๋๊ท๋ชจ ๋ฐ์ดํฐ ์ธํธ์ ๋ฐ์ดํฐ ์๊ฐํ
๊ณผ์ : ๋ณต์กํ ๊ธฐํํ ๋ฐ ๋์ ์ ๋ฐ์ดํธ๊ฐ ๊ฐ๋ฅํ ์๋ฐฑ๋ง ๊ฐ์ ๋ฐ์ดํฐ ํฌ์ธํธ๋ฅผ ์๊ฐํํฉ๋๋ค.
์ต์ ํ ์ ๋ต:
- GPU ์ปดํจํ (์ฌ์ฉ ๊ฐ๋ฅ/ํ์ํ ๊ฒฝ์ฐ): ๋งค์ฐ ํฐ ๋ฐ์ดํฐ ์ธํธ์ ๋ณต์กํ ๊ณ์ฐ์ด ํ์ํ ๊ฒฝ์ฐ WebGPU ๋๋ WebGL ์ปดํจํ ์ ฐ์ด๋ ํ์ฅ์ ์ฌ์ฉํ์ฌ GPU์์ ์ง์ ๊ณ์ฐ์ ์ํํ์ฌ CPU๋ก์ ๋ฐ์ดํฐ ์ ์ก์ ์ค์ด๋ ๊ฒ์ ๊ณ ๋ คํ์ญ์์ค.
- VAO ๋ฐ ๋ฒํผ ๊ด๋ฆฌ: Vertex Array Object(VAO)๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ ๋ฒํผ ๊ตฌ์ฑ์ ๊ทธ๋ฃนํํฉ๋๋ค. ๋ฐ์ดํฐ๊ฐ ์์ฃผ ์
๋ฐ์ดํธ๋๋ฉด
DYNAMIC_DRAW๋ฅผ ์ฌ์ฉํ๋, ๋ฐ์ดํฐ ์ธํฐ๋ฆฌ๋น์ ํจ์จ์ ์ผ๋ก ํ์ฌ ์ ๋ฐ์ดํธ ํฌ๊ธฐ๋ฅผ ์ต์ํํ๋ ๊ฒ์ ๊ณ ๋ คํ์ญ์์ค. - ๋ฐ์ดํฐ ์คํธ๋ฆฌ๋ฐ: ํ์ฌ ๋ทฐํฌํธ์์ ๋ณด์ด๋ ๋ฐ์ดํฐ ๋๋ ํ์ฌ ์ํธ ์์ฉ๊ณผ ๊ด๋ จ๋ ๋ฐ์ดํฐ๋ง ๋ก๋ํฉ๋๋ค.
- ํฌ์ธํธ ์คํ๋ผ์ดํธ/์ ํด๋ฆฌ๊ณค ๋ฉ์ฌ: ๋ณต์กํ ๋ฉ์ฌ ๋์ ๊ฐ๋จํ ๊ธฐํํ(์: ์ ๋๋ ๋น๋ณด๋)์ผ๋ก ๋ฐ์ง๋ ๋ฐ์ดํฐ ํฌ์ธํธ๋ฅผ ๋ํ๋ ๋๋ค.
์: ์ ์ธ๊ณ ๋ ์จ ํจํด ์๊ฐํ. ๋ฐ๋ ํ๋ฆ์ ์ํ ์๋ฐฑ๋ง ๊ฐ์ ๊ฐ๋ณ ์ ์๋ฅผ ๋ ๋๋งํ๋ ๋์ , GPU์์ ์ ์๊ฐ ์ ๋ฐ์ดํธ๋๋ ์ ์ ์์คํ ์ ์ฌ์ฉํฉ๋๋ค. ์ ์ ์์ฒด(์์น, ์์)๋ฅผ ๋ ๋๋งํ๋ ๋ฐ ํ์ํ ํ์ ์ ์ ๋ฒํผ ๋ฐ์ดํฐ๋ง VRAM์ ์์ผ๋ฉด ๋ฉ๋๋ค.
๋ฉ๋ชจ๋ฆฌ ์ต์ ํ๋ฅผ ์ํ ๋๊ตฌ ๋ฐ ๋๋ฒ๊น
์ ์ ํ ๋๊ตฌ์ ๋๋ฒ๊น ๊ธฐ๋ฒ ์์ด๋ ํจ๊ณผ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๊ฐ ๋ถ๊ฐ๋ฅํฉ๋๋ค.
- ๋ธ๋ผ์ฐ์ ๊ฐ๋ฐ์ ๋๊ตฌ:
- Chrome: Performance ํญ์ ์ฌ์ฉํ์ฌ GPU ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ํ๋กํ์ผ๋งํ ์ ์์ต๋๋ค. Memory ํญ์ ํ ์ค๋ ์ท์ ์บก์ฒํ ์ ์์ง๋ง, ์ง์ ์ ์ธ VRAM ๊ฒ์ฌ๋ ์ ํ์ ์ ๋๋ค.
- Firefox: Performance ๋ชจ๋ํฐ์๋ GPU ๋ฉ๋ชจ๋ฆฌ ๋ฉํธ๋ฆญ์ด ํฌํจ๋ฉ๋๋ค.
- ์ฌ์ฉ์ ์ง์ ๋ฉ๋ชจ๋ฆฌ ์นด์ดํฐ: ์์ฑํ๋ ํ ์ค์ฒ, ๋ฒํผ ๋ฐ ๊ธฐํ GPU ๋ฆฌ์์ค์ ํฌ๊ธฐ๋ฅผ ์ถ์ ํ๊ธฐ ์ํด ์์ฒด JavaScript ์นด์ดํฐ๋ฅผ ๊ตฌํํฉ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ดํดํ๊ธฐ ์ํด ์ฃผ๊ธฐ์ ์ผ๋ก ๊ธฐ๋กํฉ๋๋ค.
- ๋ฉ๋ชจ๋ฆฌ ํ๋กํ์ผ๋ฌ: ์์ ๋ก๋ฉ ํ์ดํ๋ผ์ธ์ ํํนํ์ฌ ๋ก๋๋๋ ๋ฆฌ์์ค์ ํฌ๊ธฐ์ ์ ํ์ ๋ณด๊ณ ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋๋ ์ฌ์ฉ์ ์ง์ ์คํฌ๋ฆฝํธ์ ๋๋ค.
- WebGL Inspector ๋๊ตฌ: RenderDoc ๋๋ PIX(์ฃผ๋ก ๋ค์ดํฐ๋ธ ๊ฐ๋ฐ์ฉ)์ ๊ฐ์ ๋๊ตฌ๋ ๋๋๋ก WebGL ํธ์ถ ๋ฐ ๋ฆฌ์์ค ์ฌ์ฉ๋์ ๋ถ์ํ๊ธฐ ์ํด ๋ธ๋ผ์ฐ์ ํ์ฅ ํ๋ก๊ทธ๋จ ๋๋ ํน์ ์ค์ ๊ณผ ํจ๊ป ์ฌ์ฉ๋ ์ ์์ต๋๋ค.
์ฃผ์ ๋๋ฒ๊น ์ง๋ฌธ:
- ์ด VRAM ์ฌ์ฉ๋์ ์ผ๋ง์ ๋๊น?
- ์ด๋ค ๋ฆฌ์์ค๊ฐ ๊ฐ์ฅ ๋ง์ VRAM์ ์ฐจ์งํ๊ณ ์์ต๋๊น?
- ํ์ํ์ง ์์ ๋ ๋ฆฌ์์ค๊ฐ ํด์ ๋ฉ๋๊น?
- ์์ฃผ ๋ฐ์ํ๋ ๊ณผ๋ํ ๋ฉ๋ชจ๋ฆฌ ํ ๋น/ํ ๋น ํด์ ๊ฐ ์์ต๋๊น?
- ํ ์ค์ฒ ์์ถ์ด VRAM ๋ฐ ์๊ฐ์ ํ์ง์ ๋ฏธ์น๋ ์ํฅ์ ๋ฌด์์ ๋๊น?
WebGL ๋ฐ GPU ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ๋ฏธ๋
WebGL์ ์ฐ๋ฆฌ์๊ฒ ์ ์ฉํ์ง๋ง, ์น ๊ทธ๋ํฝ ํ๊ฒฝ์ ๊ณ์ ๋ฐ์ ํ๊ณ ์์ต๋๋ค. WebGL์ ํ์ ์ ํ์ธ WebGPU๋ GPU ํ๋์จ์ด์ ๋ํ ๋ ๋ฎ์ ์์ค์ ์ก์ธ์ค์ ๋ ํตํฉ๋ ๋ฉ๋ชจ๋ฆฌ ๋ชจ๋ธ์ ์ ๊ณตํ๋ ๋ ํ๋์ ์ธ API๋ฅผ ์ ๊ณตํฉ๋๋ค. WebGPU๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ๋ฐ์๋ ๋ฉ๋ชจ๋ฆฌ ํ ๋น, ๋ฒํผ ๊ด๋ฆฌ ๋ฐ ๋๊ธฐํ์ ๋ํด ๋ ์ธ๋ฐํ๊ฒ ์ ์ดํ ์ ์์ด ์ ์ฌ์ ์ผ๋ก ๋์ฑ ์ ๊ตํ ๊ณ์ธต์ ๋ฉ๋ชจ๋ฆฌ ์ต์ ํ ๊ธฐ๋ฒ์ ๊ฐ๋ฅํ๊ฒ ํ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ WebGL์ ์๋น ๊ธฐ๊ฐ ๋์ ๊ด๋ จ์ฑ์ ์ ์งํ ๊ฒ์ด๋ฉฐ, ์ด๋ฅผ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋ง์คํฐํ๋ ๊ฒ์ ์ฌ์ ํ ์ค์ํ ๊ธฐ์ ์ ๋๋ค.
๊ฒฐ๋ก : ์ฑ๋ฅ์ ์ํ ๊ธ๋ก๋ฒ ๋ช ๋ น
WebGL GPU ๋ฉ๋ชจ๋ฆฌ ๊ณ์ธต์ ๊ด๋ฆฌ ๋ฐ ๋ค์ค ๋ ๋ฒจ ๋ฉ๋ชจ๋ฆฌ ์ต์ ํ๋ ๋จ์ํ ๊ธฐ์ ์ ์ธ๋ถ ์ฌํญ์ด ์๋๋๋ค. ์ ์ธ๊ณ ์ฌ์ฉ์๋ฅผ ๋์์ผ๋ก ๊ณ ํ์ง์ ์ ๊ทผ ๊ฐ๋ฅํ๋ฉฐ ์ฑ๋ฅ์ด ๋ฐ์ด๋ ์น ๊ฒฝํ์ ์ ๊ณตํ๋ ๋ฐ ํ์์ ์ ๋๋ค. GPU ๋ฉ๋ชจ๋ฆฌ์ ๋ฏธ๋ฌํ ์ฐจ์ด๋ฅผ ์ดํดํ๊ณ , ๋ฐ์ดํฐ๋ฅผ ์ฐ์ ์ํ๊ณ , ํจ์จ์ ์ธ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๊ณ , ์คํธ๋ฆฌ๋ฐ ๋ฐ ํ๋ง๊ณผ ๊ฐ์ ๊ณ ๊ธ ๊ธฐ๋ฒ์ ํ์ฉํจ์ผ๋ก์จ ๊ฐ๋ฐ์๋ ์ผ๋ฐ์ ์ธ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ๊ทน๋ณตํ ์ ์์ต๋๋ค. ๋ค์ํ ํ๋์จ์ด ๊ธฐ๋ฅ๊ณผ ์ ์ธ๊ณ ๋คํธ์ํฌ ์กฐ๊ฑด์ ์ ์ํ๋ ๋ฅ๋ ฅ์ ์ด๋ฌํ ์ต์ ํ ์ ๋ต์ ๋ฌ๋ ค ์์ต๋๋ค. ์น ๊ทธ๋ํฝ์ด ๊ณ์ ๋ฐ์ ํจ์ ๋ฐ๋ผ ์ด๋ฌํ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ์์น์ ๋ง์คํฐํ๋ ๊ฒ์ ์ง์ ์ผ๋ก ๋งค๋ ฅ์ ์ด๊ณ ๋ณดํธ์ ์ธ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋๋ ๋ฐ ์์ด ํต์ฌ์ ์ธ ์ฐจ๋ณํ ์์๊ฐ ๋ ๊ฒ์ ๋๋ค.
์คํ ๊ฐ๋ฅํ ํต์ฐฐ๋ ฅ:
- ๋ธ๋ผ์ฐ์ ๊ฐ๋ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ํ์ฌ VRAM ์ฌ์ฉ๋์ ๊ฐ์ฌํฉ๋๋ค. ๊ฐ์ฅ ํฐ ์๋น์๋ฅผ ์๋ณํฉ๋๋ค.
- ์ ์ ํ ๋ชจ๋ ์์ ์ ๋ํด ํ ์ค์ฒ ์์ถ์ ๊ตฌํํฉ๋๋ค.
- ์์ ๋ก๋ฉ ๋ฐ ์ธ๋ก๋ ์ ๋ต์ ๊ฒํ ํฉ๋๋ค. ๋ฆฌ์์ค๊ฐ ์๋ช ์ฃผ๊ธฐ ๋์ ํจ๊ณผ์ ์ผ๋ก ๊ด๋ฆฌ๋ฉ๋๊น?
- ๋ณต์กํ ์ฅ๋ฉด์์ ๋ฉ๋ชจ๋ฆฌ ์๋ ฅ์ ์ค์ด๊ธฐ ์ํด LOD ๋ฐ ์ปฌ๋ง์ ๊ณ ๋ คํฉ๋๋ค.
- ์์ฃผ ์์ฑ/ํ๊ดด๋๋ ๋์ ๊ฐ์ฒด์ ๋ํ ๋ฆฌ์์ค ํ๋ง์ ์กฐ์ฌํฉ๋๋ค.
- ๋ฉ๋ชจ๋ฆฌ ์ ์ด๋ฅผ ์ํ ์๋ก์ด ๊ฒฝ๋ก๋ฅผ ์ ๊ณตํ WebGPU๊ฐ ์ฑ์ํจ์ ๋ฐ๋ผ ์ ๋ณด๋ฅผ ์ป์ผ์ญ์์ค.
GPU ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ ์ ํด๊ฒฐํจ์ผ๋ก์จ WebGL ์ ํ๋ฆฌ์ผ์ด์ ์ด ์๊ฐ์ ์ผ๋ก ์ธ์์ ์ผ ๋ฟ๋ง ์๋๋ผ ์ ์ธ๊ณ ์ฌ์ฉ์๊ฐ ์ฅ์น๋ ์์น์ ๊ด๊ณ์์ด ๊ฐ๋ ฅํ๊ณ ์ฑ๋ฅ์ด ๋ฐ์ด๋๋๋ก ๋ณด์ฅํ ์ ์์ต๋๋ค.