R3F(React + Three.js / Typescript)๋กœ ์ธํ„ฐ๋ ‰ํ‹ฐ๋ธŒ ํฌํŠธํด๋ฆฌ์˜ค ๋งŒ๋“ค๊ธฐ

React์™€ Three.js ๋ฅผ ํ•œ๋ฒˆ์—! ์ธํ„ฐ๋ ‰ํ‹ฐ๋ธŒ ์›น์˜ ๊ธฐ์ดˆ์ธ Vector๋ถ€ํ„ฐ GSAP๊นŒ์ง€ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์–ด์š”. 3๊ฐ€์ง€ ์˜ˆ์ œ๋ฅผ ํ•˜๋‚˜์˜ ํฌํŠธํด๋ฆฌ์˜ค๋กœ ํ†ตํ•ฉํ•˜๋Š” ํŒ๊ณผ ๋…ธํ•˜์šฐ!

(5.0) ์ˆ˜๊ฐ•ํ‰ 5๊ฐœ

์ˆ˜๊ฐ•์ƒ 80๋ช…

๋‚œ์ด๋„ ์ดˆ๊ธ‰

์ˆ˜๊ฐ•๊ธฐํ•œ ๋ฌด์ œํ•œ

ํ† ์Šค๋ฑ…ํฌ
์นด์นด์˜ค
ํ•˜์ด๋ธŒ๋žฉ
์—”์”จ์†Œํ”„ํŠธ
ibk์‹œ์Šคํ…œ

ibk์‹œ์Šคํ…œ

์ž„์ง์›๋“ค๋„ ์ด ๊ฐ•์˜๋ฅผ ๋“ฃ๊ณ  ์žˆ์–ด์š”!

ํ† ์Šค๋ฑ…ํฌ
์นด์นด์˜ค
ํ•˜์ด๋ธŒ๋žฉ
์—”์”จ์†Œํ”„ํŠธ
ibk์‹œ์Šคํ…œ

ibk์‹œ์Šคํ…œ

์ž„์ง์›๋“ค๋„ ์ด ๊ฐ•์˜๋ฅผ ๋“ฃ๊ณ  ์žˆ์–ด์š”!

์ˆ˜๊ฐ• ํ›„ ์ด๋Ÿฐ๊ฑธ ์–ป์„ ์ˆ˜ ์žˆ์–ด์š”

  • React์™€ Three.js๋ฅผ ํ•œ๋ฒˆ์—! R3F(react-three/fiber)๋ฅผ ๋ฐฐ์›Œ์š”

  • ์ธํ„ฐ๋ ‰ํ‹ฐ๋ธŒ ์›น์˜ ๊ธฐ์ดˆ์ธ Vector์˜ ๊ฐœ๋…๊ณผ ์—ฐ์‚ฐ์— ๋Œ€ํ•ด ๋ฐฐ์›Œ์š”

  • ๋‹ค์–‘ํ•œ ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด ์ดํ•ดํ•˜๊ณ  ์‘์šฉํ•˜์—ฌ ๋‚˜๋งŒ์˜ ์ž‘์—…๋ฌผ์„ ๋งŒ๋“ค์–ด ๊ฐ€๋Š” ๊ฐ•์˜

  • ๋ฒกํ„ฐ(Vector)์˜ ๊ธฐ์ดˆ ๊ฐœ๋…๋ถ€ํ„ฐ ํ™œ์šฉ, ๊ทธ๋ฆฌ๊ณ  ์‹ฌํ™”๊ณผ์ •์„ ํ†ตํ•œ ๋‚˜๋งŒ์˜ ํฌํŠธํด๋ฆฌ์˜ค ์ œ์ž‘๊นŒ์ง€!

  • ์›น ์ธํ„ฐ๋ ‰ํ‹ฐ๋ธŒ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ GSAP ๋Œ€ํ•ด ๋ฐฐ์›Œ์š”

  • ์ง์ ‘ ๊ฐ™์ด ํ•œ๋•€ ํ•œ๋•€ ์ฝ”๋”ฉํ•˜๋ฉด์„œ ์ตํžˆ๊ณ  ์‹ค๋ ฅ์„ ์Œ“์„ ์ˆ˜ ์žˆ๋Š” ๊ฐ•์˜

  • ๋ˆˆ์— ๋„๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๋  ์ˆ˜ ์žˆ๋Š” Creative Coding / Interactive Web์„ ๊ฒฝํ—˜ํ•˜๋ฉฐ ์‹ค์Šตํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ•์˜

  • ์–ด๋””์—์„œ๋„ ์ฐพ์„ ์ˆ˜ ์—†๋Š” R3F ์Šคํƒ ํ•™์Šต์œผ๋กœ ๋” ์‰ฝ๊ณ  ์žฌ๋ฏธ์žˆ๊ฒŒ ๊ตฌํ˜„ํ•˜๋Š” 3D ์ธํ„ฐ๋ ‰ํ‹ฐ๋ธŒ ์›น

  • ํ˜„์ง ๊ฐœ๋ฐœํŒ€์žฅ์—๊ฒŒ ๋ฐฐ์šฐ๋Š” ๋””๋ฒ„๊น…๊ณผ ๋ฆฌํŒฉํ† ๋ง ๋ฐฉ๋ฒ•!

  • ํ˜„์ง 10๋…„์ฐจ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋ฐฐ์šฐ๋Š” ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ๋ถ€ํ„ฐ ์‹ค๋ฌด ํŒ๊นŒ์ง€!


