토폴로지

Topology

메시의 정점·모서리·면이 형태 위에 어떻게 배치되는지 — 특히 사각면(쿼드)이 표면의 굴곡을 따라 흐르는지를 뜻합니다.

다른 이름: Edge flowPolesQuad-dominant mesh
···
html
<div class="topo-wrap">
  <div class="topo-panel">
    <svg viewBox="0 0 104 100" class="topo-svg">
      <g class="grid">
        <line x1="12" y1="15" x2="12" y2="84"/><line x1="32" y1="15" x2="32" y2="84"/><line x1="52" y1="15" x2="52" y2="84"/><line x1="72" y1="15" x2="72" y2="84"/><line x1="92" y1="15" x2="92" y2="84"/>
        <line x1="12" y1="15" x2="92" y2="15"/><line x1="12" y1="38" x2="92" y2="38"/><line x1="12" y1="61" x2="92" y2="61"/><line x1="12" y1="84" x2="92" y2="84"/>
      </g>
      <path class="flow" d="M32,38 H72 V61 H32 Z"/>
    </svg>
    <span class="topo-cap">quads</span>
  </div>
  <div class="topo-panel">
    <svg viewBox="0 0 104 100" class="topo-svg">
      <g class="grid">
        <line x1="12" y1="15" x2="12" y2="84"/><line x1="32" y1="15" x2="32" y2="84"/><line x1="52" y1="15" x2="52" y2="84"/><line x1="72" y1="15" x2="72" y2="84"/><line x1="92" y1="15" x2="92" y2="84"/>
        <line x1="12" y1="15" x2="92" y2="15"/><line x1="12" y1="38" x2="92" y2="38"/><line x1="12" y1="61" x2="92" y2="61"/><line x1="12" y1="84" x2="92" y2="84"/>
      </g>
      <g class="diag">
        <line x1="12" y1="15" x2="32" y2="38"/><line x1="32" y1="15" x2="52" y2="38"/><line x1="52" y1="15" x2="72" y2="38"/><line x1="72" y1="15" x2="92" y2="38"/>
        <line x1="12" y1="61" x2="32" y2="38"/><line x1="32" y1="61" x2="52" y2="38"/><line x1="52" y1="61" x2="72" y2="38"/><line x1="72" y1="61" x2="92" y2="38"/>
        <line x1="12" y1="61" x2="32" y2="84"/><line x1="32" y1="61" x2="52" y2="84"/><line x1="52" y1="61" x2="72" y2="84"/><line x1="72" y1="61" x2="92" y2="84"/>
      </g>
      <circle class="pole" cx="32" cy="38" r="2.4"/><circle class="pole" cx="72" cy="38" r="2.4"/><circle class="pole" cx="52" cy="61" r="2.4"/>
    </svg>
    <span class="topo-cap">triangles + poles</span>
  </div>
</div>
css
.topo-wrap{display:flex;gap:clamp(8px,4vmin,22px);align-items:center;justify-content:center;width:100%;height:100%;padding:clamp(10px,3vmin,18px)}
.topo-panel{position:relative;flex:1;max-width:220px}
.topo-svg{width:100%;height:auto;display:block}
.grid line{stroke:var(--fg);stroke-width:1;opacity:.5}
.diag line{stroke:var(--muted);stroke-width:.7;opacity:.6}
.flow{fill:none;stroke:var(--accent);stroke-width:2.6;stroke-linejoin:round;stroke-dasharray:12 8;animation:topo-flow 2.6s linear infinite}
.pole{fill:var(--accent-2);animation:topo-pulse 1.4s ease-in-out infinite}
.pole:nth-of-type(2){animation-delay:.25s}
.pole:nth-of-type(3){animation-delay:.5s}
.topo-cap{display:block;margin-top:.6em;text-align:center;font-size:clamp(9px,2.6vmin,13px);color:var(--muted);letter-spacing:.02em}
@keyframes topo-flow{to{stroke-dashoffset:-40}}
@keyframes topo-pulse{0%,100%{opacity:.6;r:2.2}50%{opacity:1;r:3.4}}

토폴로지는 "폴리곤이 몇 개냐"가 아니라 "그 폴리곤들이 어디에 놓여 있느냐"의 문제입니다. 좋은 토폴로지는 모서리 루프(엣지 루프)가 눈·입·근육의 흐름처럼 형태가 굽는 방향을 그대로 따라가고, 대부분 4개의 변을 가진 면(쿼드)으로 이루어집니다. 쿼드는 구부러졌을 때 격자가 고르게 늘어나서 애니메이션·서브디비전 모두에서 예측 가능하게 변형됩니다.

문제가 되는 지점은 "폴(pole)"입니다 — 한 정점에 모서리가 3개나 5개 이상 모이는 곳으로, 여기서 셰이딩이 살짝 찌그러지거나 서브디비전 시 표면이 움푹 들어갑니다. 폴 자체가 나쁜 건 아니고(정수리나 손가락 사이처럼 불가피한 자리도 있습니다) 눈에 띄는 매끈한 곡면 한가운데 방치하면 문제가 됩니다.

Blender·Maya·Cinema 4D에서는 이걸 "에지 플로우"라 부르고, N-gon(5각형 이상 면) 경고나 폴 하이라이트 같은 뷰포트 오버레이로 확인합니다. 게임·애니메이션용 모델은 스캔이나 스컬프트 결과를 그대로 쓰지 않고 이 흐름에 맞춰 리토폴로지(다음 항목)를 거칩니다.

언제 쓰나

캐릭터·애니메이션용 모델을 만들거나 스컬프트 결과를 리토폴로지할 때, 서브디비전 표면이 예상과 다르게 뭉개질 때 확인하세요.