๐ŸŒŸ p5.js ์ปฌ๋Ÿฌ Part. 1 : ๋‹ค์–‘ํ•œ ๋ชจ๋“œ

BamgasiJMยท2025๋…„ 11์›” 29์ผ

p5.js Art

๋ชฉ๋ก ๋ณด๊ธฐ
5/65
post-thumbnail

p5.js์—์„œ๋Š” ์ƒ‰์„ ๋‹ค๋ฃจ๋Š” ๋ฐฉ์‹์„ ์ปฌ๋Ÿฌ๋ชจ๋“œ(colorMode)๋กœ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

1. p5.js ๊ธฐ๋ณธ ์ƒ‰์ƒ ์ •์˜ ๋ฐฉ์‹

๐ŸŒˆ 1. RGB : ๊ธฐ๋ณธ ๋ชจ๋“œ
๐ŸŒˆ 2. HSB : Hue, Saturation, Brightness
๐ŸŒˆ 3. HSL : Hue, Saturation, Lightness
๐ŸŒˆ 4. Grayscale : ํšŒ์ƒ‰์กฐ
๐ŸŒˆ 5. Hex Color : ์›น ํ‘œ์ค€ 16์ง„์ˆ˜ ์ปฌ๋Ÿฌ ์ฝ”๋“œ
๐ŸŒˆ 6. CSS : CSS ํ‘œ์ค€ ์ปฌ๋Ÿฌ ์ด๋ฆ„ ๋ฌธ์ž์—ด

2. ์ƒ‰์„ ์‚ฌ์šฉํ•˜๋Š” ๊ณณ (์ƒ‰์ƒ ๊ด€๋ จ ํ•จ์ˆ˜)

  • background(color) : ์บ”๋ฒ„์Šค์˜ ๋ฐฐ๊ฒฝ์ƒ‰
  • fill(color) : ๋„ํ˜•์„ ์ฑ„์šฐ๋Š” ์ƒ‰
  • stroke(color) : ๋„ํ˜•์˜ ์œค๊ณฝ์„ /์„ ์˜ ์ƒ‰
  • noFill() : ๋„ํ˜• ์ฑ„์šฐ์ง€ ์•Š๊ธฐ
  • noStroke() : ๋„ํ˜• ์œค๊ณฝ์„  ๊ทธ๋ฆฌ์ง€ ์•Š๊ธฐ
  • color(v1, v2, v3, alpha) : ์ƒ‰์ƒ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋ณ€์ˆ˜์— ์ €์žฅ

3. ์ปฌ๋Ÿฌ ๋ชจ๋“œ ์„ค์ • : colorMode()

p5.js์˜ ์ƒ‰์ƒ ์‹œ์Šคํ…œ์˜ ํ•ต์‹ฌ์€ colorMode() ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ์ด ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ‰์ƒ์„ ํ•ด์„ํ•˜๋Š” ๋ฐฉ์‹์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์”๋‹ˆ๋‹ค.

colorMode(mode, [range1], [range2], [range3], [rangeA])
  • mode : ์‚ฌ์šฉํ•  ์ƒ‰์ƒ ๋ชจ๋ธ์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. (RGB, HSB, HSL ์ค‘ ํ•˜๋‚˜)
  • range1~3 : ๊ฐ ์ƒ‰์ƒ ๊ตฌ์„ฑ์š”์†Œ (R, G, B ํ˜น์€ H, S, B)์˜ ์ตœ๋Œ€๊ฐ’์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
  • rangeA : ์•ŒํŒŒ๊ฐ’(ํˆฌ๋ช…๋„)์˜ ์ตœ๋Œ€๊ฐ’์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

๋ฒ”์œ„ ๋ณ€๊ฒฝํ•  ๋•Œ

  • RGB๋ชจ๋“œ์˜ ๊ฒฝ์šฐ ์ƒ‰์ƒ ์ตœ๋Œ€๊ฐ’์„ 1๋กœ ์„ค์ •ํ•˜์—ฌ 0.0์—์„œ 1.0 ์‚ฌ์ด์˜ ๋ถ€๋™ ์†Œ์ˆ˜์  ๊ฐ’์„ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ข…์ข… ์…ฐ์ด๋”๋‚˜ ๋‹ค๋ฅธ ๊ทธ๋ž˜ํ”ฝ API์™€ ์—ฐ๋™ํ•  ๋•Œ ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
