Three.js
Last updated
Last updated
WebGL์ ๊ธฐ๋ฐ์ผ๋ก ํ 3D ๊ทธ๋ํฝ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
๋ณต์กํ WebGL
์ฝ๋๋ค์ด ๊ฐ๋จํ API๋ก ์ถ์ํ ๋์ด์์ด, 3D ๋ ๋๋ง ์์
๋ค์ ๊ฐํธํ๊ฒ ๊ตฌํํ ์ ์๋ค.
3D ๋ชจ๋ธ ์์ฑ, ํ ์ค์ฒ ๋งคํ, ์กฐ๋ช ํจ๊ณผ, ์นด๋ฉ๋ผ ์ปจํธ๋กค, ์ ๋๋ฉ์ด์ ๋ฑ ๋ค์ํ 3D ๊ธฐ๋ฅ์ ์ ๊ณต
์น ๋ธ๋ผ์ฐ์ ์์์ 2D, 3D ๊ทธ๋ํฝ์ ๋ ๋๋งํ๊ธฐ ์ํ ์ ์์ค์ JavaScript API
OpenGL ES 2.0
์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฉฐ, canvas
์์์ ๋ ๋๋งํ๋ค.
๋ฅผ ํ์ฉํ์ฌ(ํ๋์จ์ด ๊ฐ์) ๋ธ๋ผ์ฐ์ ์์์ ๋์ ํ์ง์ 3D ๊ทธ๋ํฝ์ ๋ ๋๋งํ๊ณ ์ฑ๋ฅ์ ํฅ์์ํจ๋ค.
ํ์ค ์น ๊ธฐ์ ๋ก์, ๋ณ๋์ ํ๋ฌ๊ทธ์ธ ์์ด ๋ธ๋ผ์ฐ์ ์์ ์ฌ์ฉํ ์ ์๋ค.
์๋ฒ ๋๋ ๋ฐ ๋ชจ๋ฐ์ผ ์์คํ ์์ 2D ๋ฐ 3D ๊ทธ๋ํฝ์ ๋ ๋๋งํ๊ธฐ ์ํ ํฌ๋ก์ค ํ๋ซํผ API
OpenGL ES
๋ ๋ฐ์คํฌํ ์ปดํจํฐ์ฉ OpenGL API์ ๊ฐ์ํ๋ ๋ฒ์
๋ฆฌ์์ค ์ ์ฝ์ด ์๋ ๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ์ ์๋ฒ ๋๋ ์์คํ ์ ๋ง๊ฒ ์ต์ ํ๋์ด ์๋ค.
์๋ก์ด ๋ฒ์ ์ด ์ถ์๋ ๋๋ง๋ค ๊ทธ๋ํฝ ๋ฅ๋ ฅ๊ณผ ํจ์จ์ฑ์ ํฅ์์ํค๊ธฐ ์ํด ๋ค์ํ ๋ณํ์ ์ถ๊ฐ๋ ๊ธฐ๋ฅ๋ค์ด ํฌํจ๋๋ค.
3D ๊ทธ๋ํฝ์ ํ๋ฉด์ ํ์ํ๊ธฐ ์ํด์๋ ๊ธฐ๋ณธ์ ์ผ๋ก 4๊ฐ์ง ๊ธฐ๋ณธ ๊ตฌ์ฑ์์๊ฐ ํ์ํ๋ค.
Renderer
,Scene
,Camera
,3D Object
3D ๋ชจ๋ธ ๋ฐ ์ฅ๋ฉด์ ์ค์ ํ๋ฉด์ ๊ทธ๋ ค์ฃผ๋ ์ญํ
3D ๊ทธ๋ํฝ์ 2D ํ๋ฉด์ ํํํ๊ธฐ ์ํด ํ์ํ ์์ ์ ์ฒ๋ฆฌํ๋ค.
GPU๋ฅผ ์ฌ์ฉํ์ฌ ๋ ๋๋ง ์์ ์ ๊ฐ์ํํ๋ฉฐ, WebGL์ ํตํด ์ ๊ทผํ๋ค.
์ฅ๋ฉด์ ์ฑ์ฐ๊ธฐ ์ํด์ ๋ฐฐ์ฐ, ์ฃผ๋ณ ์ฌ๋ฌผ, ์กฐ๋ช ๋ฑ์ด ํฌํจ๋๋๋ฐ ์ด๋ฐ๊ฒ๋ค์ด Three.js์์๋
Mash
,Object
,Light
์ ๊ฐ์ 3์ฐจ์ ์ค๋ธ์ ํธ๋ก ํํ๋๋ค.
3D ๋ชจ๋ธ์ ๋ํ๋ด๋ ๊ธฐ๋ณธ ๋จ์์ด๋ฉฐ, ์ (Vertex), ์ (Edge), ๋ฉด(Face) ๋ฑ์ ๊ธฐํํ์ ํํ(Geometry)์ ํํ์ ์ ์ฉ๋๋ ์ฌ์ง(Material)์ ํฌํจํ๋ค.
3๊ฐ์ ์ ์ ์ผ๋ก ๋ง๋ค์ด์ง ์ผ๊ฐ๋ฉด(ํด๋ฆฌ๊ณค)์ผ๋ก ๊ตฌ์ฑ๋ 3์ฐจ์ ๋ฌผ์ฒด๋ฅผ Mesh
๋ผ ํ๋ค.
์ ์ (Vertex)๊ณผ ์ผ๊ฐ๋ฉด(Polygon)์ผ๋ก ๊ตฌ์ฑ๋๋ฉฐ, ์ ์ ์ ์ขํ์ ์ผ๊ฐ๋ฉด์ ๊ตฌ์ฑํ๋ ์ ์ ์ธ๋ฑ์ค๋ฅผ ์ค์ ํ์ฌ 3D ๋ชจ๋ธ์ ํํ๋ฅผ ์ ์
์ผ๊ฐ๋ฉด(Polygon) โ 3๊ฐ์ ์ ์ ์ผ๋ก ๋ฉด์ ๋ง๋ค ์ ์๋๋ฐ ์ด๋ ๊ฒ ๋ง๋ค์ด์ง ์ผ๊ฐ๋ฉด์ ํด๋ฆฌ๊ณค์ด๋ผ ํ๋ค. 3D ๋ฌผ์ฒด๋ฅผ ๊ตฌ์ฑํ๋ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๋จ์
ํด๋ฆฌ๊ณค์ด ๋ง์ด ๊ตฌ์ฑ๋ ์๋ก ๋์ฑ ํ์ค์ ์ธ 3D ๊ฐ์ฒด๋ฅผ ํํํ ์ ์๊ฒ ๋๋ค.
์ ์ ์ธ๋ฑ์ค(Vertex Index)๋ ๋ชจ๋ธ์ ์ ์ ๋ค์ด ์ด๋ค ์์๋ก ๋์ด๋์ด ์๋์ง๋ฅผ ๋ํ๋ด๋ ์ธ๋ฑ์ค ๋ฐฐ์ด๋ก ์ ์ ๋ค์ ๊ณต์ ํ์ฌ ํจ์จ์ ์ผ๋ก(๋ฉ๋ชจ๋ฆฌ ์ ์ฝ, ๊ณ์ฐ๋ ์ค์ ๋ฑ) ๊ด๋ฆฌํ ์ ์๊ฒ ๋ง๋ ๋ค.
ํ๋ธ(Cube), ๊ตฌ(Sphere), ์ํต(Cylinder), ํ๋ฉด(Plane) ๋ฑ ๊ธฐ๋ณธ์ผ๋ก ์ ๊ณต๋๋ 3D ๊ฐ์ฒด ํ์
๊ฐ์ฒด์ ์กฐ๋ช ๋ฐ ๊ทธ๋ฆผ์๋ฅผ ์กฐ์ ํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์์
์ฃผ๋ณ๊ด(Ambient Light), ๋ฐฉํฅ๊ด(Directional Light), ์ ๊ด(Point Light), ์คํฌํธ๋ผ์ดํธ(Spotlight) ๋ฑ์ ๋ค์ํ ์กฐ๋ช ์ด ์์ผ๋ฉฐ, ๊ฐ ์กฐ๋ช ํ์ ์ ์ฅ๋ฉด์ ์กฐ๋ช ์กฐ๊ฑด์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ์ฌ์ฉ๋๋ค.
์ฃผ๋ณ๊ด(Ambient Light) โ ๋ชจ๋ ๋ฐฉํฅ์์ ๋์ผํ๊ฒ ํผ์ง๋ ์กฐ๋ช ์ผ๋ก, ๊ทธ๋ฆผ์๋ฅผ ๋ง๋ค์ ์๊ณ ๋ฌผ์ฒด ํ๋ฉด์ ์ผ์ ํ ๋ฐ๊ธฐ๋ฅผ ๋ถ์ฌํ๋ค.
๋ฐฉํฅ๊ด(Directional Light) โ ํน์ ํ ๋ฐฉํฅ์ผ๋ก ์ง์ฌ๊ด์ ์ ๋ด๋ ค์ฃผ๋ ์กฐ๋ช ์ผ๋ก, ๊ทธ๋ฆผ์๋ฅผ ๋ง๋ค์ด ๋ด๋ ๋ฐ ํจ๊ณผ์ ์ด๋ฉฐ ๋น์ ๋ฐฉํฅ์ผ๋ก ๋ฌผ์ฒด์ ์ ์ฒด๊ฐ์ ์ค๋ค.
์ ๊ด(Point Light) โ ํน์ ์์น์ ํ ์ ์์ ๋ชจ๋ ๋ฐฉํฅ์ผ๋ก ํผ์ ธ๋๊ฐ๋ ์กฐ๋ช ์ผ๋ก ํด๋น ๋น์ ์ฃผ๋ณ์ผ๋ก ๊ฐ์๋ก ๊ฐ์ ๋๋ฉฐ, ๋ฌผ์ฒด ์ฃผ๋ณ์ ๋น์ด ๋ชจ์ด๋ ํจ๊ณผ๋ฅผ ๋ํ๋ด๊ธฐ์ ์ ํฉํ๋ค.
์คํฌํธ๋ผ์ดํธ(Spotlight) โ ํน์ ์์น์ ํน์ ๋ฐฉํฅ์์ ๋น์ ๋ฐ์ฐํ๋ ์กฐ๋ช ์ผ๋ก, ์๋ฟ ํํ์ ๋น์ ์์ฑํ๋ฉฐ, ํน์ ์ง์ ์ ๊ฐ์กฐํ๊ฑฐ๋ ๊ฐ์กฐํ์ง ์๊ฒ ํ์ฌ ๊ฐ์กฐ ํจ๊ณผ๋ฅผ ๋ง๋ค์ด๋ธ๋ค.
์กฐ๋ช ์ ์์น, ์์, ๊ฐ๋ ๋ฑ์ ์ค์ ํ์ฌ 3D ๊ฐ์ฒด์ ์๊ฐ์ ํจ๊ณผ๋ฅผ ์กฐ์ ํ๋ค.
3D ๊ณต๊ฐ์์์ ์์ผ๋ฅผ ๋ํ๋ด๋ ์ญํ ์นด๋ฉ๋ผ์ ์์น, ์์ (direction), ์ข ํก๋น(aspect ratio), ์์ผ๊ฐ(fov) ๋ฑ์ ์์ฑ์ ์ค์ ํ์ฌ ์ด๋ค ์ฅ๋ฉด์ ๋ณด์ฌ์ค์ง ๊ฒฐ์ ํ๋ค. (์นด๋ฉ๋ผ์ ์กํ์ง ์๋ ์์๋ ๋ ๋๋ง๋์ง ์์ ๋ถํ์ํ ๋ ๋๋ง์ ์ค์ธ๋ค.)
Fov(Field Over View, ์์ผ๊ฐ) โ ์ด ๊ฐ๋๊ฐ ๋์ด์ง๋ฉด ์นด๋ฉ๋ผ์ ๋ ๋ง์ ๋ฒ์๋ฅผ ๋ด๊ฒ ๋๋ค.
Near โ ์นด๋ฉ๋ผ์ ๋ฌผ์ฒด๊น์ง์ ์ต์ ๊ฑฐ๋ฆฌ๋ก, near ์ด์ ์ ๋ฌผ์ฒด๋ ์์ผ์ ํฌํจ๋์ง ์์ ๋ ๋๋ง๋์ง ์๋๋ค.
Far Plane โ ์นด๋ฉ๋ผ๊ฐ ์ผ๋ง๋ ๋ฉ๋ฆฌ๊น์ง ๋ณผ ์ ์๋์ง๋ฅผ ๋ํ๋ธ๋ค.
๊ธฐ๋ณธ ๋ํ๋ถํฐ ์ฌ์ฉ์๊ฐ ์ ์ํ ๋ณต์กํ ๋ชจ๋ธ๊น์ง ํฌํจ๋๋ฉฐ, ํ๋ฉด์ ํ์๋๋ ์ค์ ๋ชจ๋ธ์ ๋ํ๋ธ๋ค.
3D ๊ฐ์ฒด๋ ์ ์ (Vertex)๋ค๋ก ๊ตฌ์ฑ๋๊ณ , ์ด ์ ์ ๋ค์ ๋ฉ์(Mesh)๋ฅผ ํ์ฑํ์ฌ ๋ชจ๋ธ์ ํํ๋ฅผ ๊ฒฐ์
๊ฐ์ฒด์ ์์น, ํ์ , ํฌ๊ธฐ ๋ฑ์ ๋ณํ์ ์กฐ์ํ์ฌ ์ํ๋ ๋ชจ์์ผ๋ก ๋ฐฐ์นํ ์ ์๋ค.