다이제틱 UI (세계관 내 UI)

Diegetic UI

체력·정보를 화면 위에 얹는 대신 게임 세계 안의 실제 사물(팔뚝의 화면, 계기판 등)로 표현해 몰입을 깨지 않는 UI 방식.

다른 이름: 다이제틱 인터페이스In-world UI월드 UI
···
html
<div class="durow">
<div class="ducol"><div class="dulabel">OVERLAY</div><div class="dustage"><div class="duworld"></div><div class="duoverlay"><div class="duobar"><div class="duofill" id="of"></div></div></div></div></div>
<div class="ducol"><div class="dulabel">DIEGETIC</div><div class="dustage"><div class="duworld"></div><div class="dupanel" id="panel"><div class="dupbar"><div class="dupfill" id="pf"></div></div></div></div></div>
</div>
css
.durow{display:flex;gap:clamp(8px,3.4vmin,18px);width:100%;height:100%;padding:4%}
.ducol{flex:1;display:flex;flex-direction:column;gap:5px;min-width:0}
.dulabel{font:700 clamp(7px,2.2vmin,9px) monospace;color:var(--muted);letter-spacing:.1em;text-align:center}
.dustage{position:relative;flex:1;border-radius:8px;overflow:hidden;background:var(--bg);border:1px solid var(--line)}
.duworld{position:absolute;inset:0;background:
  radial-gradient(circle at 30% 70%, color-mix(in srgb,var(--accent) 16%,transparent), transparent 55%),
  radial-gradient(circle at 75% 30%, color-mix(in srgb,var(--accent-3) 14%,transparent), transparent 50%)}
.duoverlay{position:absolute;top:8%;left:8%;right:8%}
.duobar{height:6px;border-radius:3px;background:color-mix(in srgb,var(--fg) 15%,transparent);border:1px solid var(--line);overflow:hidden}
.duofill{height:100%;width:80%;background:var(--accent-2);transform-origin:left;transition:transform .4s}
.dupanel{position:absolute;left:20%;bottom:14%;width:56%;padding:5%;border-radius:5px;background:color-mix(in srgb,var(--surface) 88%,transparent);border:1px solid var(--line);
  transform:perspective(200px) rotateX(28deg) rotateY(-6deg);box-shadow:0 6px 14px rgba(0,0,0,.25)}
.dupbar{height:5px;border-radius:3px;background:color-mix(in srgb,var(--fg) 15%,transparent);overflow:hidden}
.dupfill{height:100%;width:80%;background:var(--accent-3);transform-origin:left;transition:transform .4s}
js
const of=document.getElementById('of');
const pf=document.getElementById('pf');
const panel=document.getElementById('panel');
let hp=0.8;
function damage(){
  hp=Math.max(0.15, hp-0.28);
  of.style.transform='scaleX('+hp+')';
  pf.style.transform='scaleX('+hp+')';
  panel.style.transform='perspective(200px) rotateX(28deg) rotateY(-6deg) translateY(-3px)';
  setTimeout(function(){ panel.style.transform='perspective(200px) rotateX(28deg) rotateY(-6deg)'; }, 160);
  if(hp<=0.15){
    setTimeout(function(){
      hp=0.8;
      of.style.transform='scaleX('+hp+')';
      pf.style.transform='scaleX('+hp+')';
    }, 900);
  }
}
setInterval(damage, 1400);

일반적인 HUD(오버레이 UI)는 화면 좌표에 붙어서 카메라가 어디를 봐도 항상 같은 자리에 있다. 다이제틱 UI는 반대로 그 정보를 세계 안의 실제 사물로 만든다 — 캐릭터 팔뚝에 달린 홀로그램 표시, 차량 계기판의 연료 게이지, 벽에 붙은 표지판처럼, 카메라가 그쪽을 봐야만 보이고 원근법과 조명의 영향을 그대로 받는다.

이 방식의 장점은 몰입이다. 화면 위에 둥둥 떠 있는 숫자와 아이콘이 없으니 "이건 UI다"라는 인식 없이 장면에 자연스럽게 녹아든다. 대신 정보를 확인하려면 실제로 그 방향을 보거나 그 사물에 다가가야 하므로, 오버레이 UI보다 확인 비용이 높다.

그래서 실제 게임들은 순수 다이제틱보다 절충안을 많이 쓴다 — 체력은 화면 오버레이로 항상 보여주되, 탄약이나 상태 이상 같은 부차 정보만 다이제틱(무기에 붙은 탄창 표시 등)으로 처리하는 식이다. 모든 정보를 다이제틱으로 만들면 정작 급할 때 확인이 늦어 플레이에 방해가 된다.

언제 쓰나

몰입도가 특히 중요한 장르(생존, 호러, 시뮬레이션)의 부차 정보. 즉각 확인이 필수인 체력·위협 정보는 오버레이를 유지한다.