๋‹น์‹ ์€ ์›น ์‚ฌ์ดํŠธ๋ฅผ ๋งŒ๋“œ๋Š” ์ผ์ด ์ฆ๊ฑฐ์šฐ์‹ ๊ฐ€์š”?

์›น ์‚ฌ์ดํŠธ ๊ฒŒ์‹œํŒ์„ ๋งŒ๋“ค๊ณ  ํŒ์—…์ฐฝ์„ ๊ฐœ๋ฐœํ•˜๋Š” ์ผ ์ง€๊ฒน์ง€ ์•Š์œผ์‹ ๊ฐ€์š”?

๋‹น์‹ ์€ ๋‚จ๋“ค๊ณผ ์ฐจ๋ณ„ํ™” ๋œ ์›น ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ์œผ์‹ ๊ฐ€์š”?

๋‹น์‹  ํšŒ์‚ฌ์—์„œ ํ™”๋ คํ•œ ๋ˆˆ์— ๋„๋Š”, ๋‚จ๋“ค๊ณผ ๋‹ค๋ฅธ ์›น ์‚ฌ์ดํŠธ๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž๊ณ  ํ•˜๋‚˜์š”?

์ด ์›น์‚ฌ์ดํŠธ๋Š” ์–ด๋–ป๊ฒŒ ๋งŒ๋“ค์—ˆ์ง€? WOWํ•œ ์‚ฌ์ดํŠธ๋ฅผ ๋งŒ๋“ค์–ด ๋ณด๊ณ  ์‹ถ๋‚˜์š”?


์ด๋ฒˆ ๊ฐ•์˜๋Š”

์ฝ”๋”ฉ์œผ๋กœ ๊ธฐ๋Šฅ์ ์ธ ๊ฒƒ์„ ๋งŒ๋“ค๊ธฐ ๋ณด๋‹ค๋Š” ํ‘œํ˜„์ ์ธ ๊ฒƒ์— ์ง‘์ค‘ํ•˜์—ฌ ๋‹ค์–‘ํ•œ ํ‘œํ˜„ ๋ฐฉ๋ฒ•๋“ค์„ ์—ฐ๊ตฌํ•˜๊ณ 

๊ทธ ๊ณผ์ •์—์„œ ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๊ฒฐ๊ณผ์˜ ๋ฐœ๊ฒฌ, ๋ณ€ํ˜•์„ ๋ชฉํ‘œ๋กœ ํ•˜๋Š” Creative Coding์„ ๋‹ค๋ฃจ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ ์ค‘์—์„œ๋„ Interactive Coding์˜ ๊ฐ€์žฅ ํ•ต์‹ฌ์ธ ๋ฒกํ„ฐ(Vector)์— ๋Œ€ํ•ด ๋ฐฐ์šธ ์ˆ˜ ์žˆ๊ณ 

๊ทธ๊ฒƒ์„ ํ™œ์šฉํ•˜์—ฌ ์ฐจ๋ณ„ํ™”๋œ ํฌํŠธํด๋ฆฌ์˜ค๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๊ฐ•์˜ ์ฃผ์ œ ๐Ÿ“–

  • ์‚ฌ์šฉ๊ธฐ์ˆ  : frontend DOM ( React, gsap ) / webgl ( Three.js )


๋‹น์‹ ์€ ์ด ๊ฐ•์˜์—์„œ๋Š” frontend์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์“ฐ์ด๋Š” React ํ”„๋ ˆ์ž„์›Œํฌ์™€

Web Graphic(webgl)์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์“ฐ์ด๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ธ Three.js๋ฅผ

ํ•œ๊บผ๋ฒˆ์— ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋Š” R3F(React Three Fiber)๋ฅผ ๋ฐฐ์šฐ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๋‹น์‹ ์€ ํ™”๋ คํ•œ ์ธํ„ฐ๋ ‰ํ‹ฐ๋ธŒ ์›น + Creative Coding์˜ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฐœ๋…์ธ ๋ฒกํ„ฐ(Vector)์— ๋Œ€ํ•ด

์ง‘์ค‘์ ์œผ๋กœ ๋ฐฐ์šฐ๊ฒŒ ๋  ๊ฒƒ์ด๊ณ , ๋ฒกํ„ฐ(Vector)๋ฅผ ์ดํ•ดํ•˜๊ณ  ์ž˜ ํ™œ์šฉํ•œ๋‹ค๋ฉด

๋‹น์‹ ์ด ์›ํ•˜๋Š” ์ธํ„ฐ๋ ‰ํ‹ฐ๋ธŒํ•œ ์›€์ง์ž„์„ ๋ชจ๋‘ ๋‹ค ๋งŒ๋“œ์‹ค ์ˆ˜ ์žˆ์„ ๊ฒƒ ์ž…๋‹ˆ๋‹ค.


์–ด๋””์—์„œ๋„ ์ฐพ์„ ์ˆ˜ ์—†๋Š” R3F ์Šคํƒ ํ•™์Šต์œผ๋กœ

