Three.js๊ฐ WebGPU๋ฅผ ์ง์ํ ๊ณํ์ด ์๋์ง ๊ถ๊ธํฉ๋๋ค. ๊ฐ๋ฅํ ๊น์?
์ด๋ก ์ ์ผ๋ก๋ ๋จผ ๋ฏธ๋์ ์์ง๋ง WebGPU ๊ทธ๋ฃน์ ์ฌ์ ํ โโ์ฒซ ๋ฒ์งธ ์ ์ / ์ฌ์ / ์ด์ ์์ฑ์ ๋ํด ์ ๊ทน์ ์ผ๋ก ๋ ผ์ / ์กฐ์ ํ๊ณ ์์ต๋๋ค. ์์ ํ ์ฌ์์ ๊ฐ์ถ๊ณ ํ์คํ ๋ ๊ตฌํ์ ๊ตฌํํ๋ ๋ฐ ๋ช ๋ ์ด ๊ฑธ๋ฆด ๊ฒ์ ๋๋ค.
์ฌ๊ธฐ์์ WebGPU ๊ฐ๋ฐ์ ์ฐธ์ฌ / ํ๋ก์ฐํ๋ ๊ฒ์ด ์ข์ต๋๋ค. https://github.com/gpuweb/gpuweb/wiki ๋ฐ https://www.w3.org/community/gpu/
WebGPU๊ฐ ์ฐ๋ฆฌ ๋ชจ๋๊ฐ ๋ฐ๋ผ๋๋งํผ ๊ฐ๋ ฅํ ๊ฒ์ผ๋ก ๋ฐํ์ง๋ฉด Three.js์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ต๋ํ ํ์ฉํ๋ ค๋ฉด ์ฒ์๋ถํฐ ๋ค์ ์์ฑํด์ผํฉ๋๋ค.
์๋
ํ์ธ์.
๊ทธ๋, ๋ ๋์. ๋๋ ๋จผ ๋ฏธ๋๊ฐ ๋ ๊ฒ์
๋๋ค.
์ฝ์ด๋ฅผ ์ฒ์๋ถํฐ ๋ค์ ์์ฑํ์ง ์๊ณ three.js์ WebGPU ๋ ๋๋ฌ๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํฉ๋๊น? threejs๋ก ์ ์ฒด ์์ง (API)์ ์ฒ์๋ถํฐ ๋ค์ ์์ฑํด์ผํฉ๋๊น? WebGPU๊ฐ ๋์ค๋๋ผ๋ ํ๋์ ๊ณต์กด (WebGL / WebGPU) ํ ๊ฐ๋ฅ์ฑ์ด ํฝ๋๋ค. WebGPU๊ฐ ๋ชจ๋ WebGL ์ํ๊ณ๋ฅผ ์ฃฝ์ผ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ง ์์ต๋๋ค.
๊ทธ๋ฌ๋ WebGPU๊ฐ ๊ทธ๋ํฝ ๋๋ผ์ด๋ฒ์ ๊ฐ์ API ์ธ ๊ฒ๊ณผ ๋ฌ๋ฆฌ WebGPU๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก & ์ง์ ์ ์ผ๋ก ์ง์ํ๋ค๋ฉด ๋งค์ฐ ๊ฐ๋ ฅ ํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.๊ทธ๋ฆฌ๊ณ ๊ตฌ๊ธ๊ณผ ๋ค๋ฅธ ๊ฑฐ๋ฌผ๋ค์ ๋ธ๋ผ์ฐ์ ์์ ๋ ๋์ ๋ฅ ๋ฌ๋ ์ฑ๋ฅ๊ณผ ๊ณ ์ฑ๋ฅ ๊ทธ๋ํฝ ๊ฒฝํ์ ์ํฉ๋๋ค.
ThreeJS์๋ WebGLRenderer, WebGL2Renderer, CSS3DRenderer, SVGRenderer ... API๊ฐ ์ค๋น๋๋ฉด WebGPU๋ ๋น์ทํ๊ฒ ์ฒ๋ฆฌ ํ ์ โโ์์ต๋๋ค. ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํ ๋ ๊น์ ๋ณ๊ฒฝ๋ ๊ฐ๋ฅํฉ๋๋ค.
์ด ์ฐจ์ธ๋ API๋ ์ฌ์ฉํ ์์๊ฒ๋์ด ๊ธฐ์์ง๋ง ์ง๊ธ์์ด ๋ฌธ์ ๋ฅผ ๋ง๋ฌด๋ฆฌํ๊ฒ ์ต๋๋ค. :)
๋ฟก๋ฟก
๊ณผ์ฐ .. Three.js๋ ๋๋ฌด ์ ์ฐํด์ ์์ผ๋ก WebGPU๋ ๊ตฌํํ ์ ์๊ฒ ์ฃ ?
WebGPU ์ ์์ ๋ฐ๋ฅด๋ฉด ๊ทธ๋ค์ Three.js ๊ฐ๋ฐ์์ ๋ํด ์ฃผ์ ํ๊ฒ ๊ณ ๊ฐ ์ค ํ๋๋ก ์ธ๊ธํ์ต๋๋ค.
https://gpuweb.github.io/admin/cg-charter.html
์น ์ฝํ ์ธ ์ ์ฌ์ฉ๋๋๋ก ์๋ ๋ GPU ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋น๋ํ๊ณ ์์ง๋ง ์์ ์์ค์ API๋ฅผ ์ ๊ณตํ๊ณ ์ฌ์ฉ์์๊ฒ ๋ฎ์ ์์ค์ ๊ทธ๋ํฝ๊ณผ ๊ณ์ฐ ์ธ๋ถ ์ ๋ณด๋ฅผ ๋๋ถ๋ถ ์จ๊ธฐ๋ JavaScript ํ๋ ์ ์ํฌ ๊ฐ๋ฐ์. ์ : three.js.
๋ด ์ง๋ฌธ์ WHLSL์ด๋ผ๋ ๋ค๋ฅธ ์
ฐ์ด๋ ์ธ์ด๋ฅผ ์ฌ์ฉํ๋ค๋ ๊ฒ์
๋๋ค.
https://github.com/gpuweb/WHLSL
๋ด ์ง๋ฌธ์ WHLSL์ด๋ผ๋ ๋ค๋ฅธ ์ ฐ์ด๋ ์ธ์ด๋ฅผ ์ฌ์ฉํ๋ค๋ ๊ฒ์ ๋๋ค.
"์ฐ๋ฆฌ๊ฐ ๋์ฐฉํ๋ฉด ๊ทธ ๋ค๋ฆฌ๋ฅผ ๊ฑด๋๊ฒ ์ต๋๋ค."
ํ์ฌ ์ฌ์ฉ ๊ฐ๋ฅํ OSX ์ฉ Chrome Canary์ ์คํ์ ์ง์๊ณผ ํจ๊ป Google I / O์์ ๋ฐํ๋์์ต๋๋ค.
https://www.youtube.com/watch?v=K2JzIUIHIhc
Babylon.js๋ ์ถ์ ๋ ๋์ด๋ฅผ ์๋ฒฝํ๊ฒ ์ง์ํ๋ค๊ณ ๋ฐํํ์ต๋๋ค. ์ฌ๊ธฐ์์ ํ์ธํ์ธ์ :
https://forum.babylonjs.com/t/webgpu-is-coming-to-babylon-js/3122
ThreeJS ํ์ด ๋ฆฌ๋๋ฅผ ๋ฐ๋ฅด๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
์ ์ฌ์ ์ธ ์ง์์ด ์ธ๊ธ๋์์ผ๋ฏ๋ก ์ ์ด๊ฒ์ ๋ซ์์ผํ๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๋ ผ๋ฆฌ์ ์ผ๋ก, ์ฐ๋ฆฌ๋ ๋ฌธ์ ๋ฅผ "์ถ์ "ํ๊ธฐ ์ํด ์ด์ด ๋์์ต๋๋ค. ๋ซ์ผ๋ฉด ์ถ์ ํ ๋ค๋ฅธ ๋ฌธ์ ๊ฐ์๋ ํ ์์ด ๋ฒ๋ฆฝ๋๋ค.
์์ง ์์ ๊ฑฐ๋ผ๊ณ ์ฅ๋ด ํ ์ ์์ด์ ... ๐
ํ์ง๋ง ๋๋ ๊ด๋ฆฌ์๊ฐ ์๋๋๋ค. ๊ฐ์ธ์ ์ผ๋ก webgpu๋ฅผ ์ฑํํ ์ฒซ ๋ฒ์งธ ํ๋ ์ ์ํฌ๋ฅผ ๋ฐ๋ฅผ ๊ฒ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์์ ์ ๋ด๊ฐ ์๋๋๋ค. ์ฌ๋ฌ๋ถ์ด์ด ๊ธ์ ๋ซ๋ ๋ฉ์์ง์ ๋๋ค. ๊ทธ๊ฒ์ "๋ฉ์ง ๊ฒ, ํ์คํ ๊ฒ,ํ์ง๋ง ์๊ด ์์ด. ๊ทธ๊ฒ์ ๋ฆผ๋ณด์ ๊ฑฐ๊ธฐ์์์ ์์๋ค"์ ๊ฐ๋ค.
์ถ์ . ๋๋ ๊ทธ๊ฒ์ ์๋ชป ์ฝ์๋ค. ๋๋ ๊ทธ๊ฒ์ด "๋น์ ์ด ๊ทธ๊ฒ์ ์์ง ์์ ๊ฒ์ด๋ผ๊ณ ํ์ ํ ์์๋ค"๋ผ๊ณ ์๊ฐํ๋ค.
@MichelDiz ์ด ๋ฌธ์ ๋ WebGPU๋ฅผ ์ง์ํ ๊ณํ์ธ์ง ๋ฌป๊ธฐ ์ํด ์ด๋ ธ์ต๋๋ค. ์ง๋ฌธ์ ๋ํ ๋ต์ด ์์ต๋๋ค. WebGPU๋ฅผ ์ง์ํ ๊ณํ์ ๋๋ค. ์์ง ์์ ํ๊ธฐ์๋ ๋๋ฌด ์ด๋ฅด์ง๋ง ๋ ผ์ ํ ์ค๋น๊ฐ๋๋ฉด ์๋ก์ด ๋ฌธ์ ๊ฐ ์ด๋ฆด ๊ฒ์ ๋๋ค.
@TimvanScherpenzeel ์ฌ์ฉ์๋ก๋ถํฐ ์ถ์ํ ๋ ํน์ ๋ถ๋ถ์ ๋ค์ ์์ฑํด์ผํ์ง๋ง ์ ์ฒด๋ฅผ "์ฒ์๋ถํฐ ๋ค์ ์์ฑ"ํด์ผํ๋ค๊ณ ์ ์ํ๋ ๊ฒ์ ์์ฒญ๋ ๊ณผ์ฅ์ ๋๋ค. ๋ฒํผ ๋ํ์ ๋์ผํ ํ์์ ๊ฐ์ต๋๋ค. WebGL๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก WebGPU๋ ์์ด๋ GLSL-> WHLSL์ ๊ธฐ๋ฐ์ผ๋กํฉ๋๋ค. WebGL ํ์ค์ด ๋ glTF ํ์๋ WebGPU ํ์ค์ด ๋ ๊ฒ ๊ฐ์ต๋๋ค. ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ ๋ชจ๋ Three.js API๋ 99 % ๋ณ๊ฒฝ๋์ง ์๊ณ ์๋ก์ด WebGPU ๋ ๋๋ฌ๊ฐ ๋ด๋ถ์์์ ๊ฒ์ด๋ฉฐ, ๋ฐ๋ผ๊ฑด๋ ์ฑ๋ฅ์ด ํฌ๊ฒ ํฅ์๋๊ณ ๋์ fps์์ ํฐ ์ฅ๋ฉด์ ๋ ๋๋ง ํ ๊ฐ๋ฅ์ฑ์ ์ด์ด ์ค ๊ฒ์ ๋๋ค.
์๋
ํ์ธ์,
์ด๊ฒ์ ๋ํ ์
๋ฐ์ดํธ์ ๋ง์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค!
์ด๋ฐ ๊ธฐ๋ฅ์ ๋ํ ๋ด ๊ด์ ์ ๊ณต์ ํ๊ณ ์ถ์์ต๋๋ค. ์ฐ๋ฆฌ์ ๊ฒฝ์ฐ ์๋น์ ์ ํ๋ฆฌ์ผ์ด์
์ ํญ์ WebGL์ ์ฌ์ฉํ๋ ๊ฒ์ ์๋๋๋ค. ์์ฐ์ด ~ 1GB ์ธ ๋งค์ฐ ํฐ ๋ฐ์ดํฐ ์ธํธ๋ฅผ ์๊ฐํํ๊ณ WebGPU๋ฅผ ํ์ฑํํ๊ธฐ ์ํด ๋ธ๋ผ์ฐ์ ์ ํ๋๊ทธ๋ฅผ ์ ์ด ํ ์์๋ ๊ณ ์ ํ๋์จ์ด์์ ๋ก์ปฌ๋ก ์ ๊ณต๋๋ WebGL ๊ฒฝํ์ด ์์ต๋๋ค. ๋ฐ๋ผ์ ์คํ ๋ชจ๋์์๋์ด๋ฅผ ์ง์ํ๊ณ ์ถ์ ์ ์์ต๋๋ค. ๋๋ ์ฐ๋ฆฌ๊ฐ ์์๋ผ๋ ๊ฒ์ ์ดํดํ์ง๋ง, ๋ํ์์ด ๊ฒฌํด๋ฅผ ์ถ๊ฐํ๊ณ ์ถ์์ต๋๋ค.
@sinokgr WebGPU ๋ 1GB ์์ฐ์ ํ์ํ๋ ๋ฐ ์ด๋ป๊ฒ ๋์์ด๋ฉ๋๊น? ๋ด๊ฐ ์ดํดํ๋ ํ ๊ธฐํํ ๋ฐ์ดํฐ์ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ WebGL๊ณผ ๋์ผํฉ๋๋ค.
@mrdoob ๋ต์ฅ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. 100 % ์์งํ ๋งํด์, ์ฐจ์ด์ ์ ์ถฉ๋ถํ ์ดํดํ๊ณ ์์ผ๋ฉฐ ์จ๋ผ์ธ์์ ์ฐพ์ ์ ๋ณด๊ฐ ๋งค์ฐ ๋ชจํธํ๋ค๊ณ ์ฃผ์ฅํ์ง ์์ต๋๋ค (์ด์จ๋ ๋ด ์ฐ๊ตฌ์ ๋ฐ๋ฅด๋ฉด). ๋ด๊ฐ ๋๋ผ๋ ์ฃผ๋ ๋๋์ ๋ด๊ฐ ์ข์ํ๋ @DVLP ์ ๋ง์ง๋ง ๋ฉ์์ง์ฒ๋ผ ์ฝ์ ๊ฒ์ ๋๋ค.
ํฐ ์ฑ๋ฅ ํฅ์์ ๊ฐ์ ธ์ค๊ณ ๋์ fps์์ ํฐ ์ฅ๋ฉด์ ๋ ๋๋ง ํ ์์๋ ๊ฐ๋ฅ์ฑ์ ์ด์ด์ค๋๋ค.
์ ์ด๋ ์ฝ๊ฐ์ ๊ฐ์ ์ด์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๊ฒํฉ๋๋ค. ์๋ฅผ ๋ค์ด ์ด๋ฌํ ์์ฐ์ด ์ผ๋ง๋ ๋นจ๋ฆฌ๋ก๋๋๋์ง, ๋ ๋์ fps์ผ๊น์? ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
์ผ๋ฐ ๋ฉ๋ชจ๋ฆฌ์ ๋ํ ์ด๊ธฐ๋ก๋๋ ๋์ผํ๊ฒ ์ ์ง๋์ง๋ง ์ ์ฒด GPU API๊ฐ ๋ ๋นจ๋ผ์ง๋ฏ๋ก GPU๊ฐ ๊ด๋ จ๋ ์๊ฐ๋ถํฐ ๋ ๋นจ๋ผ์ง ๊ฒ์ ๋๋ค. ์ฑ๋ฅ ํฅ์์ ์ถ์ฒ๋ฅผ ํ์ธํ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
@DVLP ์ค๋ช ์ ๋ง์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ํฌ์ธํธ 5์ 6์ ๋ง์ ์ฌ๋ฃ๋ฅผ ๊ฐ์ง ์์ฒ ๊ฐ์ ๋ฌผ์ฒด๋ฅผ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ ๋์๊ฒ ๋งค์ฐ ํฅ๋ฏธ๋กญ๊ฒ ๋ค๋ฆฝ๋๋ค.
WebGPU๊ฐ ๋๋ฆฌ ์ฑํ๋๊ธฐ๊น์ง๋ ์ค๋ ์๊ฐ์ด ๊ฑธ๋ฆด ์ ์์ต๋๋ค. ๊ทธ๋๊น์ง ๋ฉ์ ์ธ์ค ํด์ฑ์ ์ฌ์ฉํ์ฌ ์ ์ฒด ์๋๋ฅผ ๋์ผ ์ ์์ต๋๋ค.
https://threejs.org/docs/#api/en/objects/InstancedMesh
์ธ์คํด์คํ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ชจ๋ ๊ฐ์ฒด๋ @DVLP ๊ณ ์
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์์ง ์์ ๊ฑฐ๋ผ๊ณ ์ฅ๋ด ํ ์ ์์ด์ ... ๐