Three.js

Three.js

WebGL์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ 3D ๊ทธ๋ž˜ํ”ฝ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

  • ๋ณต์žกํ•œ WebGL ์ฝ”๋“œ๋“ค์ด ๊ฐ„๋‹จํ•œ API๋กœ ์ถ”์ƒํ™” ๋˜์–ด์žˆ์–ด, 3D ๋ Œ๋”๋ง ์ž‘์—…๋“ค์„ ๊ฐ„ํŽธํ•˜๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • 3D ๋ชจ๋ธ ์ƒ์„ฑ, ํ…์Šค์ฒ˜ ๋งคํ•‘, ์กฐ๋ช… ํšจ๊ณผ, ์นด๋ฉ”๋ผ ์ปจํŠธ๋กค, ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋“ฑ ๋‹ค์–‘ํ•œ 3D ๊ธฐ๋Šฅ์„ ์ œ๊ณต

WebGL(Web Graphics Library)

์›น ๋ธŒ๋ผ์šฐ์ €์ƒ์—์„œ 2D, 3D ๊ทธ๋ž˜ํ”ฝ์„ ๋ Œ๋”๋งํ•˜๊ธฐ ์œ„ํ•œ ์ €์ˆ˜์ค€์˜ JavaScript API

  • OpenGL ES 2.0 ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋ฉฐ, canvas ์š”์†Œ์— ๋ Œ๋”๋งํ•œ๋‹ค.

  • GPUarrow-up-right๋ฅผ ํ™œ์šฉํ•˜์—ฌ(ํ•˜๋“œ์›จ์–ด ๊ฐ€์†) ๋ธŒ๋ผ์šฐ์ € ์ƒ์—์„œ ๋†’์€ ํ’ˆ์งˆ์˜ 3D ๊ทธ๋ž˜ํ”ฝ์„ ๋ Œ๋”๋งํ•˜๊ณ  ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚จ๋‹ค.

  • ํ‘œ์ค€ ์›น ๊ธฐ์ˆ ๋กœ์„œ, ๋ณ„๋„์˜ ํ”Œ๋Ÿฌ๊ทธ์ธ ์—†์ด ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

OpenGL for Embedded Systems

์ž„๋ฒ ๋””๋“œ ๋ฐ ๋ชจ๋ฐ”์ผ ์‹œ์Šคํ…œ์—์„œ 2D ๋ฐ 3D ๊ทธ๋ž˜ํ”ฝ์„ ๋ Œ๋”๋งํ•˜๊ธฐ ์œ„ํ•œ ํฌ๋กœ์Šค ํ”Œ๋žซํผ API

  • OpenGL ES๋Š” ๋ฐ์Šคํฌํƒ‘ ์ปดํ“จํ„ฐ์šฉ OpenGL API์˜ ๊ฐ„์†Œํ™”๋œ ๋ฒ„์ „

  • ๋ฆฌ์†Œ์Šค ์ œ์•ฝ์ด ์žˆ๋Š” ๋ชจ๋ฐ”์ผ ๊ธฐ๊ธฐ์™€ ์ž„๋ฒ ๋””๋“œ ์‹œ์Šคํ…œ์— ๋งž๊ฒŒ ์ตœ์ ํ™”๋˜์–ด ์žˆ๋‹ค.

  • ์ƒˆ๋กœ์šด ๋ฒ„์ „์ด ์ถœ์‹œ๋  ๋•Œ๋งˆ๋‹ค ๊ทธ๋ž˜ํ”ฝ ๋Šฅ๋ ฅ๊ณผ ํšจ์œจ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ๋‹ค์–‘ํ•œ ๋ณ€ํ™”์™€ ์ถ”๊ฐ€๋œ ๊ธฐ๋Šฅ๋“ค์ด ํฌํ•จ๋œ๋‹ค.

circle-info

Open Graphics Library -> ์—ฌ๋Ÿฌ ๋ถ„์•ผ์—์„œ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๋ฒ”์šฉ์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ๋ฐœํ‘œ๋œ 2D, 3D ๊ทธ๋ž˜ํ”ฝ API์˜ ๊ทœ๊ฒฉ

3D ๊ทธ๋ž˜ํ”ฝ 4๊ฐ€์ง€ ๊ธฐ๋ณธ ๊ตฌ์„ฑ์š”์†Œ