๋” ์‰ฝ๊ณ  ์žฌ๋ฏธ์žˆ๊ฒŒ ์ธํ„ฐ๋ ‰ํ‹ฐ๋ธŒ ํฌํŠธํด๋ฆฌ์˜ค ์›น์‚ฌ์ดํŠธ๋ฅผ ๋งŒ๋“ค์–ด ๋ด…๋‹ˆ๋‹ค.

์›น 3D ์ธํ„ฐ๋ ‰ํ‹ฐ๋ธŒ ์ „๋ฌธ, ํ˜„์ง 10๋…„์ฐจ ์›น ๊ทธ๋ž˜ํ”ฝ ์—”์ง€๋‹ˆ์–ด(Web Graphic Engineer) / ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž(Frontend Developer)์˜ ๊ฒฝํ—˜๊ณผ ๋…ธํ•˜์šฐ๋ฅผ ๋ชจ๋‘ ๋‹ด์•˜์Šต๋‹ˆ๋‹ค.


๊ฐ•์˜ ํŠน์ง• โœจ

React์™€ Three.js ๋ฅผ ํ•œ๋ฒˆ์—! React Three Fiber(R3F)!

Interactive Coding์˜ ๊ธฐ์ดˆ์ธ ๋ฒกํ„ฐ(Vector)์˜ ๊ฐœ๋…๋ถ€ํ„ฐ

ํ˜„์—…์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ ์˜ˆ์ œ์™€ ์ข…ํ•ฉ ํ”„๋กœ์ ํŠธ ๊ทธ๋ฆฌ๊ณ  ์ตœ์ ํ™” ํŒ ๊นŒ์ง€ !

-Javascript ๊ธฐ์ดˆ์— ๋Œ€ํ•ด์„œ ์•Œ๊ณ  ๊ณ„์‹œ๋‹ค๋ฉด ์ˆ˜๊ฐ•์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

-React์— ๋Œ€ํ•œ ๊ธฐ์ดˆ ๊ฐœ๋…์ด ์žˆ์œผ์‹  ๋ถ„์ด๋ฉด ์ข‹์ง€๋งŒ ์—†์–ด๋„ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.

-๋ฒกํ„ฐ(Vector)์˜ ๊ธฐ์ดˆ ๊ฐœ๋…๋ถ€ํ„ฐ ํ™œ์šฉ, ๊ทธ๋ฆฌ๊ณ  ์‹ฌํ™”๊ณผ์ •์„ ํ†ตํ•œ ํฌํŠธํด๋ฆฌ์˜ค ์ œ์ž‘๊นŒ์ง€!

-์›น 3D๋ฅผ ๋‹ค๋ฃจ์ง€๋งŒ ๊ฐ•์˜์—์„œ๋Š” 2D ์นด๋ฉ”๋ผ(orthographicCamera)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์—…ํ•ฉ๋‹ˆ๋‹ค.

-์‹ค๋ฌด์—์„œ ๋ฐ”๋กœ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๋„๋ก Typescript๋กœ ๊ฐ•์˜๋ฅผ ์ง„ํ–‰ํ•˜๊ณ  ์˜ˆ์ œ ์ฝ”๋“œ๋ฅผ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค.

-๊ฐ ์„น์…˜๋งˆ๋‹ค ์ด๋ก ์œ„์ฃผ์˜ ์ค‘์š”ํ•œ ๊ธฐ์ดˆ ๊ฐœ๋…์„ ์„ค๋ช… (10~25%)

-๊ฐ ์„น์…˜๋งˆ๋‹ค ํ•œ๋•€ ํ•œ๋•€ ๊ฐ™์ด ํ•˜๋Š” ์‹ค์Šต์œ„์ฃผ์˜ ๊ฐ•์˜ (75~90%)


๋‹น์‹ ์€ ์ด๋ฒˆ๊ฐ•์˜๋ฅผ ํ†ตํ•ด์„œ React์™€ Three.js(WebGL)์„ ํ•œ๋ฒˆ์— ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋Š” R3F์— ๋Œ€ํ•ด ๋ฐฐ์šธ ์ˆ˜ ์žˆ์Šต

๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‹น์‹ ์€ Creative Coding์˜ ๊ธฐ์ดˆ์ธ ๋ฒกํ„ฐ(Vector)๊ฐ€ ๋ฌด์—‡์ด๊ณ  ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€์—

๋Œ€ํ•ด์„œ ๋ฐฐ์šฐ๊ณ , Vector๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์›€์ง์ด๋Š” 4๊ฐœ์˜ ์˜ˆ์ œ๋ฅผ ๋‹ค๋ฃจ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. Vector์˜ ๊ธฐ์ดˆ๋ฅผ ๋‹ค์ง€๋ฉด ์›ํ•˜๋Š”

๋ชจ๋“  ์›€์ง์ž„์— ๋Œ€ํ•ด ๋งŒ๋“ค ์–ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ์ธํ„ฐ๋ ‰ํ‹ฐ๋ธŒ ์›น์˜ ํ•„์ˆ˜์ธ GSAP์— ๋Œ€ํ•ด์„œ ๋ฐฐ์šธ ์ˆ˜ ์žˆ๊ณ  ์Šคํฌ๋กค์„ ํ•˜๋ฉด ํ™”๋ คํ•˜๊ฒŒ ์›€์ง์ด๋Š” 3D ์›น์„

