๐ŸŒŸ p5.js์™€ npm ์ƒํƒœ๊ณ„์˜ ์—ฐ๋™

BamgasiJMยท2026๋…„ 6์›” 24์ผ

p5.js Art

๋ชฉ๋ก ๋ณด๊ธฐ
3/67
post-thumbnail

์ „ํ†ต์ ์ธ p5.js ํ•™์Šต ์ž๋ฃŒ๋Š” <script> ํƒœ๊ทธ๋ฅผ ์ด์šฉํ•œ CDN ๋ฐฉ์‹์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฐฉ๋ฒ•์€ ๋น ๋ฅด๊ฒŒ ์‹ค์Šต์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์ง€๋งŒ, ํ”„๋กœ์ ํŠธ ๊ทœ๋ชจ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ด€๋ฆฌ์™€ ์ฝ”๋“œ ๊ตฌ์กฐ ์ธก๋ฉด์—์„œ ํ•œ๊ณ„๋ฅผ ๋“œ๋Ÿฌ๋ƒ…๋‹ˆ๋‹ค.

npm install p5๋ฅผ ์ด์šฉํ•˜์—ฌ p5.js๋ฅผ ์„ค์น˜ํ•˜๋ฉด ํ˜„๋Œ€์ ์ธ ์›น ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์•ˆ์—์„œ p5.js๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด Vite, Webpack, Parcel๊ณผ ๊ฐ™์€ ๋ฒˆ๋“ค๋Ÿฌ๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ˆ˜๋งŽ์€ JavaScript ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ์†์‰ฝ๊ฒŒ ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

npm install p5
import p5 from "p5";

new p5((p) => {
  p.setup = () => {
    p.createCanvas(400, 400);
  };

  p.draw = () => {
    p.background(30);
    p.circle(200, 200, 100);
  };
});

npm ๊ธฐ๋ฐ˜ p5.js ๊ฐœ๋ฐœ์˜ ์žฅ์ 

๋ชจ๋“ˆ ์‹œ์Šคํ…œ ํ™œ์šฉ

ES Module ๊ธฐ๋ฐ˜์˜ import ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

import p5 from "p5";
import Matter from "matter-js";
import { Pane } from "tweakpane";

์ „์—ญ ๊ฐ์ฒด์— ์˜์กดํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ฝ”๋“œ ๊ตฌ์กฐ๊ฐ€ ๋ช…ํ™•ํ•ด์ง‘๋‹ˆ๋‹ค.


์˜์กด์„ฑ ๊ด€๋ฆฌ

ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฒ„์ „์„ package.json์—์„œ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

{
  "dependencies": {
    "p5": "^2.0.0",
    "matter-js": "^0.20.0",
    "gsap": "^3.13.0"
  }
}

๋™์ผํ•œ ํ”„๋กœ์ ํŠธ๋ฅผ ๋‹ค๋ฅธ ์ปดํ“จํ„ฐ์—์„œ ์‹คํ–‰ํ•˜๋”๋ผ๋„ ๋™์ผํ•œ ํ™˜๊ฒฝ์„ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๋ฒˆ๋“ค๋ง ๋ฐ ์ตœ์ ํ™”

ํ˜„๋Œ€์ ์ธ ๋นŒ๋“œ ๋„๊ตฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

  • Tree Shaking
  • ์ฝ”๋“œ ์••์ถ•
  • ์ž๋™ ๋ฆฌ๋กœ๋“œ
  • ๊ฐœ๋ฐœ ์„œ๋ฒ„
  • ํƒ€์ž… ๊ฒ€์‚ฌ
  • ์†Œ์Šค๋งต ์ƒ์„ฑ

ํŠนํžˆ Vite์™€ p5.js์˜ ์กฐํ•ฉ์€ ๋งค์šฐ ๋น ๋ฅธ ๊ฐœ๋ฐœ ๊ฒฝํ—˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.