3D ๊ทธ๋ž˜ํ”ฝ์„ ํ™”๋ฉด์— ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ 4๊ฐ€์ง€ ๊ธฐ๋ณธ ๊ตฌ์„ฑ์š”์†Œ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

Renderer, Scene, Camera, 3D Object

Renderer

3D ๋ชจ๋ธ ๋ฐ ์žฅ๋ฉด์„ ์‹ค์ œ ํ™”๋ฉด์— ๊ทธ๋ ค์ฃผ๋Š” ์—ญํ• 

  • 3D ๊ทธ๋ž˜ํ”ฝ์„ 2D ํ™”๋ฉด์— ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.

  • GPU๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ Œ๋”๋ง ์ž‘์—…์„ ๊ฐ€์†ํ™”ํ•˜๋ฉฐ, WebGL์„ ํ†ตํ•ด ์ ‘๊ทผํ•œ๋‹ค.

Scene

์žฅ๋ฉด์„ ์ฑ„์šฐ๊ธฐ ์œ„ํ•ด์„  ๋ฐฐ์šฐ, ์ฃผ๋ณ€ ์‚ฌ๋ฌผ, ์กฐ๋ช…๋“ฑ์ด ํฌํ•จ๋˜๋Š”๋ฐ ์ด๋Ÿฐ๊ฒƒ๋“ค์ด Three.js์—์„œ๋Š” Mash, Object, Light ์™€ ๊ฐ™์€ 3์ฐจ์› ์˜ค๋ธŒ์ ํŠธ๋กœ ํ‘œํ˜„๋œ๋‹ค.

Mesh

3D ๋ชจ๋ธ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ธฐ๋ณธ ๋‹จ์œ„์ด๋ฉฐ, ์ (Vertex), ์„ (Edge), ๋ฉด(Face) ๋“ฑ์˜ ๊ธฐํ•˜ํ•™์  ํ˜•ํƒœ(Geometry)์™€ ํ˜•ํƒœ์— ์ ์šฉ๋˜๋Š” ์žฌ์งˆ(Material)์„ ํฌํ•จํ•œ๋‹ค.

3๊ฐœ์˜ ์ •์ ์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ ์‚ผ๊ฐ๋ฉด(ํด๋ฆฌ๊ณค)์œผ๋กœ ๊ตฌ์„ฑ๋œ 3์ฐจ์› ๋ฌผ์ฒด๋ฅผ Mesh๋ผ ํ•œ๋‹ค.

circle-info

Material vs Texture

์œ„ ๋‘˜์€ ๋น„์Šทํ•œ ๊ฐœ๋…์ด์ง€๋งŒ, ์ •ํ™•ํžˆ๋Š” ๋‹ค๋ฅด๋‹ค. Material โ†’ 3D ๊ฐ์ฒด ํ‘œ๋ฉด์˜ ํŠน์„ฑ์„ ์ •์˜ํ•˜๋Š” ์†์„ฑ์˜ ์ง‘ํ•ฉ, ๋ฌผ์ฒด์˜ ์ƒ‰์ƒ, ๊ด‘ํƒ, ๋ฐ˜์‚ฌ์œจ, ๋ถˆํˆฌ๋ช…๋„๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค. 3D ๊ฐ์ฒด์˜ ์™ธ๊ด€์„ ๊ฒฐ์ •ํ•˜๋Š” ์ค‘์š”ํ•œ ์š”์†Œ Texture โ†’ 3D ๊ฐ์ฒด์˜ ํ‘œ๋ฉด์— ์ ์šฉ๋˜๋Š” ์ด๋ฏธ์ง€ ๋˜๋Š” ํŒจํ„ด, ํ…์Šค์ณ๋Š” ์žฌ์งˆ์„ ๊ตฌ์„ฑํ•˜๋Š” ์š”์†Œ ์ค‘ ํ•˜๋‚˜

  • ์ •์ (Vertex)๊ณผ ์‚ผ๊ฐ๋ฉด(Polygon)์œผ๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ, ์ •์ ์˜ ์ขŒํ‘œ์™€ ์‚ผ๊ฐ๋ฉด์„ ๊ตฌ์„ฑํ•˜๋Š” ์ •์  ์ธ๋ฑ์Šค๋ฅผ ์„ค์ •ํ•˜์—ฌ 3D ๋ชจ๋ธ์˜ ํ˜•ํƒœ๋ฅผ ์ •์˜

    • ์‚ผ๊ฐ๋ฉด(Polygon) โ†’ 3๊ฐœ์˜ ์ •์ ์œผ๋กœ ๋ฉด์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š”๋ฐ ์ด๋ ‡๊ฒŒ ๋งŒ๋“ค์–ด์ง„ ์‚ผ๊ฐ๋ฉด์„ ํด๋ฆฌ๊ณค์ด๋ผ ํ•œ๋‹ค. 3D ๋ฌผ์ฒด๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๋‹จ์œ„

    • ํด๋ฆฌ๊ณค์ด ๋งŽ์ด ๊ตฌ์„ฑ๋  ์ˆ˜๋ก ๋”์šฑ ํ˜„์‹ค์ ์ธ 3D ๊ฐ์ฒด๋ฅผ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

  • ์ •์  ์ธ๋ฑ์Šค(Vertex Index)๋Š” ๋ชจ๋ธ์˜ ์ •์ ๋“ค์ด ์–ด๋–ค ์ˆœ์„œ๋กœ ๋‚˜์—ด๋˜์–ด ์žˆ๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ธ๋ฑ์Šค ๋ฐฐ์—ด๋กœ ์ •์ ๋“ค์„ ๊ณต์œ ํ•˜์—ฌ ํšจ์œจ์ ์œผ๋กœ(๋ฉ”๋ชจ๋ฆฌ ์ ˆ์•ฝ, ๊ณ„์‚ฐ๋Ÿ‰ ์ค„์ž„ ๋“ฑ) ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ ๋‹ค.