๋งŒ๋“ค ์–ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹จ์ˆœํžˆ ์˜ˆ์˜๊ธฐ๋งŒ ํ•œ ํ™”๋ฉด์ด ์•„๋‹ˆ๋ผ, ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐ˜์‘ํ•˜๊ณ  ์›€์ง์ด๋Š” 3D ์˜ค๋ธŒ์ ํŠธ์˜

์• ๋‹ˆ๋ฉ”์ด์…˜์— ๋Œ€ํ•ด ๋ฐฐ์›Œ๋ณด์„ธ์š”! ๊ฐ ๋‹จ๊ณ„๋ณ„ ์•Œ๋งž๋Š” ์‹ค์Šต๊นŒ์ง€ ์ง์ ‘ ๊ฐ™์ด ํ•œ๋•€ ํ•œ๋•€ ์ฝ”๋”ฉํ•˜๋ฉด์„œ ์ตํžˆ๊ณ  ์‹ค๋ ฅ์„

์Œ“์„ ์ˆ˜ ์žˆ๋Š” ๊ฐ•์˜์ž…๋‹ˆ๋‹ค.


์ด ๊ฐ•์˜๋ฅผ ํ†ตํ•ด ๋‹จ์ˆœํ•œ ์ •์  ์›น์—์„œ ๋ฒ—์–ด๋‚˜, ์‹ค์‹œ๊ฐ„ ๋ Œ๋”๋ง์„ ํ™œ์šฉํ•œ ๋™์ ์ด๊ณ  ์ฐฝ์˜์ ์ธ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค์–ด

๋ณด์„ธ์š”! ๋‹จ๊ณ„๋ณ„๋กœ ๋”ฐ๋ผ ํ•˜๋‹ค ๋ณด๋ฉด, ์–ด๋А์ƒˆ ์—ฌ๋Ÿฌ๋ถ„์˜ ํ”„๋กœ์ ํŠธ๊ฐ€ ๋งˆ์น˜ ๊ฒŒ์ž„์ฒ˜๋Ÿผ ์‚ด์•„ ์›€์ง์ด๋Š” ๊ฑธ ๋А๋‚„ ์ˆ˜

์žˆ์„ ๊ฑฐ์˜ˆ์š” ! 


์–ด๋””์—์„œ๋„ ์ฐพ์„ ์ˆ˜ ์—†๋Š” R3F ์Šคํƒ ํ•™์Šต์œผ๋กœ ๋” ์‰ฝ๊ณ  ์žฌ๋ฏธ์žˆ๊ฒŒ 3D ํฌํŠธํด๋ฆฌ์˜ค ์›น์‚ฌ์ดํŠธ๋ฅผ ๋งŒ๋“ค์–ด ๋ณด์•„์š”!



ํ•™์Šต ๋‚ด์šฉ ๐Ÿ“š


1. Creative Coding์˜ ๊ธฐ์ดˆ ์ค‘์— ๊ธฐ์ดˆ! 3D ์›น์‚ฌ์ดํŠธ์˜ ๊ธฐ์ดˆ ์ค‘์— ๊ธฐ์ดˆ!

๋ฒกํ„ฐ(Vector)!์— ๋Œ€ํ•ด์„œ ์ฐจ๊ทผ์ฐจ๊ทผ ๋ฐฐ์›Œ๋ด…๋‹ˆ๋‹ค.

๊ฐ€์žฅ ๊ธฐ์ดˆ์ ์ด์ง€๋งŒ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฐœ๋…์ธ ๋ฒกํ„ฐ(Vector)์— ๋Œ€ํ•ด ๋ˆ„๊ตฌ๋‚˜ ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ฒŒ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค!

๋ฒกํ„ฐ(Vector)๋ž€ ๋ฌด์—‡์ผ๊นŒ?

์ž์ฒด ์ œ์ž‘ํ•œ ์„ค๋ช…์ž๋ฃŒ

์–ด๋ ค์šด ๊ฐœ๋…์„ ๊ทธ๋ฆผ์œผ๋กœ ์‰ฝ๊ฒŒ ์„ค๋ช…ํ•ด์„œ ์ดํ•ด ์™์™!



2. ์ง์ ‘ ์ฝ”๋”ฉํ•˜๊ณ  ํ•จ๊ป˜ ์‹ค์Šตํ•˜๋ฉฐ ๋ฒกํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๋ฐฐ์›๋‹ˆ๋‹ค.

์ด๋ก ์„ ๊ธฐ์ดˆ๋กœํ•˜์—ฌ ํ•œ๋•€ํ•œ๋•€ ๊ฐ™์ด ์ฝ”๋”ฉํ•˜๋ฉฐ ํ•™์Šตํ•˜๊ธฐ !

๊ท€์—ฌ์šด '๊ณฐ๋Œ์ด์™€ ๊ฟ€' ์˜ˆ์ œ์™€ ๋ฐ•์Šค์— ํŠ•๊ธฐ๋Š” ๋ณผ(Ball) ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด ๋ฐฐ์›Œ๋ด…๋‹ˆ๋‹ค.

๋ฒกํ„ฐ์˜ ํ™œ์šฉ ์ด๋ก  ์„ค๋ช…

๋ฒกํ„ฐ์˜ ํ™œ์šฉ ์‹ค์Šต๊ณผ์ œ