colorMode(RGB, 1.0); // R, G, B์˜ ์ตœ๋Œ€๊ฐ’์„ 1.0์œผ๋กœ ์„ค์ •

fill(1.0, 0.0, 0.0); // ๋นจ๊ฐ„์ƒ‰
rect(50, 50, 100, 100);

fill(0.0, 0.5, 0.5); // ์ค‘๊ฐ„ ํ†ค์˜ ์ฒญ๋ก์ƒ‰
rect(150, 50, 100, 100);

colorMode(RGB, 255); // ์›๋ž˜ 255 ๋ฒ”์œ„๋กœ ๋ณต์›
fill(0, 0, 255); // ํŒŒ๋ž€์ƒ‰
rect(250, 50, 100, 100);
  • ๊ฐ ์ฑ„๋„๋งˆ๋‹ค ๋‹ค๋ฅธ ๋ฒ”์œ„๋ฅผ ์„ค์ •ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
colorMode(RGB, 100, 100, 100, 1);
// R: 0-100, G: 0-100, B: 0-100, Alpha: 0-1
fill(100, 0, 0, 0.5);   // ๋ฐ˜ํˆฌ๋ช… ๋นจ๊ฐ•
rect(125, 200, 100, 100);

์ปฌ๋Ÿฌ ๋ชจ๋“œ๋ฅผ ๋ณ€๊ฒฝํ•  ๋•Œ

  • ํ•œ ์Šค์ผ€์น˜ ๋‚ด์—์„œ ์—ฌ๋Ÿฌ ์ปฌ๋Ÿฌ ๋ชจ๋“œ๋ฅผ ๋ฐ”๊พธ์–ด๊ฐ€๋ฉฐ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
  // RGB ๋ชจ๋“œ๋กœ ๊ทธ๋ฆฌ๊ธฐ
  colorMode(RGB, 255);
  fill(255, 0, 0);
  rect(50, 50, 100, 100);
  
  // HSB ๋ชจ๋“œ๋กœ ์ „ํ™˜
  colorMode(HSB, 360, 100, 100);
  fill(120, 80, 90);
  rect(200, 50, 100, 100);
  
  // ๋‹ค์‹œ RGB๋กœ ์ „ํ™˜
  colorMode(RGB, 255);
  fill(0, 0, 255);
  rect(125, 200, 100, 100);
}

์ด์ œ๋ถ€ํ„ฐ๋Š” ์—ฌ๋Ÿฌ ์ปฌ๋Ÿฌ ๋ชจ๋“œ์˜ ์‚ฌ์šฉ๋ฒ•์— ๋Œ€ํ•œ ์„ค๋ช…์ž…๋‹ˆ๋‹ค.

A. RGB ๋ชจ๋“œ ๐Ÿ”ด๐ŸŸข๐Ÿ”ต

  • ์„ค์ • : colorMode(RGB, maxR, maxG, maxB, maxA)
  • ๊ธฐ๋ณธ ๋ฒ”์œ„ : colorMode(RGB, 255, 255, 255, 255) ํ˜น์€ ๊ฐ„๋‹จํžˆ colorMode(RGB)
function setup() {
  createCanvas(400, 400);
  
  // RGB ๋ชจ๋“œ (๊ธฐ๋ณธ๊ฐ’์ด๋ฏ€๋กœ ๋ณ„๋„ ํ‘œ๊ธฐ ์•ˆํ•จ)
  // ๋ฒ”์œ„: R(0-255), G(0-255), B(0-255)
  fill(255, 0, 0);      // ๋นจ๊ฐ•
  rect(50, 50, 100, 100);
  
  fill(0, 255, 0);      // ์ดˆ๋ก
  rect(200, 50, 100, 100);
  
  fill(0, 0, 255);      // ํŒŒ๋ž‘
  rect(125, 200, 100, 100);
}