circle-info

์ (Point) vs ์ •์ ? ๊ผญ์ง“์ (Vertex)

Point โ†’ ํฌ๊ธฐ๋‚˜ ๋ชจ์–‘์ด ์—†๋Š” ๋‹จ์ˆœํžˆ ์ขŒํ‘œ ๊ณต๊ฐ„์˜ ์œ„์น˜๋ฅผ ๋œปํ•œ๋‹ค.

Vertexโ†’ ๋‘ ๊ฐœ ์ด์ƒ์˜ ์„  ๋˜๋Š” ๋ฉด์ด ๋งŒ๋‚˜๋Š” ์ง€์ , ์ฆ‰ ๊ผญ์ง“์ ์„ ์˜๋ฏธํ•œ๋‹ค. 3D ๋ฌผ์ฒด๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์ ‘์ ์€ 3์ฐจ์› ์œ„์น˜ ์ขŒํ‘œ(x,y,z), ํ…์Šค์ณ ๋ฐ์ดํ„ฐ๋ฅผ ๋งคํ•‘ํ•˜๋Š” 2์ฐจ์› UV์ขŒํ‘œ, ์ƒ‰์ƒ ์ •๋ณด(r,g,b), ๋ฒ•์„  ๋ฐฉํ–ฅ์˜ 3์ฐจ์› ๋ฒกํ„ฐ๊ฐ€ ํฌํ•จ๋œ๋‹ค.

circle-info

Geometry vs Mesh

Geometry โ†’ 3D ๊ณต๊ฐ„ ๋‚ด์—์„œ ๊ฐ์ฒด์˜ ํ˜•ํƒœ, ํฌ๊ธฐ, ์œ„์น˜ ๋“ฑ์„ ์ •์˜ํ•˜๋Š” ์ˆ˜ํ•™์ ์ธ ํŠน์„ฑ

Mesh โ†’ ์ ์–ด๋„ ํ•˜๋‚˜์˜ ๊ผญ์ง“์ ์„ ๊ณต์œ ํ•˜๋Š” ๋‹ค๊ฐํ˜•์˜ ์ง‘ํ•ฉ, ๋ฉ”์‰ฌ๋Š” ๊ตฌ์„ฑ๋œ ๋‹ค๋ฅธ ๋‹ค๊ฐํ˜•์˜ ์ •์ ์œผ๋กœ ๋ถ€ํ„ฐ ์ ๋“ค์„ ํ†ต๊ณผํ•˜์—ฌ ๋ชจ๋“  ๋‹ค๊ฐํ˜•์œผ๋กœ ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฆ‰, Mesh๋Š” Geometry ์ •๋ณด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐ์ฒด์˜ ์™ธํ˜•์„ ํ‘œํ˜„ํ•˜๋Š” ๊ตฌ์กฐ