๋ฒกํ„ฐ์˜ ํ™œ์šฉ ์‹ฌํ™”๊ณผ์ •



3. ๋ฒกํ„ฐ(Vector)๋ฅผ ๋ฐฐ์› ์œผ๋‹ˆ ์ด๋ฒˆ์—๋Š” ์ปค๋ธŒ(Curve)์— ๋Œ€ํ•ด์„œ ๋ฐฐ์›Œ๋ณผ๊นŒ์š”?

Creative Coding์—์„œ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ๊ฐœ๋…์ธ Sin / Cos / Tan ๋“ฑ Curve์— ๋Œ€ํ•ด์„œ ๋ฐฐ์›Œ๋ณด๊ณ 

R3F(Three.js)์˜ Curve๋ฅผ ํ™œ์šฉํ•œ ์ธํ„ฐ๋ ‰ํ‹ฐ๋ธŒํ•œ ์ฝ”๋”ฉ ์‹ค์Šต๊นŒ์ง€ ์ง„ํ–‰ํ•ด๋ด…๋‹ˆ๋‹ค.

Sin / Cos Curve๋ฅผ ํ™œ์šฉํ•œ ์ธํ„ฐ๋ ‰ํ‹ฐ๋ธŒ ์˜ˆ์ œ์‹ค์Šต

Three.js Curve์˜ ํ™œ์šฉ๋ฒ•

4. ์ธํ„ฐ๋ ‰ํ‹ฐ๋ธŒ ์›น ์‚ฌ์ดํŠธ์˜ ํ•„์ˆ˜์ธ์ ์ธ GSAP ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€ํ•ด ๋ฐฐ์šฐ๊ณ 

๋งˆ์šฐ์Šค ์Šคํฌ๋กค ์ด๋ฒคํŠธ๋กœ ์ธํ„ฐ๋ ‰ํ‹ฐ๋ธŒ 3D ์„ธ์ƒ์„ ์ปจํŠธ๋กคํ•ฉ๋‹ˆ๋‹ค.

์—ฌํƒœ๊นŒ์ง€ ๋ฐฐ์šด ๋ฒกํ„ฐ(Vector)์˜ ๊ธฐ๋ณธ์„ ํ™œ์šฉํ•˜์—ฌ ์‹ฌํ™”๊ณผ์ •๊นŒ์ง€ ํ•™์Šตํ•˜๋Š” ์ข…ํ•ฉ ์˜ˆ์ œ!

๋ณผ(Balls) ๋ผ๋ฆฌ ๋ถ€๋”ชํžˆ๊ณ , ์ค‘๋ ฅ์— ์˜ํ•ด์„œ ๋–จ์–ด์ง€๊ณ  ๋งˆ์šฐ์Šค์— ๋ฐ˜์‘ํ•˜๋Š” ์ข…ํ•ฉ ํ”„๋กœ์ ํŠธ!

์–ด๋–ป๊ฒŒ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ , ๋””๋ฒ„๊น… ํ•  ์ˆ˜ ์žˆ์„๊นŒ์š”? ์‹ค๋ฌด์—์„œ๋Š” ์–ด๋–ป๊ฒŒ ์ฝ”๋”ฉ์„ ํ• ๊นŒ์š”?

์ฐจ๊ทผ์ฐจ๊ทผ ํ•˜๋‚˜์”ฉ ํ•˜๋‚˜์”ฉ ํ•จ๊ป˜ ๋ฐฐ์šฐ๋ฉด์„œ ํ•จ๊ป˜ ์™„์„ฑํ•˜๋Š” ์ธํ„ฐ๋ ‰ํ‹ฐ๋ธŒ ์›น ํฌํŠธํด๋ฆฌ์˜ค ๋งŒ๋“ค๊ธฐ!!

DEMO: https://cclab.taejaehan.com/

GSAP๋ฅผ ํ™œ์šฉํ•œ ์ธํ„ฐ๋ ‰ํ‹ฐ๋ธŒ ์›น

๋ฒกํ„ฐ(Vecotr)๋ฅผ ํ™œ์šฉํ•œ ์ข…ํ•ฉ ์ธํ„ฐ๋ ‰ํ‹ฐ๋ธŒ ํฌํŠธํด๋ฆฌ์˜ค ํ”„๋กœ์ ํŠธ

์ˆ˜๊ฐ• ์ „ ์ฐธ๊ณ  ์‚ฌํ•ญ ๐Ÿ“ข

์‹ค์Šต ํ™˜๊ฒฝ

  • ๊ฐ•์˜์—์„œ๋Š” macOS - Apple ์นฉ์„ ์‚ฌ์šฉํ•˜์ง€๋งŒ mac intel์นฉ ํ˜น์€ windowํ™˜๊ฒฝ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

  • ์‚ฌ์šฉ ํ”„๋กœ๊ทธ๋žจ : ํฌ๋กฌ, vscode, npm(node), r3f ๋“ฑ

  • PC ์‚ฌ์–‘: CPU 2.0GHz ์ด์ƒ, RAM 8GB ์ด์ƒ, WebGL ์ง€์› ๊ทธ๋ž˜ํ”ฝ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค

