- DevLog(블로그) 인프라: build-blog.js (MD→HTML), devlog.css, devlog.js - DevLog 목록/포스트 페이지 4개 언어 (ko/en/ja/zh) - 글 2편 작성 + 번역: 관성식vs광학식, 광학식 파이프라인 - 전체 네비게이션에 DevLog 탭 추가 (37+ HTML) - 메인 팝업(요금제 변경 안내) 제거 (ko/en/ja/zh) - i18n.js: 언어별 페이지에서 번역 JSON 항상 로드하도록 수정 - 방문자 싸인 이미지 3장 추가 (webp 변환) - sitemap, i18n JSON, package.json 업데이트 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
669 lines
48 KiB
HTML
669 lines
48 KiB
HTML
<!DOCTYPE html><html lang="ko"><head>
|
||
<!-- Google Tag Manager -->
|
||
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
|
||
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
|
||
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
|
||
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
|
||
})(window,document,'script','dataLayer','GTM-PPTNN6WD');</script>
|
||
<!-- End Google Tag Manager -->
|
||
<script async src="https://www.googletagmanager.com/gtag/js?id=G-R0PBYHVQBS"></script>
|
||
<script>
|
||
window.dataLayer = window.dataLayer || [];
|
||
function gtag(){dataLayer.push(arguments);}
|
||
gtag('js', new Date());
|
||
gtag('config', 'G-R0PBYHVQBS');
|
||
</script>
|
||
<meta charset="UTF-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
<title>광학식 모션캡처 파이프라인 완전 해부 — 카메라부터 모션 데이터까지 - 밍글 스튜디오 DevLog</title>
|
||
|
||
<link rel="icon" type="image/x-icon" href="/images/logo/mingle-logo.ico">
|
||
<link rel="shortcut icon" href="/images/logo/mingle-logo.ico">
|
||
<link rel="icon" type="image/webp" href="/images/logo/mingle-logo.webp">
|
||
<link rel="apple-touch-icon" href="/images/logo/mingle-logo.webp">
|
||
|
||
<link rel="canonical" href="https://minglestudio.co.kr/devlog/optical-mocap-pipeline">
|
||
<meta name="theme-color" content="#ff8800">
|
||
|
||
<meta name="description" content="광학식 모션캡처의 전체 기술 파이프라인을 심화 해설합니다. 카메라 설치, PoE 네트워크, 2D 센트로이드, 캘리브레이션, 3D 복원, 스켈레톤 솔빙, 후처리, 현장 실무 이슈까지 10단계로 상세히 다룹니다.">
|
||
<meta name="author" content="밍글 스튜디오">
|
||
|
||
<meta property="og:title" content="광학식 모션캡처 파이프라인 완전 해부 — 카메라부터 모션 데이터까지">
|
||
<meta property="og:description" content="광학식 모션캡처의 전체 기술 파이프라인을 심화 해설합니다. 카메라 설치, PoE 네트워크, 2D 센트로이드, 캘리브레이션, 3D 복원, 스켈레톤 솔빙, 후처리, 현장 실무 이슈까지 10단계로 상세히 다룹니다.">
|
||
<meta property="og:url" content="https://minglestudio.co.kr/devlog/optical-mocap-pipeline">
|
||
<meta property="og:type" content="article">
|
||
<meta property="og:image" content="https://minglestudio.co.kr/blog/posts/optical-mocap-pipeline/images/thumbnail.webp">
|
||
<meta property="og:locale" content="ko_KR">
|
||
<meta property="og:site_name" content="밍글 스튜디오">
|
||
<meta property="article:published_time" content="2026-04-05">
|
||
|
||
<meta name="twitter:card" content="summary_large_image">
|
||
<meta name="twitter:title" content="광학식 모션캡처 파이프라인 완전 해부 — 카메라부터 모션 데이터까지">
|
||
<meta name="twitter:description" content="광학식 모션캡처의 전체 기술 파이프라인을 심화 해설합니다. 카메라 설치, PoE 네트워크, 2D 센트로이드, 캘리브레이션, 3D 복원, 스켈레톤 솔빙, 후처리, 현장 실무 이슈까지 10단계로 상세히 다룹니다.">
|
||
<meta name="twitter:image" content="https://minglestudio.co.kr/blog/posts/optical-mocap-pipeline/images/thumbnail.webp">
|
||
|
||
<link href="https://hangeul.pstatic.net/hangeul_static/css/nanum-square.css" rel="stylesheet">
|
||
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.0/css/all.min.css" rel="stylesheet">
|
||
<link rel="stylesheet" href="/css/common.css?v=20260404">
|
||
<link rel="stylesheet" href="/css/devlog.css?v=20260404">
|
||
|
||
<link rel="alternate" hreflang="ko" href="https://minglestudio.co.kr/devlog/optical-mocap-pipeline">
|
||
<link rel="alternate" hreflang="en" href="https://minglestudio.co.kr/en/devlog/optical-mocap-pipeline">
|
||
<link rel="alternate" hreflang="ja" href="https://minglestudio.co.kr/ja/devlog/optical-mocap-pipeline">
|
||
<link rel="alternate" hreflang="zh" href="https://minglestudio.co.kr/zh/devlog/optical-mocap-pipeline">
|
||
<link rel="alternate" hreflang="x-default" href="https://minglestudio.co.kr/devlog/optical-mocap-pipeline">
|
||
|
||
<script type="application/ld+json">
|
||
{
|
||
"@context": "https://schema.org",
|
||
"@type": "BlogPosting",
|
||
"headline": "광학식 모션캡처 파이프라인 완전 해부 — 카메라부터 모션 데이터까지",
|
||
"description": "광학식 모션캡처의 전체 기술 파이프라인을 심화 해설합니다. 카메라 설치, PoE 네트워크, 2D 센트로이드, 캘리브레이션, 3D 복원, 스켈레톤 솔빙, 후처리, 현장 실무 이슈까지 10단계로 상세히 다룹니다.",
|
||
"datePublished": "2026-04-05",
|
||
"author": { "@type": "Organization", "name": "밍글 스튜디오" },
|
||
"publisher": { "@type": "Organization", "name": "밍글 스튜디오" },
|
||
"url": "https://minglestudio.co.kr/devlog/optical-mocap-pipeline"
|
||
}
|
||
</script>
|
||
<script type="application/ld+json">
|
||
{
|
||
"@context": "https://schema.org",
|
||
"@type": "FAQPage",
|
||
"mainEntity": [
|
||
{
|
||
"@type": "Question",
|
||
"name": "광학식 모션캡처 카메라는 일반 카메라와 뭐가 다른가요?",
|
||
"acceptedAnswer": {
|
||
"@type": "Answer",
|
||
"text": "일반 카메라는 풀컬러 영상을 촬영하지만, 모션캡처 카메라는 적외선(IR) 영역에 특화되어 있습니다. IR LED로 마커를 비추고 반사광만 감지하며, 카메라 내부에서 마커의 2D 좌표를 직접 계산하여 좌표 데이터만 PC에 전송합니다."
|
||
}
|
||
},
|
||
{
|
||
"@type": "Question",
|
||
"name": "PoE 케이블 길이에 제한이 있나요?",
|
||
"acceptedAnswer": {
|
||
"@type": "Answer",
|
||
"text": "이더넷 표준에 따라 PoE 케이블은 **최대 100m**까지 지원됩니다. 대부분의 모션캡처 스튜디오에서는 이 범위를 충분히 충족합니다."
|
||
}
|
||
},
|
||
{
|
||
"@type": "Question",
|
||
"name": "카메라 프레임레이트가 높을수록 항상 좋은가요?",
|
||
"acceptedAnswer": {
|
||
"@type": "Answer",
|
||
"text": "프레임레이트가 높으면 빠른 동작 추적과 낮은 레이턴시에 유리하지만, 데이터 처리량이 늘어나고 카메라 해상도가 낮아질 수 있습니다. 일반적으로 VTuber 라이브나 게임 모션캡처에서는 120~240fps면 충분하며, 스포츠 과학 등 초고속 동작 분석에서는 360fps 이상을 사용합니다."
|
||
}
|
||
},
|
||
{
|
||
"@type": "Question",
|
||
"name": "마커 스왑은 얼마나 자주 발생하나요?",
|
||
"acceptedAnswer": {
|
||
"@type": "Answer",
|
||
"text": "마커셋이 잘 설계되어 있고 카메라 수가 충분하면 실시간 촬영 중 스왑은 드물게 발생합니다. 다만 빠른 동작이나 마커 간 거리가 가까운 동작(손 맞잡기 등)에서는 발생 확률이 올라가며, 이런 구간은 후처리에서 교정합니다."
|
||
}
|
||
},
|
||
{
|
||
"@type": "Question",
|
||
"name": "삼각측량에 2대면 충분한데 왜 30대나 설치하나요?",
|
||
"acceptedAnswer": {
|
||
"@type": "Answer",
|
||
"text": "2대는 이론적 최솟값일 뿐입니다. 실제로는 오클루전(마커 가림), 카메라 각도에 따른 정확도 차이, 리던던시 확보 등을 고려해야 합니다. 30대를 배치하면 어떤 마커든 항상 다수의 카메라가 보고 있으므로, 안정적이고 정확한 추적이 가능합니다."
|
||
}
|
||
},
|
||
{
|
||
"@type": "Question",
|
||
"name": "캘리브레이션은 얼마나 자주 해야 하나요?",
|
||
"acceptedAnswer": {
|
||
"@type": "Answer",
|
||
"text": "일반적으로 촬영일 시작 전에 한 번 수행합니다. 다만 장시간 촬영 시 온도 변화나 카메라 미세 이동으로 캘리브레이션이 틀어질 수 있어, 4~6시간 연속 촬영 시 중간에 재캘리브레이션을 권장합니다. OptiTrack Motive의 Continuous Calibration 기능을 사용하면 촬영 중에도 실시간으로 보정이 가능합니다."
|
||
}
|
||
},
|
||
{
|
||
"@type": "Question",
|
||
"name": "반짝이는 옷을 입으면 안 되나요?",
|
||
"acceptedAnswer": {
|
||
"@type": "Answer",
|
||
"text": "모션캡처 카메라는 적외선 반사를 감지하기 때문에, 반짝이는 소재(금속 장식, 시퀸, 광택 있는 합성 섬유 등)는 적외선을 반사하여 가짜 마커(Ghost Marker)를 만들 수 있습니다. 전용 모캡 슈트나 무광 소재의 편안한 옷을 착용하는 것이 가장 좋습니다."
|
||
}
|
||
}
|
||
]
|
||
}
|
||
</script>
|
||
</head>
|
||
<body>
|
||
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-PPTNN6WD"
|
||
height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
|
||
<a href="#main-content" class="skip-to-content">Skip to content</a>
|
||
|
||
<div id="header-placeholder">
|
||
<nav class="navbar" aria-label="Navigation">
|
||
<div class="nav-container">
|
||
<div class="nav-logo">
|
||
<a href="/">
|
||
<img src="/images/logo/mingle-logo.webp" alt="밍글 스튜디오">
|
||
<span data-i18n="header.studioName">밍글 스튜디오</span>
|
||
</a>
|
||
</div>
|
||
<ul id="nav-menu" class="nav-menu">
|
||
<li><a href="/about" class="nav-link" data-i18n="header.nav.about">About</a></li>
|
||
<li><a href="/services" class="nav-link" data-i18n="header.nav.services">Services</a></li>
|
||
<li><a href="/portfolio" class="nav-link" data-i18n="header.nav.portfolio">Portfolio</a></li>
|
||
<li><a href="/gallery" class="nav-link" data-i18n="header.nav.gallery">Gallery</a></li>
|
||
<li><a href="/schedule" class="nav-link" data-i18n="header.nav.schedule">Schedule</a></li>
|
||
<li><a href="/devlog" class="nav-link active" data-i18n="header.nav.devlog">DevLog</a></li>
|
||
<li><a href="/contact" class="nav-link" data-i18n="header.nav.contact">Contact</a></li>
|
||
<li><a href="/qna" class="nav-link" data-i18n="header.nav.qna">Q&A</a></li>
|
||
</ul>
|
||
<div class="nav-actions">
|
||
<div class="lang-switcher">
|
||
<button class="lang-btn" aria-label="Language">
|
||
<span class="lang-current">KO</span>
|
||
<svg class="lang-chevron" viewBox="0 0 10 6" width="10" height="6" aria-hidden="true">
|
||
<path d="M1 1l4 4 4-4" stroke="currentColor" stroke-width="1.5" fill="none" stroke-linecap="round" stroke-linejoin="round"></path>
|
||
</svg>
|
||
</button>
|
||
<ul class="lang-dropdown">
|
||
<li><button data-lang="ko">🇰🇷 한국어</button></li>
|
||
<li><button data-lang="en">🇺🇸 English</button></li>
|
||
<li><button data-lang="zh">🇨🇳 中文</button></li>
|
||
<li><button data-lang="ja">🇯🇵 日本語</button></li>
|
||
</ul>
|
||
</div>
|
||
<button class="theme-toggle" id="themeToggle" aria-label="Toggle dark mode">
|
||
<div class="theme-toggle-thumb">
|
||
<svg class="theme-toggle-icon theme-toggle-icon--sun" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
|
||
<circle cx="12" cy="12" r="5"></circle>
|
||
<line x1="12" y1="1" x2="12" y2="3"></line><line x1="12" y1="21" x2="12" y2="23"></line>
|
||
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
|
||
<line x1="1" y1="12" x2="3" y2="12"></line><line x1="21" y1="12" x2="23" y2="12"></line>
|
||
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
|
||
</svg>
|
||
<svg class="theme-toggle-icon theme-toggle-icon--moon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
|
||
<path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path>
|
||
</svg>
|
||
</div>
|
||
</button>
|
||
<button class="hamburger" id="hamburger" aria-label="Menu" aria-expanded="false">
|
||
<span class="hamburger-line"></span>
|
||
<span class="hamburger-line"></span>
|
||
<span class="hamburger-line"></span>
|
||
</button>
|
||
</div>
|
||
</div>
|
||
</nav>
|
||
</div>
|
||
|
||
<main id="main-content">
|
||
<article class="blog-post">
|
||
<div class="blog-post-header">
|
||
<div class="container">
|
||
<a href="/devlog" class="blog-back-link">← 목록으로</a>
|
||
<span class="blog-category">모션캡처 기술</span>
|
||
<h1 class="blog-post-title">광학식 모션캡처 파이프라인 완전 해부 — 카메라부터 모션 데이터까지</h1>
|
||
<div class="blog-post-meta">
|
||
<time datetime="2026-04-05">2026년 4월 5일</time>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="blog-post-body">
|
||
<div class="container">
|
||
<p>모션캡처 스튜디오에서 배우가 슈트를 입고 움직이면 화면 속 캐릭터가 실시간으로 따라 움직입니다. 간단해 보이지만, 그 뒤에는 <strong>카메라 하드웨어 → 네트워크 전송 → 2D 영상 처리 → 3D 복원 → 스켈레톤 솔빙 → 실시간 스트리밍</strong>이라는 정밀한 기술 파이프라인이 돌아가고 있습니다.</p>
|
||
<p>이 글에서는 광학식 모션캡처(OptiTrack 기준)의 전체 파이프라인을 단계별로 해부합니다.</p>
|
||
<hr>
|
||
<h2>1단계: 카메라 설치와 배치 전략</h2>
|
||
<p>광학식 모션캡처의 첫 번째 단계는 카메라를 <strong>어디에, 어떻게 배치하느냐</strong>입니다.</p>
|
||
<p><figure class="blog-figure"><img src="/images/studio/모션캡쳐%20공간%20001.webp" alt="밍글 스튜디오 모션캡처 공간" loading="lazy"><figcaption>밍글 스튜디오 모션캡처 공간</figcaption></figure></p>
|
||
<h3>배치 원칙</h3>
|
||
<ul>
|
||
<li><strong>높이</strong>: 보통 2~3m 높이에 설치하며, 30도 정도 아래를 향하도록 각도를 잡습니다</li>
|
||
<li><strong>배치 형태</strong>: 캡처 볼륨(촬영 공간) 둘레를 감싸는 링(Ring) 형태로 배치</li>
|
||
<li><strong>2단 배치</strong>: 높은 위치와 낮은 위치에 카메라를 교차 배치하면 수직 방향 커버리지가 향상됩니다</li>
|
||
<li><strong>중첩(Overlap)</strong>: 캡처 볼륨 내의 모든 지점이 <strong>최소 3대 이상의 카메라</strong>에 동시에 보여야 합니다. 삼각측량에는 최소 2대가 필요하지만, 3대 이상이면 정확도와 오클루전 대응력이 크게 올라갑니다</li>
|
||
</ul>
|
||
<h3>카메라 수와 정확도의 관계</h3>
|
||
<p>카메라 수가 많을수록:</p>
|
||
<ul>
|
||
<li>사각지대가 줄어듦 → 오클루전 발생 확률 감소</li>
|
||
<li>같은 마커를 보는 카메라가 많아짐 → 삼각측량 정확도 향상</li>
|
||
<li>일부 카메라에 문제가 생겨도 다른 카메라가 보완 (리던던시)</li>
|
||
</ul>
|
||
<p>밍글 스튜디오의 경우 <strong>OptiTrack Prime 17 × 16대 + Prime 13 × 14대</strong>, 총 30대를 8m × 7m 공간에 배치하여 360도 사각지대를 최소화하고 있습니다.</p>
|
||
<h3>IR 패스 필터 — 적외선만 보는 눈</h3>
|
||
<p>모션캡처 카메라 렌즈 앞에는 <strong>IR 패스 필터(적외선 통과 필터)</strong>가 장착되어 있습니다. 이 필터는 가시광선을 차단하고 적외선 파장(850nm 부근)만 통과시킵니다. 덕분에 형광등, 햇빛, 모니터 빛 등 일반 조명에 의한 간섭이 원천 차단되고, 카메라는 오직 <strong>IR LED에 반사된 마커 빛만</strong> 감지할 수 있습니다.</p>
|
||
<p>촬영 공간의 조명을 완전히 끌 필요가 없는 이유도 이 필터 덕분입니다. 다만 직사광선이나 강한 IR 성분을 포함한 조명은 간섭을 일으킬 수 있어, 스튜디오 환경에서는 IR 간섭이 적은 조명을 사용합니다.</p>
|
||
<h3>프레임 동기화 — 30대 카메라가 동시에 찍는 법</h3>
|
||
<p>삼각측량이 정확하려면 모든 카메라가 <strong>정확히 같은 순간</strong>에 셔터를 눌러야 합니다. 카메라마다 제각각 다른 타이밍에 촬영하면 빠르게 움직이는 마커의 위치가 카메라별로 달라져 3D 복원이 부정확해집니다.</p>
|
||
<p>OptiTrack은 <strong>하드웨어 동기화(Hardware Sync)</strong> 방식을 사용합니다. 한 대의 카메라가 <strong>Sync Master(동기 마스터)</strong>로 지정되어 타이밍 신호를 생성하고, 나머지 카메라들이 이 신호에 맞춰 동시에 노출합니다.</p>
|
||
<ul>
|
||
<li><strong>Ethernet 카메라(Prime 시리즈)</strong>: 동기 신호가 이더넷 연결 자체에 내장되어 있거나, OptiTrack의 eSync 허브를 통해 전달됩니다. 별도 동기 케이블이 필요 없습니다.</li>
|
||
<li><strong>USB 카메라(Flex 시리즈)</strong>: 카메라 간에 전용 동기 케이블을 데이지 체인으로 연결합니다.</li>
|
||
</ul>
|
||
<p>이 동기화의 정밀도는 <strong>마이크로초(μs) 단위</strong>로, 30대 카메라가 사실상 완벽히 같은 순간에 촬영합니다.</p>
|
||
<hr>
|
||
<h2>2단계: PoE — 하나의 케이블로 전력과 데이터를 동시에</h2>
|
||
<h3>PoE(Power over Ethernet)란?</h3>
|
||
<p>OptiTrack Prime 시리즈 카메라는 <strong>PoE(Power over Ethernet)</strong> 방식으로 연결됩니다. 일반 이더넷 케이블(Cat5e/Cat6) 한 줄로 <strong>전력 공급과 데이터 전송을 동시에</strong> 처리하는 기술입니다.</p>
|
||
<p><figure class="blog-figure"><img src="optical-mocap-pipeline/images/poe-switch.png" alt="PoE 스위치와 카메라 연결" loading="lazy"><figcaption>PoE 스위치와 카메라 연결</figcaption></figure></p>
|
||
<h3>기술 표준</h3>
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<th>표준</th>
|
||
<th>최대 전력</th>
|
||
<th>비고</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody><tr>
|
||
<td><strong>IEEE 802.3af (PoE)</strong></td>
|
||
<td>포트당 15.4W</td>
|
||
<td>기본 모션캡처 카메라에 충분</td>
|
||
</tr>
|
||
<tr>
|
||
<td><strong>IEEE 802.3at (PoE+)</strong></td>
|
||
<td>포트당 25.5W</td>
|
||
<td>고프레임레이트 카메라나 IR LED 출력이 높은 경우</td>
|
||
</tr>
|
||
</tbody></table>
|
||
<p>OptiTrack 카메라는 보통 <strong>5~12W</strong> 정도를 소비하므로 PoE 표준 범위 내에서 충분히 동작합니다.</p>
|
||
<h3>네트워크 토폴로지</h3>
|
||
<p>카메라는 <strong>스타(Star) 토폴로지</strong>로 연결됩니다. 각 카메라가 PoE 스위치의 개별 포트에 1:1로 연결되는 구조입니다. 데이지 체인(직렬 연결)은 사용하지 않습니다.</p>
|
||
<div class="network-diagram">
|
||
<div class="network-cameras">
|
||
<div class="network-cam"><div class="network-cam-icon">CAM 1</div></div>
|
||
<div class="network-cam"><div class="network-cam-icon">CAM 2</div></div>
|
||
<div class="network-cam"><div class="network-cam-icon">CAM 3</div></div>
|
||
<div class="network-cam"><div class="network-cam-icon">···</div></div>
|
||
<div class="network-cam"><div class="network-cam-icon">CAM N</div></div>
|
||
</div>
|
||
<svg class="network-lines" viewBox="0 0 100 200" preserveAspectRatio="none">
|
||
<line x1="0" y1="20" x2="100" y2="45" />
|
||
<line x1="0" y1="55" x2="100" y2="45" />
|
||
<line x1="0" y1="90" x2="100" y2="45" />
|
||
<line x1="0" y1="125" x2="100" y2="45" />
|
||
<line x1="0" y1="160" x2="100" y2="45" />
|
||
</svg>
|
||
<div class="network-center">
|
||
<div class="network-switch">PoE 스위치</div>
|
||
<div class="network-link"></div>
|
||
<div class="network-pc">호스트 PC</div>
|
||
</div>
|
||
</div>
|
||
|
||
<p>30대 카메라라면 24포트 + 8포트 PoE+ 스위치를 조합하거나 48포트 스위치를 사용합니다. 스위치 선택 시 <strong>총 PoE 전력 예산</strong>(예: 30대 × 12W = 360W)을 확인해야 합니다.</p>
|
||
<h3>PoE의 장점</h3>
|
||
<ul>
|
||
<li><strong>케이블 1개로 해결</strong> — 천장에 설치된 카메라마다 전원 어댑터를 따로 연결할 필요 없음</li>
|
||
<li><strong>깔끔한 시공</strong> — 케이블 수가 절반으로 줄어 설치와 관리가 간편</li>
|
||
<li><strong>중앙 전원 관리</strong> — 스위치에서 카메라 전원을 일괄 ON/OFF 가능</li>
|
||
</ul>
|
||
<hr>
|
||
<h2>3단계: 카메라가 보내는 데이터 — 2D 센트로이드</h2>
|
||
<p>카메라에서 PC로 전송되는 데이터가 무엇인지 이해하는 것이 파이프라인의 핵심입니다.</p>
|
||
<p><figure class="blog-figure"><img src="optical-mocap-pipeline/images/motive-2d-centroid.png" alt="Motive 카메라 2D 뷰 — 마커가 밝은 점으로 표시된 모습" loading="lazy"><figcaption>Motive 카메라 2D 뷰 — 마커가 밝은 점으로 표시된 모습</figcaption></figure></p>
|
||
<h3>카메라 내부 처리 과정</h3>
|
||
<p>각 OptiTrack 카메라에는 <strong>적외선(IR) LED 링</strong>이 카메라 렌즈 주변에 장착되어 있습니다. 이 LED가 적외선을 쏘면, 배우 몸에 부착된 <strong>재귀반사 마커</strong>가 빛을 카메라 방향으로 반사합니다. 카메라 센서는 이 반사광을 그레이스케일 IR 이미지로 촬영합니다.</p>
|
||
<p>여기서 중요한 점은, 카메라가 이 이미지를 <strong>그대로 PC에 보내지 않는다</strong>는 것입니다. 카메라 내부 프로세서가 먼저 처리합니다:</p>
|
||
<p><strong>1. 스레시홀딩(Thresholding)</strong>
|
||
밝기가 일정 기준(임계값) 이상인 픽셀만 남기고 나머지를 제거합니다. 적외선을 반사하는 마커만 밝게 빛나므로, 배경과 마커를 분리하는 과정입니다.</p>
|
||
<p><strong>2. 블롭 검출(Blob Detection)</strong>
|
||
밝은 픽셀들이 모여 있는 영역(블롭)을 하나의 마커 후보로 인식합니다.</p>
|
||
<p><strong>3. 2D 센트로이드 계산</strong>
|
||
각 블롭의 <strong>정확한 중심점(센트로이드)</strong>을 서브픽셀 정밀도(약 0.1픽셀)로 계산합니다. 블롭 내 각 픽셀의 밝기를 가중치로 사용하는 가중 평균 방식입니다.</p>
|
||
<h3>PC로 전송되는 데이터</h3>
|
||
<p>기본 트래킹 모드에서 카메라가 PC로 보내는 것은 <strong>2D 센트로이드 데이터</strong>입니다:</p>
|
||
<ul>
|
||
<li>각 마커 후보의 <strong>(x, y) 좌표</strong> + 크기 정보</li>
|
||
<li>카메라 1대당 프레임당 수백 바이트 수준의 매우 작은 데이터</li>
|
||
</ul>
|
||
<p>이렇게 작은 데이터량 덕분에 <strong>40대 이상의 카메라가 기가비트 이더넷 하나로도 충분</strong>합니다. 원시 그레이스케일 이미지를 전송할 수도 있지만(디버깅/시각화용), 이 경우 카메라당 수 MB/s가 필요하므로 일반 트래킹에서는 사용하지 않습니다.</p>
|
||
<blockquote>
|
||
<p>즉, 카메라는 "영상을 찍어서 보내는 장치"가 아니라 <strong>"마커 위치를 계산해서 좌표만 보내는 센서"</strong>에 가깝습니다.</p>
|
||
</blockquote>
|
||
<p>여기서 한 가지 의문이 들 수 있습니다 — 왜 모션캡처 카메라는 일반 카메라에 비해 그렇게 비쌀까? 이유는 위에서 설명한 과정에 있습니다. 일반 카메라는 찍은 영상을 그대로 보내면 끝이지만, 모션캡처 카메라는 <strong>내부에 전용 프로세서를 탑재</strong>하고 있어서 스레시홀딩, 블롭 검출, 서브픽셀 센트로이드 계산까지 초당 240~360프레임으로 실시간 처리합니다. 카메라 한 대가 사실상 <strong>영상 처리 전용 소형 컴퓨터</strong>를 품고 있는 셈이죠.</p>
|
||
<hr>
|
||
<h2>4단계: 캘리브레이션 — 카메라의 눈을 정렬하다</h2>
|
||
<p>3D 복원을 하기 전에 반드시 거쳐야 하는 과정이 있습니다. 소프트웨어가 각 카메라의 <strong>정확한 위치, 방향, 렌즈 특성</strong>을 파악하는 <strong>캘리브레이션(Calibration)</strong>입니다.</p>
|
||
<p><figure class="blog-figure"><img src="optical-mocap-pipeline/images/calibration-tools.webp" alt="캘리브레이션 완드(왼쪽)와 그라운드 플레인 프레임(오른쪽)" loading="lazy"><figcaption>캘리브레이션 완드(왼쪽)와 그라운드 플레인 프레임(오른쪽)</figcaption></figure></p>
|
||
<h3>완딩(Wanding) — 공간을 스캔하다</h3>
|
||
<p>오퍼레이터가 LED 또는 마커가 부착된 <strong>캘리브레이션 완드(Wand, 막대)</strong>를 들고 캡처 볼륨 전체를 걸어다니며 휘두릅니다. 완드의 마커 간 거리는 정확히 알려져 있기 때문에, 각 카메라가 완드를 수천 프레임 동안 촬영하면 소프트웨어가 다음을 계산할 수 있습니다:</p>
|
||
<ul>
|
||
<li><strong>내부 파라미터(Intrinsic Parameters)</strong> — 초점 거리, 렌즈 왜곡 계수 등 카메라 렌즈 고유의 특성</li>
|
||
<li><strong>외부 파라미터(Extrinsic Parameters)</strong> — 3D 공간에서 카메라의 정확한 위치와 방향</li>
|
||
</ul>
|
||
<p>이 계산에는 <strong>번들 조정(Bundle Adjustment)</strong>이라는 최적화 알고리즘이 사용됩니다. 수천 개의 2D 관측 데이터를 기반으로 모든 카메라의 파라미터를 동시에 최적화하는 과정입니다.</p>
|
||
<h3>그라운드 플레인 설정</h3>
|
||
<p>완딩이 끝나면 바닥에 <strong>L자형 캘리브레이션 프레임(Ground Plane)</strong>을 놓습니다. 이 프레임의 마커 3개 이상이 바닥면과 좌표 원점을 정의합니다:</p>
|
||
<ul>
|
||
<li>어디가 (0, 0, 0)인지 (원점)</li>
|
||
<li>어느 방향이 X, Y, Z 축인지</li>
|
||
<li>바닥면의 높이 기준</li>
|
||
</ul>
|
||
<p>이렇게 캘리브레이션이 완료되면, 소프트웨어는 어떤 카메라의 2D 좌표든 정확한 3D 광선으로 변환할 수 있게 됩니다.</p>
|
||
<h3>캘리브레이션 품질</h3>
|
||
<p>Motive 소프트웨어는 캘리브레이션 후 각 카메라의 <strong>재투영 오차(Reprojection Error)</strong>를 표시합니다. 이 값이 작을수록(보통 0.5px 이하) 캘리브레이션이 정확하다는 의미입니다. 오차가 큰 카메라는 위치를 조정하거나 재캘리브레이션합니다.</p>
|
||
<hr>
|
||
<h2>5단계: 2D → 3D 복원 (삼각측량)</h2>
|
||
<p>PC에 도착한 2D 센트로이드들이 어떻게 3D 좌표로 변환되는지 살펴봅니다.</p>
|
||
<h3>삼각측량(Triangulation) 원리</h3>
|
||
<ol>
|
||
<li>캘리브레이션으로 확보한 각 카메라의 <strong>정확한 3D 위치, 방향, 렌즈 특성</strong>을 활용합니다</li>
|
||
<li>카메라의 2D 센트로이드 좌표에서 <strong>광선(Ray)</strong>을 쏩니다 — 카메라 위치에서 센트로이드 방향으로 3D 공간을 향해 뻗어나가는 직선</li>
|
||
<li>같은 마커를 본 <strong>2대 이상의 카메라에서 쏜 광선들이 교차하는 점</strong>이 곧 마커의 3D 좌표입니다</li>
|
||
</ol>
|
||
<p><video src="optical-mocap-pipeline/images/continuous-calibration-web.mp4" autoplay loop muted playsinline style="width:100%;border-radius:12px;margin:1.5rem 0;"></video></p>
|
||
<h3>실제로는 완벽히 교차하지 않는다</h3>
|
||
<p>노이즈, 렌즈 왜곡, 캘리브레이션 오차 등으로 인해 광선들이 정확히 한 점에서 만나는 경우는 거의 없습니다. 그래서 <strong>최소자승법(Least Squares Optimization)</strong>을 사용합니다:</p>
|
||
<ul>
|
||
<li>모든 광선까지의 거리 합이 최소가 되는 3D 좌표를 계산</li>
|
||
<li>이때 각 광선과 복원된 3D 점 사이의 거리를 <strong>잔차(Residual)</strong>라고 합니다</li>
|
||
<li>잔차가 작을수록 복원 품질이 좋다는 의미 — 잘 캘리브레이션된 OptiTrack 시스템에서는 <strong>서브밀리미터(0.5mm 이하) 수준의 잔차</strong>를 기대할 수 있습니다</li>
|
||
</ul>
|
||
<h3>카메라 수의 영향</h3>
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<th>해당 마커를 보는 카메라 수</th>
|
||
<th>효과</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody><tr>
|
||
<td><strong>2대</strong></td>
|
||
<td>3D 복원 가능 (최소 조건)</td>
|
||
</tr>
|
||
<tr>
|
||
<td><strong>3대</strong></td>
|
||
<td>정확도 향상 + 1대가 가려져도 추적 유지</td>
|
||
</tr>
|
||
<tr>
|
||
<td><strong>4대 이상</strong></td>
|
||
<td>높은 정확도 + 강한 오클루전 내성</td>
|
||
</tr>
|
||
</tbody></table>
|
||
<hr>
|
||
<h2>6단계: 마커 식별과 라벨링</h2>
|
||
<h3>마커 슈트와 마커 배치</h3>
|
||
<p>3D 복원을 의미 있는 모션 데이터로 만들려면, 마커가 신체의 <strong>정확한 위치</strong>에 부착되어야 합니다.</p>
|
||
<p><strong>마커 사양</strong></p>
|
||
<ul>
|
||
<li>지름: 보통 <strong>12~19mm</strong>의 구형 재귀반사 마커 사용</li>
|
||
<li>재질: 3M 재귀반사 테이프로 코팅된 폼/플라스틱 구</li>
|
||
<li>부착: 벨크로(찍찍이), 양면 테이프, 또는 전용 마커 슈트에 미리 장착</li>
|
||
</ul>
|
||
<p><strong>마커셋 규격</strong>
|
||
마커를 어디에 몇 개 붙이느냐는 표준화된 <strong>마커셋(Markerset)</strong> 규격을 따릅니다:</p>
|
||
<ul>
|
||
<li><strong>Baseline (37 마커)</strong> — OptiTrack 기본 전신 마커셋. 상체, 하체, 머리를 커버하며, 게임/영상 모션캡처에 가장 많이 사용</li>
|
||
<li><strong>Baseline + Fingers (~57 마커)</strong> — 위에 손가락 마커 약 20개를 추가한 확장형</li>
|
||
<li><strong>Helen Hayes (~15-19 마커)</strong> — 의료/보행 분석 표준. 하체 중심의 최소 마커셋</li>
|
||
</ul>
|
||
<p>마커는 <strong>뼈가 튀어나온 해부학적 랜드마크</strong>(견봉, 외측 상과, 전상장골극 등)에 부착합니다. 이런 위치는 피부 위에서 뼈의 움직임을 가장 정확히 반영하고, 피부 미끄러짐(Skin Artifact)이 최소화되는 지점입니다.</p>
|
||
<p>3D 복원이 끝나면 매 프레임마다 <strong>이름 없는 3D 점들의 구름(Point Cloud)</strong>이 생성됩니다. "이 점이 왼쪽 무릎 마커인지, 오른쪽 어깨 마커인지"를 판별하는 과정이 <strong>라벨링(Labeling)</strong>입니다.</p>
|
||
<p><figure class="blog-figure"><img src="optical-mocap-pipeline/images/marker-labeling.png" alt="Motive에서 마커가 라벨링된 모습" loading="lazy"><figcaption>Motive에서 마커가 라벨링된 모습</figcaption></figure></p>
|
||
<h3>라벨링 알고리즘</h3>
|
||
<p><strong>템플릿 매칭(Template Matching)</strong>
|
||
캘리브레이션 시 정의한 마커셋의 기하학적 배치(예: 무릎과 발목 마커 사이 거리)를 기준으로, 현재 프레임의 3D 점들을 템플릿과 대조합니다.</p>
|
||
<p><strong>예측 추적(Predictive Tracking)</strong>
|
||
이전 프레임의 속도·가속도를 기반으로 다음 프레임에서 각 마커가 어디에 있을지 예측하고, 가장 가까운 3D 점을 매칭합니다.</p>
|
||
<h3>마커 스왑(Swap) 문제</h3>
|
||
<p>두 마커가 서로 매우 가까이 지나갈 때, 소프트웨어가 두 마커의 <strong>라벨을 뒤바꿔 버리는 현상</strong>입니다. 광학식 모캡에서 가장 흔한 아티팩트 중 하나입니다.</p>
|
||
<p>해결 방법:</p>
|
||
<ul>
|
||
<li>후처리에서 수동으로 라벨을 교정</li>
|
||
<li>마커 배치를 <strong>비대칭</strong>으로 설계하여 구분을 쉽게 함</li>
|
||
<li><strong>액티브 마커(Active Marker)</strong> 사용 — 각 마커가 고유한 적외선 패턴을 발광하여 하드웨어 수준에서 식별, 스왑이 원천 차단됨</li>
|
||
</ul>
|
||
<h3>패시브 vs 액티브 마커</h3>
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<th>구분</th>
|
||
<th>패시브 마커 (반사형)</th>
|
||
<th>액티브 마커 (발광형)</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody><tr>
|
||
<td><strong>원리</strong></td>
|
||
<td>카메라 IR LED의 빛을 반사</td>
|
||
<td>마커 자체가 고유 IR 패턴 발광</td>
|
||
</tr>
|
||
<tr>
|
||
<td><strong>식별</strong></td>
|
||
<td>소프트웨어 기반 (스왑 가능성 있음)</td>
|
||
<td>하드웨어 기반 (스왑 없음)</td>
|
||
</tr>
|
||
<tr>
|
||
<td><strong>장점</strong></td>
|
||
<td>가볍고 저렴, 부착 간편</td>
|
||
<td>자동 식별, 라벨링 오류 없음</td>
|
||
</tr>
|
||
<tr>
|
||
<td><strong>단점</strong></td>
|
||
<td>라벨링 후처리 필요할 수 있음</td>
|
||
<td>무겁고, 배터리/전원 필요</td>
|
||
</tr>
|
||
</tbody></table>
|
||
<p>대부분의 엔터테인먼트/VTuber 현장에서는 <strong>패시브 마커</strong>가 주로 사용됩니다. 가볍고 편하며, 소프트웨어 성능이 충분히 좋아 대부분의 상황에서 자동 라벨링이 잘 작동하기 때문입니다.</p>
|
||
<hr>
|
||
<h2>7단계: 스켈레톤 솔빙 — 점에서 뼈대로</h2>
|
||
<p>라벨링된 3D 마커들을 사람의 <strong>골격(Skeleton)</strong> 구조에 매핑하는 단계입니다.</p>
|
||
<h3>사전 캘리브레이션</h3>
|
||
<p>촬영 전에 배우가 <strong>T-포즈</strong>(팔을 벌린 자세)를 취하면, 소프트웨어가 마커 위치를 기반으로 각 뼈대 길이(팔 길이, 다리 길이 등)와 관절 위치를 계산합니다.</p>
|
||
<p>이어서 <strong>ROM(Range of Motion) 캡처</strong>를 수행합니다.</p>
|
||
<p><figure class="blog-figure"><img src="optical-mocap-pipeline/images/rom-grid.webp" alt="ROM 캡처 — 다양한 동작으로 관절 범위를 보정하는 과정" loading="lazy"><figcaption>ROM 캡처 — 다양한 동작으로 관절 범위를 보정하는 과정</figcaption></figure>
|
||
팔 돌리기, 무릎 굽히기, 상체 비틀기 등 다양한 동작을 통해 소프트웨어가 <strong>관절 중심점과 회전축</strong>을 정밀하게 보정합니다.</p>
|
||
<h3>실시간 솔빙</h3>
|
||
<p>촬영 중에는 매 프레임마다:</p>
|
||
<ol>
|
||
<li>라벨링된 3D 마커 좌표를 받아옴</li>
|
||
<li>마커 위치를 기반으로 각 관절의 <strong>3D 위치와 회전값(Rotation)</strong>을 계산</li>
|
||
<li><strong>역운동학(Inverse Kinematics)</strong> 등의 알고리즘으로 자연스러운 골격 포즈를 산출</li>
|
||
<li>결과: 시간축 위의 모든 관절에 대한 <strong>위치(Translation) + 회전(Rotation)</strong> 데이터</li>
|
||
</ol>
|
||
<h3>리지드 바디 트래킹 (소품 추적)</h3>
|
||
<p>칼, 총, 카메라 등 소품에 <strong>3개 이상의 마커를 비대칭으로 부착</strong>하면, 소프트웨어가 해당 마커 클러스터를 하나의 강체(Rigid Body)로 인식하여 <strong>6DOF(위치 3축 + 회전 3축)</strong> 추적이 가능합니다.</p>
|
||
<hr>
|
||
<h2>8단계: 실시간 스트리밍과 데이터 출력</h2>
|
||
<h3>실시간 스트리밍</h3>
|
||
<p><figure class="blog-figure"><img src="optical-mocap-pipeline/images/realtime-streaming.png" alt="실시간 스트리밍 — Motive에서 게임 엔진으로 모션 데이터 전송" loading="lazy"><figcaption>실시간 스트리밍 — Motive에서 게임 엔진으로 모션 데이터 전송</figcaption></figure></p>
|
||
<p>OptiTrack Motive는 솔빙된 데이터를 실시간으로 외부 소프트웨어에 전달합니다:</p>
|
||
<ul>
|
||
<li><strong>NatNet SDK</strong> — OptiTrack의 자체 프로토콜, UDP 기반으로 저지연 전송</li>
|
||
<li><strong>VRPN</strong> — VR/모캡 분야의 표준 프로토콜</li>
|
||
</ul>
|
||
<p>이를 통해 <strong>Unity, Unreal Engine, MotionBuilder</strong> 등에서 실시간으로 캐릭터를 움직일 수 있습니다. VTuber 라이브 방송이 가능한 것도 이 실시간 스트리밍 덕분입니다.</p>
|
||
<h3>녹화 데이터 출력 포맷</h3>
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<th>포맷</th>
|
||
<th>용도</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody><tr>
|
||
<td><strong>FBX</strong></td>
|
||
<td>스켈레톤 + 애니메이션 데이터, 게임 엔진/DCC 툴 호환</td>
|
||
</tr>
|
||
<tr>
|
||
<td><strong>BVH</strong></td>
|
||
<td>계층적 모션 데이터, 리타게팅에 주로 사용</td>
|
||
</tr>
|
||
<tr>
|
||
<td><strong>C3D</strong></td>
|
||
<td>원시 3D 마커 데이터, 바이오메카닉스/연구 표준</td>
|
||
</tr>
|
||
</tbody></table>
|
||
<hr>
|
||
<h2>9단계: 후처리 — 데이터를 다듬는 과정</h2>
|
||
<p><figure class="blog-figure"><img src="optical-mocap-pipeline/images/post-processing.png" alt="후처리 작업 — Motive에서 모션 데이터를 정리하는 과정" loading="lazy"><figcaption>후처리 작업 — Motive에서 모션 데이터를 정리하는 과정</figcaption></figure></p>
|
||
<p>실시간 캡처에서 얻은 데이터는 바로 최종 결과물로 쓸 수 있는 경우도 있지만, 대부분의 프로 작업에서는 <strong>후처리(Post-Processing)</strong> 과정을 거칩니다.</p>
|
||
<h3>갭 필링(Gap Filling)</h3>
|
||
<p>오클루전으로 인해 마커가 일시적으로 사라진 구간을 <strong>보간(Interpolation)</strong>으로 채우는 작업입니다.</p>
|
||
<ul>
|
||
<li><strong>선형 보간(Linear)</strong> — 단순히 앞뒤 프레임을 직선으로 이음. 짧은 갭에 적합</li>
|
||
<li><strong>스플라인 보간(Spline)</strong> — 곡선으로 부드럽게 채움. 자연스러운 동작 유지에 유리</li>
|
||
<li><strong>패턴 기반 보간</strong> — 같은 동작을 반복한 다른 테이크의 데이터를 참조하여 채움</li>
|
||
</ul>
|
||
<p>갭이 길수록 보간 정확도가 떨어지기 때문에, 촬영 시 오클루전을 최소화하는 것이 가장 중요합니다.</p>
|
||
<h3>스무딩(Smoothing)과 필터링</h3>
|
||
<p>캡처된 데이터에는 미세한 떨림(High-frequency Noise)이 포함될 수 있습니다. 이를 제거하기 위해:</p>
|
||
<ul>
|
||
<li><strong>버터워스 필터(Butterworth Filter)</strong> — 지정한 주파수 이상의 노이즈를 제거하는 저역 통과 필터</li>
|
||
<li><strong>가우시안 스무딩</strong> — 주변 프레임의 가중 평균으로 떨림을 완화</li>
|
||
</ul>
|
||
<p>다만 과도한 스무딩은 동작의 <strong>디테일과 임팩트</strong>를 잃게 만들므로, 칼을 휘두르는 순간의 날카로운 움직임까지 뭉개지지 않도록 적절한 강도를 설정해야 합니다.</p>
|
||
<h3>마커 스왑 교정</h3>
|
||
<p>6단계에서 설명한 마커 스왑이 발생한 구간을 찾아서 라벨을 수동으로 바로잡는 작업입니다. Motive에서는 타임라인 위에서 마커 궤적을 시각적으로 확인하며 교정할 수 있습니다.</p>
|
||
<h3>리타게팅(Retargeting)</h3>
|
||
<p>캡처된 스켈레톤 데이터를 <strong>다른 비율의 캐릭터</strong>에 적용하는 과정입니다. 예를 들어 키 170cm인 배우의 모션 데이터를 키 3m인 거인 캐릭터나 150cm인 어린이 캐릭터에 맞추려면, 관절 회전은 유지하면서 뼈대 길이를 대상 캐릭터에 맞게 재계산해야 합니다. MotionBuilder, Maya, Unreal Engine 등에서 리타게팅 기능을 제공합니다.</p>
|
||
<hr>
|
||
<h2>10단계: 현장에서 자주 발생하는 문제와 대응</h2>
|
||
<p>기술적으로 완벽해 보이는 광학식 모캡에도 실무 현장에서 마주치는 문제들이 있습니다.</p>
|
||
<h3>반사 노이즈(Stray Reflections)</h3>
|
||
<p>마커가 아닌 물체에서 적외선이 반사되어 <strong>가짜 마커(Ghost Marker)</strong>가 검출되는 현상입니다.</p>
|
||
<ul>
|
||
<li>원인: 금속 표면, 반짝이는 옷, 안경, 시계, 바닥 반사 등</li>
|
||
<li>대응: 반사가 일어나는 표면을 무광 테이프로 가리거나, Motive에서 해당 영역을 <strong>마스킹(Masking)</strong> 처리하여 소프트웨어가 무시하도록 설정</li>
|
||
</ul>
|
||
<h3>마커 탈락</h3>
|
||
<p>격렬한 동작 중에 마커가 슈트에서 떨어지거나 위치가 틀어지는 경우입니다.</p>
|
||
<ul>
|
||
<li>대응: 촬영 전 마커 부착 상태를 꼼꼼히 확인하고, 격한 동작 촬영 시 벨크로 + 양면 테이프를 병행하여 고정력을 높입니다</li>
|
||
<li>중간중간 모니터링하며 마커 상태를 체크하는 것도 중요합니다</li>
|
||
</ul>
|
||
<h3>의상 제약</h3>
|
||
<p>촬영 시 배우가 입는 옷은 <strong>밝은 색상·무광 소재</strong>가 이상적입니다. 검은색은 마커 반사에 영향이 없지만, 반짝이는 소재나 느슨한 옷은 마커 위치가 불안정해지거나 반사 노이즈를 유발할 수 있습니다. 전용 모캡 슈트를 착용하는 것이 가장 안정적입니다.</p>
|
||
<h3>캘리브레이션 유지</h3>
|
||
<p>캡처 볼륨 내 온도 변화, 카메라 진동, 삼각대 미세 이동 등으로 캘리브레이션이 서서히 틀어질 수 있습니다. 장시간 촬영 시에는 중간에 <strong>재캘리브레이션</strong>하거나, Motive의 <strong>Continuous Calibration(연속 캘리브레이션)</strong> 기능으로 실시간 보정하는 것이 좋습니다.</p>
|
||
<hr>
|
||
<h2>레이턴시 — 움직임에서 화면까지 얼마나 걸릴까?</h2>
|
||
<p>전체 파이프라인의 각 단계별 소요 시간입니다.</p>
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<th>단계</th>
|
||
<th>소요 시간</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody><tr>
|
||
<td>카메라 노출 (240fps 기준)</td>
|
||
<td>~4.2ms</td>
|
||
</tr>
|
||
<tr>
|
||
<td>카메라 내부 처리 (센트로이드 계산)</td>
|
||
<td>~0.5–1ms</td>
|
||
</tr>
|
||
<tr>
|
||
<td>네트워크 전송 (PoE → PC)</td>
|
||
<td>< 1ms</td>
|
||
</tr>
|
||
<tr>
|
||
<td>3D 복원 + 라벨링</td>
|
||
<td>~1–2ms</td>
|
||
</tr>
|
||
<tr>
|
||
<td>스켈레톤 솔빙</td>
|
||
<td>~0.5–1ms</td>
|
||
</tr>
|
||
<tr>
|
||
<td>스트리밍 출력 (NatNet)</td>
|
||
<td>< 1ms</td>
|
||
</tr>
|
||
<tr>
|
||
<td><strong>총 종단간 레이턴시</strong></td>
|
||
<td><strong>약 8–14ms (240fps 기준)</strong></td>
|
||
</tr>
|
||
</tbody></table>
|
||
<p>360fps에서는 노출 시간이 줄어 <strong>7ms 이하</strong>까지 가능합니다. 이 정도 레이턴시면 사람이 체감하기 어려운 수준이며, VTuber 라이브 방송에서도 자연스러운 실시간 반응이 가능합니다.</p>
|
||
<blockquote>
|
||
<p>참고: 레이턴시의 대부분은 <strong>카메라 노출 시간(프레임 주기)</strong>이 차지합니다. 프레임레이트가 높을수록 레이턴시가 줄어드는 이유입니다.</p>
|
||
</blockquote>
|
||
<hr>
|
||
<h2>전체 파이프라인 요약</h2>
|
||
<div class="pipeline-flow">
|
||
<div class="pipeline-step">
|
||
<div class="pipeline-step-title">1. 카메라 설치 · IR 필터 · 프레임 동기화</div>
|
||
<p class="pipeline-step-desc">30대 카메라를 링 형태로 배치, IR 패스 필터로 적외선만 감지, 하드웨어 싱크로 μs 단위 동기화</p>
|
||
</div>
|
||
<div class="pipeline-arrow">↓</div>
|
||
<div class="pipeline-step">
|
||
<div class="pipeline-step-title">2. PoE 네트워크</div>
|
||
<p class="pipeline-step-desc">Cat6 한 줄로 전력 + 데이터 동시 전송, 스타 토폴로지로 스위치에 연결</p>
|
||
</div>
|
||
<div class="pipeline-arrow">↓</div>
|
||
<div class="pipeline-step">
|
||
<div class="pipeline-step-title">3. 카메라 온보드 처리 → 2D 센트로이드</div>
|
||
<p class="pipeline-step-desc">IR LED 발사 → 마커 반사광 수신 → 스레시홀딩 → 블롭 검출 → 서브픽셀 센트로이드 계산 → 좌표만 전송</p>
|
||
</div>
|
||
<div class="pipeline-arrow">↓</div>
|
||
<div class="pipeline-step">
|
||
<div class="pipeline-step-title">4. 캘리브레이션</div>
|
||
<p class="pipeline-step-desc">완딩으로 카메라 내부/외부 파라미터 산출, 그라운드 플레인으로 좌표계 정의</p>
|
||
</div>
|
||
<div class="pipeline-arrow">↓</div>
|
||
<div class="pipeline-step">
|
||
<div class="pipeline-step-title">5. 2D → 3D 삼각측량</div>
|
||
<p class="pipeline-step-desc">다수 카메라의 2D 좌표에서 광선 교차 + 최소자승법으로 3D 좌표 복원</p>
|
||
</div>
|
||
<div class="pipeline-arrow">↓</div>
|
||
<div class="pipeline-step">
|
||
<div class="pipeline-step-title">6. 마커 라벨링</div>
|
||
<p class="pipeline-step-desc">템플릿 매칭 + 예측 추적으로 각 3D 점에 마커 이름 부여</p>
|
||
</div>
|
||
<div class="pipeline-arrow">↓</div>
|
||
<div class="pipeline-step">
|
||
<div class="pipeline-step-title">7. 스켈레톤 솔빙</div>
|
||
<p class="pipeline-step-desc">T-포즈 + ROM 캘리브레이션 기반, 역운동학으로 관절 위치·회전 계산</p>
|
||
</div>
|
||
<div class="pipeline-arrow">↓</div>
|
||
<div class="pipeline-step">
|
||
<div class="pipeline-step-title">8. 실시간 스트리밍 · 데이터 출력</div>
|
||
<p class="pipeline-step-desc">NatNet/VRPN으로 Unity/Unreal/MotionBuilder에 실시간 전송, FBX/BVH/C3D 녹화</p>
|
||
</div>
|
||
<div class="pipeline-arrow">↓</div>
|
||
<div class="pipeline-step">
|
||
<div class="pipeline-step-title">9. 후처리</div>
|
||
<p class="pipeline-step-desc">갭 필링 · 스무딩 · 마커 스왑 교정 · 리타게팅</p>
|
||
</div>
|
||
<div class="pipeline-arrow">↓</div>
|
||
<div class="pipeline-step">
|
||
<div class="pipeline-step-title">최종 결과물</div>
|
||
<p class="pipeline-step-desc">게임 시네마틱 · VTuber 라이브 · 영상 콘텐츠에 적용 (총 레이턴시 약 8~14ms)</p>
|
||
</div>
|
||
</div>
|
||
|
||
<p>카메라가 찍은 영상이 그대로 PC에 오는 것이 아니라, 카메라가 직접 마커 좌표를 계산해서 보내고, PC는 이 좌표들을 3D로 복원하고 뼈대에 매핑하는 것 — 이것이 광학식 모션캡처의 핵심 원리입니다.</p>
|
||
<hr>
|
||
<h2>자주 묻는 질문 (FAQ)</h2>
|
||
<p><strong>Q. 광학식 모션캡처 카메라는 일반 카메라와 뭐가 다른가요?</strong></p>
|
||
<p>일반 카메라는 풀컬러 영상을 촬영하지만, 모션캡처 카메라는 적외선(IR) 영역에 특화되어 있습니다. IR LED로 마커를 비추고 반사광만 감지하며, 카메라 내부에서 마커의 2D 좌표를 직접 계산하여 좌표 데이터만 PC에 전송합니다.</p>
|
||
<p><strong>Q. PoE 케이블 길이에 제한이 있나요?</strong></p>
|
||
<p>이더넷 표준에 따라 PoE 케이블은 <strong>최대 100m</strong>까지 지원됩니다. 대부분의 모션캡처 스튜디오에서는 이 범위를 충분히 충족합니다.</p>
|
||
<p><strong>Q. 카메라 프레임레이트가 높을수록 항상 좋은가요?</strong></p>
|
||
<p>프레임레이트가 높으면 빠른 동작 추적과 낮은 레이턴시에 유리하지만, 데이터 처리량이 늘어나고 카메라 해상도가 낮아질 수 있습니다. 일반적으로 VTuber 라이브나 게임 모션캡처에서는 120~240fps면 충분하며, 스포츠 과학 등 초고속 동작 분석에서는 360fps 이상을 사용합니다.</p>
|
||
<p><strong>Q. 마커 스왑은 얼마나 자주 발생하나요?</strong></p>
|
||
<p>마커셋이 잘 설계되어 있고 카메라 수가 충분하면 실시간 촬영 중 스왑은 드물게 발생합니다. 다만 빠른 동작이나 마커 간 거리가 가까운 동작(손 맞잡기 등)에서는 발생 확률이 올라가며, 이런 구간은 후처리에서 교정합니다.</p>
|
||
<p><strong>Q. 삼각측량에 2대면 충분한데 왜 30대나 설치하나요?</strong></p>
|
||
<p>2대는 이론적 최솟값일 뿐입니다. 실제로는 오클루전(마커 가림), 카메라 각도에 따른 정확도 차이, 리던던시 확보 등을 고려해야 합니다. 30대를 배치하면 어떤 마커든 항상 다수의 카메라가 보고 있으므로, 안정적이고 정확한 추적이 가능합니다.</p>
|
||
<p><strong>Q. 캘리브레이션은 얼마나 자주 해야 하나요?</strong></p>
|
||
<p>일반적으로 촬영일 시작 전에 한 번 수행합니다. 다만 장시간 촬영 시 온도 변화나 카메라 미세 이동으로 캘리브레이션이 틀어질 수 있어, 4~6시간 연속 촬영 시 중간에 재캘리브레이션을 권장합니다. OptiTrack Motive의 Continuous Calibration 기능을 사용하면 촬영 중에도 실시간으로 보정이 가능합니다.</p>
|
||
<p><strong>Q. 반짝이는 옷을 입으면 안 되나요?</strong></p>
|
||
<p>모션캡처 카메라는 적외선 반사를 감지하기 때문에, 반짝이는 소재(금속 장식, 시퀸, 광택 있는 합성 섬유 등)는 적외선을 반사하여 가짜 마커(Ghost Marker)를 만들 수 있습니다. 전용 모캡 슈트나 무광 소재의 편안한 옷을 착용하는 것이 가장 좋습니다.</p>
|
||
<hr>
|
||
<p>광학식 모션캡처의 기술적 구조에 대해 더 궁금한 점이 있으시면 <a href="/contact">문의 페이지</a>에서 편하게 질문해 주세요. 밍글 스튜디오에서 직접 체험하고 싶으시다면 <a href="/services">서비스 안내</a>를 확인해 보세요.</p>
|
||
|
||
</div>
|
||
</div>
|
||
<div class="blog-post-footer">
|
||
<div class="container">
|
||
<a href="/devlog" class="blog-back-btn"><i class="fas fa-arrow-left"></i> ← 목록으로</a>
|
||
</div>
|
||
</div>
|
||
</article>
|
||
</main>
|
||
|
||
<div id="footer-placeholder"></div>
|
||
|
||
<script src="/js/i18n.js"></script>
|
||
<script src="/js/common.js"></script>
|
||
</body>
|
||
</html> |