Object

ํ๋ธŒ(Cube), ๊ตฌ(Sphere), ์›ํ†ต(Cylinder), ํ‰๋ฉด(Plane) ๋“ฑ ๊ธฐ๋ณธ์œผ๋กœ ์ œ๊ณต๋˜๋Š” 3D ๊ฐ์ฒด ํƒ€์ž…

Light

๊ฐ์ฒด์˜ ์กฐ๋ช… ๋ฐ ๊ทธ๋ฆผ์ž๋ฅผ ์กฐ์ ˆํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์š”์†Œ

  • ์ฃผ๋ณ€๊ด‘(Ambient Light), ๋ฐฉํ–ฅ๊ด‘(Directional Light), ์ ๊ด‘(Point Light), ์ŠคํฌํŠธ๋ผ์ดํŠธ(Spotlight) ๋“ฑ์˜ ๋‹ค์–‘ํ•œ ์กฐ๋ช…์ด ์žˆ์œผ๋ฉฐ, ๊ฐ ์กฐ๋ช… ํƒ€์ž…์€ ์žฅ๋ฉด์˜ ์กฐ๋ช… ์กฐ๊ฑด์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ์‚ฌ์šฉ๋œ๋‹ค.

    • ์ฃผ๋ณ€๊ด‘(Ambient Light) โ†’ ๋ชจ๋“  ๋ฐฉํ–ฅ์—์„œ ๋™์ผํ•˜๊ฒŒ ํผ์ง€๋Š” ์กฐ๋ช…์œผ๋กœ, ๊ทธ๋ฆผ์ž๋ฅผ ๋งŒ๋“ค์ˆ˜ ์—†๊ณ  ๋ฌผ์ฒด ํ‘œ๋ฉด์— ์ผ์ •ํ•œ ๋ฐ๊ธฐ๋ฅผ ๋ถ€์—ฌํ•œ๋‹ค.

    • ๋ฐฉํ–ฅ๊ด‘(Directional Light) โ†’ ํŠน์ •ํ•œ ๋ฐฉํ–ฅ์œผ๋กœ ์ง์‚ฌ๊ด‘์„ ์„ ๋‚ด๋ ค์ฃผ๋Š” ์กฐ๋ช…์œผ๋กœ, ๊ทธ๋ฆผ์ž๋ฅผ ๋งŒ๋“ค์–ด ๋‚ด๋Š” ๋ฐ ํšจ๊ณผ์ ์ด๋ฉฐ ๋น›์˜ ๋ฐฉํ–ฅ์œผ๋กœ ๋ฌผ์ฒด์˜ ์ž…์ฒด๊ฐ์„ ์ค€๋‹ค.

    • ์ ๊ด‘(Point Light) โ†’ ํŠน์ • ์œ„์น˜์˜ ํ•œ ์ ์—์„œ ๋ชจ๋“  ๋ฐฉํ–ฅ์œผ๋กœ ํผ์ ธ๋‚˜๊ฐ€๋Š” ์กฐ๋ช…์œผ๋กœ ํ•ด๋‹น ๋น›์€ ์ฃผ๋ณ€์œผ๋กœ ๊ฐˆ์ˆ˜๋ก ๊ฐ์‡ ๋˜๋ฉฐ, ๋ฌผ์ฒด ์ฃผ๋ณ€์˜ ๋น›์ด ๋ชจ์ด๋Š” ํšจ๊ณผ๋ฅผ ๋‚˜ํƒ€๋‚ด๊ธฐ์— ์ ํ•ฉํ•˜๋‹ค.

    • ์ŠคํฌํŠธ๋ผ์ดํŠธ(Spotlight) โ†’ ํŠน์ • ์œ„์น˜์™€ ํŠน์ • ๋ฐฉํ–ฅ์—์„œ ๋น›์„ ๋ฐœ์‚ฐํ•˜๋Š” ์กฐ๋ช…์œผ๋กœ, ์›๋ฟ” ํ˜•ํƒœ์˜ ๋น›์„ ์ƒ์„ฑํ•˜๋ฉฐ, ํŠน์ • ์ง€์ ์„ ๊ฐ•์กฐํ•˜๊ฑฐ๋‚˜ ๊ฐ•์กฐํ•˜์ง€ ์•Š๊ฒŒ ํ•˜์—ฌ ๊ฐ•์กฐ ํšจ๊ณผ๋ฅผ ๋งŒ๋“ค์–ด๋‚ธ๋‹ค.

  • ์กฐ๋ช…์˜ ์œ„์น˜, ์ƒ‰์ƒ, ๊ฐ•๋„ ๋“ฑ์„ ์„ค์ •ํ•˜์—ฌ 3D ๊ฐ์ฒด์˜ ์‹œ๊ฐ์  ํšจ๊ณผ๋ฅผ ์กฐ์ •ํ•œ๋‹ค.