ํ•™์Šต ์ž๋ฃŒ

  • ๊ฐ ์„น์…˜๋ณ„ ์†Œ์Šค์ฝ”๋“œ ์••์ถ• ํŒŒ์ผ ์ œ๊ณต ( zip ) 

    • ์„น์…˜ 1, 2, 3 ์ด๋ก  ๋ฐ ๊ฐœ๋ฐœํ™˜๊ฒฝ ์„ธํŒ…

    • ์„น์…˜ 4, 5, 6, 7 ์‹ค์Šต ํ”„๋กœ์ ํŠธ (์†Œ์ŠคํŒŒ์ผ ์ œ๊ณต)

    • ์„น์…˜ 8, 9, 10 ์ข…ํ•ฉ ์‹ค๋ฌด ํ”„๋กœ์ ํŠธ (์†Œ์ŠคํŒŒ์ผ ์ œ๊ณต)



์„ ์ˆ˜ ์ง€์‹ ๋ฐ ์œ ์˜์‚ฌํ•ญ

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ธฐ์ดˆ๋ฅผ ์•„์‹œ๋Š” ๋ถ„์ด๋ผ๋ฉด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

  • React์— ๋Œ€ํ•œ ๊ธฐ์ดˆ ๊ฐœ๋…์ด ์žˆ์œผ์‹  ๋ถ„์ด๋ฉด ์ข‹์ง€๋งŒ ์—†์–ด๋„ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.

  • 3D์˜ ๊ธฐ์ดˆ์™€ Three.js์˜ ์ž…๋ฌธ์ •๋„์˜ ๊ฒฝํ—˜์ด ์žˆ์œผ์‹  ๋ถ„์ด ๋“ค์œผ์‹œ๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.


  • ์ด๋ฒˆ๊ฐ•์˜์—์„œ๋Š” Scene, Camera, Renderer, Mesh, Geometry, Material, LIght ๋“ฑ 3D ๊ธฐ์ดˆ์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ˜น์‹œ

    3D์˜ ๊ธฐ์ดˆ์— ๋Œ€ํ•ด ๋ฐฐ์šฐ๊ณ  ์‹ถ์œผ์‹œ๋ฉด ์ธํ”„๋Ÿฐ์˜ ์ œ ๊ฐ•์˜์ธ 'React Three fiber(R3F)๋กœ ๋ฐฐ์šฐ๋Š” ์ธํ„ฐ๋ ‰ํ‹ฐ๋ธŒ 3D ์›น ๊ฐœ๋ฐœ' https://inf.run/XAE71์„ ๋จผ์ € ๋“ค์œผ์‹œ๊ณ  ์ด๋ฒˆ ๊ฐ•์˜๋ฅผ ๋“ค์œผ์‹œ๋Š” ๊ฒƒ์„ ์ถ”์ฒœ๋“œ๋ฆฝ๋‹ˆ๋‹ค :)


  • ์งˆ๋ฌธ ํ•ด ์ฃผ์‹œ๋Š” ๋‚ด์šฉ์€ ๋น ๋ฅด๋ฉด ๋‹น์ผ ๋Šฆ์–ด๋„ 3์ผ ์ด๋‚ด์— ๋‹ต๋ณ€ ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฐ ๋ถ„๋“ค๊ป˜
์ถ”์ฒœ๋“œ๋ ค์š”

ํ•™์Šต ๋Œ€์ƒ์€
๋ˆ„๊ตฌ์ผ๊นŒ์š”?

  • Creative Coding์˜ ๊ธฐ์ดˆ๋ฅผ ๋ฐฐ์šฐ๊ณ  ์‹ถ์€ ๊ฐœ๋ฐœ์ž/๋””์ž์ด๋„ˆ

  • ๋ˆˆ์— ๋„๋Š” ํŠน๋ณ„ํ•œ ์›น ์‚ฌ์ดํŠธ๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ์€ ๊ฐœ๋ฐœ์ž/๋””์ž์ด๋„ˆ

  • ์›น์—์„œ 3D๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ์‹ถ์€ ๊ฐœ๋ฐœ์ž

  • ๋‚จ๋“ค๊ณผ๋Š” ์ฐจ๋ณ„ํ™” ๋œ ๋ฌด๊ธฐ๋ฅผ ๊ฐ–๊ณ  ์‹ถ์€ ๊ฐœ๋ฐœ์ž

  • ์›น์—์„œ ์žฌ๋ฏธ์žˆ๋Š” ์‹œ๋„๋ฅผ ์‹œ์ž‘ํ•ด๋ณด๊ณ  ์‹ถ์€ ๊ฐœ๋ฐœ์ž/๋””์ž์ด๋„ˆ

์„ ์ˆ˜ ์ง€์‹,
ํ•„์š”ํ• ๊นŒ์š”?

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ธฐ์ดˆ๋ฅผ ์•„์‹œ๋Š” ๋ถ„์ด๋ผ๋ฉด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

  • React์— ๋Œ€ํ•œ ๊ธฐ์ดˆ ๊ฐœ๋…์ด ์žˆ์œผ์‹  ๋ถ„์ด๋ฉด ์ข‹์ง€๋งŒ ์—†์–ด๋„ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.

  • Threejs์— ๋Œ€ํ•œ ๊ธฐ์ดˆ ๊ฐœ๋…์ด ์žˆ์œผ์‹  ๋ถ„์ด๋ฉด ์ข‹์ง€๋งŒ ์—†์–ด๋„ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š”