1. ์ธ๊ณต์ง€๋Šฅ ๋ฐ ๋จธ์‹ ๋Ÿฌ๋‹

p5.js๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ํ‘œํ˜„ํ•˜๋Š” ๋ฐ ๋›ฐ์–ด๋‚˜๋ฉฐ, AI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ํ•ด์„ํ•˜๋Š” ์—ญํ• ์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค. ๋‘ ๊ธฐ์ˆ ์„ ๊ฒฐํ•ฉํ•˜๋ฉด ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ์•„ํŠธ, ์ œ์Šค์ฒ˜ ๊ธฐ๋ฐ˜ ์ธํ„ฐํŽ˜์ด์Šค, ์ƒ์„ฑํ˜• ์‹œ์Šคํ…œ ๋“ฑ์„ ์ œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


ml5

ml5๋Š” ์˜ˆ์ˆ ๊ฐ€์™€ ๋””์ž์ด๋„ˆ๋ฅผ ์œ„ํ•ด ์„ค๊ณ„๋œ ๋จธ์‹ ๋Ÿฌ๋‹ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค.

์ฃผ์š” ๊ธฐ๋Šฅ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ํฌ์ฆˆ ์ถ”์ •
  • ์† ์ถ”์ 
  • ์ด๋ฏธ์ง€ ๋ถ„๋ฅ˜
  • ๊ฐ์ฒด ์ธ์‹
  • ์–ผ๊ตด ์ธ์‹
  • ํ…์ŠคํŠธ ์ƒ์„ฑ

์˜ˆ๋ฅผ ๋“ค์–ด ์›น์บ ์œผ๋กœ ์‚ฌ์šฉ์ž์˜ ์† ์›€์ง์ž„์„ ์ถ”์ ํ•˜๊ณ , ์† ์œ„์น˜์— ๋”ฐ๋ผ p5.js ํŒŒํ‹ฐํด์ด ๋ฐ˜์‘ํ•˜๋„๋ก ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ™œ์šฉ ์‚ฌ๋ก€:

  • ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ๋ฏธ๋””์–ด ์•„ํŠธ
  • ์ œ์Šค์ฒ˜ ๊ธฐ๋ฐ˜ ๊ฒŒ์ž„
  • ์ „์‹œ ์ธํ„ฐํŽ˜์ด์Šค
  • ์›€์ง์ž„ ๊ธฐ๋ฐ˜ ์‚ฌ์šด๋“œ ์ƒ์„ฑ

TensorFlow.js

TensorFlow.js๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋”ฅ๋Ÿฌ๋‹ ๋ชจ๋ธ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค.

npm install @tensorflow/tfjs

ํ™œ์šฉ ์˜ˆ์‹œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์†๊ธ€์”จ ์ธ์‹
  • ์ด๋ฏธ์ง€ ๋ถ„๋ฅ˜
  • ์‹œ๊ณ„์—ด ๋ฐ์ดํ„ฐ ์˜ˆ์ธก
  • ์ƒ์„ฑ ๋ชจ๋ธ ์‹œ๊ฐํ™”
  • ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ๋ถ„์„

์˜ˆ๋ฅผ ๋“ค์–ด ์‚ฌ์šฉ์ž๊ฐ€ ๊ทธ๋ฆฐ ๊ทธ๋ฆผ์„ ์ธ์‹ํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ p5.js ์บ”๋ฒ„์Šค์— ์‹œ๊ฐ์ ์œผ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


2. ๋ฌผ๋ฆฌ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๋ฐ ์• ๋‹ˆ๋ฉ”์ด์…˜

p5.js๋Š” ๊ธฐ๋ณธ์ ์ธ ๋ฒกํ„ฐ ์—ฐ์‚ฐ๊ณผ ์• ๋‹ˆ๋ฉ”์ด์…˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์ง€๋งŒ, ๋ณต์žกํ•œ ๋ฌผ๋ฆฌ ํ˜„์ƒ์„ ๊ตฌํ˜„ํ•˜๊ธฐ์—๋Š” ์ œํ•œ์ ์ž…๋‹ˆ๋‹ค.


