Built a 3D Batman Themed Portfolio ๐ฆ๐๏ธ
๊ฐ๋ฐ์๊ฐ Three.js์ Vanilla JS๋ก 3D ๋ฐฐํธ๋งจ ํ ๋ง ํฌํธํด๋ฆฌ์ค๋ฅผ ๊ตฌ์ถํด ๋ชจ๋ฐ์ผ์์ 60FPS ์ฑ๋ฅ ๋ฌ์ฑ
AI ์์ฝ
Context
๋๋ถ๋ถ์ ํฌํธํด๋ฆฌ์ค๋ ํ๋ฉด์ ๋ ์ด์์์ ์ฌ์ฉํ๊ณ ์์ด ์ฌ์ฉ์ ๊ฒฝํ์ด ์ ํ์ ์ด๋ค. ์ด๋ฅผ ๊ฐ์ ํ๊ธฐ ์ํด ๊ณ ์ฑ๋ฅ์ ์ธํฐ๋ํฐ๋ธ 3D ํ๊ฒฝ์ ์ ๊ณตํ ํ์๊ฐ ์์๋ค.
Technical Solution
- Three.js(WebGL) ๊ธฐ๋ฐ 3D ์์ง์ผ๋ก ์ปค์คํ Batmobile ๋ชจ๋ธ๊ณผ ์ธํฐ๋ํฐ๋ธ ์ฌ ๊ตฌํ
- Vanilla JavaScript๋ฅผ ์ฌ์ฉํด ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ข ์์ฑ ์ ๊ฑฐํ๊ณ Zero bloat ์ ์ง
- lerp(์ ํ ๋ณด๊ฐ) ํจ์๋ก ์นด๋ฉ๋ผ๋ฅผ ์น์ ๊ฐ์ ์ ์ง์ ์ผ๋ก ์ด๋ํ๋ ์นด๋ฉ๋ผ ์ค๋ฌด๋ฉ ๊ธฐ๋ฅ ๊ตฌํ
- ์ ฐ์ด๋ ์ต์ ํ์ ํํฐํด ๊ฐ์ ์ ํ์ผ๋ก ๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ์์ ์ฑ๋ฅ ์ ํ ๋ฐฉ์ง
- ์ฌ์ฉ์์ ์คํฌ๋กค ๊น์ด๋ฅผ 3D ์ฌ์ ์๋(๊ฐ์๋) ์ํ์ ๋๊ธฐํํ๋ ์ํ ๊ด๋ฆฌ ์์คํ ๊ตฌํ
- Dark mode์ ๊ณ ๋ช ๋ ๊ธ/ํ๋์ ์กฐํฉ, ์ ์ฐจ์ ๊ธฐํํ(procedural geometries)์ผ๋ก Turbo ๋ค๋น๊ฒ์ด์ ์๊ฐํ
Impact
๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ์์ 60FPS ์ฑ๋ฅ ๋ฌ์ฑ์ผ๋ก ๋ฐฐํฐ๋ฆฌ ์๋น ์ต์ํ
Key Takeaway
ํฌํธํด๋ฆฌ์ค์ ๊ฐ์ ๊ฐ์ธ ํ๋ก์ ํธ์์ Three.js ๊ฐ์ 3D ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ ์์ค ์ฑ๋ฅ ์ต์ ํ(์ ฐ์ด๋ ์ต์ ํ, ์นด๋ฉ๋ผ ์ค๋ฌด๋ฉ)๋ฅผ ์กฐํฉํ๋ฉด ๋ชจ๋ฐ์ผ๊น์ง ์์ฐ๋ฅด๋ ๊ณ ์ฑ๋ฅ ์ธํฐ๋ํฐ๋ธ ๊ฒฝํ์ ๊ตฌํํ ์ ์๋ค.
์ค์ฒ ํฌ์ธํธ
์น ๊ธฐ๋ฐ 3D ํ๋ก์ ํธ๋ฅผ ์งํํ๋ ๊ฐ๋ฐ์๊ฐ Three.js์์ ์ ์ฐจ์ ๊ธฐํํ๊ณผ ํํฐํด ์์คํ ์ ์ฌ์ฉํ ๋, ๋ ๋๋ง ๊ฐ์ ์ ํ๊ณผ ์ ฐ์ด๋ ์ต์ ํ๋ฅผ ๋จผ์ ์ ์ฉํ๋ฉด ๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ์์๋ 60FPS๋ฅผ ์ ์งํ๋ ๋ฐ์ํ ๊ฒฝํ์ ์ ๊ณตํ ์ ์๋ค.