๊ธ๋๋ฅผ ์์ํ ํ, ์ฐ๋ฆฌ์ ์ด์์คํด๋ณด์๋ ์๋ชจ์์ ๊ฐ์ ํ์ฌ Three.js ์คํฐ๋๋ฅผ ํ๊ฒ ๋์๋ค. ์ ๋ฒ์ฃผ ์ ์ฒด ์จ๋ณด๋ฉ์ ์ด์ด ์ด๋ฒ์ฃผ ์คํฐ๋์กฐ ์คํ๋ผ์ธ ๋ชจ์์ ํ๋๋ฐ, 2์ฃผ๊ฐ์ Three.js ์คํฐ๋ ๊ธฐ๋ก์ ํด๋ณด๋ ค๊ณ ํ๋ค.
์ฐ๋ฆฌ์ ์ด์์คํด๋ณด์๋, ์ฒซ ๋ฒ์งธ ์คํ๋ผ์ธ ๋ชจ์
์ฌ์ค ์ฐ๋ฆฌ์ ์ด์์คํด๋ณด์๋ ์ฒซ ํ์๋ ์จ๋ผ์ธ์ผ๋ก ์งํ๋์๋๋ฐ, ๊น๋นก ์ ๋ค์ด์ ์ฐธ์ฌํ์ง ๋ชปํ๋ค. ๊ทธ๋์ ์ฒซ ๋ฒ์งธ ์คํ๋ผ์ธ ๋ชจ์์ ๋ฌด์จ ์ผ์ด ์์ด๋ ์ฐธ์ฌํด์ผ๊ฒ ๋ค๊ณ ์๊ฐํ๊ณ , ์ํ ์ ๋ ์ด์ง๋ง ํ๋ง์ ์ฌ๊ณผ๊น์ง์ ์๋ณต 3์๊ฐ ๋ชจํ์ ๊ฐํํ๋ค.
์คํ๋ผ์ธ ๋ชจ์์์๋ "Three.js๋ ๋ฌด์์ธ๊ฐ"์ ๋ํด์ ์คํฐ๋์ฅ๋๊ป์ ๋ฐํํด์ฃผ์ จ๋ค. ๋ฐํ์์ ๊ฐ์ฅ ๊ธฐ์ต์ ๋จ๋ ๋ด์ฉ์ CPU์ GPU์ ์ฐจ์ด์ ๋ํ ์ค๋ช ์ด์๋ค. ์ ์ปดํจํฐ์์ ๊ทธ๋ํฝ์ ๋ค๋ฃจ๊ธฐ ์ํด GPU๋ฅผ ์จ์ผ ํ๋๊ฐ..CPU๋ฅผ ์ฐ๋ฉด ์ต์ core i9๋ฅผ ๊ธฐ์ค์ผ๋ก๋ 1์ด๊ฐ ํ๋ฉด ํ์๋ฅผ ์ํด 76.4์ด๊ฐ ์ฐ์ฐ์ด ํ์ํ๋ค. ๋ฐ๋ฉด GPU๋ ๋ณ๋ ฌ์ ์ผ๋ก ์ฐ์ฐ์ ์งํํด์ ๋ฆฌ์ผํ์ ๋ ๋๋ง์ด ๊ฐ๋ฅํ๋ค. CPU์ GPU์ ๊ตฌ์กฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก๋ ์ค๋ช ํด์ฃผ์ ์, ๊ทธ๋ํฝ์ค์์ GPU์ ์ฐ์๋ฅผ ์ฝ๊ฒ ์ดํดํ ์ ์์๋ค.
์กฐ ์คํ๋ผ์ธ ๋ชจ์
10์ 25์ผ ๊ธ์์ผ์ ์กฐ๋ณ ๋ชจ์์ ๊ฐ์ก๋ค. ์คํฐ๋์์ ์ ๊ณต๋ ์ปค๋ฆฌํ๋ผ์ ๋ฐํ์ผ๋ก, ๋จผ์ ๊ฐ์ธ ๊ณต๋ถ๋ฅผ ์งํํ ๋ค ์กฐ๋ณ๋ก ๋ชจ์ฌ ๋ด์ฉ์ ๊ณต์ ํ๋ค.
์กฐ์ ์ค ์คํฐ๋์ฅ๋์ด ๊ณ์์ ๊ฑฐ์ ๊ณผ์ธ ๋ฐ๋ ์์ค์ผ๋ก ์ธ์ธํ ์ค๋ช ์ ๋ค์ ์ ์์๋ค. ์ ๊ณต ๊ณผ์ ์ค ์ปดํจํฐ ๊ทธ๋ํฝ์ค์ OpenGL์ ๋ค๋ฃฌ ๊ฒฝํ์ด ์์ด ๊ฐ๋ ์ ์ด๋ ์ ๋ ์๊ณ ์๋ค๊ณ ์๊ฐํ์ง๋ง, ์คํฐ๋์ฅ๋์ ์ค๋ช ์ ๋ค์ผ๋ฉด์ "์" ๊ทธ๋ฐ์ง์ ๋ํด ๊น์ด ์๊ฒ ๋๋ค . ๊ทธ๋ํฝ์ค์์์ ์นด๋ฉ๋ผ ์๋ฆฌ, ๋ฒกํฐ์ ์ค์นผ๋ผ, ๊ทธ๋ฆฌ๊ณ ํฌ์ ๋ฑ three.js๋ ์ฝ๋๋ณด๋ค๋ ๊ทธ๋ํฝ์ค์ ๊ธฐ๋ณธ์ ์ธ ๊ฐ๋ ์ ๋ํด์ ๊น๊ฒ ์ดํดํ ์ ์๋ ์๊ฐ์ด์๋ค.
Three.js๋
WebGL ๋ฑ์ ๋ณต์กํ ๋ก์ฐ๋ ๋ฒจ ์ฝ๋๋ฅผ ์ถ์ํ, ๋จ์ํ ์ํจ ๊ณ ์์ค API๋ฅผ ํตํด, ๊ฐ๋ฐ ๊ณผ์ ์ ๋จ์ํํ๋ 3D ๊ทธ๋ํฝ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
3D ๊ทธ๋ํฝ ๋๊ตฌ์๋ ์ฌ๋ฌ๊ฐ์ง๊ฐ ์๋ค. OpenGl, WebGl, Three.js, Babylon.js ๋ฑ์ด ๋ํ์ ์ธ๋ฐ, ๊ฐ ๋๊ตฌ๋ค์ ์ ๋ง๋ค์ ์ถ์ํ ๊ณ์ธต์ ๊ฐ์ง๊ณ ์๋ค.
- OpenGL: ์ตํ์ ๋ ๋ฒจ๋ก, ํ๋์จ์ด์ ์ง์ ํต์ ์ ํ๋ฉฐ ์ธ๋ฐํ ์ ์ด๊ฐ ๊ฐ๋ฅํ๋ค. ํ์ง๋ง ์ง์ ์ฅ๋ฒฝ์ด ๋๋ค๋ ๋จ์ ์ด ์๋ค.
- WebGL: ์น ๋ธ๋ผ์ฐ์ ๋ฅผ ์ํ OpenGL ES ๊ธฐ๋ฐ API๋ก, ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์ ๊ทผ ๊ฐ๋ฅํ๋ค. ์ฌ์ ํ ๋ณต์กํ ๋ณด์ผ๋ฌํ๋ ์ดํธ ์ฝ๋๊ฐ ํ์ํ๋ฉฐ ๋ค๋ฃจ๊ธฐ ์ด๋ ต๋ค.
- Three.js: WebGL ๊ธฐ๋ฐ์ ๊ณ ์์ค ์๋ฐ์คํฌ๋ฆฝํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค. ์ง๊ด์ ์ธ API๋ฅผ ์ ๊ณตํ๋ฉฐ, ์น ๋ธ๋ผ์ฐ์ ๋ด๋ถ์์ ๊ณ ์์ค์ ์ถ์ํ ๋ ์ด์ด์์ ๋์ํ๋ค. ๋น ๋ฅธ ๊ฐ๋ฐ์ด ๊ฐ๋ฅํ๋ฉฐ, R3F ๋ฑ ๋ ํธํ 3D ๊ตฌํ์ ์ํ ํด๋ ์๋ค.
์ ๋๊ตฌ๋ค์ ์ปดํจํฐ ์์์ 3D ๊ทธ๋ํฝ์ ๊ตฌํํ๋ ๋ฐ ์ฌ์ฉ๋์ง๋ง, ๊ณผ์ฐ ์ด๋ค๋ก ์์ฑํ๋ ๊ฒ์ด ์ง์ง 3D์ผ๊น?
์ฌ์ค, OpenGL ์์ฒด๋ 3D ๊ทธ๋ํฝ ๋๊ตฌ๊ฐ ์๋๋ค๐ฎ . OpenGL์ ์ขํ ํ๋ฉด์์ ์ , ์ , ์ผ๊ฐํ์ ๊ทธ๋ฆฌ๋ ์ผ์ข ์ ๊ทธ๋ํฝ ํ์ดํ๋ผ์ธ์ด๋ค. 3D ๊ณต๊ฐ์ ํํํ๊ธฐ ์ํด์๋ ํฌ์์ด๋ผ๋ ๊ณผ์ ์ด ํ์ํ๋ค
ํฌ์
ํฌ์์ด๋ 3D ๊ณต๊ฐ์ ๊ฐ์ฒด๋ฅผ 2D ํ๋ฉด์ ๊ทธ๋ฆด ๋, 3์ฐจ์ ์ขํ๋ฅผ 2์ฐจ์ ํ๋ฉด์ผ๋ก ๋ณํํ๋ ๊ณผ์ ์ด๋ค. ํฌ์์ ํตํด ๊น์ด์ ์ ์ฒด๊ฐ์ ๊ฐ์ง 3์ฐจ์ ๊ฐ์ฒด๊ฐ ํ๋ฉด์ ๋๋ฌ๋๋ฉฐ, ์ด๋ฅผ ํตํด ์ธ๊ฐ์ ๋์ ํ๋ฉด ์ ๊ทธ๋ํฝ์ 3D๋ก ์ธ์ํ๊ฒ ๋๋ค.
ํฌ์์๋ ๋ ๊ฐ์ง ์ข ๋ฅ๊ฐ ์๋ค.
1. ์ง๊ตํฌ์(Orthographic Projection) : ๊ฐ์ฒด๊ฐ ์นด๋ฉ๋ผ์ ์ผ๋ง๋ ๊ฐ๊น์ด์ง์ ์๊ด์์ด ๋์ผํ ํฌ๊ธฐ๋ก ๋ณด์ด๋๋ก ํํ
2. ์๊ทผํฌ์(Perspective Projection) : ์ค์ ์์ผ์ฒ๋ผ ๊ฑฐ๋ฆฌ์ ๋ฐ๋ผ ๊ฐ์ฒด ํฌ๊ธฐ๊ฐ ๋ฌ๋ผ์ง๋๋ก ํํ. ํฐ ๋ฌผ์ฒด๋ ํฌ๊ฒ, ๋จผ ๋ฌผ์ฒด๋ ์๊ฒ
ํฌ์์ ํตํด 3์ฐจ์ ์ ๋ณด๊ฐ ํ๋ฉด์ ํฌ์๋๋ฉด, ์ธ๊ฐ์ ๋์ ๊ทธ ์์์ ๊น์ด์ ๊ฑฐ๋ฆฌ๊ฐ์ ๋๊ปด 3D์ฒ๋ผ ์ธ์ํ ์ ์๋ ๊ฒ์ด๋ค.
ํฌ์์ ํ์ฉ
ํน์ ๋ชฉ์ ์ด๋ ์คํ์ผ์ ์ํด๋ค์ํ ํฌ์ ๋ฐฉ์์ด ํ์ฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ด์ ๋ ์ฆ ํฌ์๊ณผ ๋ฑ๊ฐ ํฌ์์ ์ผ๋ฐ์ ์ธ ์๊ฐ๊ณผ๋ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก 3D ๊ณต๊ฐ์ ํํํ์ฌ, ์ ๋ณด๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ ๋ฌํ๊ฑฐ๋ ๋ ํนํ ์๊ฐ์ ํจ๊ณผ๋ฅผ ์ ๊ณตํ ์ ์๋ค. ์ด๋ฌํ ๋ฐฉ์๋ค์ ์ธ๊ฐ์ ์๊ฐ์ ๊ตฌ์ ๋ฐ์ง ์๊ณ ๋์ฑ ๋ค์ํ ์๊ฐ์ ๊ฒฝํ์ ๊ฐ๋ฅํ๊ฒ ํ๋ค.
OpenGL์ ์ฌ์ฉํ๋ฉด 3D ํํ์ ์ํด ๋ณ๋์ ํฌ์์ด ํ์ํ์ง๋ง, Three.js๋ ์ด๋ฌํ ์ฐ์ฐ์ ๋์ ํด์ค๋ค. ๋ฐ๋ผ์ ๋ณด๋ค ๋ ์ฝ๊ฒ, 3D๋ฅผ ํํํ ์ ์๋ ๊ฒ์ด๋ค.
Three.js ์คํฐ๋ ๋ชฉํ
์ ๊ณต ์์ ์ค OpenGL์ ๋ฐฐ์ฐ๋ฉด์, ๊ธฐ๋ง ํ๋ก์ ํธ๋ก ํ์๊ณ ํ๋ก์ ํธ๋ฅผ ๋ง๋ค์์๋ค. ํ ์ค์ณ ๋งคํ๋ ์คํจํ์ฌ ๋ ๊ฒ ๊ทธ๋๋ก์ ์ค๋ธ์ ํธ์ด๊ณ , ๊ธฐ๋ฅ๋ ๋ณ๋ณ์ฐฎ์ง๋ง ๋ฉฐ์น ๋ฐค๋ฎ์ ์ธ์ฐ๋ฉฐ ๋ง๋ค์๋ํฐ๋ผ ์ ๋ง ์ ์ ์ ๊ฐ์ง๊ณ ์๋ ํ๋ก์ ํธ์ด๋ค. ๋๋ฆ ์ด์ค ์ผ์ค์ผ๋ก ์ค๋ธ์ ํธ ์์ ์คํ์ผ๋ง, ํ ์ฑ ๋ ๋ํ ์ผ๊น์ง ์ฑ๊น
์ด ํ๋ก์ ํธ๋ฅผ ๊ณ๊ธฐ๋ก ์ปดํจํฐ ๊ทธ๋ํฝ์ค์ ๊ด์ฌ์ ๊ฐ์ง๊ฒ ๋์๊ณ , Three.js์๋ ๊ด์ฌ์ ๊ฐ์ง๊ฒ ๋์๋ ๊ฒ ๊ฐ๋ค. ๊ทธ๋์ ์ด๋ฒ Three.js ์ต์ข ๋ชฉํ๋ OpenGL๋ก ๋ง๋ค์๋ ํ์๊ณ ํ๋ก์ ํธ๋ฅผ Three.js๋ก ์ด์ํด๋ณด๋ ๊ฒ์ผ๋ก ์ ํ๋ค. ํ์๊ณ๊ฐ ๋์๊ฐ๋ ์ธํฐ๋ ์ ๋ธ๋ก๊ทธ ๋ง๋ค๊ธฐ๋ฅผ ๋ชฉํ๋ก, Three.js ์คํฐ๋ ํ์ดํ