Matter.js

Matter.js๋Š” ๋Œ€ํ‘œ์ ์ธ 2์ฐจ์› ๋ฌผ๋ฆฌ ์—”์ง„์ž…๋‹ˆ๋‹ค.

npm install matter-js

์ง€์› ๊ธฐ๋Šฅ:

  • ์ค‘๋ ฅ
  • ์ถฉ๋Œ ํŒ์ •
  • ๊ด€์„ฑ
  • ๋งˆ์ฐฐ๋ ฅ
  • ๊ด€์ ˆ(Joint)
  • ๊ฐ•์ฒด(Rigid Body)

์ผ๋ฐ˜์ ์ธ ๊ตฌ์กฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. Matter.js๊ฐ€ ๋ฌผ๋ฆฌ ๊ณ„์‚ฐ ์ˆ˜ํ–‰
  2. ๊ฐ์ฒด ์œ„์น˜์™€ ํšŒ์ „๊ฐ’ ํš๋“
  3. p5.js๊ฐ€ ํ™”๋ฉด ๋ Œ๋”๋ง ๋‹ด๋‹น
rect(body.position.x, body.position.y, w, h);

ํ™œ์šฉ ๋ถ„์•ผ:

  • ๋ฌผ๋ฆฌ ๊ธฐ๋ฐ˜ ๊ฒŒ์ž„
  • ์ž…์ž ์‹œ๋ฎฌ๋ ˆ์ด์…˜
  • ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ์„ค์น˜ ์ž‘ํ’ˆ
  • ์ œ๋„ˆ๋Ÿฌํ‹ฐ๋ธŒ ๊ตฌ์กฐ๋ฌผ

GSAP

GSAP๋Š” ์›น ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋ถ„์•ผ์—์„œ ์‚ฌ์‹ค์ƒ ํ‘œ์ค€์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค.

npm install gsap

p5.js ๋ณ€์ˆ˜ ์ž์ฒด๋ฅผ ์• ๋‹ˆ๋ฉ”์ด์…˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

gsap.to(circle, {
  radius: 200,
  duration: 2
});

์žฅ์ :

  • ์ด์ง•(Easing)
  • ํƒ€์ž„๋ผ์ธ
  • ๋ฐ˜๋ณต ์• ๋‹ˆ๋ฉ”์ด์…˜
  • ์Šคํฌ๋กค ์—ฐ๋™
  • ๋†’์€ ์„ฑ๋Šฅ

ํŠนํžˆ ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™”๋‚˜ ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ์•„ํŠธ์—์„œ ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.


3. ์˜ค๋””์˜ค์™€ ์‚ฌ์šด๋“œ ์‹œ๊ฐํ™”

์‚ฌ์šด๋“œ๋Š” ์ œ๋„ˆ๋Ÿฌํ‹ฐ๋ธŒ ์•„ํŠธ์™€ ๊ฐ€์žฅ ๋งŽ์ด ๊ฒฐํ•ฉ๋˜๋Š” ๋ฐ์ดํ„ฐ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.


Tone.js

Tone.js๋Š” Web Audio API๋ฅผ ๊ณ ์ˆ˜์ค€์œผ๋กœ ์ถ”์ƒํ™”ํ•œ ์˜ค๋””์˜ค ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค.

npm install tone

์ œ๊ณต ๊ธฐ๋Šฅ:

  • ์‹ ๋””์‚ฌ์ด์ €
  • ์‹œํ€€์„œ
  • ์ƒ˜ํ”Œ๋Ÿฌ
  • ์ดํŽ™ํŠธ
  • MIDI ์ฒ˜๋ฆฌ
  • FFT ๋ถ„์„