์ฝ”๋”ฉ์˜์„ธ๊ณ„ ํ•œํƒœ์žฌ์ž…๋‹ˆ๋‹ค.

374

๋ช…

์ˆ˜๊ฐ•์ƒ

27

๊ฐœ

์ˆ˜๊ฐ•ํ‰

14

๊ฐœ

๋‹ต๋ณ€

5.0

์ 

๊ฐ•์˜ ํ‰์ 

2

๊ฐœ

๊ฐ•์˜

์•ˆ๋…•ํ•˜์„ธ์š”. 10๋…„์ฐจ ์›น ๊ทธ๋ž˜ํ”ฝ ์—”์ง€๋‹ˆ์–ด ํ•œํƒœ์žฌ์ž…๋‹ˆ๋‹ค. ์ €๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ํ’€์Šคํƒ ๊ฐœ๋ฐœ์ž์ด์ง€๋งŒ ํ”„๋ก ํŠธ์•ค๋“œ์— ์ง‘์ค‘ํ•˜์—ฌ ์ž‘์—…ํ•ฉ๋‹ˆ๋‹ค :)

์ €๋Š” Angular, React๋“ฑ์˜ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•ด ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์„ ํ•ด์™”์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์—ญ์‹œ ๊ฐ€์žฅ ์ข‹์•„ํ•˜๋Š” ์ž‘์—…์€ Threejs, WebGL, D3js , Pixi.js ๋“ฑ ์›น(HTML5)์—์„œ 2D/3D Canvas ๊ทธ๋ž˜ํ”ฝ์Šค๋ฅผ ๋‹ค๋ฃจ๋Š” ํ”„๋กœ์ ํŠธ๋“ค ์ž…๋‹ˆ๋‹ค.

์ €๋Š” ์ƒˆ๋กญ๊ณ  ์ฐฝ์˜์ ์ธ ์œ ์ €๊ฒฝํ—˜(UX)๋ฅผ ๋งŒ๋“œ๋Š” ์ธํ„ฐ๋ ‰ํ‹ฐ๋ธŒํ•œ ์›น ์ปจํ…์ธ ์— ๋Œ€ํ•œ ์—ด์ •์ด ๊ฐ€๋“ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ™์ด ์žฌ๋ฏธ์žˆ๋Š” ํ”„๋กœ์ ํŠธ ๋งŒ๋“ค์–ด๋ด์š” !

  

10๋…„์ฐจ ์ธํ„ฐ๋ ‰ํ‹ฐ๋ธŒ 3D ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž

-(ํ˜„) ๋„ค์˜ค์œ„์ฆˆ - HTML5 ๊ฒŒ์ž„ ๊ฐœ๋ฐœ์ž

-(ํ˜„) ๋ชจ๋‘์˜์—ฐ๊ตฌ์†Œ - Generative art ๋žฉ์žฅ

-์œ„๋ฉ”์ด๋“œ - Defi Frontend ๊ฐœ๋ฐœ ํŒ€์žฅ

-๋‹ค๋น„์˜ค - Three.js ๊ฐœ๋ฐœ ํŒ€์žฅ

-Dmajor - ์‹œ๋‹ˆ์–ด ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž

-๋ชจ๋‘์˜์—ฐ๊ตฌ์†Œ - Interactiver art of web ๋žฉ์žฅ

-Addpac - ์ฅฌ๋‹ˆ์–ด ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž

-NHN ๋„ค์ด๋ฒ„ ์žฌํŒฌ - UX/UI ๋””์ž์ด๋„ˆ

-๋งค๋“œ๋งจํฌ์ŠคํŠธ - CG Effect Artist

-๊ตญ๋ฏผ๋Œ€ - ๊ณต์—…๋””์ž์ธ ์ „๊ณต

๋”๋ณด๊ธฐ

์ปค๋ฆฌํ˜๋Ÿผ

์ „์ฒด

77๊ฐœ โˆ™ (11์‹œ๊ฐ„ 32๋ถ„)

ํ•ด๋‹น ๊ฐ•์˜์—์„œ ์ œ๊ณต:

์ˆ˜์—…์ž๋ฃŒ
๊ฐ•์˜ ๊ฒŒ์‹œ์ผ: 
๋งˆ์ง€๋ง‰ ์—…๋ฐ์ดํŠธ์ผ: 

์ˆ˜๊ฐ•ํ‰

์ „์ฒด

5๊ฐœ

5.0