Camera

3D ๊ณต๊ฐ„์—์„œ์˜ ์‹œ์•ผ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์—ญํ•  ์นด๋ฉ”๋ผ์˜ ์œ„์น˜, ์‹œ์„ (direction), ์ข…ํšก๋น„(aspect ratio), ์‹œ์•ผ๊ฐ(fov) ๋“ฑ์˜ ์†์„ฑ์„ ์„ค์ •ํ•˜์—ฌ ์–ด๋–ค ์žฅ๋ฉด์„ ๋ณด์—ฌ์ค„์ง€ ๊ฒฐ์ •ํ•œ๋‹ค. (์นด๋ฉ”๋ผ์— ์žกํžˆ์ง€ ์•Š๋Š” ์š”์†Œ๋Š” ๋ Œ๋”๋ง๋˜์ง€ ์•Š์•„ ๋ถˆํ•„์š”ํ•œ ๋ Œ๋”๋ง์„ ์ค„์ธ๋‹ค.)

  • Fov(Field Over View, ์‹œ์•ผ๊ฐ) โ†’ ์ด ๊ฐ๋„๊ฐ€ ๋„“์–ด์ง€๋ฉด ์นด๋ฉ”๋ผ์— ๋” ๋งŽ์€ ๋ฒ”์œ„๋ฅผ ๋‹ด๊ฒŒ ๋œ๋‹ค.

  • Near โ†’ ์นด๋ฉ”๋ผ์™€ ๋ฌผ์ฒด๊นŒ์ง€์˜ ์ตœ์†Œ ๊ฑฐ๋ฆฌ๋กœ, near ์ด์ „์˜ ๋ฌผ์ฒด๋Š” ์‹œ์•ผ์— ํฌํ•จ๋˜์ง€ ์•Š์•„ ๋ Œ๋”๋ง๋˜์ง€ ์•Š๋Š”๋‹ค.

  • Far Plane โ†’ ์นด๋ฉ”๋ผ๊ฐ€ ์–ผ๋งˆ๋‚˜ ๋ฉ€๋ฆฌ๊นŒ์ง€ ๋ณผ ์ˆ˜ ์žˆ๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.

3D Object

๊ธฐ๋ณธ ๋„ํ˜•๋ถ€ํ„ฐ ์‚ฌ์šฉ์ž๊ฐ€ ์ •์˜ํ•œ ๋ณต์žกํ•œ ๋ชจ๋ธ๊นŒ์ง€ ํฌํ•จ๋˜๋ฉฐ, ํ™”๋ฉด์— ํ‘œ์‹œ๋˜๋Š” ์‹ค์ œ ๋ชจ๋ธ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

  • 3D ๊ฐ์ฒด๋Š” ์ •์ (Vertex)๋“ค๋กœ ๊ตฌ์„ฑ๋˜๊ณ , ์ด ์ •์ ๋“ค์€ ๋ฉ”์‹œ(Mesh)๋ฅผ ํ˜•์„ฑํ•˜์—ฌ ๋ชจ๋ธ์˜ ํ˜•ํƒœ๋ฅผ ๊ฒฐ์ •

  • ๊ฐ์ฒด์˜ ์œ„์น˜, ํšŒ์ „, ํฌ๊ธฐ ๋“ฑ์˜ ๋ณ€ํ™˜์„ ์กฐ์ž‘ํ•˜์—ฌ ์›ํ•˜๋Š” ๋ชจ์–‘์œผ๋กœ ๋ฐฐ์น˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

Last updated