์˜ค๋””์˜ค ๋ถ„์„ ๋ฐ์ดํ„ฐ๋ฅผ p5.js๋กœ ์ „๋‹ฌํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ž‘ํ’ˆ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์Œ์•… ๋น„์ฃผ์–ผ๋ผ์ด์ €
  • ๋ฆฌ๋“ฌ ๊ธฐ๋ฐ˜ ๊ฒŒ์ž„
  • ์˜ค๋””์˜ค ๋ฐ˜์‘ํ˜• ํŒŒํ‹ฐํด
  • ์‹ค์‹œ๊ฐ„ ๊ณต์—ฐ ๋น„์ฃผ์–ผ

p5.sound์™€์˜ ์ฐจ์ด

ํ•ญ๋ชฉp5.soundTone.js
๋‚œ์ด๋„๋‚ฎ์Œ์ค‘๊ฐ„
์‹ ๋””์‚ฌ์ด์ €์ œํ•œ์ ๋งค์šฐ ๊ฐ•๋ ฅ
์‹œํ€€์„œ๋‹จ์ˆœ์ „๋ฌธ์ 
์˜ค๋””์˜ค ์ดํŽ™ํŠธ๊ธฐ๋ณธ๋‹ค์–‘
์Œ์•… ์ œ์ž‘์ œํ•œ์ ์šฐ์ˆ˜

๊ฐ„๋‹จํ•œ ์‚ฌ์šด๋“œ ์ฒ˜๋ฆฌ์—๋Š” p5.sound๊ฐ€ ์ถฉ๋ถ„ํ•˜์ง€๋งŒ, ์Œ์•… ์ƒ์„ฑ๊ณผ ์˜ค๋””์˜ค ์‹œ์Šคํ…œ ๊ตฌ์ถ•์—๋Š” Tone.js๊ฐ€ ํ›จ์”ฌ ๊ฐ•๋ ฅํ•ฉ๋‹ˆ๋‹ค.


4. ํฌ๋ฆฌ์—์ดํ‹ฐ๋ธŒ ์ฝ”๋”ฉ ์œ ํ‹ธ๋ฆฌํ‹ฐ


Tweakpane

Tweakpane์€ ํฌ๋ฆฌ์—์ดํ‹ฐ๋ธŒ ์ฝ”๋”ฉ ํ”„๋กœ์ ํŠธ์—์„œ ๊ฐ€์žฅ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ ์ œ์–ด ๋„๊ตฌ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.

npm install tweakpane

์˜ˆ์‹œ:

const params = {
  speed: 2,
  count: 100
};

pane.addBinding(params, "speed");
pane.addBinding(params, "count");

ํ™œ์šฉ ๋ถ„์•ผ:

  • ์‹ค์‹œ๊ฐ„ ํŒŒ๋ผ๋ฏธํ„ฐ ์กฐ์ ˆ
  • ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์‹คํ—˜
  • ์ „์‹œ ์ธํ„ฐํŽ˜์ด์Šค
  • ์ œ๋„ˆ๋Ÿฌํ‹ฐ๋ธŒ ์•„ํŠธ ํŠœ๋‹

dat.GUI

์˜ค๋žซ๋™์•ˆ ํฌ๋ฆฌ์—์ดํ‹ฐ๋ธŒ ์ฝ”๋”ฉ ๋ถ„์•ผ์—์„œ ์‚ฌ์šฉ๋œ GUI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค.

ํ˜„์žฌ๋Š” Tweakpane์ด ๋” ํ˜„๋Œ€์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค์™€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์ง€๋งŒ, ์—ฌ์ „ํžˆ ๋งŽ์€ ์˜ˆ์ œ์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.


canvas-sketch

์ œ๋„ˆ๋Ÿฌํ‹ฐ๋ธŒ ์•„ํŠธ ์ž‘๊ฐ€๋“ค์ด ๋„๋ฆฌ ์‚ฌ์šฉํ•˜๋Š” ์ œ์ž‘ ํ™˜๊ฒฝ์ž…๋‹ˆ๋‹ค.