์‚ฌ์šฉ ๋ฐฉ๋ฒ•

  • fill(gray) : ํšŒ์ƒ‰ (0~255)
  • fill(gray, alpha) : ํˆฌ๋ช…๋„๊ฐ€ ์žˆ๋Š” ํšŒ์ƒ‰
  • fill(r, g, b) : RGB ๊ฐ’
  • fill(r, g, b, alpha) : ํˆฌ๋ช…๋„๊ฐ€ ์žˆ๋Š” RGB

B. HSB ๋ชจ๋“œ ๐ŸŒˆ

์ƒ‰์ƒ, ์ฑ„๋„, ๋ฐ๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ๋žŒ์ด ์ƒ‰์„ ์ธ์ง€ํ•˜๋Š” ๋ฐฉ์‹๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ ์ƒ‰์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

  • ์„ค์ •: colorMode(HSB, maxH, maxS, maxB, maxA)
  • ๊ธฐ๋ณธ ๋ฒ”์œ„ : colorMode(HSB, 360, 100, 100, 100)
function setup() {
  createCanvas(400, 400);
  
  // HSB ๋ชจ๋“œ๋กœ ๋ณ€๊ฒฝ
  colorMode(HSB);
  // ๊ธฐ๋ณธ ๋ฒ”์œ„: H(0-360), S(0-100), B(0-100)
  
  fill(0, 100, 100);      // ๋นจ๊ฐ• (Hue 0๋„)
  rect(50, 50, 100, 100);
  
  fill(120, 100, 100);    // ์ดˆ๋ก (Hue 120๋„)
  rect(200, 50, 100, 100);
  
  fill(240, 100, 100);    // ํŒŒ๋ž‘ (Hue 240๋„)
  rect(125, 200, 100, 100);
}

์‚ฌ์šฉ ๋ฐฉ๋ฒ•

  • Hue (์ƒ‰์กฐ, H): 0๋ถ€ํ„ฐ 360๊นŒ์ง€์˜ ๊ฐ๋„๋กœ ํ‘œํ˜„ (์ƒ‰์ƒํ™˜).
  • Saturation (์ฑ„๋„, S): 0 (๋ฌด์ฑ„์ƒ‰/ํšŒ์ƒ‰)๋ถ€ํ„ฐ 100 (๊ฐ€์žฅ ์„ ๋ช…ํ•œ ์ƒ‰)๊นŒ์ง€.
  • Brightness (๋ฐ๊ธฐ, B): 0 (๊ฒ€์€์ƒ‰)๋ถ€ํ„ฐ 100 (๊ฐ€์žฅ ๋ฐ์€ ์ƒ‰)๊นŒ์ง€.
  • ์•ŒํŒŒ (ํˆฌ๋ช…๋„): 0 (ํˆฌ๋ช…)๋ถ€ํ„ฐ 100 (๋ถˆํˆฌ๋ช…)๊นŒ์ง€.

C. HSL ๋ชจ๋“œ โ˜€๏ธ

HSB์™€ ๋น„์Šทํ•˜์ง€๋งŒ ๋ฐ๊ธฐ ๋Œ€์‹  Lightness(๋ช…๋„)๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • ์„ค์ •: colorMode(HSL, maxH, maxS, maxL, maxA)
  • ๊ธฐ๋ณธ ๋ฒ”์œ„ : colorMode(HSL, 360, 100, 100, 100)
function setup() {
  createCanvas(400, 400);
  
  // HSL ๋ชจ๋“œ๋กœ ๋ณ€๊ฒฝ
  colorMode(HSL);
  // ๊ธฐ๋ณธ ๋ฒ”์œ„: H(0-360), S(0-100), L(0-100)
  
  fill(0, 100, 50);       // ๋นจ๊ฐ•
  rect(50, 50, 100, 100);
  
  fill(120, 100, 50);     // ์ดˆ๋ก
  rect(200, 50, 100, 100);
  
  fill(240, 100, 50);     // ํŒŒ๋ž‘
  rect(125, 200, 100, 100);
}

