테라조

Terrazzo

규칙적인 격자가 아니라, 크기·색이 제각각인 조각들이 불규칙하게 흩뿌려진 채 매끈하게 갈린 바닥재 무늬.

다른 이름: 테라조 패턴Chip pattern
···
html
<div class="tz"><svg id="chips" viewBox="0 0 340 108" preserveAspectRatio="xMidYMid slice" width="100%" height="100%"><rect width="340" height="108" fill="#e7e1d2"/></svg></div><span class="tag">terrazzo</span>
css
.tz{position:absolute;inset:0;overflow:hidden;animation:tzzoom 8s ease-in-out infinite}
@keyframes tzzoom{0%,100%{transform:scale(1)}50%{transform:scale(1.045)}}
.tag{position:absolute;left:10px;bottom:8px;padding:3px 9px;border-radius:999px;background:rgba(30,30,30,.75);
  color:#ece7dc;font:600 10px/1.5 ui-monospace,SFMono-Regular,Menlo,monospace;letter-spacing:.03em}
js
// 시드 고정 PRNG(mulberry32) — 새로고침해도 항상 같은 칩 배치가 나오게 한다.
function mulberry32(seed) {
  let a = seed;
  return function () {
    a |= 0; a = (a + 0x6D2B79F5) | 0;
    let t = Math.imul(a ^ (a >>> 15), 1 | a);
    t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t;
    return ((t ^ (t >>> 14)) >>> 0) / 4294967296;
  };
}
const rand = mulberry32(20260926);
const NS = 'http://www.w3.org/2000/svg';
const W = 340, H = 108;
const svg = document.getElementById('chips');
const colors = ['#f7f2e6', '#e2705c', '#3f7d6b', '#274472', '#e6b325'];

// 바탕의 고운 알갱이(speckle) — 실제 테라조 시멘트 바탕의 미세한 골재 느낌
for (let i = 0; i < 260; i++) {
  const c = document.createElementNS(NS, 'circle');
  c.setAttribute('cx', (rand() * W).toFixed(1));
  c.setAttribute('cy', (rand() * H).toFixed(1));
  c.setAttribute('r', (0.35 + rand() * 0.5).toFixed(2));
  c.setAttribute('fill', 'rgba(50,42,28,' + (0.1 + rand() * 0.12).toFixed(2) + ')');
  svg.appendChild(c);
}

// 불규칙 다각형 칩 — 순수 균일 난수는 큰 빈틈을 만들어 "드문드문"해진다.
// 지터드 그리드(칸을 나누고 칸 안에서만 흔들기)로 빈 구역 없이 촘촘하게 채운다.
const COLS = 17, ROWS = 6;
const cellW = W / COLS, cellH = H / ROWS;
function chip(cx, cy, baseR) {
  const sides = 4 + Math.floor(rand() * 4);
  const rot = rand() * Math.PI * 2;
  let d = '';
  for (let s = 0; s < sides; s++) {
    const a = rot + (s / sides) * Math.PI * 2;
    const r = baseR * (0.62 + rand() * 0.68);
    const x = cx + Math.cos(a) * r;
    const y = cy + Math.sin(a) * r;
    d += (s === 0 ? 'M' : 'L') + x.toFixed(1) + ',' + y.toFixed(1) + ' ';
  }
  const p = document.createElementNS(NS, 'path');
  p.setAttribute('d', d + 'Z');
  p.setAttribute('fill', colors[Math.floor(rand() * colors.length)]);
  p.setAttribute('opacity', (0.9 + rand() * 0.1).toFixed(2));
  svg.appendChild(p);
}
for (let row = 0; row < ROWS; row++) {
  for (let col = 0; col < COLS; col++) {
    const cx = (col + 0.5) * cellW + (rand() - 0.5) * cellW * 0.7;
    const cy = (row + 0.5) * cellH + (rand() - 0.5) * cellH * 0.7;
    chip(cx, cy, Math.min(cellW, cellH) * (0.26 + rand() * 0.3));
    // 칸마다 1/3 확률로 작은 보조 칩을 하나 더 얹어 크기 편차를 준다 (바탕은 그대로 보여야 진짜 테라조답다)
    if (rand() < 0.32) {
      chip(cx + (rand() - 0.5) * cellW, cy + (rand() - 0.5) * cellH, Math.min(cellW, cellH) * (0.12 + rand() * 0.14));
    }
  }
}

15~16세기 베네치아 건설 노동자들이 대리석 시공 후 남은 자투리 조각을 시멘트에 섞어 버리지 않고 재활용한 데서 시작된 저비용 바닥재입니다. 이름도 이탈리아어로 "테라스"를 뜻하는 "terrazza"에서 왔습니다. 2018년 전후로 구글·스포티파이 시기의 "친근한" 플랫 브랜딩 유행과 맞물려 웹·앱 브랜딩 배경으로 크게 재유행했습니다.

이 카테고리의 다른 패턴 대부분과 달리, 테라조는 구조적으로 반복 단위(타일)가 없습니다 — 조각의 크기·위치·색이 불규칙하게 흩어져 있다는 것 자체가 핵심 정체성이고, 표면을 평평하게 갈아낸 뒤에야 완성됩니다.

구현은 SVG 위에서 합니다. 매번 다른 결과가 나오는 Math.random() 대신, 값을 고정해두는 의사난수(PRNG)로 조각마다 위치·크기·회전·꼭짓점 개수(4~7각형)를 정하고 그 값으로 불규칙한 다각형을 그려 촘촘히 흩뿌립니다. 시드를 고정해두면 새로고침해도 배치가 흔들리지 않아 화면이 안정적입니다.

언제 쓰나

플랫/프렌들리 브랜딩 배경, 앱 온보딩·마케팅 페이지, 바닥재 목업에 씁니다. 칩 색을 너무 많이 쓰면 산만해지니 3~4가지 악센트 색으로 제한하세요.