์ฃผ์š” ๊ธฐ๋Šฅ:

  • ๊ณ ํ•ด์ƒ๋„ ๋ Œ๋”๋ง
  • ํ”„๋ ˆ์ž„ ์ œ์–ด
  • ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ถœ๋ ฅ
  • PNG ์‹œํ€€์Šค ์ƒ์„ฑ
  • GIF ๋ฐ ๋น„๋””์˜ค ์ถœ๋ ฅ

๋Œ€ํ˜• ์ธ์‡„ ์ž‘์—…์ด๋‚˜ NFT ์•„ํŠธ ์ œ์ž‘ ์‹œ ํŠนํžˆ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.


5. ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

p5.js๋Š” ํ‘œํ˜„์— ๊ฐ•ํ•˜์ง€๋งŒ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๊ธฐ๋Šฅ์€ ์ œํ•œ์ ์ž…๋‹ˆ๋‹ค.


D3.js

npm install d3

D3๋Š” ๋ฐ์ดํ„ฐ ๋ถ„์„๊ณผ ์Šค์ผ€์ผ ๊ณ„์‚ฐ์— ๋งค์šฐ ๊ฐ•๋ ฅํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ:

  • CSV ๋ถ„์„
  • ํ†ต๊ณ„ ์ฒ˜๋ฆฌ
  • ์ถ• ์ƒ์„ฑ
  • ๋ฐ์ดํ„ฐ ๋ณ€ํ™˜

D3๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  p5.js๊ฐ€ ์‹œ๊ฐํ™”๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ๋ฐฉ์‹์ด ์ž์ฃผ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.


Papa Parse

๋Œ€์šฉ๋Ÿ‰ CSV ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค.

npm install papaparse

ํ™œ์šฉ ์‚ฌ๋ก€:

  • ์„ผ์„œ ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™”
  • ๊ธฐ์ƒ ๋ฐ์ดํ„ฐ ๋ถ„์„
  • ์‚ฌํšŒ ๋ฐ์ดํ„ฐ ์•„ํŠธ
  • ์‹ค์‹œ๊ฐ„ ๋กœ๊ทธ ๋ถ„์„

6. 3D ๊ทธ๋ž˜ํ”ฝ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ


Three.js

p5.js์˜ WEBGL ๋ชจ๋“œ๋Š” ๋น„๊ต์  ๊ฐ„๋‹จํ•œ 3์ฐจ์› ํ‘œํ˜„์— ์ ํ•ฉํ•˜์ง€๋งŒ, ๋ณต์žกํ•œ 3D ์žฅ๋ฉด ๊ตฌ์„ฑ์—๋Š” ํ•œ๊ณ„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

Three.js์™€ p5.js๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • Three.js: 3D ๋ Œ๋”๋ง
  • p5.js: UI ๋ฐ 2D ๊ทธ๋ž˜ํ”ฝ
  • p5.js: ์ƒ์„ฑ ์•Œ๊ณ ๋ฆฌ์ฆ˜
  • Three.js: ์ตœ์ข… ์‹œ๊ฐํ™”

ํ™œ์šฉ ์‚ฌ๋ก€:

  • ๋ฐ์ดํ„ฐ ๊ธฐ๋ฐ˜ 3D ๊ตฌ์กฐ
  • ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ์„ค์น˜ ์ž‘ํ’ˆ
  • ์ƒ์„ฑํ˜• ๊ณต๊ฐ„
  • ์›น ๊ธฐ๋ฐ˜ ์ „์‹œ

7. GPU ๊ณ„์‚ฐ ๋ฐ ์…ฐ์ด๋”


glslify

GLSL ์ฝ”๋“œ๋ฅผ ๋ชจ๋“ˆ์ฒ˜๋Ÿผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.

npm install glslify

๋ณต์žกํ•œ ์…ฐ์ด๋” ํ”„๋กœ์ ํŠธ์—์„œ ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•ด์ง‘๋‹ˆ๋‹ค.


regl

