한국어
레퍼런스
설정

설정

import type { MirageConfig } from "mirage-engine";

MirageConfig는 코어 설정에 샌드위치 옵션을 더한 타입입니다.

type MirageConfig = CoreConfig & {
  sandwich?: boolean | SandwichConfig;
};
 
type CoreConfig = OverlayConfig | DuplicateConfig;

mode로 구별되는 유니온이라, mode: "duplicate"라고 써야 TypeScript가 container를 제안합니다.

공통 옵션

두 모드 모두에서 사용할 수 있습니다.

옵션타입기본값설명
quality"low" | "medium" | "high" | number"medium"텍스트 캔버스·SVG 래스터화·렌더 타깃의 디바이스 픽셀 배수.
layer"base" | "selected" | number"base"카메라가 렌더링할 Three.js 레이어 채널.
resizeDebounceboolean | ResizeConfigtrue윈도우 리사이즈 디바운스. true는 150ms.
travelerClipArea`${number}px` | `${number}%` | number1traveler 레이어 캡처 시 시저 박스 크기.
debugboolean—타입에는 있지만 엔진이 아직 읽지 않습니다.
style{ zIndex?: string }—타입에는 있지만 엔진이 아직 읽지 않습니다.

quality

new Mirage(target, { quality: "high" }); // 배수 4
new Mirage(target, { quality: 3 });      // 배수 3
값배수
"low"1
"medium"2
"high"4
number해당 숫자 (최소 0.1)

값이 높을수록 텍스트와 렌더 타깃이 선명해지지만 메모리는 제곱으로 늘어납니다. 성능 문서를 참고하세요.

layer

new Mirage(target, { layer: "selected" });

"base"는 채널 0을 렌더링합니다. "selected"는 채널 1을 렌더링하므로 data-mirage-select가 붙은 요소만 보입니다. 숫자를 넣으면 해당 채널을 직접 지정합니다.

resizeDebounce

type ResizeConfig = {
  delay?: number;     // 기본 150 (ms)
  onStart?: () => void;
  onEnd?: () => void;
};
new Mirage(target, {
  resizeDebounce: {
    delay: 250,
    onStart: () => document.body.classList.add("is-resizing"),
    onEnd: () => document.body.classList.remove("is-resizing"),
  },
});

false로 두면 리사이즈 이벤트마다 재추출합니다. 정확하지만 비쌉니다.

travelerClipArea

각 traveler 메시 뒤쪽 씬을 얼마나 캡처할지 정합니다.

형태의미
1 (숫자)traveler 자기 크기 대비 비율
"120%"비율(퍼센트 표기)
"40px"traveler 박스 주변에 더할 고정 여백

굴절 효과가 자기 영역 밖 콘텐츠를 샘플링하는데 가장자리가 잘려 보이면 이 값을 키우세요.

overlay 모드

interface OverlayConfig extends BaseConfig {
  mode?: "overlay";
  canvasSize?: "viewport" | "document";
}
옵션타입기본값설명
mode"overlay""overlay"캔버스를 타깃 위 제자리에 마운트.
canvasSize"viewport" | "document""viewport"캔버스 할당 전략.

"viewport"는 캔버스를 윈도우 크기 + 200px 오버스캔으로 잡고 position: fixed로 고정합니다. 긴 스크롤 페이지에서 60fps를 유지하는 핵심입니다.

"document"는 캔버스를 타깃 박스 전체 크기로 잡습니다. 뷰포트 밖까지 읽어야 하는 효과가 필요할 때만 쓰세요. 문서가 길면 성능이 급격히 나빠집니다.

duplicate 모드

interface DuplicateConfig extends BaseConfig {
  mode: "duplicate";
  container?: HTMLElement;
}
옵션타입기본값설명
mode"duplicate"—이 모드를 선택하려면 필수.
containerHTMLElement타깃의 부모캔버스를 마운트할 위치.

이 모드에서는 캔버스에 pointer-events: auto가 적용됩니다(overlay에서는 none). 사용자가 실제로 보는 대상이 사본이기 때문입니다.

샌드위치

type SandwichConfig = { frontSelector?: string };
값동작
생략 / true활성화, [data-mirage-sandwich='front'] 선택
false비활성화
{ frontSelector: ".hud" }커스텀 셀렉터로 활성화
new Mirage(target, { sandwich: { frontSelector: ".floating-ui" } });
new Mirage(target, { sandwich: false });

샌드위치는 기본적으로 켜져 있습니다. Mirage가 document.body에 레이어 요소를 붙이는 게 싫다면 sandwich: false를 넘기세요.

샌드위치 레이어링을 참고하세요.

전체 예제

import { Mirage } from "mirage-engine";
 
const mirage = new Mirage(document.querySelector("#app") as HTMLElement, {
  mode: "overlay",
  canvasSize: "viewport",
  quality: "high",
  layer: "base",
  travelerClipArea: "140%",
  resizeDebounce: { delay: 200 },
  sandwich: { frontSelector: "[data-hud]" },
});
 
await mirage.start();

Mirage Engine — MIT 라이선스 © 2026 dltldn333