5๊ฐœ์˜ ์ˆ˜๊ฐ•ํ‰

  • ddd๋‹˜์˜ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€
    ddd

    ์ˆ˜๊ฐ•ํ‰ 2

    โˆ™

    ํ‰๊ท  ํ‰์  5.0

    5

    61% ์ˆ˜๊ฐ• ํ›„ ์ž‘์„ฑ

    https://r3flabs.vercel.app/ ํ•™๋ถ€์ƒ์ด๋ผ ๊ฐ€๋‚œํ•˜์ง€๋งŒ ๋ˆ์ด ์ „ํ˜€ ์•„๊น์ง€ ์•Š์€ ๋ช…๊ฐ•์˜์˜€์Šต๋‹ˆ๋‹ค! ๊ฐ„๋‹จํ•˜๊ฒŒ ํฌํŠธํด๋ฆฌ์˜ค ์‚ฌ์ดํŠธ ๋งŒ๋“ค์—ˆ๋ดค์Šต๋‹ˆ๋‹ค.ใ…Žใ…Ž ๋‹ค๋ฅธ Three.js ๊ฐ•์˜ ์ฐพ์•„๋ณด๋ฉด ๊ทธ๋ƒฅ ์ฝ”๋“œ๋”ฐ๋ผ์น˜๋Š” ์ปจํ…์ธ ๊ฐ€ ๋์ด๋ผ ๋‹ต๋‹ตํ•œ ๊ณต์‹๋ฌธ์„œ๋งŒ ๋ณด๋ฉด์„œ ๊ณต๋ถ€ํ•ด์•ผ ํ•˜๋‚˜ ์‹ถ์—ˆ๋Š”๋ฐ, ์ด ๊ฐ•์˜ ๋•์— ๋„ˆ๋ฌด ํŽธํ•˜๊ฒŒ ๊ณต๋ถ€ํ–ˆ์Šต๋‹ˆ๋‹ค, ์ˆจ์€ ๊ฟ€๊ฐ•์˜๋ผ ์ €๋งŒ ๋“ฃ๊ณ  ์‹ถ์„ ์ •๋„์ž…๋‹ˆ๋‹ค.. ๋‹จ์ˆœํžˆ ์ฝ”๋“œ๋งŒ ๋”ฐ๋ผ์น˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ ์›๋ฆฌ๋ถ€ํ„ฐ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๊ฒŒ ์ž˜ ์งœ์—ฌ์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๊ณ  ์ง„์งœ ์ „๊ณต ์ˆ˜์—…์ฒ˜๋Ÿผ ์ด๋ก ์ ์œผ๋กœ ๊นŠ๊ฒŒ ๋‹ค๋ฃจ์ง„ ์•Š๊ณ  ์ ์ ˆํ•˜๊ฒŒ ์ž˜ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์–ด์„œ ์žฌ๋ฐŒ๊ฒŒ ๋“ค์„ ์ˆ˜ ์žˆ์—ˆ๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค

    • ๊น€๊ธฐ์ฐฝ๋‹˜์˜ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€
      ๊น€๊ธฐ์ฐฝ

      ์ˆ˜๊ฐ•ํ‰ 2

      โˆ™

      ํ‰๊ท  ํ‰์  5.0

      5

      43% ์ˆ˜๊ฐ• ํ›„ ์ž‘์„ฑ

      ๊ฐ•์‚ฌ๋‹˜์˜ ์ €๋ฒˆ๊ฐ•์˜๋ฅผ ๋“ค์œผ๋ฉด์„œ Three.js์— ์ž…๋ฌธํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ๊ฐ•์˜๋ฅผ ์ถœ์‹œ ํ•˜์…จ๋‹ค๋Š” ์†Œ์‹์— ๋ฐ”๋กœ ๋‹ฌ๋ ค์™”์Šต๋‹ˆ๋‹ค ใ…‹ใ…‹ ๋ฒกํ„ฐ๋ผ๋Š”๊ฒŒ ์•„์ง์€ ์–ด๋ ต๊ธด ํ•˜์ง€๋งŒ... ๊ทธ๋ž˜๋„ ์ดˆ๋ณด์ž์˜ ์‹œ์„ ์„ ๊ณ ๋ คํ•˜์—ฌ ๊ฐ•์˜๋ฅผ ํ•ด์ฃผ์…”์„œ ๋ฒกํ„ฐ๋ฅผ ์กฐ๊ธˆ์”ฉ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋„ค์š”. ๋ฐ˜๋ณตํ•ด์„œ ๋“ฃ๋‹ค๋ณด๋ฉด ์žฌ๋ฏธ์žˆ๊ฒŒ ์‘์šฉ๋„ ํ•ด ๋ณผ ์ˆ˜ ์žˆ์„๊ฒƒ ๊ฐ™์•„์š” ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค

      • SOYOUNG HAN๋‹˜์˜ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€
        SOYOUNG HAN

        ์ˆ˜๊ฐ•ํ‰ 2

        โˆ™

        ํ‰๊ท  ํ‰์  5.0

        5

        6% ์ˆ˜๊ฐ• ํ›„ ์ž‘์„ฑ

        • yeonsoon park๋‹˜์˜ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€
          yeonsoon park

          ์ˆ˜๊ฐ•ํ‰ 2

          โˆ™

          ํ‰๊ท  ํ‰์  5.0

          5

          19% ์ˆ˜๊ฐ• ํ›„ ์ž‘์„ฑ

          • ํ‹ฐ๋ผ๋ฏธ์ˆ˜๋‹˜์˜ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€
            ํ‹ฐ๋ผ๋ฏธ์ˆ˜

            ์ˆ˜๊ฐ•ํ‰ 20

            โˆ™

            ํ‰๊ท  ํ‰์  5.0

            5

            31% ์ˆ˜๊ฐ• ํ›„ ์ž‘์„ฑ

            ๋น„์Šทํ•œ ๊ฐ•์˜

            ๊ฐ™์€ ๋ถ„์•ผ์˜ ๋‹ค๋ฅธ ๊ฐ•์˜๋ฅผ ๋งŒ๋‚˜๋ณด์„ธ์š”!