WebGL ์ถ”์ƒํ™” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค.

GPU ๊ณ„์‚ฐ์„ ์ˆ˜ํ–‰ํ•œ ๊ฒฐ๊ณผ๋ฅผ p5.js๋กœ ์ „๋‹ฌํ•˜๋Š” ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


์ถ”์ฒœ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ

ํ˜„์žฌ p5.js ํ”„๋กœ์ ํŠธ๋ฅผ ๊ตฌ์ถ•ํ•  ๋•Œ ๊ฐ€์žฅ ์ถ”์ฒœ๋˜๋Š” ์กฐํ•ฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋ชฉ์ ์ถ”์ฒœ ๊ตฌ์„ฑ
์ผ๋ฐ˜์ ์ธ ์Šค์ผ€์น˜p5 + Vite
์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ์•„ํŠธp5 + ml5 + Tweakpane
๋ฌผ๋ฆฌ ์‹œ๋ฎฌ๋ ˆ์ด์…˜p5 + Matter.js
์˜ค๋””์˜ค ๋น„์ฃผ์–ผp5 + Tone.js
๋ฐ์ดํ„ฐ ์•„ํŠธp5 + D3
์ƒ์„ฑ ์˜ˆ์ˆ p5 + canvas-sketch
๋ณต์žกํ•œ 3Dp5 + Three.js
GPU ๊ธฐ๋ฐ˜ ์ž‘์—…p5 + GLSL

๊ฒฐ๋ก 

npm ๊ธฐ๋ฐ˜์˜ p5.js๋Š” ๋‹จ์ˆœํ•œ ๋“œ๋กœ์ž‰ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋„˜์–ด ํ˜„๋Œ€์ ์ธ ์›น ๊ฐœ๋ฐœ ์ƒํƒœ๊ณ„์™€ ์—ฐ๊ฒฐ๋˜๋Š” ํฌ๋ฆฌ์—์ดํ‹ฐ๋ธŒ ์ฝ”๋”ฉ ํ”Œ๋žซํผ์œผ๋กœ ํ™•์žฅ๋ฉ๋‹ˆ๋‹ค.

AI, ๋ฌผ๋ฆฌ ์—”์ง„, ์˜ค๋””์˜ค ํ”„๋ ˆ์ž„์›Œํฌ, ๋ฐ์ดํ„ฐ ๋ถ„์„ ๋„๊ตฌ, 3D ์—”์ง„, GPU ์…ฐ์ด๋” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊นŒ์ง€ ๋ชจ๋‘ ๋™์ผํ•œ ํ”„๋กœ์ ํŠธ ์•ˆ์—์„œ ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋Ÿฌํ•œ ์กฐํ•ฉ์€ ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ์•„ํŠธ, ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™”, ์ƒ์„ฑ ์˜ˆ์ˆ , ๋ฏธ๋””์–ด ์•„ํŠธ, ์›น ๊ธฐ๋ฐ˜ ์„ค์น˜ ์ž‘ํ’ˆ ๋“ฑ ๋‹ค์–‘ํ•œ ๋ถ„์•ผ์—์„œ ๊ฐ•๋ ฅํ•œ ์ œ์ž‘ ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์˜ค๋Š˜๋‚  p5.js๋ฅผ ํ•™์Šตํ•œ๋‹ค๋Š” ๊ฒƒ์€ ๋‹จ์ˆœํžˆ ์บ”๋ฒ„์Šค์— ๊ทธ๋ฆผ์„ ๊ทธ๋ฆฌ๋Š” ๊ธฐ์ˆ ์„ ๋ฐฐ์šฐ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, JavaScript ์ƒํƒœ๊ณ„ ์ „์ฒด๋ฅผ ์ฐฝ์ž‘ ๋„๊ตฌ๋กœ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ตํžˆ๋Š” ๊ณผ์ •์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

profile
Coding Art with Blender / oF / Processing / p5.js / nannou

0๊ฐœ์˜ ๋Œ“๊ธ€