๐ŸŽ“ 17์ฃผ์ฐจ : ๋ฐ์ดํ„ฐ ๊ธฐ๋ฐ˜ ํ˜•ํƒœ ์ƒ์„ฑ (Data-driven Geometry)

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

p5.js Art

๋ชฉ๋ก ๋ณด๊ธฐ
26/65
post-thumbnail
  • ๋ฐ์ดํ„ฐ ๊ฐ’ โ†’ ๊ธฐํ•˜ํ•™์  ์†์„ฑ(ํฌ๊ธฐ, ์œ„์น˜, ํšŒ์ „, ์ƒ‰, ๋…ธ์ด์ฆˆ, ๋ชจ์–‘)์œผ๋กœ ๋ณ€ํ™˜
  • ์ˆซ์ž/๋ฐฐ์—ด/์™ธ๋ถ€ํŒŒ์ผ(csv/json/api) ๋“ฑ์„ ํ˜•ํƒœ ์ƒ์„ฑ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์ž…๋ ฅ์œผ๋กœ ์‚ฌ์šฉ
// === Data-driven Geometry ===
// CSV ๋ฐ์ดํ„ฐ โ†’ Radial Sculpture ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜
// ๋ฐ์ดํ„ฐ ๊ธฐ๋ฐ˜ ๊ธฐํ•˜ ์กฐํ˜•

let table;
let values = [];

function preload() {
  // CSV ํŒŒ์ผ์„ ๋ถˆ๋Ÿฌ์˜ด
  table = loadTable("data.csv", "csv", "header");
}

function setup() {
  createCanvas(700, 700);
  angleMode(DEGREES);

  // CSV์—์„œ ๋ฐ์ดํ„ฐ ์ถ”์ถœ
  for (let r = 0; r < table.getRowCount(); r++) {
    let v = table.getNum(r, "value");
    values.push(v);
  }
}

function draw() {
  background(20);
  translate(width / 2, height / 2);

  // ์‹œ๊ฐํ™” ํŒŒ๋ผ๋ฏธํ„ฐ
  let count = values.length;
  let angleStep = 360 / count;

  for (let i = 0; i < count; i++) {
    let v = values[i];

    // ๋ฐ์ดํ„ฐ โ†’ Geometry ๋ณ€ํ™˜
    let radius = map(v, 0, 100, 40, 300);
    let thickness = map(v, 0, 100, 4, 20);
    let hue = map(v, 0, 100, 160, 360);

    push();
    rotate(i * angleStep);

    // ์ƒ‰์ƒ
    fill(hue, 150, 255);
    noStroke();

    // ๋ฐฉ์‚ฌํ˜• ๊ธฐ๋‘ฅ (Radial Bar)
    rect(0, -thickness / 2, radius, thickness, 5);

    // ๋ฐ์ดํ„ฐ ์  (์ ํ†  ์กฐํ˜• ๋А๋‚Œ)
    fill(255);
    circle(radius, 0, thickness * 0.8);

    pop();
  }
}

โœ… 1) ๋ฐ์ดํ„ฐ ๊ธฐ๋ฐ˜ ํŒจ๋Ÿฌ๋ฉ”ํŠธ๋ฆญ ์ปค๋ธŒ

Spline / Blob / Superformula ๋“ฑ๊ณผ ๊ฒฐํ•ฉ

โœ… 2) ์ด๋ฏธ์ง€ ๋ฐ์ดํ„ฐ ๊ธฐ๋ฐ˜ Geometry

์ด๋ฏธ์ง€ ํ”ฝ์…€ โ†’ ๋†’์ด๋งต(Height field) ์ƒ์„ฑ
(์˜ˆ: ์–ผ๊ตด ์‚ฌ์ง„ โ†’ 2D height sculpture)

โœ… 3) Noise + Data ๋ฏน์Šค

์‹ค์ œ ๋ฐ์ดํ„ฐ์— ๋…ธ์ด์ฆˆ ํ•„ํ„ฐ๋ฅผ ์ž…ํ˜€
์˜ˆ์ˆ ์  โ€œ๋ฐ์ดํ„ฐ ์™œ๊ณกโ€ ํšจ๊ณผ ๋งŒ๋“ค๊ธฐ

โœ… 4) Three.js๋กœ ํ™•์žฅ

CSV ๋ฐ์ดํ„ฐ โ†’ 3D tube / mesh deform
(์ง„์งœ Procedural Modeling)

โœ… 5) ์• ๋‹ˆ๋ฉ”์ด์…˜

๋ฐ์ดํ„ฐ๊ฐ€ ์‹œ๊ฐ„์— ๋”ฐ๋ผ ๋ณ€ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ
ํ˜•ํƒœ๊ฐ€ pulsating ํ•˜๋„๋ก ๋งŒ๋“ค๊ธฐ

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

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