์‚ฌ์šฉ ๋ฐฉ๋ฒ•

  • Hue (์ƒ‰์กฐ, H): 0๋ถ€ํ„ฐ 360๊นŒ์ง€.
  • Saturation (์ฑ„๋„, S): 0๋ถ€ํ„ฐ 100๊นŒ์ง€.
  • Lightness (๋ช…๋„, L): 0 (๊ฒ€์€์ƒ‰)๋ถ€ํ„ฐ 50 (์ˆœ์ˆ˜ํ•œ ์ƒ‰์ƒ)์„ ๊ฑฐ์ณ 100 (ํฐ์ƒ‰)๊นŒ์ง€.

D. Grayscale ๋ชจ๋“œ

p5.js์—์„œ ์ƒ‰์ƒ ํ•จ์ˆ˜์˜ ์ธ์ˆ˜๋ฅผ ํ•˜๋‚˜๋งŒ ์‚ฌ์šฉํ•˜๋ฉด ๊ทธ๋ ˆ์ด์Šค์ผ€์ผ๋กœ ํ•ด์„๋ฉ๋‹ˆ๋‹ค.

  • ๊ตฌ๋ฌธ: fill(v) ๋˜๋Š” fill(v, alpha)
  • ๋ฒ”์œ„: ํ˜„์žฌ colorMode()์—์„œ ์„ค์ •๋œ ์ตœ๋Œ€๊ฐ’๊นŒ์ง€.
    • RGB ๋ชจ๋“œ : 0๋ถ€ํ„ฐ 255๊นŒ์ง€.
    • HSB/HSL ๋ชจ๋“œ: ๊ฐ ๋ชจ๋“œ์˜ ์ตœ๋Œ€ ๋ฐ๊ธฐ/๋ช…๋„ ๊ฐ’์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง€๋ฉฐ, ์ผ๋ฐ˜์ ์œผ๋กœ 0๋ถ€ํ„ฐ 100๊นŒ์ง€์ž…๋‹ˆ๋‹ค.
colorMode(RGB);
fill(0);   // ๊ฒ€์€์ƒ‰ (R, G, B ๋ชจ๋‘ 0)
fill(255); // ํฐ์ƒ‰ (R, G, B ๋ชจ๋‘ 255)
fill(128, 100); // ํšŒ์ƒ‰ (๋ฐ๊ธฐ 128), ํˆฌ๋ช…๋„ 100

E. Hex Color ์‚ฌ์šฉํ•˜๊ธฐ

์›น ํ‘œ์ค€ 16์ง„์ˆ˜ ์ปฌ๋Ÿฌ ์ฝ”๋“œ๋ฅผ ์ƒ‰์ƒ ๊ด€๋ จ ํ•จ์ˆ˜์— ์ง์ ‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

function setup() {
  createCanvas(400, 400);
  
  // Hex ์ปฌ๋Ÿฌ (# ํฌํ•จ ๋˜๋Š” ์ œ์™ธ ๋ชจ๋‘ ๊ฐ€๋Šฅ)
  fill('#FF0000');        // ๋นจ๊ฐ•
  rect(50, 50, 100, 100);
  
  fill('#00FF00');        // ์ดˆ๋ก
  rect(200, 50, 100, 100);
  
  fill('0000FF');         // ํŒŒ๋ž‘ (# ์—†์ด๋„ ๊ฐ€๋Šฅ)
  rect(125, 200, 100, 100);
  
  // ํˆฌ๋ช…๋„ ํฌํ•จ (8์ž๋ฆฌ hex)
  fill('#FF000080');      // ๋ฐ˜ํˆฌ๋ช… ๋นจ๊ฐ•
  rect(275, 200, 100, 100);
}

F. CSS ์ปฌ๋Ÿฌ ๋„ค์ž„ ์‚ฌ์šฉํ•˜๊ธฐ

CSS ํ‘œ์ค€ ์ปฌ๋Ÿฌ ์ด๋ฆ„์„ ๋ฌธ์ž์—ด๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

function setup() {
  createCanvas(400, 400);
  
  fill('red');
  rect(50, 50, 100, 100);
  
  fill('coral');
  rect(200, 50, 100, 100);
  
  fill('dodgerblue');
  rect(125, 200, 100, 100);
}

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

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