diff --git a/about.html b/about.html index fe60a58..4e26fa7 100644 --- a/about.html +++ b/about.html @@ -99,6 +99,7 @@
  • Portfolio
  • Gallery
  • Schedule
  • +
  • DevLog
  • Contact
  • Q&A
  • diff --git a/backgrounds.html b/backgrounds.html index 00cd50d..5a3a666 100644 --- a/backgrounds.html +++ b/backgrounds.html @@ -72,6 +72,7 @@
  • Portfolio
  • Gallery
  • Schedule
  • +
  • DevLog
  • Contact
  • Q&A
  • diff --git a/blog/index.json b/blog/index.json new file mode 100644 index 0000000..d5afc08 --- /dev/null +++ b/blog/index.json @@ -0,0 +1,26 @@ +[ + { + "slug": "inertial-vs-optical-mocap", + "date": "2026-04-05", + "category": "모션캡처 기술", + "thumbnail": "images/thumbnail.webp", + "titles": { + "ko": "모션캡처 관성식 vs 광학식, 어떤 차이가 있을까?" + }, + "descriptions": { + "ko": "모션캡처의 두 가지 대표 방식인 관성식(IMU)과 광학식(Optical)의 원리, 장비별 특징, 커뮤니티 평가까지 한눈에 비교합니다." + } + }, + { + "slug": "optical-mocap-pipeline", + "date": "2026-04-05", + "category": "모션캡처 기술", + "thumbnail": "images/thumbnail.webp", + "titles": { + "ko": "광학식 모션캡처 파이프라인 완전 해부 — 카메라부터 모션 데이터까지" + }, + "descriptions": { + "ko": "광학식 모션캡처의 전체 기술 파이프라인을 심화 해설합니다. 카메라 설치, PoE 네트워크, 2D 센트로이드, 3D 복원, 스켈레톤 솔빙까지 단계별로 상세히 다룹니다." + } + } +] \ No newline at end of file diff --git a/blog/posts/inertial-vs-optical-mocap/en.md b/blog/posts/inertial-vs-optical-mocap/en.md new file mode 100644 index 0000000..01e1f1d --- /dev/null +++ b/blog/posts/inertial-vs-optical-mocap/en.md @@ -0,0 +1,233 @@ +--- +title: "Inertial vs Optical Motion Capture: What's the Difference?" +description: "A comprehensive comparison of the two major motion capture methods — inertial (IMU) and optical — covering their principles, key equipment, and community feedback." +date: "2026-04-05" +category: "Motion Capture Technology" +thumbnail: "images/thumbnail.webp" +--- + +When you start getting into motion capture, there's one question you'll encounter right away. + +**"What's the difference between inertial and optical?"** + +In this article, we'll cover everything from the underlying principles of each method to the leading equipment and real-world user feedback. + +--- + +## What Is Optical Motion Capture? + +Optical motion capture uses **infrared cameras** and **reflective markers**. + +Multiple infrared (IR) cameras are installed around the capture space, and **retro-reflective markers** approximately 10–20mm in diameter are attached to the performer's joints. Each camera emits infrared LED light and detects the light reflected back from the markers, extracting 2D marker coordinates from the image. + +When at least two cameras simultaneously capture the same marker, the precise 3D coordinates of that marker can be calculated using the principle of **triangulation**. The more cameras there are, the higher the accuracy and the fewer blind spots, which is why professional studios typically use **12 to 40 or more** cameras. + +Because every marker's 3D coordinates are recorded as **absolute positions** in every frame, the data remains accurate with zero cumulative drift no matter how much time passes. + + + +### Advantages +- **Sub-millimeter accuracy** — Precise positional tracking at the 0.1mm level +- **No drift** — Absolute coordinate-based, so data never shifts over time +- **Simultaneous multi-object tracking** — Capture performers + props + set elements together +- **Low latency** — Approximately 5–10ms, ideal for real-time feedback + +### Limitations +- Requires a dedicated capture space (camera installation + environment control) +- Setup and calibration take 30–90 minutes +- **Occlusion issues** — Tracking is lost when markers are hidden from cameras + +### Leading Equipment + +**OptiTrack (PrimeX Series)** +- Widely regarded as the **best value for money** among optical systems +- Motive software is user-friendly with a strong Unity/Unreal plugin ecosystem +- Broadly used by game developers, VTuber productions, and university research labs +- Community feedback: *"At this price point, OptiTrack is the only option for this level of accuracy"* is the prevailing opinion + +**Vicon (Vero / Vantage Series)** +- The **gold standard** in the film VFX industry — the vast majority of Hollywood AAA films are shot with Vicon +- Top-tier accuracy and stability, powerful post-processing software (Shogun) +- Community feedback: *"Accuracy is the best, but it's overkill for small studios"* + +**Qualisys** +- Strong in medical/sports biomechanics +- Specialized in gait analysis, clinical research, and sports science +- Relatively smaller user community in the entertainment sector + +--- + +## What Is Inertial (IMU) Motion Capture? + +Inertial motion capture uses **IMU (Inertial Measurement Unit)** sensors attached to the body or embedded in a suit to measure movement. + +Each IMU sensor contains three core components: + +- **Accelerometer** — Measures linear acceleration to determine direction and speed of movement +- **Gyroscope** — Measures angular velocity to calculate rotation +- **Magnetometer** — Uses Earth's magnetic field as a reference to correct heading + +By combining data from these three sensors using **sensor fusion** algorithms, the 3D orientation of each body part the sensor is attached to can be calculated in real time. Typically, 15–17 sensors are placed on key joints across the upper body, lower body, arms, and legs, and the relationships between sensors are used to extract full-body skeletal data. + +However, because calculating position from accelerometer data requires double integration, **errors accumulate (drift)**, meaning the **global position** — "where exactly am I standing in space?" — becomes increasingly inaccurate over time. This is the fundamental limitation of inertial systems. + + + +### Advantages +- **No spatial constraints** — Works outdoors, in tight spaces, anywhere +- **Quick setup** — Ready to capture in 5–15 minutes after putting on the suit +- **No occlusion issues** — Sensors are attached directly to the body, so there's no line-of-sight problem + +### Limitations +- **Drift** — Positional data shifts over time (cumulative error) +- **Low global position accuracy** — Difficult to determine precisely "where you are standing" +- **Magnetic interference** — Data distortion near metal structures or electronic equipment +- Difficult to track props or environmental interactions + +### Leading Equipment + +**Xsens MVN (now Movella)** +- Considered **#1 in accuracy and reliability** among inertial systems +- Widely used in the automotive industry, ergonomics, and game animation +- Community feedback: *"If you're going inertial, Xsens is the answer"*, though *"global position drift is unavoidable"* + +**Rokoko Smartsuit Pro** +- **Price accessibility is the biggest advantage** — Popular with indie developers and solo creators +- Rokoko Studio software is intuitive with convenient retargeting features +- Community feedback: *"For this price, it's impressive"*, but also *"drift becomes noticeable in long sessions"*, *"there are limits for precision work"* + +**Noitom Perception Neuron** +- Some models support finger tracking, compact form factor +- Community feedback: *"Neuron 3 is a big improvement"*, but *"drift issues still exist"*, *"software (Axis Studio) stability could be better"* + +--- + +## Side-by-Side Comparison + +| Category | Optical | Inertial (IMU) | +|----------|---------|----------------| +| **Tracking Principle** | IR cameras + reflective marker triangulation | IMU sensors (accelerometer + gyroscope + magnetometer) | +| **Positional Accuracy** | **Sub-millimeter (0.1mm)** — absolute coordinates | Drift occurs — cumulative error over time | +| **Rotational Accuracy** | Derived from positional data (very high) | 1–3 degrees (depends on sensor fusion algorithm) | +| **Drift** | **None** — absolute position measured every frame | Present — error accumulates from double integration of acceleration | +| **Occlusion** | Tracking lost when markers are hidden from cameras | **No issue** — sensors are directly attached to the body | +| **Magnetic Interference** | Not affected | Data distortion near metals/electronics | +| **Latency** | ~5–10ms | ~10–20ms | +| **Setup Time** | 30–90 min (camera placement + calibration) | 5–15 min (suit on + quick calibration) | +| **Capture Space** | Dedicated studio required (camera setup + environment control) | **Anywhere** (outdoors, small spaces OK) | +| **Multi-person Capture** | Simultaneous capture possible with distinct marker sets | Independent per suit, simultaneous possible but interaction is difficult | +| **Prop/Object Tracking** | Trackable by attaching markers | Requires separate sensors, practically difficult | +| **Finger Tracking** | High-precision tracking with dedicated hand marker sets | Only some devices support it, limited precision | +| **Post-processing Workload** | Gap filling needed for occlusion segments | Drift correction + position cleanup needed | +| **Leading Equipment** | OptiTrack, Vicon, Qualisys | Xsens, Rokoko, Noitom | +| **Primary Use Cases** | Game/film final capture, VTuber live, research | Previsualization, outdoor shoots, indie/personal content | + +--- + +## What About Markerless Motion Capture? + +Recently, **markerless motion capture**, where AI extracts motion from camera footage alone, has been gaining attention. Move.ai, Captury, and Plask are notable examples, and the barrier to entry is very low since capture is possible with regular cameras without any markers. + +However, at this point, markerless methods **fall significantly short of optical and inertial systems in terms of accuracy and stability.** Joint positions frequently exhibit jitter (jumping or shaking), and tracking becomes unstable during fast movements or occlusion situations. It can be useful for previsualization or reference purposes, but it is **not yet at a level where it can be directly used in final deliverables** for games, broadcast, or film. + +This is a rapidly advancing field worth watching, but for now, optical and inertial systems remain the mainstream in professional production. + +--- + +## What Does the Community Think? + +Summarizing the recurring opinions from motion capture communities on Reddit (r/gamedev, r/vfx), CGSociety, and others: + +> **"Optical for work where final quality matters, inertial for when speed and accessibility are the priority."** + +In practice, many professional studios **use both methods in tandem**. A common workflow is to quickly block out movements or create previz with inertial, then do the final capture with optical. + +For solo creators or indie teams, the prevailing advice is to start with an accessible inertial system like Rokoko, but **rent an optical studio for projects that demand precision**. + +--- + +## Why Mingle Studio Chose Optical + +Mingle Studio is an optical motion capture studio equipped with **30 OptiTrack cameras (16x Prime 17 + 14x Prime 13)**. The reasons for choosing optical are clear: + +- **Accuracy** — Sub-millimeter accuracy is essential for work that directly feeds into final deliverables such as game cinematics, VTuber live streams, and broadcast content +- **Real-time streaming** — Provides stable, drift-free data for situations requiring real-time feedback, like VTuber live broadcasts +- **Prop integration** — Precisely tracks interactions with props such as swords, guns, and chairs +- **Value for money** — OptiTrack delivers professional-grade accuracy at a more reasonable price compared to Vicon +- **Finger tracking supplement** — Optical's weakness in finger tracking is complemented by **Rokoko gloves**, combining the precision of optical for full-body with the reliable finger tracking of inertial gloves — the best of both worlds + +As such, optical and inertial are not necessarily an either-or choice. **Combining the strengths of each method** can achieve a level of quality that would be difficult to reach with a single approach alone. + +With 30 cameras covering 360 degrees in an 8m x 7m capture space, occlusion issues are minimized. + +### Mingle Studio Capture Workflow + +Here's how a typical motion capture session works when you book Mingle Studio: + +**Step 1: Pre-consultation** +We discuss the purpose of the shoot, number of performers needed, and types of motions to capture. For live broadcasts, avatar, background, and prop setup are also coordinated at this stage. + +**Step 2: Shoot Preparation (Setup)** +When you arrive at the studio, a professional operator handles marker placement, calibration, and avatar mapping. For live broadcast packages, character, background, and prop setup are included — no separate preparation needed. + +**Step 3: Main Capture / Live Broadcast** +Full-body and finger capture are performed simultaneously using 30 OptiTrack cameras + Rokoko gloves. Real-time monitoring lets you check results on the spot, and remote direction is also supported. + +**Step 4: Data Delivery / Post-processing** +After the shoot, motion data is delivered promptly. Depending on your needs, data cleanup (noise removal, frame correction) and retargeting optimized for your avatar are also available. + +--- + +## Which Method Should You Choose? + +| Scenario | Recommended Method | Recommended Equipment | Reason | +|----------|-------------------|----------------------|--------| +| Personal YouTube/VTuber content | Inertial | Rokoko, Perception Neuron | Easy setup, no spatial constraints | +| Outdoor/location shoots | Inertial | Xsens MVN | No spatial constraints, high reliability | +| Previz/motion blocking | Inertial | Rokoko, Xsens | Ideal for fast iterative work | +| Game cinematics/final animation | Optical | OptiTrack, Vicon | Sub-millimeter accuracy essential | +| High-quality VTuber live streaming | Optical | OptiTrack | Real-time streaming + no drift | +| Prop/environment interaction | Optical | OptiTrack, Vicon | Simultaneous tracking via markers on objects | +| Medical/sports research | Optical | Vicon, Qualisys | Clinical-grade precision data required | +| Automotive/ergonomics analysis | Inertial | Xsens MVN | Measurement possible in real work environments | + +If purchasing your own equipment is too costly, **renting an optical studio** is the most efficient choice. You can get professional-grade results without the expense of owning the equipment yourself. + +--- + +## Frequently Asked Questions (FAQ) + +**Q. What is the biggest difference between optical and inertial motion capture?** + +Optical tracks absolute positions using infrared cameras and reflective markers, providing sub-millimeter (0.1mm) accuracy. Inertial uses wearable IMU sensors that allow capture anywhere without spatial constraints, but positional data develops drift (cumulative error) over time. + +**Q. Which method is better for VTuber motion capture?** + +For simple personal content, inertial (Rokoko, Perception Neuron) is sufficient. However, for high-quality live broadcasts or when precise movements are needed, optical — which has no drift — is the better choice. + +**Q. What is drift in inertial motion capture?** + +Drift is the cumulative error that occurs when calculating position through double integration of IMU sensor acceleration data. The longer the capture session, the more the character's position diverges from reality, and this effect worsens in environments with magnetic interference. + +**Q. How is the occlusion problem in optical motion capture solved?** + +Occlusion occurs when markers are blocked from camera view. It's addressed by increasing the number of cameras to reduce blind spots and using software gap-filling functions to interpolate missing segments. Mingle Studio, for example, uses 30 cameras arranged in 360 degrees to minimize occlusion. + +**Q. Can both methods be used together?** + +Yes. In practice, many studios use a hybrid approach — optical for full-body and inertial gloves for fingers. Mingle Studio combines OptiTrack optical capture with Rokoko gloves, achieving high-quality tracking for both full-body and fingers. + +**Q. If I rent a motion capture studio, do I not need to buy equipment myself?** + +That's correct. Since purchasing optical equipment requires a substantial investment, renting a studio only for the projects that need it is the most efficient approach. You get professional-grade results without the burden of equipment purchase, setup, and maintenance. + +--- + +## Experience Optical Motion Capture for Yourself + +You don't need to buy the equipment yourself. At Mingle Studio, you can use a **full setup of 30 OptiTrack cameras + Rokoko gloves** on an hourly basis. + +- **Motion Capture Recording** — Full-body/facial capture + real-time monitoring + motion data delivery +- **Live Broadcast Full Package** — Avatar, background, and prop setup + real-time streaming, all-in-one + +For detailed service information and pricing, visit our [Services page](/services). To check available session times, see our [Schedule page](/schedule). If you have any questions, feel free to reach out via our [Contact page](/contact). diff --git a/blog/posts/inertial-vs-optical-mocap/images/Sam_ROM_Raw.mp4 b/blog/posts/inertial-vs-optical-mocap/images/Sam_ROM_Raw.mp4 new file mode 100644 index 0000000..e73575e Binary files /dev/null and b/blog/posts/inertial-vs-optical-mocap/images/Sam_ROM_Raw.mp4 differ diff --git a/blog/posts/inertial-vs-optical-mocap/images/basketball-rigid-body-2x-web.mp4 b/blog/posts/inertial-vs-optical-mocap/images/basketball-rigid-body-2x-web.mp4 new file mode 100644 index 0000000..d793bb4 Binary files /dev/null and b/blog/posts/inertial-vs-optical-mocap/images/basketball-rigid-body-2x-web.mp4 differ diff --git a/blog/posts/inertial-vs-optical-mocap/images/thumbnail.webp b/blog/posts/inertial-vs-optical-mocap/images/thumbnail.webp new file mode 100644 index 0000000..b9e19f6 Binary files /dev/null and b/blog/posts/inertial-vs-optical-mocap/images/thumbnail.webp differ diff --git a/blog/posts/inertial-vs-optical-mocap/ja.md b/blog/posts/inertial-vs-optical-mocap/ja.md new file mode 100644 index 0000000..3fc7a02 --- /dev/null +++ b/blog/posts/inertial-vs-optical-mocap/ja.md @@ -0,0 +1,233 @@ +--- +title: "モーションキャプチャー 慣性式 vs 光学式、どんな違いがある?" +description: "モーションキャプチャーの二大方式である慣性式(IMU)と光学式(Optical)の原理、機材ごとの特徴、コミュニティの評価まで一目で比較します。" +date: "2026-04-05" +category: "モーションキャプチャー技術" +thumbnail: "images/thumbnail.webp" +--- + +モーションキャプチャーに興味を持ち始めると、最初にぶつかる疑問があります。 + +**「慣性式と光学式、何が違うの?」** + +この記事では、二つの方式の原理から代表的な機材、実際のユーザー評価までまとめてご紹介します。 + +--- + +## 光学式(Optical)モーションキャプチャーとは? + +光学式は**赤外線カメラ**と**反射マーカー**を使用する方式です。 + +撮影空間の周囲に複数の赤外線(IR)カメラを設置し、アクターの関節位置に直径10〜20mm程度の**再帰反射(Retro-reflective)マーカー**を取り付けます。各カメラは赤外線LEDを照射し、マーカーから反射して戻ってくる光を検出することで、2D画像上のマーカー座標を抽出します。 + +少なくとも2台以上のカメラが同じマーカーを同時に捉えると、**三角測量(Triangulation)**の原理でそのマーカーの正確な3D座標を計算できます。カメラの台数が多いほど精度が上がり死角が減るため、プロのスタジオでは通常**12〜40台以上**のカメラを配置します。 + +このように毎フレームごとにすべてのマーカーの3D座標が**絶対位置**として記録されるため、時間がどれだけ経過してもデータが累積誤差なく正確に維持されます。 + + + +### メリット +- **サブミリメートル精度** — 0.1mm レベルの精密な位置追跡が可能 +- **ドリフトなし** — 絶対座標基準のため、時間が経ってもデータがズレない +- **複数オブジェクトの同時追跡** — アクター+小道具+セット要素まで一緒にキャプチャー可能 +- **低レイテンシー** — 約5〜10msで、リアルタイムフィードバックに最適 + +### 制約 +- 専用の撮影空間が必要(カメラ設置+環境制御) +- セットアップとキャリブレーションに30〜90分かかる +- **オクルージョン(遮蔽)問題** — マーカーがカメラから見えなくなると追跡が途切れる + +### 代表的な機材 + +**OptiTrack(PrimeXシリーズ)** +- 光学式の中で**コストパフォーマンス最強**と評価されるブランド +- Motiveソフトウェアの使いやすさが良く、Unity/Unrealプラグインのエコシステムが充実 +- ゲーム開発会社、VTuberプロダクション、大学研究室で幅広く使用 +- コミュニティ評価:*「この価格帯でこの精度はOptiTrackだけ」*という意見が主流 + +**Vicon(Vero / Vantageシリーズ)** +- 映画VFX業界の**ゴールドスタンダード** — ハリウッドAAA級映画のほとんどがViconで撮影 +- 最高級の精度と安定性、強力なポストプロセスソフトウェア(Shogun) +- コミュニティ評価:*「精度は最高だが、小規模スタジオには過大な投資」* + +**Qualisys** +- 医療・スポーツバイオメカニクス分野に強い +- 歩行分析、臨床研究、スポーツ科学に特化 +- エンターテインメント分野のユーザーコミュニティは比較的小規模 + +--- + +## 慣性式(IMU)モーションキャプチャーとは? + +慣性式は**IMU(Inertial Measurement Unit、慣性計測装置)**センサーを体に取り付けるか、スーツに内蔵して動きを計測する方式です。 + +各IMUセンサーには3つのコアセンサーが搭載されています: + +- **加速度計(Accelerometer)** — 線形加速度を計測し、移動方向と速度を把握 +- **ジャイロスコープ(Gyroscope)** — 角速度を計測し、回転量を算出 +- **地磁気計(Magnetometer)** — 地球の磁場を基準に方向(Heading)を補正 + +この3つのセンサーのデータを**センサーフュージョン(Sensor Fusion)**アルゴリズムで統合すると、センサーが取り付けられた身体部位の3D方向(Orientation)をリアルタイムで計算できます。通常15〜17個のセンサーを上半身、下半身、腕、脚などの主要関節に配置し、各センサー間の関係から全身骨格データを抽出します。 + +ただし、加速度計のデータを二重積分して位置を求める過程で**誤差が蓄積(ドリフト)**するため、「空間のどこに立っているか」という**グローバル位置**は時間の経過とともに不正確になります。これが慣性式の根本的な限界です。 + + + +### メリット +- **空間の制約なし** — 屋外、狭い場所、どこでも可能 +- **素早いセットアップ** — スーツ着用後5〜15分でキャプチャー開始 +- **オクルージョン問題なし** — センサーが体に直接取り付けられているため遮蔽の問題がない + +### 制約 +- **ドリフト** — 時間の経過とともに位置データがズレる(累積誤差) +- **グローバル位置精度が低い** — 「どこに立っているか」を正確に把握しにくい +- **磁場干渉** — 金属構造物や電子機器の近くでデータが歪む +- 小道具や環境とのインタラクション追跡が困難 + +### 代表的な機材 + +**Xsens MVN(現Movella)** +- 慣性式の中で**精度と信頼性No.1**と評価される機材 +- 自動車産業、人間工学、ゲームアニメーション分野で幅広く活用 +- コミュニティ評価:*「慣性式を使うならXsens一択」*、ただし*「グローバル位置のドリフトはどうしようもない」* + +**Rokoko Smartsuit Pro** +- **価格のアクセシビリティが最大の利点** — インディー開発者、個人クリエイターに人気 +- Rokoko Studioソフトウェアが直感的で、リターゲティング機能が便利 +- コミュニティ評価:*「この価格でこのクオリティは驚き」*、一方で*「長時間撮影ではドリフトが目立つ」*、*「精密作業には限界がある」* + +**Noitom Perception Neuron** +- 一部モデルで指追跡をサポート、コンパクトなフォームファクター +- コミュニティ評価:*「Neuron 3で大幅に改善された」*、しかし*「ドリフトの問題はまだある」*、*「ソフトウェア(Axis Studio)の安定性が惜しい」* + +--- + +## 一目で比較 + +| 項目 | 光学式(Optical) | 慣性式(IMU) | +|------|------------------|--------------| +| **追跡原理** | 赤外線カメラ+反射マーカー三角測量 | IMUセンサー(加速度計+ジャイロ+地磁気計) | +| **位置精度** | **サブミリメートル(0.1mm)** — 絶対座標 | ドリフト発生 — 時間経過で累積誤差 | +| **回転精度** | 位置データから導出(非常に高い) | 1〜3度レベル(センサーフュージョンアルゴリズムに依存) | +| **ドリフト** | **なし** — 毎フレーム絶対位置を計測 | あり — 加速度二重積分時に誤差蓄積 | +| **オクルージョン(遮蔽)** | マーカーがカメラに見えないと追跡不可 | **問題なし** — センサーが直接体に取り付け | +| **磁場干渉** | 影響なし | 金属・電子機器の近くでデータ歪み | +| **レイテンシー** | 〜5-10ms | 〜10-20ms | +| **セットアップ時間** | 30〜90分(カメラ配置+キャリブレーション) | 5〜15分(スーツ着用+簡易補正) | +| **撮影空間** | 専用スタジオ必要(カメラ設置・環境制御) | **どこでも可能**(屋外、狭い場所OK) | +| **複数人撮影** | マーカーセットの区分で同時キャプチャー可能 | スーツごとに独立で同時可能だがインタラクションが難しい | +| **小道具/オブジェクト追跡** | マーカー取り付けで同時追跡可能 | 別途センサーが必要、実質的に困難 | +| **指追跡** | 専用ハンドマーカーセットで高精度追跡 | 一部機材のみ対応、精度に限界 | +| **後処理作業量** | オクルージョン区間のギャップフィリングが必要 | ドリフト補正+位置整理が必要 | +| **代表的な機材** | OptiTrack、Vicon、Qualisys | Xsens、Rokoko、Noitom | +| **主な活用分野** | ゲーム/映画の最終キャプチャー、VTuberライブ、研究 | プリビズ、屋外撮影、インディー/個人コンテンツ | + +--- + +## マーカーレス方式とは? + +最近では、カメラ映像だけでAIが動作を抽出する**マーカーレスモーションキャプチャー**も注目を集めています。Move.ai、Captury、Plaskなどが代表的で、マーカーの取り付けなしに一般的なカメラでもキャプチャーが可能という点で参入障壁が非常に低いです。 + +しかし、現時点でマーカーレス方式は**精度と安定性の面で光学式・慣性式に大きく及びません。**関節位置が飛んだり震えたりするジッター(Jitter)現象が頻繁に発生し、速い動きやオクルージョンの状況で追跡が不安定になります。プリビズやリファレンスレベルでは活用可能ですが、ゲーム・放送・映画などの**最終成果物にそのまま使えるレベルにはまだ達していません。** + +技術の進歩が速い分野なので今後期待できますが、現在のプロの現場では依然として光学式と慣性式が主流です。 + +--- + +## コミュニティはどう評価している? + +Reddit(r/gamedev、r/vfx)、CGSocietyなどモーションキャプチャー関連コミュニティで繰り返し見られる意見をまとめると: + +> **「最終クオリティが重要な作業は光学式、素早い反復とアクセシビリティが重要なら慣性式」** + +実際に多くのプロスタジオが**二つの方式を併用**しています。慣性式で素早くプリビズ(事前視覚化)やモーションブロッキングを行い、最終撮影は光学式で行うというワークフローが一般的です。 + +個人クリエイターやインディーチームであれば、Rokokoのように参入障壁の低い慣性式で始めつつ、**精度が必要なプロジェクトでは光学式スタジオをレンタル**するのが最も現実的だという意見が多いです。 + +--- + +## ミングルスタジオが光学式を選んだ理由 + +ミングルスタジオは**OptiTrackカメラ30台(Prime 17 × 16台 + Prime 13 × 14台)**を備えた光学式モーションキャプチャースタジオです。光学式を選んだ理由は明確です。 + +- **精度** — ゲームシネマティック、VTuberライブ、放送コンテンツなど最終成果物に直結する作業にはサブミリメートル精度が不可欠 +- **リアルタイムストリーミング** — VTuberライブ放送のようにリアルタイムフィードバックが必要な場面で、ドリフトのない安定したデータを提供 +- **小道具連携** — 剣、銃、椅子などの小道具とのインタラクションまで精密に追跡可能 +- **コストパフォーマンス** — OptiTrackはViconに比べて合理的な価格でプロ級の精度を提供 +- **指追跡の補完** — 光学式の弱点である指追跡を**Rokokoグローブ**で補完し、全身は光学式の精度で、指は慣性式グローブの安定した追跡で、各方式のメリットだけを組み合わせ + +このように光学式と慣性式は必ずしも二者択一ではありません。**各方式の強みを組み合わせる**ことで、単一方式では到達しにくいクオリティを生み出すことができます。 + +8m x 7mのキャプチャー空間に30台のカメラが360度死角なく追跡するため、オクルージョンの問題も最小化されています。 + +### ミングルスタジオの撮影ワークフロー + +実際にミングルスタジオでモーションキャプチャーのスタジオレンタルをご利用いただくと、以下の流れで進行します。 + +**ステップ1:事前相談** +撮影の目的、必要な人数、キャプチャーする動作の種類を事前にご相談します。ライブ放送の場合、アバター、背景、プロップ(小道具)のセッティングもこの段階で打ち合わせします。 + +**ステップ2:撮影準備(セッティング)** +スタジオにお越しいただくと、専門オペレーターがマーカー取り付け、キャリブレーション、アバターマッピングを行います。ライブ放送パッケージの場合、キャラクター・背景・プロップのセッティングが含まれているため、別途の準備は不要です。 + +**ステップ3:本撮影 / ライブ放送** +OptiTrack 30台カメラ + Rokokoグローブで全身と指を同時にキャプチャーします。リアルタイムモニタリングにより撮影現場ですぐに結果を確認でき、リモートディレクションにも対応しています。 + +**ステップ4:データ納品 / 後処理** +撮影終了後、モーションデータをすぐにお受け取りいただけます。必要に応じて、データクリーンアップ(ノイズ除去、フレーム補正)やお客様のアバターに最適化されたリターゲティングの後処理も可能です。 + +--- + +## どちらの方式を選ぶべき? + +| シチュエーション | 推奨方式 | 推奨機材 | 理由 | +|-----------------|---------|---------|------| +| 個人YouTube/VTuberコンテンツ | 慣性式 | Rokoko、Perception Neuron | 簡単なセットアップ、空間の制約なし | +| 屋外・ロケ撮影 | 慣性式 | Xsens MVN | 空間の制約なし、高い信頼性 | +| プリビズ・モーションブロッキング | 慣性式 | Rokoko、Xsens | 素早い反復作業に有利 | +| ゲームシネマティック・最終アニメーション | 光学式 | OptiTrack、Vicon | サブミリメートル精度が必須 | +| VTuberライブ放送(高品質) | 光学式 | OptiTrack | リアルタイムストリーミング+ドリフトなし | +| 小道具・環境インタラクション | 光学式 | OptiTrack、Vicon | オブジェクトにマーカー取り付けで同時追跡 | +| 医療・スポーツ研究 | 光学式 | Vicon、Qualisys | 臨床レベルの精密データが必要 | +| 自動車・人間工学分析 | 慣性式 | Xsens MVN | 実際の作業環境で計測可能 | + +自前で機材を購入するのが負担であれば、**光学式スタジオのレンタル**が最も効率的な選択です。高額な機材を自分で揃えなくても、プロ級の成果物を得ることができます。 + +--- + +## よくある質問(FAQ) + +**Q. モーションキャプチャーの光学式と慣性式の最大の違いは何ですか?** + +光学式は赤外線カメラと反射マーカーで絶対位置を追跡し、サブミリメートル(0.1mm)レベルの精度を提供します。慣性式はIMUセンサーを着用して空間の制約なくどこでもキャプチャーが可能ですが、時間の経過とともに位置データにドリフト(累積誤差)が発生します。 + +**Q. VTuberのモーションキャプチャーにはどちらの方式が良いですか?** + +シンプルな個人コンテンツであれば慣性式(Rokoko、Perception Neuron)で十分です。しかし、高品質なライブ放送や精密な動作が必要な場合は、ドリフトのない光学式が適しています。 + +**Q. 慣性式モーションキャプチャーのドリフトとは何ですか?** + +ドリフトとは、IMUセンサーの加速度データを二重積分して位置を計算する過程で生じる累積誤差です。撮影時間が長くなるほどキャラクターの位置が実際とずれていく現象が発生し、磁場干渉のある環境ではさらに悪化する可能性があります。 + +**Q. 光学式モーションキャプチャーのオクルージョン問題はどう解決しますか?** + +オクルージョンは、マーカーがカメラから遮られて見えなくなった時に発生します。カメラの台数を増やして死角を減らし、ソフトウェアのギャップフィリング(Gap Filling)機能で欠落区間を補間して解決します。ミングルスタジオの場合、30台のカメラを360度に配置してオクルージョンを最小化しています。 + +**Q. 二つの方式を同時に使うことはできますか?** + +はい、可能です。実際に多くのスタジオが全身は光学式で、指は慣性式グローブでキャプチャーするハイブリッド方式を採用しています。ミングルスタジオもOptiTrack光学式にRokokoグローブを組み合わせ、全身と指の両方を高品質で追跡しています。 + +**Q. モーションキャプチャースタジオをレンタルすれば、機材を自分で買わなくていいのですか?** + +その通りです。光学式機材は自分で購入するとかなりの投資が必要なため、必要なプロジェクトの時だけスタジオをレンタルするのが最も効率的な方法です。機材の購入、セットアップ、メンテナンスの負担なくプロ級の成果物を得ることができます。 + +--- + +## 光学式モーションキャプチャーを実際に体験してみませんか + +機材を自分で購入する必要はありません。ミングルスタジオでは**OptiTrack 30台 + Rokokoグローブ**のフルセットアップを時間単位でご利用いただけます。 + +- **モーションキャプチャー収録** — 全身/フェイシャルキャプチャー+リアルタイムモニタリング+モーションデータ提供 +- **ライブ放送フルパッケージ** — アバター・背景・プロップセッティング+リアルタイムストリーミングまでオールインワン + +詳しいサービス内容と料金は[サービス案内ページ](/services)で、撮影スケジュールは[スケジュールページ](/schedule)でご確認いただけます。ご質問がありましたら[お問い合わせページ](/contact)からお気軽にご連絡ください。 diff --git a/blog/posts/inertial-vs-optical-mocap/ko.md b/blog/posts/inertial-vs-optical-mocap/ko.md new file mode 100644 index 0000000..9f33291 --- /dev/null +++ b/blog/posts/inertial-vs-optical-mocap/ko.md @@ -0,0 +1,233 @@ +--- +title: "모션캡처 관성식 vs 광학식, 어떤 차이가 있을까?" +description: "모션캡처의 두 가지 대표 방식인 관성식(IMU)과 광학식(Optical)의 원리, 장비별 특징, 커뮤니티 평가까지 한눈에 비교합니다." +date: "2026-04-05" +category: "모션캡처 기술" +thumbnail: "images/thumbnail.webp" +--- + +모션캡처에 관심을 가지다 보면 가장 먼저 마주치는 질문이 있습니다. + +**"관성식이랑 광학식, 뭐가 다른 거야?"** + +이 글에서는 두 방식의 원리부터 대표 장비, 실제 사용자들의 평가까지 정리해 보겠습니다. + +--- + +## 광학식(Optical) 모션캡처란? + +광학식은 **적외선 카메라**와 **반사 마커**를 이용하는 방식입니다. + +촬영 공간 주변에 여러 대의 적외선(IR) 카메라를 설치하고, 배우의 관절 위치에 지름 10~20mm 정도의 **재귀반사(Retro-reflective) 마커**를 부착합니다. 각 카메라는 적외선 LED를 쏘아 마커에서 반사되어 돌아오는 빛을 감지하고, 이를 통해 2D 이미지상의 마커 좌표를 추출합니다. + +최소 2대 이상의 카메라가 같은 마커를 동시에 포착하면, **삼각측량(Triangulation)** 원리로 해당 마커의 정확한 3D 좌표를 계산할 수 있습니다. 카메라 수가 많을수록 정확도가 올라가고 사각지대가 줄어들기 때문에, 전문 스튜디오에서는 보통 **12~40대 이상**의 카메라를 배치합니다. + +이렇게 매 프레임마다 모든 마커의 3D 좌표가 **절대 위치**로 기록되므로, 시간이 아무리 지나도 데이터가 누적 오차 없이 정확하게 유지됩니다. + + + +### 장점 +- **서브밀리미터 정확도** — 0.1mm 수준의 정밀한 위치 추적이 가능 +- **드리프트 없음** — 절대 좌표 기반이라 시간이 지나도 데이터가 밀리지 않음 +- **다수 오브젝트 동시 추적** — 배우 + 소품 + 세트 요소까지 함께 캡처 가능 +- **낮은 지연시간** — 약 5~10ms로 실시간 피드백에 적합 + +### 한계 +- 전용 촬영 공간이 필요 (카메라 설치 + 환경 통제) +- 셋업 및 캘리브레이션에 30~90분 소요 +- **오클루전(가림) 이슈** — 마커가 카메라에 보이지 않으면 추적이 끊김 + +### 대표 장비 + +**OptiTrack (PrimeX 시리즈)** +- 광학식 중 **가성비 최강**으로 평가받는 브랜드 +- Motive 소프트웨어의 사용 편의성이 좋고, Unity/Unreal 플러그인 생태계가 탄탄 +- 게임 개발사, VTuber 프로덕션, 대학 연구실에서 폭넓게 사용 +- 커뮤니티 평가: *"이 가격대에서 이 정확도는 OptiTrack이 유일하다"* 는 의견이 지배적 + +**Vicon (Vero / Vantage 시리즈)** +- 영화 VFX 업계의 **골드 스탠다드** — 헐리우드 AAA급 영화 대부분이 Vicon으로 촬영 +- 최상급 정확도와 안정성, 강력한 후처리 소프트웨어(Shogun) +- 커뮤니티 평가: *"정확도는 최고지만, 소규모 스튜디오에는 과한 투자"* + +**Qualisys** +- 의료/스포츠 바이오메카닉스 분야에서 강세 +- 보행 분석, 임상 연구, 스포츠 과학에 특화 +- 엔터테인먼트 분야 사용자 커뮤니티는 상대적으로 작은 편 + +--- + +## 관성식(IMU) 모션캡처란? + +관성식은 **IMU(Inertial Measurement Unit, 관성 측정 장치)** 센서를 몸에 부착하거나 슈트에 내장하여 움직임을 측정하는 방식입니다. + +각 IMU 센서에는 세 가지 핵심 센서가 들어 있습니다: + +- **가속도계(Accelerometer)** — 선형 가속도를 측정하여 이동 방향과 속도를 파악 +- **자이로스코프(Gyroscope)** — 각속도를 측정하여 회전량을 계산 +- **지자기계(Magnetometer)** — 지구 자기장을 기준으로 방향(Heading)을 보정 + +이 세 센서의 데이터를 **센서 퓨전(Sensor Fusion)** 알고리즘으로 결합하면, 해당 센서가 부착된 신체 부위의 3D 방향(Orientation)을 실시간으로 계산할 수 있습니다. 보통 15~17개의 센서를 상체, 하체, 팔, 다리 등 주요 관절에 배치하고, 각 센서 간의 관계를 통해 전신 골격 데이터를 추출합니다. + +다만 가속도계를 이중 적분하여 위치를 구하는 과정에서 **오차가 누적(드리프트)**되기 때문에, "공간 어디에 서 있는가"라는 **글로벌 위치**는 시간이 지날수록 부정확해집니다. 이것이 관성식의 근본적인 한계입니다. + + + +### 장점 +- **공간 제약 없음** — 야외, 좁은 공간, 어디서든 가능 +- **빠른 셋업** — 슈트 착용 후 5~15분이면 캡처 시작 +- **오클루전 문제 없음** — 센서가 몸에 부착되어 가림 이슈가 없음 + +### 한계 +- **드리프트** — 시간이 지날수록 위치 데이터가 밀려남 (누적 오차) +- **글로벌 위치 정확도 낮음** — "어디에 서 있는가"를 정확히 알기 어려움 +- **자기장 간섭** — 금속 구조물, 전자기기 근처에서 데이터 왜곡 발생 +- 소품이나 환경과의 상호작용 추적이 어려움 + +### 대표 장비 + +**Xsens MVN (현 Movella)** +- 관성식 중 **정확도와 신뢰성 1위**로 꼽히는 장비 +- 자동차 산업, 인체공학, 게임 애니메이션 분야에서 폭넓게 활용 +- 커뮤니티 평가: *"관성식을 쓸 거면 Xsens가 답이다"*, 다만 *"글로벌 위치 드리프트는 어쩔 수 없다"* + +**Rokoko Smartsuit Pro** +- **가격 접근성이 최대 장점** — 인디 개발자, 1인 크리에이터에게 인기 +- Rokoko Studio 소프트웨어가 직관적이고 리타겟팅 기능이 편리 +- 커뮤니티 평가: *"이 가격에 이 정도면 놀랍다"*, 반면 *"장시간 촬영 시 드리프트가 눈에 띈다"*, *"정밀 작업에는 한계가 있다"* + +**Noitom Perception Neuron** +- 일부 모델에서 손가락 추적 지원, 컴팩트한 폼팩터 +- 커뮤니티 평가: *"Neuron 3에서 많이 개선됐지만"*, *"드리프트 이슈가 아직 있다"*, *"소프트웨어(Axis Studio) 안정성이 아쉽다"* + +--- + +## 한눈에 비교 + +| 항목 | 광학식 (Optical) | 관성식 (IMU) | +|------|-----------------|-------------| +| **추적 원리** | 적외선 카메라 + 반사 마커 삼각측량 | IMU 센서 (가속도계 + 자이로 + 지자기계) | +| **위치 정확도** | **서브밀리미터 (0.1mm)** — 절대 좌표 | 드리프트 발생 — 시간 경과 시 누적 오차 | +| **회전 정확도** | 위치 데이터에서 파생 (매우 높음) | 1~3도 수준 (센서 퓨전 알고리즘 의존) | +| **드리프트** | **없음** — 매 프레임 절대 위치 측정 | 있음 — 가속도 이중적분 시 오차 누적 | +| **오클루전(가림)** | 마커가 카메라에 안 보이면 추적 불가 | **문제 없음** — 센서가 직접 몸에 부착 | +| **자기장 간섭** | 영향 없음 | 금속·전자기기 근처에서 데이터 왜곡 | +| **지연시간(Latency)** | ~5-10ms | ~10-20ms | +| **셋업 시간** | 30~90분 (카메라 배치 + 캘리브레이션) | 5~15분 (슈트 착용 + 간단 보정) | +| **촬영 공간** | 전용 스튜디오 필요 (카메라 설치·환경 통제) | **어디서든 가능** (야외, 좁은 공간 OK) | +| **다인 촬영** | 마커셋 구분으로 동시 캡처 가능 | 슈트별 독립이라 동시 가능하나 상호작용 어려움 | +| **소품/오브젝트 추적** | 마커 부착으로 함께 추적 가능 | 별도 센서 필요, 실질적으로 어려움 | +| **손가락 추적** | 전용 핸드 마커셋으로 고정밀 추적 | 일부 장비만 지원, 정밀도 제한적 | +| **후처리 작업량** | 오클루전 구간 갭 필링 필요 | 드리프트 보정 + 위치 정리 필요 | +| **대표 장비** | OptiTrack, Vicon, Qualisys | Xsens, Rokoko, Noitom | +| **주요 활용 분야** | 게임/영화 최종 캡처, VTuber 라이브, 연구 | 프리비즈, 야외 촬영, 인디/개인 콘텐츠 | + +--- + +## 마커리스(Markerless) 방식은? + +최근에는 카메라 영상만으로 AI가 동작을 추출하는 **마커리스 모션캡처**도 주목받고 있습니다. Move.ai, Captury, Plask 등이 대표적이며, 마커 부착 없이 일반 카메라로도 캡처가 가능하다는 점에서 진입 장벽이 매우 낮습니다. + +하지만 현 시점에서 마커리스 방식은 **정확도와 안정성 면에서 광학식·관성식에 크게 미치지 못합니다.** 관절 위치가 튀거나 떨리는 지터(Jitter) 현상이 빈번하고, 빠른 동작이나 오클루전 상황에서 추적이 불안정합니다. 프리비즈나 레퍼런스 수준에서는 활용 가능하지만, 게임·방송·영화 등 **최종 결과물에 바로 쓸 수 있는 수준은 아직 아닙니다.** + +기술 발전 속도가 빠른 분야이므로 앞으로 기대할 만하지만, 현재 프로 현장에서는 여전히 광학식과 관성식이 주류입니다. + +--- + +## 커뮤니티는 어떻게 평가할까? + +Reddit(r/gamedev, r/vfx), CGSociety 등 모션캡처 관련 커뮤니티에서 반복적으로 등장하는 의견을 정리하면: + +> **"최종 퀄리티가 중요한 작업은 광학식, 빠른 반복과 접근성이 중요하면 관성식"** + +실제로 많은 프로 스튜디오가 **두 방식을 병행**합니다. 관성식으로 빠르게 프리비즈(사전 시각화)나 동작 블로킹을 잡고, 최종 촬영은 광학식으로 진행하는 워크플로우가 일반적입니다. + +1인 크리에이터나 인디 팀이라면 Rokoko처럼 진입 장벽이 낮은 관성식으로 시작하되, **정밀도가 필요한 프로젝트에서는 광학식 스튜디오를 대관**하는 방식이 가장 현실적이라는 의견이 많습니다. + +--- + +## 밍글 스튜디오가 광학식을 선택한 이유 + +밍글 스튜디오는 **OptiTrack 카메라 30대 (Prime 17 × 16대 + Prime 13 × 14대)**를 갖춘 광학식 모션캡처 스튜디오입니다. 광학식을 선택한 이유는 명확합니다. + +- **정확도** — 게임 시네마틱, VTuber 라이브, 방송 콘텐츠 등 최종 결과물에 직결되는 작업에는 서브밀리미터 정확도가 필수적 +- **실시간 스트리밍** — VTuber 라이브 방송처럼 실시간 피드백이 필요한 상황에서 드리프트 없는 안정적 데이터 제공 +- **소품 연동** — 칼, 총, 의자 등 소품과의 인터랙션까지 정밀하게 추적 가능 +- **가성비** — OptiTrack은 Vicon 대비 합리적인 가격으로 프로급 정확도 제공 +- **손가락 추적 보완** — 광학식의 약점인 손가락 추적을 **Rokoko 글러브**로 보완하여, 전신은 광학식의 정밀도로, 손가락은 관성식 글러브의 안정적인 추적으로 각 방식의 장점만 결합 + +이처럼 광학식과 관성식은 반드시 양자택일이 아닙니다. **각 방식의 강점을 조합**하면 단일 방식으로는 도달하기 어려운 퀄리티를 만들어낼 수 있습니다. + +8m x 7m 캡처 공간에서 30대 카메라가 360도 사각지대 없이 추적하기 때문에, 오클루전 이슈도 최소화됩니다. + +### 밍글 스튜디오 촬영 워크플로우 + +실제로 밍글 스튜디오에서 모션캡처 대관을 이용하시면 다음과 같은 흐름으로 진행됩니다. + +**1단계: 사전 협의** +촬영 목적, 필요한 인원 수, 캡처할 동작의 종류를 사전에 상담합니다. 라이브 방송의 경우 아바타, 배경, 프랍(소품) 세팅도 이 단계에서 협의합니다. + +**2단계: 촬영 준비 (세팅)** +스튜디오에 도착하시면 전문 오퍼레이터가 마커 부착, 캘리브레이션, 아바타 매핑을 진행합니다. 라이브 방송 패키지의 경우 캐릭터·배경·프랍 세팅이 포함되어 있어 별도 준비가 필요 없습니다. + +**3단계: 본 촬영 / 라이브 방송** +OptiTrack 30대 카메라 + Rokoko 글러브로 전신과 손가락을 동시에 캡처합니다. 실시간 모니터링을 통해 촬영 현장에서 바로 결과를 확인할 수 있고, 원격 디렉션도 지원합니다. + +**4단계: 데이터 전달 / 후처리** +촬영이 끝나면 모션 데이터를 바로 받아보실 수 있습니다. 필요에 따라 데이터 클린업(노이즈 제거, 프레임 보정)이나 고객 아바타에 최적화된 리타게팅 후작업도 가능합니다. + +--- + +## 어떤 방식을 선택해야 할까? + +| 상황 | 추천 방식 | 추천 장비 | 이유 | +|------|----------|----------|------| +| 개인 유튜브/VTuber 콘텐츠 | 관성식 | Rokoko, Perception Neuron | 간편한 셋업, 공간 제약 없음 | +| 야외·로케이션 촬영 | 관성식 | Xsens MVN | 공간 제약 없음, 높은 신뢰성 | +| 프리비즈·동작 블로킹 | 관성식 | Rokoko, Xsens | 빠른 반복 작업에 유리 | +| 게임 시네마틱·최종 애니메이션 | 광학식 | OptiTrack, Vicon | 서브밀리미터 정확도 필수 | +| VTuber 라이브 방송 (고퀄리티) | 광학식 | OptiTrack | 실시간 스트리밍 + 드리프트 없음 | +| 소품·환경 인터랙션 | 광학식 | OptiTrack, Vicon | 오브젝트에 마커 부착으로 동시 추적 | +| 의료·스포츠 연구 | 광학식 | Vicon, Qualisys | 임상 수준 정밀 데이터 필요 | +| 자동차·인체공학 분석 | 관성식 | Xsens MVN | 실제 작업 환경에서 측정 가능 | + +자체 장비 구매가 부담스럽다면, **광학식 스튜디오 대관**이 가장 효율적인 선택입니다. 고가의 장비를 직접 갖추지 않아도 프로급 결과물을 얻을 수 있습니다. + +--- + +## 자주 묻는 질문 (FAQ) + +**Q. 모션캡처 광학식과 관성식의 가장 큰 차이는 무엇인가요?** + +광학식은 적외선 카메라와 반사 마커로 절대 위치를 추적하여 서브밀리미터(0.1mm) 수준의 정확도를 제공합니다. 관성식은 IMU 센서를 착용하여 공간 제약 없이 어디서든 캡처가 가능하지만, 시간이 지날수록 위치 데이터에 드리프트(누적 오차)가 발생합니다. + +**Q. VTuber 모션캡처에는 어떤 방식이 좋나요?** + +간단한 개인 콘텐츠라면 관성식(Rokoko, Perception Neuron)으로 충분합니다. 하지만 고퀄리티 라이브 방송이나 정밀한 동작이 필요한 경우에는 드리프트가 없는 광학식이 적합합니다. + +**Q. 관성식 모션캡처의 드리프트란 무엇인가요?** + +드리프트는 IMU 센서의 가속도 데이터를 이중 적분하여 위치를 계산하는 과정에서 생기는 누적 오차입니다. 촬영 시간이 길어질수록 캐릭터의 위치가 실제와 어긋나는 현상이 발생하며, 자기장 간섭이 있는 환경에서는 더 심해질 수 있습니다. + +**Q. 광학식 모션캡처의 오클루전 문제는 어떻게 해결하나요?** + +오클루전은 마커가 카메라에 가려져 보이지 않을 때 발생합니다. 카메라 수를 늘려 사각지대를 줄이고, 소프트웨어의 갭 필링(Gap Filling) 기능으로 빠진 구간을 보간하여 해결합니다. 밍글 스튜디오의 경우 30대 카메라를 360도로 배치하여 오클루전을 최소화하고 있습니다. + +**Q. 두 방식을 함께 사용할 수 있나요?** + +네, 가능합니다. 실제로 많은 스튜디오가 전신은 광학식으로, 손가락은 관성식 글러브로 캡처하는 하이브리드 방식을 사용합니다. 밍글 스튜디오도 OptiTrack 광학식에 Rokoko 글러브를 결합하여 전신과 손가락 모두 고품질로 추적합니다. + +**Q. 모션캡처 스튜디오를 대관하면 장비를 직접 사지 않아도 되나요?** + +맞습니다. 광학식 장비는 직접 구매하면 상당한 투자가 필요하기 때문에, 필요한 프로젝트에서만 스튜디오를 대관하는 것이 가장 효율적인 방법입니다. 장비 구매, 셋업, 유지보수 부담 없이 프로급 결과물을 얻을 수 있습니다. + +--- + +## 광학식 모션캡처, 직접 경험해 보세요 + +장비를 직접 구매하지 않아도 됩니다. 밍글 스튜디오에서 **OptiTrack 30대 + Rokoko 글러브** 풀 셋업을 시간 단위로 이용할 수 있습니다. + +- **모션캡처 녹화** — 전신/페이셜 캡처 + 실시간 모니터링 + 모션 데이터 제공 +- **라이브 방송 풀패키지** — 아바타·배경·프랍 세팅 + 실시간 스트리밍까지 올인원 + +자세한 서비스 내용과 요금은 [서비스 안내 페이지](/services)에서, 촬영 일정은 [스케줄 페이지](/schedule)에서 확인하실 수 있습니다. 궁금한 점이 있으시면 [문의 페이지](/contact)에서 편하게 연락 주세요. diff --git a/blog/posts/inertial-vs-optical-mocap/zh.md b/blog/posts/inertial-vs-optical-mocap/zh.md new file mode 100644 index 0000000..6ae4fa5 --- /dev/null +++ b/blog/posts/inertial-vs-optical-mocap/zh.md @@ -0,0 +1,233 @@ +--- +title: "动作捕捉惯性式 vs 光学式,有什么区别?" +description: "全面比较动作捕捉两大主流方式——惯性式(IMU)与光学式(Optical)的原理、各类设备特征及社区评价。" +date: "2026-04-05" +category: "动作捕捉技术" +thumbnail: "images/thumbnail.webp" +--- + +当你开始关注动作捕捉时,最先遇到的问题就是: + +**"惯性式和光学式,到底有什么区别?"** + +本文将从两种方式的原理出发,涵盖代表性设备及真实用户评价,为你做一次全面的梳理。 + +--- + +## 什么是光学式(Optical)动作捕捉? + +光学式采用**红外摄像机**和**反射标记点**来实现动作捕捉。 + +在拍摄空间周围安装多台红外(IR)摄像机,并在演员的关节位置贴上直径约10~20mm的**回射(Retro-reflective)标记点**。每台摄像机发射红外LED光,检测从标记点反射回来的光线,从而在2D图像中提取标记点坐标。 + +当至少两台摄像机同时捕捉到同一个标记点时,就可以利用**三角测量(Triangulation)**原理计算出该标记点精确的3D坐标。摄像机数量越多,精度越高,盲区越少,因此专业工作室通常配备**12至40台以上**的摄像机。 + +由于每一帧中所有标记点的3D坐标都以**绝对位置**记录,无论经过多长时间,数据都能保持准确,不会产生累积误差。 + + + +### 优点 +- **亚毫米精度** — 可实现0.1mm级别的精确位置追踪 +- **无漂移** — 基于绝对坐标,数据不会随时间推移而偏移 +- **多目标同步追踪** — 可同时捕捉演员 + 道具 + 场景元素 +- **低延迟** — 约5~10ms,非常适合实时反馈 + +### 局限 +- 需要专用拍摄空间(安装摄像机 + 环境控制) +- 搭建和校准需要30~90分钟 +- **遮挡(Occlusion)问题** — 标记点被遮挡时无法追踪 + +### 代表性设备 + +**OptiTrack(PrimeX系列)** +- 被评为光学式中**性价比最高**的品牌 +- Motive软件易用性好,Unity/Unreal插件生态完善 +- 广泛应用于游戏开发公司、VTuber制作团队、高校研究实验室 +- 社区评价:*"在这个价位上能达到这种精度的只有OptiTrack"*是主流观点 + +**Vicon(Vero / Vantage系列)** +- 影视VFX行业的**黄金标准** — 好莱坞大多数AAA级电影都使用Vicon拍摄 +- 最顶级的精度与稳定性,强大的后处理软件(Shogun) +- 社区评价:*"精度是最好的,但对小型工作室来说投资过大"* + +**Qualisys** +- 在医疗/运动生物力学领域表现强劲 +- 专注于步态分析、临床研究、运动科学 +- 在娱乐领域的用户社区相对较小 + +--- + +## 什么是惯性式(IMU)动作捕捉? + +惯性式通过将**IMU(Inertial Measurement Unit,惯性测量单元)**传感器贴在身体上或内置于动捕服中来测量运动。 + +每个IMU传感器内含三个核心组件: + +- **加速度计(Accelerometer)** — 测量线性加速度,判断运动方向和速度 +- **陀螺仪(Gyroscope)** — 测量角速度,计算旋转量 +- **磁力计(Magnetometer)** — 以地球磁场为基准校正朝向(Heading) + +通过**传感器融合(Sensor Fusion)**算法将这三种传感器的数据进行整合,可以实时计算传感器所贴身体部位的3D朝向(Orientation)。通常将15~17个传感器分布在上身、下身、手臂、腿部等主要关节处,通过各传感器之间的关系提取全身骨骼数据。 + +但是,由于需要对加速度计数据进行二次积分来计算位置,**误差会逐渐累积(漂移)**,因此"我站在空间的哪个位置"这一**全局位置**会随着时间推移变得越来越不准确。这就是惯性式的根本局限。 + + + +### 优点 +- **不受空间限制** — 室外、狭小空间,随时随地可用 +- **快速搭建** — 穿上动捕服后5~15分钟即可开始捕捉 +- **无遮挡问题** — 传感器直接贴在身上,不存在视线遮挡问题 + +### 局限 +- **漂移** — 位置数据随时间推移而偏移(累积误差) +- **全局位置精度低** — 难以精确判断"站在哪里" +- **磁场干扰** — 在金属结构、电子设备附近数据会失真 +- 难以追踪道具或与环境的交互 + +### 代表性设备 + +**Xsens MVN(现Movella)** +- 被认为是惯性式中**精度和可靠性第一**的设备 +- 广泛应用于汽车行业、人体工程学、游戏动画领域 +- 社区评价:*"用惯性式的话,Xsens就是答案"*,但*"全局位置漂移是无法避免的"* + +**Rokoko Smartsuit Pro** +- **价格亲民是最大优势** — 深受独立开发者和个人创作者的欢迎 +- Rokoko Studio软件直观易用,重定向功能方便 +- 社区评价:*"这个价格能做到这种程度,令人惊叹"*,但也有*"长时间拍摄漂移明显"*、*"精细工作有局限"* + +**Noitom Perception Neuron** +- 部分型号支持手指追踪,紧凑的外形设计 +- 社区评价:*"Neuron 3改进了很多"*,但*"漂移问题仍然存在"*,*"软件(Axis Studio)稳定性有待提高"* + +--- + +## 一目了然的对比 + +| 项目 | 光学式(Optical) | 惯性式(IMU) | +|------|------------------|--------------| +| **追踪原理** | 红外摄像机 + 反射标记点三角测量 | IMU传感器(加速度计 + 陀螺仪 + 磁力计) | +| **位置精度** | **亚毫米(0.1mm)** — 绝对坐标 | 存在漂移 — 随时间累积误差 | +| **旋转精度** | 从位置数据推导(非常高) | 1~3度水平(取决于传感器融合算法) | +| **漂移** | **无** — 每帧测量绝对位置 | 有 — 加速度二次积分时误差累积 | +| **遮挡** | 标记点被遮挡时无法追踪 | **无问题** — 传感器直接贴在身上 | +| **磁场干扰** | 不受影响 | 在金属/电子设备附近数据失真 | +| **延迟** | ~5-10ms | ~10-20ms | +| **搭建时间** | 30~90分钟(摄像机布置 + 校准) | 5~15分钟(穿戴动捕服 + 简单校正) | +| **拍摄空间** | 需要专用工作室(安装摄像机·环境控制) | **随时随地**(室外、狭小空间均可) | +| **多人拍摄** | 通过区分标记组可同时捕捉 | 每套动捕服独立运行,可同时使用但交互困难 | +| **道具/物体追踪** | 在道具上贴标记点即可同步追踪 | 需要额外传感器,实际操作困难 | +| **手指追踪** | 专用手部标记组实现高精度追踪 | 仅部分设备支持,精度有限 | +| **后期处理工作量** | 需要对遮挡区间进行间隙填充 | 需要漂移校正 + 位置修正 | +| **代表性设备** | OptiTrack、Vicon、Qualisys | Xsens、Rokoko、Noitom | +| **主要应用领域** | 游戏/电影最终捕捉、VTuber直播、研究 | 预可视化、户外拍摄、独立/个人内容 | + +--- + +## 无标记(Markerless)方式如何? + +近年来,仅通过摄像机画面由AI提取动作的**无标记动作捕捉**也备受关注。Move.ai、Captury、Plask等是其中的代表,由于无需贴标记点、用普通摄像机即可捕捉,入门门槛非常低。 + +然而,目前无标记方式**在精度和稳定性方面远远不及光学式和惯性式。**关节位置频繁出现抖动(Jitter)现象,在快速动作或遮挡情况下追踪变得不稳定。在预可视化或参考用途上可以使用,但在游戏、广播、电影等领域,**尚未达到可以直接用于最终成品的水平。** + +这是一个技术进步非常快的领域,未来值得期待,但目前在专业制作现场,光学式和惯性式仍然是主流。 + +--- + +## 社区怎么评价? + +综合Reddit(r/gamedev、r/vfx)、CGSociety等动作捕捉相关社区中反复出现的观点: + +> **"对最终质量要求高的工作用光学式,注重速度和便捷性的用惯性式。"** + +实际上,很多专业工作室**两种方式并用**。先用惯性式快速完成预可视化(Previz)或动作粗排,最终拍摄则使用光学式,这是常见的工作流程。 + +对于个人创作者或独立团队,普遍建议是先从Rokoko这样入门门槛低的惯性式开始,**在需要精度的项目中租用光学式工作室**,这是最现实的方案。 + +--- + +## 明格工作室为什么选择光学式 + +明格工作室是一家配备了**30台OptiTrack摄像机(Prime 17 × 16台 + Prime 13 × 14台)**的光学式动作捕捉工作室。选择光学式的理由非常明确: + +- **精度** — 游戏过场动画、VTuber直播、广播内容等直接用于最终成品的工作,亚毫米精度必不可少 +- **实时串流** — 在VTuber直播等需要实时反馈的场景中,提供无漂移的稳定数据 +- **道具联动** — 可精确追踪与刀、枪、椅子等道具的交互 +- **性价比** — OptiTrack以比Vicon更合理的价格提供专业级精度 +- **手指追踪补充** — 光学式在手指追踪方面的弱点由**Rokoko手套**弥补,全身采用光学式的精度,手指则利用惯性式手套的稳定追踪——汇集了两种方式各自的优势 + +由此可见,光学式和惯性式并非必须二选一。**将各方式的优势组合**起来,可以实现单一方式难以达到的品质。 + +在8m x 7m的捕捉空间内,30台摄像机实现360度无死角追踪,最大程度减少了遮挡问题。 + +### 明格工作室拍摄工作流程 + +当您在明格工作室租用动作捕捉服务时,实际流程如下: + +**第一步:前期沟通** +事先沟通拍摄目的、所需人数、需要捕捉的动作类型。如果是直播,还会在此阶段商讨虚拟形象、背景和道具的设置方案。 + +**第二步:拍摄准备(搭建)** +您到达工作室后,专业操作人员将进行标记点贴附、校准和虚拟形象映射。直播套餐已包含角色、背景、道具的搭建,无需额外准备。 + +**第三步:正式拍摄 / 直播** +使用30台OptiTrack摄像机 + Rokoko手套同时捕捉全身和手指动作。通过实时监控可以在现场立即查看效果,同时支持远程指导。 + +**第四步:数据交付 / 后期处理** +拍摄结束后即可获取动作数据。根据需要,还可以进行数据清理(去噪、帧校正)以及针对您的虚拟形象优化的重定向后期处理。 + +--- + +## 应该选择哪种方式? + +| 场景 | 推荐方式 | 推荐设备 | 原因 | +|------|---------|---------|------| +| 个人YouTube/VTuber内容 | 惯性式 | Rokoko、Perception Neuron | 搭建简单,不受空间限制 | +| 户外/外景拍摄 | 惯性式 | Xsens MVN | 不受空间限制,可靠性高 | +| 预可视化/动作粗排 | 惯性式 | Rokoko、Xsens | 适合快速迭代工作 | +| 游戏过场动画/最终动画 | 光学式 | OptiTrack、Vicon | 亚毫米精度必不可少 | +| 高品质VTuber直播 | 光学式 | OptiTrack | 实时串流 + 无漂移 | +| 道具/环境交互 | 光学式 | OptiTrack、Vicon | 在物体上贴标记点即可同步追踪 | +| 医疗/运动研究 | 光学式 | Vicon、Qualisys | 需要临床级精密数据 | +| 汽车/人体工程学分析 | 惯性式 | Xsens MVN | 可在实际工作环境中测量 | + +如果自行购买设备负担较大,**租用光学式工作室**是最高效的选择。无需自己配备昂贵设备,也能获得专业级成果。 + +--- + +## 常见问题(FAQ) + +**Q. 光学式和惯性式动作捕捉最大的区别是什么?** + +光学式通过红外摄像机和反射标记点追踪绝对位置,可提供亚毫米(0.1mm)级别的精度。惯性式佩戴IMU传感器,不受空间限制可随时随地捕捉,但随着时间推移位置数据会产生漂移(累积误差)。 + +**Q. VTuber动作捕捉应该选哪种方式?** + +简单的个人内容用惯性式(Rokoko、Perception Neuron)就足够了。但如果需要高品质的直播或精细动作,没有漂移的光学式更为合适。 + +**Q. 惯性式动作捕捉的漂移是什么?** + +漂移是对IMU传感器的加速度数据进行二次积分计算位置时产生的累积误差。拍摄时间越长,角色位置与实际位置的偏差就越大,在存在磁场干扰的环境中会更加严重。 + +**Q. 光学式动作捕捉的遮挡问题怎么解决?** + +遮挡是指标记点被挡住导致摄像机无法看到时出现的问题。通过增加摄像机数量来减少盲区,并利用软件的间隙填充(Gap Filling)功能对缺失区间进行插值来解决。以明格工作室为例,30台摄像机呈360度布置,将遮挡问题降到最低。 + +**Q. 两种方式可以同时使用吗?** + +可以。实际上,很多工作室采用混合方式——全身用光学式,手指用惯性式手套进行捕捉。明格工作室也将OptiTrack光学式与Rokoko手套相结合,实现全身和手指的高品质追踪。 + +**Q. 租用动作捕捉工作室就不需要自己买设备了吗?** + +没错。光学式设备自行购买需要相当大的投资,因此只在需要的项目中租用工作室是最高效的方式。无需承担设备购买、搭建和维护的负担,即可获得专业级成果。 + +--- + +## 亲身体验光学式动作捕捉 + +您无需自行购买设备。在明格工作室,您可以按小时使用**30台OptiTrack + Rokoko手套**的完整配置。 + +- **动作捕捉录制** — 全身/面部捕捉 + 实时监控 + 动作数据交付 +- **直播全套方案** — 虚拟形象·背景·道具搭建 + 实时串流,一站式服务 + +详细的服务内容和价格请查看[服务介绍页面](/services),拍摄日程请查看[日程页面](/schedule)。如有任何疑问,欢迎通过[联系页面](/contact)随时与我们沟通。 diff --git a/blog/posts/optical-mocap-pipeline/en.md b/blog/posts/optical-mocap-pipeline/en.md new file mode 100644 index 0000000..e0d8590 --- /dev/null +++ b/blog/posts/optical-mocap-pipeline/en.md @@ -0,0 +1,484 @@ +--- +title: "Complete Anatomy of the Optical Motion Capture Pipeline — From Cameras to Motion Data" +description: "An in-depth guide to the entire optical motion capture technical pipeline. We cover camera installation, PoE networking, 2D centroids, calibration, 3D reconstruction, skeleton solving, post-processing, and on-set practical issues in 10 detailed steps." +date: "2026-04-05" +category: "Motion Capture Technology" +thumbnail: "images/thumbnail.webp" +--- + +When an actor wearing a suit moves in a motion capture studio, the on-screen character follows in real time. It looks simple, but behind the scenes runs a precise technical pipeline: **camera hardware → network transmission → 2D image processing → 3D reconstruction → skeleton solving → real-time streaming**. + +In this article, we dissect the entire pipeline of optical motion capture (based on OptiTrack) step by step. + +--- + +## Step 1: Camera Installation and Placement Strategy + +The first step in optical motion capture is deciding **where and how to place the cameras**. + +![Mingle Studio motion capture space](/images/studio/모션캡쳐%20공간%20001.webp) + +### Placement Principles + +- **Height**: Cameras are typically mounted at 2–3m height, angled about 30 degrees downward +- **Layout**: Arranged in a ring formation surrounding the capture volume (shooting space) +- **Two-tier placement**: Alternating cameras at high and low positions improves vertical coverage +- **Overlap**: Every point within the capture volume must be visible to **at least 3 cameras** simultaneously. Triangulation requires a minimum of 2, but 3 or more significantly improves accuracy and occlusion resilience + +### Relationship Between Camera Count and Accuracy + +More cameras means: +- Fewer blind spots → reduced probability of occlusion +- More cameras seeing the same marker → improved triangulation accuracy +- Other cameras compensate if some have issues (redundancy) + +At Mingle Studio, we use **OptiTrack Prime 17 × 16 units + Prime 13 × 14 units**, a total of 30 cameras arranged in an 8m × 7m space to minimize 360-degree blind spots. + +### IR Pass Filter — Eyes That See Only Infrared + +An **IR pass filter (infrared pass filter)** is mounted in front of each motion capture camera lens. This filter blocks visible light and allows only infrared wavelengths (around 850nm) to pass through. This eliminates interference from fluorescent lights, sunlight, monitor glow, and other ambient lighting, allowing the camera to detect only **marker light reflected from IR LEDs**. + +This filter is also the reason the studio lighting doesn't need to be completely turned off. However, direct sunlight or lighting with strong IR components can still cause interference, so studios use lighting with minimal IR emission. + +### Frame Synchronization — How 30 Cameras Shoot Simultaneously + +For accurate triangulation, all cameras must trigger their shutters at **exactly the same moment**. If each camera captures at different timings, the position of fast-moving markers would vary between cameras, making 3D reconstruction inaccurate. + +OptiTrack uses a **hardware synchronization (Hardware Sync)** method. One camera is designated as the **Sync Master**, generating timing signals, while the remaining cameras expose simultaneously in sync with this signal. + +- **Ethernet cameras (Prime series)**: The sync signal is embedded in the Ethernet connection itself or delivered through OptiTrack's eSync hub. No separate sync cable is needed. +- **USB cameras (Flex series)**: Cameras are connected via dedicated sync cables in a daisy chain. + +The precision of this synchronization is at the **microsecond (μs) level**, meaning all 30 cameras capture at virtually the exact same moment. + +--- + +## Step 2: PoE — Power and Data Through a Single Cable + +### What Is PoE (Power over Ethernet)? + +OptiTrack Prime series cameras connect via **PoE (Power over Ethernet)**. This technology delivers **both power and data simultaneously** through a single standard Ethernet cable (Cat5e/Cat6). + +![PoE switch and camera connection](optical-mocap-pipeline/images/poe-switch.png) + +### Technical Standards + +| Standard | Max Power | Notes | +|----------|-----------|-------| +| **IEEE 802.3af (PoE)** | 15.4W per port | Sufficient for standard motion capture cameras | +| **IEEE 802.3at (PoE+)** | 25.5W per port | For high-frame-rate cameras or those with high IR LED output | + +OptiTrack cameras typically consume around **5–12W**, well within the PoE standard range. + +### Network Topology + +Cameras are connected in a **star topology**. Each camera connects 1:1 to an individual port on the PoE switch. Daisy chaining (serial connection) is not used. + +
    +
    +
    CAM 1
    +
    CAM 2
    +
    CAM 3
    +
    ···
    +
    CAM N
    +
    + + + + + + + +
    +
    PoE Switch
    + +
    Host PC
    +
    +
    + +For 30 cameras, you would combine a 24-port + 8-port PoE+ switch or use a 48-port switch. When selecting a switch, you must verify the **total PoE power budget** (e.g., 30 cameras × 12W = 360W). + +### Advantages of PoE + +- **One cable does it all** — no need for separate power adapters for each ceiling-mounted camera +- **Clean installation** — cable count is cut in half, simplifying installation and management +- **Centralized power management** — cameras can be collectively powered ON/OFF from the switch + +--- + +## Step 3: What the Camera Sends — 2D Centroids + +Understanding what data is transmitted from cameras to the PC is the key to the pipeline. + +![Motive camera 2D view — markers displayed as bright dots](optical-mocap-pipeline/images/motive-2d-centroid.png) + +### Camera Internal Processing + +Each OptiTrack camera has an **infrared (IR) LED ring** mounted around the camera lens. These LEDs emit infrared light, which is reflected back toward the camera by **retroreflective markers** attached to the actor's body. The camera sensor captures this reflected light as a grayscale IR image. + +The important point here is that the camera **does not send this raw image directly to the PC**. The camera's internal processor handles it first: + +**1. Thresholding** +Only pixels above a certain brightness threshold are kept; the rest are discarded. Since only markers reflecting infrared light appear bright, this process separates markers from the background. + +**2. Blob Detection** +Clusters of bright pixels (blobs) are recognized as individual marker candidates. + +**3. 2D Centroid Calculation** +The **precise center point (centroid)** of each blob is calculated with sub-pixel precision (approximately 0.1 pixels). This uses a weighted average method where the brightness of each pixel within the blob serves as the weight. + +### Data Transmitted to the PC + +In the default tracking mode, what the camera sends to the PC is **2D centroid data**: + +- **(x, y) coordinates** + size information for each marker candidate +- Extremely small data — only a few hundred bytes per frame per camera + +Thanks to this small data volume, **40+ cameras can operate on a single Gigabit Ethernet connection**. Raw grayscale images can also be transmitted (for debugging/visualization), but this requires several MB/s per camera and is not used during normal tracking. + +> In other words, the camera is not "a device that captures and sends video" but rather closer to **"a sensor that calculates marker positions and sends only coordinates."** + +You might wonder — why are motion capture cameras so expensive compared to regular cameras? The answer lies in the process described above. Regular cameras simply send the captured footage as-is, but motion capture cameras have **a dedicated onboard processor** that performs thresholding, blob detection, and sub-pixel centroid calculation in real time at 240–360 frames per second. Each camera essentially contains **a small computer dedicated to image processing**. + +--- + +## Step 4: Calibration — Aligning the Camera Eyes + +There is a mandatory process before 3D reconstruction can happen. The software must determine each camera's **exact position, orientation, and lens characteristics** — this is **calibration**. + +![Calibration wand (left) and ground plane frame (right)](optical-mocap-pipeline/images/calibration-tools.webp) + +### Wanding — Scanning the Space + +An operator walks through the entire capture volume while waving a **calibration wand** — a rod with LEDs or markers attached. Since the distances between the wand's markers are precisely known, when each camera captures the wand over thousands of frames, the software can calculate: + +- **Intrinsic Parameters** — characteristics unique to the camera lens, such as focal length and lens distortion coefficients +- **Extrinsic Parameters** — the camera's exact position and orientation in 3D space + +This calculation uses an optimization algorithm called **Bundle Adjustment**. It simultaneously optimizes all camera parameters based on thousands of 2D observation data points. + +### Ground Plane Setup + +After wanding, an **L-shaped calibration frame (Ground Plane)** is placed on the floor. Three or more markers on this frame define the floor plane and coordinate origin: + +- Where (0, 0, 0) is (the origin) +- Which directions are the X, Y, Z axes +- The height reference of the floor plane + +Once calibration is complete, the software can convert any camera's 2D coordinates into an accurate 3D ray. + +### Calibration Quality + +Motive software displays the **reprojection error** for each camera after calibration. The smaller this value (typically 0.5px or below), the more accurate the calibration. Cameras with large errors are repositioned or recalibrated. + +--- + +## Step 5: 2D → 3D Reconstruction (Triangulation) + +Let's examine how the 2D centroids arriving at the PC are converted into 3D coordinates. + +### Triangulation Principle + +1. Utilizing each camera's **exact 3D position, orientation, and lens characteristics** obtained through calibration +2. Casting a **ray** from the camera's 2D centroid coordinate — a straight line extending from the camera position through the centroid direction into 3D space +3. The **point where rays from 2 or more cameras viewing the same marker intersect** is the marker's 3D coordinate + + + +### In Reality, Rays Don't Intersect Perfectly + +Due to noise, lens distortion, calibration errors, and other factors, rays almost never meet at a single exact point. That's why **Least Squares Optimization** is used: + +- Calculates the 3D coordinate where the sum of distances to all rays is minimized +- The distance between each ray and the reconstructed 3D point is called the **residual** +- Smaller residuals mean better reconstruction quality — in a well-calibrated OptiTrack system, **sub-millimeter residuals (below 0.5mm)** can be expected + +### Impact of Camera Count + +| Number of cameras seeing the marker | Effect | +|--------------------------------------|--------| +| **2** | 3D reconstruction possible (minimum requirement) | +| **3** | Improved accuracy + tracking maintained even if 1 camera is occluded | +| **4 or more** | High accuracy + strong occlusion resilience | + +--- + +## Step 6: Marker Identification and Labeling + +### Marker Suit and Marker Placement + +To turn 3D reconstruction into meaningful motion data, markers must be attached at **precise locations** on the body. + +**Marker Specifications** +- Diameter: Typically **12–19mm** spherical retroreflective markers +- Material: Foam/plastic spheres coated with 3M retroreflective tape +- Attachment: Velcro, double-sided tape, or pre-mounted on dedicated marker suits + +**Markerset Standards** +The number and placement of markers follow standardized **markerset** specifications: + +- **Baseline (37 markers)** — OptiTrack's default full-body markerset. Covers upper body, lower body, and head; the most commonly used for game/video motion capture +- **Baseline + Fingers (~57 markers)** — Extended version adding approximately 20 finger markers +- **Helen Hayes (~15–19 markers)** — Medical/gait analysis standard. A minimal markerset focused on the lower body + +Markers are placed at **anatomical landmarks where bones protrude** (acromion, lateral epicondyle, anterior superior iliac spine, etc.). These locations most accurately reflect bone movement through the skin and minimize skin artifact. + +After 3D reconstruction, each frame produces a **cloud of unnamed 3D points (Point Cloud)**. The process of determining "is this point the left knee marker or the right shoulder marker?" is **labeling**. + +![Markers labeled in Motive](optical-mocap-pipeline/images/marker-labeling.png) + +### Labeling Algorithms + +**Template Matching** +Based on the geometric arrangement of the markerset defined during calibration (e.g., the distance between knee and ankle markers), the current frame's 3D points are compared against the template. + +**Predictive Tracking** +Based on velocity and acceleration from previous frames, the software predicts where each marker will be in the next frame and matches it to the nearest 3D point. + +### Marker Swap Problem + +When two markers pass very close to each other, the software may **swap their labels** — a phenomenon where labels are exchanged. This is one of the most common artifacts in optical mocap. + +Solutions: +- Manually correct labels in post-processing +- Design marker placement to be **asymmetric** for easier differentiation +- Use **active markers** — each marker emits a unique infrared pattern, enabling hardware-level identification and completely eliminating swaps + +### Passive vs Active Markers + +| Category | Passive Markers (Reflective) | Active Markers (Self-emitting) | +|----------|------------------------------|-------------------------------| +| **Principle** | Reflects light from camera IR LEDs | Each marker emits a unique IR pattern | +| **Identification** | Software-based (swap possible) | Hardware-based (no swaps) | +| **Advantages** | Lightweight, inexpensive, easy to attach | Auto-identification, no labeling errors | +| **Disadvantages** | May require post-processing labeling | Heavier, requires battery/power | + +In most entertainment/VTuber production environments, **passive markers** are primarily used. They are lightweight and comfortable, and software performance is good enough that automatic labeling works well in most situations. + +--- + +## Step 7: Skeleton Solving — From Points to a Skeletal Structure + +This step maps labeled 3D markers to a human **skeleton** structure. + +### Pre-Calibration + +Before shooting, the actor strikes a **T-pose** (arms outstretched), and the software calculates bone lengths (arm length, leg length, etc.) and joint positions based on marker locations. + +This is followed by a **ROM (Range of Motion) capture**. + +![ROM capture — calibrating joint ranges through various movements](optical-mocap-pipeline/images/rom-grid.webp) + Through various movements such as arm circles, knee bends, and torso twists, the software precisely calibrates **joint center points and rotation axes**. + +### Real-Time Solving + +During capture, for every frame: + +1. Receives labeled 3D marker coordinates +2. Calculates the **3D position and rotation** of each joint based on marker positions +3. Algorithms such as **Inverse Kinematics** compute a natural skeletal pose +4. Result: **Translation + Rotation** data for all joints across the timeline + +### Rigid Body Tracking (Prop Tracking) + +By attaching **3 or more markers in an asymmetric pattern** to props like swords, guns, or cameras, the software recognizes the marker cluster as a single rigid body, enabling **6DOF (3 axes of position + 3 axes of rotation)** tracking. + +--- + +## Step 8: Real-Time Streaming and Data Output + +### Real-Time Streaming + +![Real-time streaming — sending motion data from Motive to a game engine](optical-mocap-pipeline/images/realtime-streaming.png) + +OptiTrack Motive delivers solved data to external software in real time: + +- **NatNet SDK** — OptiTrack's proprietary protocol, UDP-based low-latency transmission +- **VRPN** — A standard protocol in the VR/mocap field + +This enables real-time character animation in **Unity, Unreal Engine, MotionBuilder**, and more. VTuber live broadcasts are possible thanks to this real-time streaming. + +### Recorded Data Output Formats + +| Format | Use Case | +|--------|----------| +| **FBX** | Skeleton + animation data, compatible with game engines/DCC tools | +| **BVH** | Hierarchical motion data, primarily used for retargeting | +| **C3D** | Raw 3D marker data, biomechanics/research standard | + +--- + +## Step 9: Post-Processing — Refining the Data + +![Post-processing — cleaning up motion data in Motive](optical-mocap-pipeline/images/post-processing.png) + +Data from real-time capture can sometimes be used as-is, but most professional work involves a **post-processing** stage. + +### Gap Filling + +This fills gaps where markers temporarily disappeared due to occlusion using **interpolation**. + +- **Linear interpolation** — Simply connects the frames before and after with a straight line. Suitable for short gaps +- **Spline interpolation** — Fills with smooth curves. Better for maintaining natural movement +- **Pattern-based interpolation** — References data from other takes of the same repeated movement + +The longer the gap, the less accurate the interpolation, which is why minimizing occlusion during shooting is most important. + +### Smoothing and Filtering + +Captured data may contain subtle jitter (high-frequency noise). To remove this: + +- **Butterworth filter** — A low-pass filter that removes noise above a specified frequency +- **Gaussian smoothing** — Reduces jitter using a weighted average of surrounding frames + +However, excessive smoothing can cause loss of **detail and impact** in the motion, so the strength must be set appropriately to avoid blurring sharp movements like sword swings. + +### Marker Swap Correction + +This involves finding sections where marker swaps (described in Step 6) occurred and manually correcting the labels. In Motive, you can visually inspect and correct marker trajectories on the timeline. + +### Retargeting + +The process of applying captured skeleton data to **a character with different proportions**. For example, to apply motion data from a 170cm actor to a 3m giant character or a 150cm child character, joint rotations must be preserved while bone lengths are recalculated to match the target character. MotionBuilder, Maya, Unreal Engine, and others provide retargeting functionality. + +--- + +## Step 10: Common On-Set Issues and Solutions + +Even seemingly perfect optical mocap encounters real-world challenges on set. + +### Stray Reflections + +Infrared light reflecting off objects other than markers creates **ghost markers** — false marker detections. + +- Causes: Metal surfaces, shiny clothing, glasses, watches, floor reflections, etc. +- Solution: Cover reflective surfaces with matte tape, or use **masking** in Motive to tell the software to ignore those areas + +### Marker Detachment + +Markers may fall off the suit or shift position during intense movements. + +- Solution: Carefully check marker attachment before shooting; for vigorous motion capture, combine Velcro + double-sided tape for stronger adhesion +- It's also important to periodically monitor marker condition during sessions + +### Clothing Restrictions + +Actors should ideally wear **light-colored, matte-material clothing** during capture. Black doesn't affect marker reflection, but shiny materials or loose clothing can cause unstable marker positions or stray reflections. Wearing a dedicated mocap suit is the most reliable option. + +### Calibration Maintenance + +Calibration can gradually drift due to temperature changes within the capture volume, camera vibrations, or minor tripod shifts. For extended shooting sessions, it's recommended to **recalibrate** midway, or use Motive's **Continuous Calibration** feature for real-time correction during capture. + +--- + +## Latency — How Long From Movement to Screen? + +Here is the time breakdown for each stage of the pipeline. + +| Stage | Duration | +|-------|----------| +| Camera exposure (at 240fps) | ~4.2ms | +| Camera internal processing (centroid calculation) | ~0.5–1ms | +| Network transmission (PoE → PC) | < 1ms | +| 3D reconstruction + labeling | ~1–2ms | +| Skeleton solving | ~0.5–1ms | +| Streaming output (NatNet) | < 1ms | +| **Total end-to-end latency** | **Approx. 8–14ms (at 240fps)** | + +At 360fps, the exposure time decreases, making latencies **below 7ms** achievable. This level of latency is imperceptible to humans, enabling natural real-time response even in VTuber live broadcasts. + +> Note: Most of the latency comes from the **camera exposure time (frame period)**. This is why higher frame rates result in lower latency. + +--- + +## Full Pipeline Summary + +
    +
    +
    1. Camera Installation · IR Filter · Frame Sync
    +

    30 cameras arranged in a ring, IR pass filters detect infrared only, hardware sync at μs precision

    +
    +
    +
    +
    2. PoE Network
    +

    Single Cat6 cable carries power + data, star topology connection to switch

    +
    +
    +
    +
    3. Camera Onboard Processing → 2D Centroids
    +

    IR LED emission → marker reflection received → thresholding → blob detection → sub-pixel centroid calculation → coordinates transmitted

    +
    +
    +
    +
    4. Calibration
    +

    Wanding to determine camera intrinsic/extrinsic parameters, ground plane to define coordinate system

    +
    +
    +
    +
    5. 2D → 3D Triangulation
    +

    Ray intersection from multiple cameras' 2D coordinates + least squares optimization to reconstruct 3D coordinates

    +
    +
    +
    +
    6. Marker Labeling
    +

    Template matching + predictive tracking to assign marker names to each 3D point

    +
    +
    +
    +
    7. Skeleton Solving
    +

    Based on T-pose + ROM calibration, inverse kinematics to calculate joint positions and rotations

    +
    +
    +
    +
    8. Real-Time Streaming · Data Output
    +

    Real-time transmission to Unity/Unreal/MotionBuilder via NatNet/VRPN, recording in FBX/BVH/C3D

    +
    +
    +
    +
    9. Post-Processing
    +

    Gap filling · smoothing · marker swap correction · retargeting

    +
    +
    +
    +
    Final Output
    +

    Applied to game cinematics · VTuber live · video content (total latency approx. 8–14ms)

    +
    +
    + +The camera does not send raw footage to the PC — instead, the camera calculates marker coordinates internally and sends only those, while the PC reconstructs them in 3D and maps them to a skeleton. This is the core principle of optical motion capture. + +--- + +## Frequently Asked Questions (FAQ) + +**Q. How is an optical motion capture camera different from a regular camera?** + +Regular cameras capture full-color video, but motion capture cameras are specialized for the infrared (IR) spectrum. They illuminate markers with IR LEDs, detect only reflected light, and internally calculate the markers' 2D coordinates, transmitting only coordinate data to the PC. + +**Q. Is there a length limit for PoE cables?** + +According to the Ethernet standard, PoE cables support a **maximum of 100m**. Most motion capture studios easily fall within this range. + +**Q. Is a higher camera frame rate always better?** + +Higher frame rates are advantageous for fast motion tracking and lower latency, but they increase data throughput and may reduce camera resolution. Generally, 120–240fps is sufficient for VTuber live and game motion capture, while 360fps or higher is used for ultra-high-speed motion analysis in sports science and similar fields. + +**Q. How often do marker swaps occur?** + +If the markerset is well-designed and there are enough cameras, swaps during real-time capture are rare. However, the probability increases during fast movements or when markers are close together (such as hand clasping), and these sections are corrected in post-processing. + +**Q. If 2 cameras are enough for triangulation, why install 30?** + +Two cameras is merely the theoretical minimum. In practice, you must account for occlusion (marker obstruction), accuracy variations based on camera angle, and redundancy. With 30 cameras deployed, every marker is always seen by multiple cameras, enabling stable and accurate tracking. + +**Q. How often does calibration need to be done?** + +Typically, calibration is performed once at the start of each shooting day. However, during extended sessions, calibration can drift due to temperature changes or minor camera movement, so recalibration is recommended during 4–6 hour continuous shoots. Using OptiTrack Motive's Continuous Calibration feature allows real-time correction even during capture. + +**Q. Is it not allowed to wear shiny clothing?** + +Because motion capture cameras detect infrared reflections, shiny materials (metal decorations, sequins, glossy synthetic fabrics, etc.) can reflect infrared light and create ghost markers. Wearing a dedicated mocap suit or comfortable clothing made of matte materials is best. + +--- + +If you have further questions about the technical structure of optical motion capture, feel free to ask on our [contact page](/contact). If you'd like to experience it firsthand at Mingle Studio, check out our [services page](/services). diff --git a/blog/posts/optical-mocap-pipeline/images/calibration-tools.webp b/blog/posts/optical-mocap-pipeline/images/calibration-tools.webp new file mode 100644 index 0000000..7a0d0b3 Binary files /dev/null and b/blog/posts/optical-mocap-pipeline/images/calibration-tools.webp differ diff --git a/blog/posts/optical-mocap-pipeline/images/continuous-calibration-web.mp4 b/blog/posts/optical-mocap-pipeline/images/continuous-calibration-web.mp4 new file mode 100644 index 0000000..b92719a Binary files /dev/null and b/blog/posts/optical-mocap-pipeline/images/continuous-calibration-web.mp4 differ diff --git a/blog/posts/optical-mocap-pipeline/images/marker-labeling.png b/blog/posts/optical-mocap-pipeline/images/marker-labeling.png new file mode 100644 index 0000000..4a81f7a Binary files /dev/null and b/blog/posts/optical-mocap-pipeline/images/marker-labeling.png differ diff --git a/blog/posts/optical-mocap-pipeline/images/motive-2d-centroid.png b/blog/posts/optical-mocap-pipeline/images/motive-2d-centroid.png new file mode 100644 index 0000000..30dda34 Binary files /dev/null and b/blog/posts/optical-mocap-pipeline/images/motive-2d-centroid.png differ diff --git a/blog/posts/optical-mocap-pipeline/images/poe-switch.png b/blog/posts/optical-mocap-pipeline/images/poe-switch.png new file mode 100644 index 0000000..f09dff0 Binary files /dev/null and b/blog/posts/optical-mocap-pipeline/images/poe-switch.png differ diff --git a/blog/posts/optical-mocap-pipeline/images/post-processing.png b/blog/posts/optical-mocap-pipeline/images/post-processing.png new file mode 100644 index 0000000..75a4d43 Binary files /dev/null and b/blog/posts/optical-mocap-pipeline/images/post-processing.png differ diff --git a/blog/posts/optical-mocap-pipeline/images/realtime-streaming.png b/blog/posts/optical-mocap-pipeline/images/realtime-streaming.png new file mode 100644 index 0000000..2d30cae Binary files /dev/null and b/blog/posts/optical-mocap-pipeline/images/realtime-streaming.png differ diff --git a/blog/posts/optical-mocap-pipeline/images/rom-1.webp b/blog/posts/optical-mocap-pipeline/images/rom-1.webp new file mode 100644 index 0000000..bcb9c10 Binary files /dev/null and b/blog/posts/optical-mocap-pipeline/images/rom-1.webp differ diff --git a/blog/posts/optical-mocap-pipeline/images/rom-2.webp b/blog/posts/optical-mocap-pipeline/images/rom-2.webp new file mode 100644 index 0000000..607ec01 Binary files /dev/null and b/blog/posts/optical-mocap-pipeline/images/rom-2.webp differ diff --git a/blog/posts/optical-mocap-pipeline/images/rom-3.webp b/blog/posts/optical-mocap-pipeline/images/rom-3.webp new file mode 100644 index 0000000..75cbbaf Binary files /dev/null and b/blog/posts/optical-mocap-pipeline/images/rom-3.webp differ diff --git a/blog/posts/optical-mocap-pipeline/images/rom-4.webp b/blog/posts/optical-mocap-pipeline/images/rom-4.webp new file mode 100644 index 0000000..4ad423e Binary files /dev/null and b/blog/posts/optical-mocap-pipeline/images/rom-4.webp differ diff --git a/blog/posts/optical-mocap-pipeline/images/rom-grid.webp b/blog/posts/optical-mocap-pipeline/images/rom-grid.webp new file mode 100644 index 0000000..e2d4f48 Binary files /dev/null and b/blog/posts/optical-mocap-pipeline/images/rom-grid.webp differ diff --git a/blog/posts/optical-mocap-pipeline/images/thumbnail.webp b/blog/posts/optical-mocap-pipeline/images/thumbnail.webp new file mode 100644 index 0000000..4a81f7a Binary files /dev/null and b/blog/posts/optical-mocap-pipeline/images/thumbnail.webp differ diff --git a/blog/posts/optical-mocap-pipeline/ja.md b/blog/posts/optical-mocap-pipeline/ja.md new file mode 100644 index 0000000..e59f1e6 --- /dev/null +++ b/blog/posts/optical-mocap-pipeline/ja.md @@ -0,0 +1,484 @@ +--- +title: "光学式モーションキャプチャーパイプライン完全解剖 ― カメラからモーションデータまで" +description: "光学式モーションキャプチャーの技術パイプライン全体を詳しく解説します。カメラ設置、PoEネットワーク、2Dセントロイド、キャリブレーション、3D復元、スケルトンソルビング、後処理、現場の実務課題まで10ステップで詳細に取り上げます。" +date: "2026-04-05" +category: "モーションキャプチャー技術" +thumbnail: "images/thumbnail.webp" +--- + +モーションキャプチャースタジオで俳優がスーツを着て動くと、画面上のキャラクターがリアルタイムで追従します。一見シンプルに見えますが、その裏では**カメラハードウェア → ネットワーク伝送 → 2D映像処理 → 3D復元 → スケルトンソルビング → リアルタイムストリーミング**という精密な技術パイプラインが動いています。 + +この記事では、光学式モーションキャプチャー(OptiTrack基準)のパイプライン全体をステップごとに解剖します。 + +--- + +## ステップ1:カメラの設置と配置戦略 + +光学式モーションキャプチャーの最初のステップは、カメラを**どこに、どのように配置するか**です。 + +![ミングルスタジオ モーションキャプチャー空間](/images/studio/모션캡쳐%20공간%20001.webp) + +### 配置の原則 + +- **高さ**:通常2〜3mの高さに設置し、約30度下向きに角度を調整します +- **配置形態**:キャプチャーボリューム(撮影空間)の周囲を囲むリング(Ring)形態で配置 +- **2段配置**:高い位置と低い位置にカメラを交互に配置すると、垂直方向のカバレッジが向上します +- **オーバーラップ(重複)**:キャプチャーボリューム内のすべてのポイントが**最低3台以上のカメラ**に同時に見える必要があります。三角測量には最低2台が必要ですが、3台以上になると精度とオクルージョン対応力が大幅に向上します + +### カメラ台数と精度の関係 + +カメラの台数が多いほど: +- 死角が減る → オクルージョン発生確率の減少 +- 同じマーカーを見るカメラが増える → 三角測量精度の向上 +- 一部のカメラに問題が生じても他のカメラが補完(冗長性) + +ミングルスタジオでは**OptiTrack Prime 17 × 16台 + Prime 13 × 14台**、合計30台を8m × 7mの空間に配置し、360度の死角を最小化しています。 + +### IRパスフィルター ― 赤外線だけを見る目 + +モーションキャプチャーカメラのレンズ前面には**IRパスフィルター(赤外線通過フィルター)**が装着されています。このフィルターは可視光線を遮断し、赤外線波長(850nm付近)のみを通過させます。これにより蛍光灯、太陽光、モニターの光など一般的な照明による干渉が根本的に遮断され、カメラは**IR LEDに反射したマーカーの光のみ**を検出できます。 + +撮影空間の照明を完全に消す必要がないのもこのフィルターのおかげです。ただし直射日光や強いIR成分を含む照明は干渉を引き起こす可能性があるため、スタジオ環境ではIR干渉の少ない照明を使用します。 + +### フレーム同期 ― 30台のカメラが同時に撮影する方法 + +三角測量を正確に行うには、すべてのカメラが**まったく同じ瞬間**にシャッターを切る必要があります。カメラごとにバラバラのタイミングで撮影すると、高速移動するマーカーの位置がカメラごとに異なり、3D復元が不正確になります。 + +OptiTrackは**ハードウェア同期(Hardware Sync)**方式を採用しています。1台のカメラが**Sync Master(同期マスター)**に指定されてタイミング信号を生成し、残りのカメラがこの信号に合わせて同時に露光します。 + +- **Ethernetカメラ(Primeシリーズ)**:同期信号がEthernet接続自体に内蔵されているか、OptiTrackのeSyncハブを通じて伝達されます。別途の同期ケーブルは不要です。 +- **USBカメラ(Flexシリーズ)**:カメラ間を専用同期ケーブルでデイジーチェーン接続します。 + +この同期の精度は**マイクロ秒(μs)単位**で、30台のカメラが事実上完全に同じ瞬間に撮影します。 + +--- + +## ステップ2:PoE ― 1本のケーブルで電力とデータを同時に + +### PoE(Power over Ethernet)とは? + +OptiTrack Primeシリーズのカメラは**PoE(Power over Ethernet)**方式で接続されます。標準のEthernetケーブル(Cat5e/Cat6)1本で**電力供給とデータ伝送を同時に**行う技術です。 + +![PoEスイッチとカメラの接続](optical-mocap-pipeline/images/poe-switch.png) + +### 技術規格 + +| 規格 | 最大電力 | 備考 | +|------|---------|------| +| **IEEE 802.3af (PoE)** | ポートあたり15.4W | 基本的なモーションキャプチャーカメラに十分 | +| **IEEE 802.3at (PoE+)** | ポートあたり25.5W | 高フレームレートカメラやIR LED出力が高い場合 | + +OptiTrackカメラは通常**5〜12W**程度の消費電力なので、PoE規格の範囲内で十分に動作します。 + +### ネットワークトポロジー + +カメラは**スター(Star)トポロジー**で接続されます。各カメラがPoEスイッチの個別ポートに1対1で接続される構造です。デイジーチェーン(直列接続)は使用しません。 + +
    +
    +
    CAM 1
    +
    CAM 2
    +
    CAM 3
    +
    ···
    +
    CAM N
    +
    + + + + + + + +
    +
    PoEスイッチ
    + +
    ホストPC
    +
    +
    + +30台のカメラの場合、24ポート + 8ポートのPoE+スイッチを組み合わせるか、48ポートスイッチを使用します。スイッチ選択時には**PoE総電力バジェット**(例:30台 × 12W = 360W)を確認する必要があります。 + +### PoEの利点 + +- **ケーブル1本で解決** ― 天井に設置されたカメラごとに電源アダプターを別途接続する必要なし +- **すっきりした施工** ― ケーブル数が半分に削減され、設置と管理が簡便 +- **集中電源管理** ― スイッチからカメラの電源を一括ON/OFF可能 + +--- + +## ステップ3:カメラが送るデータ ― 2Dセントロイド + +カメラからPCへ送信されるデータが何かを理解することが、パイプラインの核心です。 + +![Motiveカメラ2Dビュー ― マーカーが明るい点として表示されている様子](optical-mocap-pipeline/images/motive-2d-centroid.png) + +### カメラ内部の処理過程 + +各OptiTrackカメラには、カメラレンズの周囲に**赤外線(IR)LEDリング**が装着されています。このLEDが赤外線を照射すると、俳優の身体に取り付けられた**再帰反射マーカー**が光をカメラ方向に反射します。カメラセンサーはこの反射光をグレースケールIR画像として撮影します。 + +ここで重要なのは、カメラがこの画像を**そのままPCに送信するわけではない**ということです。カメラ内部のプロセッサーがまず処理を行います: + +**1. スレッショルディング(Thresholding)** +一定基準(閾値)以上の明るさのピクセルのみを残し、残りを除去します。赤外線を反射するマーカーだけが明るく光るため、背景とマーカーを分離する処理です。 + +**2. ブロブ検出(Blob Detection)** +明るいピクセルが集まっている領域(ブロブ)を1つのマーカー候補として認識します。 + +**3. 2Dセントロイド計算** +各ブロブの**正確な中心点(セントロイド)**をサブピクセル精度(約0.1ピクセル)で計算します。ブロブ内の各ピクセルの明るさを重みとして使用する加重平均方式です。 + +### PCに送信されるデータ + +デフォルトのトラッキングモードでカメラがPCに送るのは**2Dセントロイドデータ**です: + +- 各マーカー候補の**(x, y)座標** + サイズ情報 +- カメラ1台あたり1フレームあたり数百バイトの非常に小さなデータ + +このように小さなデータ量のおかげで、**40台以上のカメラでもギガビットEthernet1本で十分**です。生のグレースケール画像も送信可能ですが(デバッグ/可視化用)、その場合カメラあたり数MB/sが必要なため、通常のトラッキングでは使用しません。 + +> つまり、カメラは「映像を撮って送る装置」ではなく、**「マーカー位置を計算して座標だけを送るセンサー」**に近い存在です。 + +ここで一つ疑問が生じるかもしれません ― なぜモーションキャプチャーカメラは通常のカメラと比べてあれほど高価なのか? その理由は上で説明した処理にあります。通常のカメラは撮影した映像をそのまま送って終わりですが、モーションキャプチャーカメラは**内部に専用プロセッサーを搭載**しており、スレッショルディング、ブロブ検出、サブピクセルセントロイド計算までを毎秒240〜360フレームでリアルタイム処理します。カメラ1台が事実上**映像処理専用の小型コンピューター**を内蔵しているのです。 + +--- + +## ステップ4:キャリブレーション ― カメラの目を揃える + +3D復元の前に必ず経なければならないプロセスがあります。ソフトウェアが各カメラの**正確な位置、方向、レンズ特性**を把握する**キャリブレーション(Calibration)**です。 + +![キャリブレーションワンド(左)とグラウンドプレーンフレーム(右)](optical-mocap-pipeline/images/calibration-tools.webp) + +### ワンディング(Wanding) ― 空間をスキャンする + +オペレーターがLEDまたはマーカーが取り付けられた**キャリブレーションワンド(Wand、棒)**を持ち、キャプチャーボリューム全体を歩き回りながら振ります。ワンドのマーカー間の距離は正確に分かっているため、各カメラがワンドを数千フレームにわたって撮影すると、ソフトウェアは以下を計算できます: + +- **内部パラメータ(Intrinsic Parameters)** ― 焦点距離、レンズ歪み係数などカメラレンズ固有の特性 +- **外部パラメータ(Extrinsic Parameters)** ― 3D空間におけるカメラの正確な位置と方向 + +この計算には**バンドル調整(Bundle Adjustment)**という最適化アルゴリズムが使用されます。数千の2D観測データに基づいて、すべてのカメラのパラメータを同時に最適化するプロセスです。 + +### グラウンドプレーンの設定 + +ワンディングが完了したら、床に**L字型のキャリブレーションフレーム(Ground Plane)**を置きます。このフレームの3つ以上のマーカーが床面と座標原点を定義します: + +- どこが(0, 0, 0)か(原点) +- どの方向がX、Y、Z軸か +- 床面の高さ基準 + +キャリブレーションが完了すると、ソフトウェアはどのカメラの2D座標でも正確な3D光線に変換できるようになります。 + +### キャリブレーション品質 + +Motiveソフトウェアはキャリブレーション後、各カメラの**再投影誤差(Reprojection Error)**を表示します。この値が小さいほど(通常0.5px以下)、キャリブレーションが正確であることを意味します。誤差が大きいカメラは位置を調整するか再キャリブレーションします。 + +--- + +## ステップ5:2D → 3D復元(三角測量) + +PCに到着した2Dセントロイドがどのように3D座標に変換されるかを見ていきます。 + +### 三角測量(Triangulation)の原理 + +1. キャリブレーションで取得した各カメラの**正確な3D位置、方向、レンズ特性**を活用します +2. カメラの2Dセントロイド座標から**光線(Ray)**を射出します ― カメラ位置からセントロイド方向に3D空間へ伸びる直線 +3. 同じマーカーを見た**2台以上のカメラから射出された光線が交差する点**がマーカーの3D座標です + + + +### 実際には完全に交差しない + +ノイズ、レンズ歪み、キャリブレーション誤差などにより、光線が正確に1点で交わることはほぼありません。そのため**最小二乗法(Least Squares Optimization)**を使用します: + +- すべての光線までの距離の合計が最小になる3D座標を計算 +- この時、各光線と復元された3Dポイントとの距離を**残差(Residual)**と呼びます +- 残差が小さいほど復元品質が高い ― 適切にキャリブレーションされたOptiTrackシステムでは**サブミリメートル(0.5mm以下)レベルの残差**が期待できます + +### カメラ台数の影響 + +| 該当マーカーを見ているカメラ台数 | 効果 | +|-------------------------------|------| +| **2台** | 3D復元可能(最低条件) | +| **3台** | 精度向上 + 1台が遮られてもトラッキング維持 | +| **4台以上** | 高精度 + 強力なオクルージョン耐性 | + +--- + +## ステップ6:マーカー識別とラベリング + +### マーカースーツとマーカー配置 + +3D復元を意味のあるモーションデータにするには、マーカーが身体の**正確な位置**に取り付けられている必要があります。 + +**マーカー仕様** +- 直径:通常**12〜19mm**の球形再帰反射マーカーを使用 +- 素材:3M再帰反射テープでコーティングされたフォーム/プラスチック球 +- 取り付け:ベルクロ(面ファスナー)、両面テープ、または専用マーカースーツにあらかじめ装着 + +**マーカーセット規格** +マーカーをどこに何個付けるかは標準化された**マーカーセット(Markerset)**規格に従います: + +- **Baseline(37マーカー)** ― OptiTrack基本フルボディマーカーセット。上半身、下半身、頭部をカバーし、ゲーム/映像モーションキャプチャーで最も多く使用 +- **Baseline + Fingers(約57マーカー)** ― 上記に指マーカー約20個を追加した拡張版 +- **Helen Hayes(約15〜19マーカー)** ― 医療/歩行分析の標準。下半身中心の最小マーカーセット + +マーカーは**骨が突出した解剖学的ランドマーク**(肩峰、外側上顆、上前腸骨棘など)に取り付けます。これらの位置は皮膚上で骨の動きを最も正確に反映し、スキンアーティファクト(皮膚の滑り)が最小化されるポイントです。 + +3D復元が完了すると、各フレームに**名前のない3Dポイントの群(Point Cloud)**が生成されます。「このポイントは左膝マーカーなのか、右肩マーカーなのか」を判別するプロセスが**ラベリング(Labeling)**です。 + +![Motiveでマーカーがラベリングされた様子](optical-mocap-pipeline/images/marker-labeling.png) + +### ラベリングアルゴリズム + +**テンプレートマッチング(Template Matching)** +キャリブレーション時に定義されたマーカーセットの幾何学的配置(例:膝と足首のマーカー間距離)を基準に、現在のフレームの3Dポイントをテンプレートと照合します。 + +**予測追跡(Predictive Tracking)** +前のフレームの速度・加速度に基づいて、次のフレームで各マーカーがどこにあるかを予測し、最も近い3Dポイントとマッチングします。 + +### マーカースワップ(Swap)問題 + +2つのマーカーが互いに非常に近くを通過する際、ソフトウェアが2つのマーカーの**ラベルを入れ替えてしまう現象**です。光学式モーキャプで最もよく見られるアーティファクトの一つです。 + +解決方法: +- 後処理で手動でラベルを修正 +- マーカー配置を**非対称**に設計して区別を容易にする +- **アクティブマーカー(Active Marker)**の使用 ― 各マーカーが固有の赤外線パターンを発光し、ハードウェアレベルで識別、スワップを根本的に防止 + +### パッシブ vs アクティブマーカー + +| 区分 | パッシブマーカー(反射型) | アクティブマーカー(発光型) | +|------|--------------------------|---------------------------| +| **原理** | カメラIR LEDの光を反射 | マーカー自体が固有のIRパターンを発光 | +| **識別** | ソフトウェアベース(スワップの可能性あり) | ハードウェアベース(スワップなし) | +| **利点** | 軽量で安価、取り付け簡単 | 自動識別、ラベリングエラーなし | +| **欠点** | ラベリング後処理が必要な場合あり | 重く、バッテリー/電源が必要 | + +ほとんどのエンターテインメント/VTuber現場では**パッシブマーカー**が主に使用されています。軽くて快適であり、ソフトウェアの性能が十分に高いため、ほとんどの状況で自動ラベリングがうまく機能するからです。 + +--- + +## ステップ7:スケルトンソルビング ― 点から骨格へ + +ラベリングされた3Dマーカーを人間の**骨格(Skeleton)**構造にマッピングするステップです。 + +### 事前キャリブレーション + +撮影前に俳優が**Tポーズ**(両腕を広げた姿勢)をとると、ソフトウェアがマーカー位置を基に各骨の長さ(腕の長さ、脚の長さなど)と関節位置を計算します。 + +続いて**ROM(Range of Motion)キャプチャー**を実行します。 + +![ROMキャプチャー ― さまざまな動きで関節範囲を補正する過程](optical-mocap-pipeline/images/rom-grid.webp) + 腕回し、膝曲げ、上半身ひねりなどさまざまな動きを通じて、ソフトウェアが**関節中心点と回転軸**を精密に補正します。 + +### リアルタイムソルビング + +撮影中は毎フレームごとに: + +1. ラベリングされた3Dマーカー座標を受け取る +2. マーカー位置を基に各関節の**3D位置と回転値(Rotation)**を計算 +3. **逆運動学(Inverse Kinematics)**などのアルゴリズムで自然な骨格ポーズを算出 +4. 結果:タイムライン上のすべての関節に対する**位置(Translation)+ 回転(Rotation)**データ + +### リジッドボディトラッキング(小道具追跡) + +刀、銃、カメラなどの小道具に**3つ以上のマーカーを非対称に取り付ける**と、ソフトウェアがそのマーカークラスターを1つの剛体(Rigid Body)として認識し、**6DOF(位置3軸 + 回転3軸)**トラッキングが可能になります。 + +--- + +## ステップ8:リアルタイムストリーミングとデータ出力 + +### リアルタイムストリーミング + +![リアルタイムストリーミング ― Motiveからゲームエンジンへモーションデータを送信](optical-mocap-pipeline/images/realtime-streaming.png) + +OptiTrack Motiveはソルビングされたデータをリアルタイムで外部ソフトウェアに伝達します: + +- **NatNet SDK** ― OptiTrack独自のプロトコル、UDPベースの低遅延伝送 +- **VRPN** ― VR/モーキャプ分野の標準プロトコル + +これにより**Unity、Unreal Engine、MotionBuilder**などでリアルタイムにキャラクターを動かすことができます。VTuberのライブ配信が可能なのも、このリアルタイムストリーミングのおかげです。 + +### 録画データ出力フォーマット + +| フォーマット | 用途 | +|------------|------| +| **FBX** | スケルトン + アニメーションデータ、ゲームエンジン/DCCツール互換 | +| **BVH** | 階層的モーションデータ、リターゲティングに主に使用 | +| **C3D** | 生の3Dマーカーデータ、バイオメカニクス/研究標準 | + +--- + +## ステップ9:後処理 ― データを整える過程 + +![後処理作業 ― Motiveでモーションデータを整理する過程](optical-mocap-pipeline/images/post-processing.png) + +リアルタイムキャプチャーで得たデータはそのまま最終成果物として使える場合もありますが、ほとんどのプロの作業では**後処理(Post-Processing)**過程を経ます。 + +### ギャップフィリング(Gap Filling) + +オクルージョンによりマーカーが一時的に消えた区間を**補間(Interpolation)**で埋める作業です。 + +- **線形補間(Linear)** ― 単純に前後のフレームを直線でつなぐ。短いギャップに適合 +- **スプライン補間(Spline)** ― 曲線でなめらかに埋める。自然な動きの維持に有利 +- **パターンベース補間** ― 同じ動きを繰り返した別テイクのデータを参照して埋める + +ギャップが長いほど補間の精度が落ちるため、撮影時にオクルージョンを最小化することが最も重要です。 + +### スムージング(Smoothing)とフィルタリング + +キャプチャーされたデータには微細な振動(高周波ノイズ)が含まれることがあります。これを除去するために: + +- **バターワースフィルター(Butterworth Filter)** ― 指定した周波数以上のノイズを除去するローパスフィルター +- **ガウシアンスムージング** ― 周辺フレームの加重平均で振動を緩和 + +ただし過度なスムージングは動きの**ディテールとインパクト**を失わせるため、剣を振るう瞬間の鋭い動きまでぼやけないよう、適切な強度を設定する必要があります。 + +### マーカースワップ修正 + +ステップ6で説明したマーカースワップが発生した区間を見つけて、ラベルを手動で修正する作業です。Motiveではタイムライン上でマーカーの軌跡を視覚的に確認しながら修正できます。 + +### リターゲティング(Retargeting) + +キャプチャーされたスケルトンデータを**異なるプロポーションのキャラクター**に適用するプロセスです。例えば身長170cmの俳優のモーションデータを身長3mの巨人キャラクターや150cmの子供キャラクターに合わせるには、関節の回転を維持しながら骨の長さを対象キャラクターに合わせて再計算する必要があります。MotionBuilder、Maya、Unreal Engineなどがリターゲティング機能を提供しています。 + +--- + +## ステップ10:現場で頻発する問題と対応 + +技術的に完璧に見える光学式モーキャプにも、実務現場で直面する問題があります。 + +### 反射ノイズ(Stray Reflections) + +マーカー以外の物体から赤外線が反射され、**偽マーカー(Ghost Marker)**が検出される現象です。 + +- 原因:金属表面、光沢のある服、メガネ、腕時計、床の反射など +- 対応:反射が起きる表面をマットテープで覆うか、Motiveで該当エリアを**マスキング(Masking)**処理してソフトウェアが無視するよう設定 + +### マーカー脱落 + +激しい動きの最中にマーカーがスーツから外れたり位置がずれたりするケースです。 + +- 対応:撮影前にマーカーの取り付け状態を丁寧に確認し、激しいモーションキャプチャー時にはベルクロ + 両面テープを併用して固定力を高めます +- 途中でモニタリングしながらマーカーの状態をチェックすることも重要です + +### 衣装の制約 + +撮影時に俳優が着る服は**明るい色・マット素材**が理想的です。黒色はマーカーの反射に影響しませんが、光沢のある素材やゆるい服はマーカー位置が不安定になったり反射ノイズを引き起こす可能性があります。専用モーキャプスーツを着用するのが最も安定的です。 + +### キャリブレーションの維持 + +キャプチャーボリューム内の温度変化、カメラの振動、三脚の微細な移動などにより、キャリブレーションが徐々にずれることがあります。長時間撮影時には途中で**再キャリブレーション**するか、Motiveの**Continuous Calibration(連続キャリブレーション)**機能でリアルタイム補正することをお勧めします。 + +--- + +## レイテンシー ― 動きから画面まで何ミリ秒? + +パイプライン各ステップの所要時間です。 + +| ステップ | 所要時間 | +|---------|---------| +| カメラ露光(240fps基準) | 約4.2ms | +| カメラ内部処理(セントロイド計算) | 約0.5〜1ms | +| ネットワーク伝送(PoE → PC) | < 1ms | +| 3D復元 + ラベリング | 約1〜2ms | +| スケルトンソルビング | 約0.5〜1ms | +| ストリーミング出力(NatNet) | < 1ms | +| **総エンドツーエンドレイテンシー** | **約8〜14ms(240fps基準)** | + +360fpsでは露光時間が短縮され、**7ms以下**まで可能です。このレベルのレイテンシーは人間が体感するのが難しい水準で、VTuberのライブ配信でも自然なリアルタイム反応が可能です。 + +> 参考:レイテンシーの大部分は**カメラ露光時間(フレーム周期)**が占めています。フレームレートが高いほどレイテンシーが下がるのはこのためです。 + +--- + +## パイプライン全体のまとめ + +
    +
    +
    1. カメラ設置・IRフィルター・フレーム同期
    +

    30台のカメラをリング形態で配置、IRパスフィルターで赤外線のみ検出、ハードウェアシンクでμs単位の同期

    +
    +
    +
    +
    2. PoEネットワーク
    +

    Cat6ケーブル1本で電力 + データ同時伝送、スタートポロジーでスイッチに接続

    +
    +
    +
    +
    3. カメラオンボード処理 → 2Dセントロイド
    +

    IR LED照射 → マーカー反射光受信 → スレッショルディング → ブロブ検出 → サブピクセルセントロイド計算 → 座標のみ送信

    +
    +
    +
    +
    4. キャリブレーション
    +

    ワンディングでカメラ内部/外部パラメータを算出、グラウンドプレーンで座標系を定義

    +
    +
    +
    +
    5. 2D → 3D三角測量
    +

    複数カメラの2D座標から光線交差 + 最小二乗法で3D座標を復元

    +
    +
    +
    +
    6. マーカーラベリング
    +

    テンプレートマッチング + 予測追跡で各3Dポイントにマーカー名を付与

    +
    +
    +
    +
    7. スケルトンソルビング
    +

    Tポーズ + ROMキャリブレーション基盤、逆運動学で関節の位置・回転を計算

    +
    +
    +
    +
    8. リアルタイムストリーミング・データ出力
    +

    NatNet/VRPNでUnity/Unreal/MotionBuilderにリアルタイム伝送、FBX/BVH/C3D録画

    +
    +
    +
    +
    9. 後処理
    +

    ギャップフィリング・スムージング・マーカースワップ修正・リターゲティング

    +
    +
    +
    +
    最終成果物
    +

    ゲームシネマティック・VTuberライブ・映像コンテンツに適用(総レイテンシー約8〜14ms)

    +
    +
    + +カメラが撮影した映像がそのままPCに送られるのではなく、カメラが自らマーカー座標を計算して送信し、PCがこの座標を3Dに復元してスケルトンにマッピングする ― これが光学式モーションキャプチャーの核心原理です。 + +--- + +## よくある質問(FAQ) + +**Q. 光学式モーションキャプチャーカメラは一般のカメラと何が違いますか?** + +一般のカメラはフルカラー映像を撮影しますが、モーションキャプチャーカメラは赤外線(IR)領域に特化しています。IR LEDでマーカーを照らし反射光のみを検出し、カメラ内部でマーカーの2D座標を直接計算して座標データのみをPCに送信します。 + +**Q. PoEケーブルの長さに制限はありますか?** + +Ethernet規格に従い、PoEケーブルは**最大100m**までサポートされています。ほとんどのモーションキャプチャースタジオではこの範囲を十分に満たします。 + +**Q. カメラのフレームレートは高ければ高いほど良いですか?** + +フレームレートが高いと高速な動きの追跡と低レイテンシーに有利ですが、データ処理量が増え、カメラの解像度が低下する可能性があります。一般的にVTuberライブやゲームモーションキャプチャーでは120〜240fpsで十分であり、スポーツ科学などの超高速動作分析では360fps以上を使用します。 + +**Q. マーカースワップはどのくらいの頻度で発生しますか?** + +マーカーセットが適切に設計されていてカメラ台数が十分であれば、リアルタイム撮影中のスワップは稀にしか発生しません。ただし高速な動きやマーカー間の距離が近い動作(手を合わせるなど)では発生確率が上がり、このような区間は後処理で修正します。 + +**Q. 三角測量に2台で十分なのに、なぜ30台も設置するのですか?** + +2台は理論的な最小値にすぎません。実際にはオクルージョン(マーカーの遮蔽)、カメラ角度による精度の差、冗長性の確保などを考慮する必要があります。30台を配置すればどのマーカーも常に多数のカメラから見えるため、安定的で正確なトラッキングが可能です。 + +**Q. キャリブレーションはどのくらいの頻度で行う必要がありますか?** + +一般的に撮影日の開始前に1回実施します。ただし長時間撮影時には温度変化やカメラの微細な移動でキャリブレーションがずれる可能性があるため、4〜6時間の連続撮影時には途中で再キャリブレーションを推奨します。OptiTrack MotiveのContinuous Calibration機能を使用すれば、撮影中でもリアルタイムで補正が可能です。 + +**Q. 光沢のある服を着てはいけないのですか?** + +モーションキャプチャーカメラは赤外線の反射を検出するため、光沢のある素材(金属装飾、スパンコール、光沢のある合成繊維など)は赤外線を反射して偽マーカー(Ghost Marker)を作る可能性があります。専用モーキャプスーツやマット素材の快適な服を着用するのが最善です。 + +--- + +光学式モーションキャプチャーの技術的な構造についてさらにご質問がありましたら、[お問い合わせページ](/contact)からお気軽にご質問ください。ミングルスタジオで直接体験されたい方は[サービス案内](/services)をご覧ください。 diff --git a/blog/posts/optical-mocap-pipeline/ko.md b/blog/posts/optical-mocap-pipeline/ko.md new file mode 100644 index 0000000..8d3d276 --- /dev/null +++ b/blog/posts/optical-mocap-pipeline/ko.md @@ -0,0 +1,484 @@ +--- +title: "광학식 모션캡처 파이프라인 완전 해부 — 카메라부터 모션 데이터까지" +description: "광학식 모션캡처의 전체 기술 파이프라인을 심화 해설합니다. 카메라 설치, PoE 네트워크, 2D 센트로이드, 캘리브레이션, 3D 복원, 스켈레톤 솔빙, 후처리, 현장 실무 이슈까지 10단계로 상세히 다룹니다." +date: "2026-04-05" +category: "모션캡처 기술" +thumbnail: "images/thumbnail.webp" +--- + +모션캡처 스튜디오에서 배우가 슈트를 입고 움직이면 화면 속 캐릭터가 실시간으로 따라 움직입니다. 간단해 보이지만, 그 뒤에는 **카메라 하드웨어 → 네트워크 전송 → 2D 영상 처리 → 3D 복원 → 스켈레톤 솔빙 → 실시간 스트리밍**이라는 정밀한 기술 파이프라인이 돌아가고 있습니다. + +이 글에서는 광학식 모션캡처(OptiTrack 기준)의 전체 파이프라인을 단계별로 해부합니다. + +--- + +## 1단계: 카메라 설치와 배치 전략 + +광학식 모션캡처의 첫 번째 단계는 카메라를 **어디에, 어떻게 배치하느냐**입니다. + +![밍글 스튜디오 모션캡처 공간](/images/studio/모션캡쳐%20공간%20001.webp) + +### 배치 원칙 + +- **높이**: 보통 2~3m 높이에 설치하며, 30도 정도 아래를 향하도록 각도를 잡습니다 +- **배치 형태**: 캡처 볼륨(촬영 공간) 둘레를 감싸는 링(Ring) 형태로 배치 +- **2단 배치**: 높은 위치와 낮은 위치에 카메라를 교차 배치하면 수직 방향 커버리지가 향상됩니다 +- **중첩(Overlap)**: 캡처 볼륨 내의 모든 지점이 **최소 3대 이상의 카메라**에 동시에 보여야 합니다. 삼각측량에는 최소 2대가 필요하지만, 3대 이상이면 정확도와 오클루전 대응력이 크게 올라갑니다 + +### 카메라 수와 정확도의 관계 + +카메라 수가 많을수록: +- 사각지대가 줄어듦 → 오클루전 발생 확률 감소 +- 같은 마커를 보는 카메라가 많아짐 → 삼각측량 정확도 향상 +- 일부 카메라에 문제가 생겨도 다른 카메라가 보완 (리던던시) + +밍글 스튜디오의 경우 **OptiTrack Prime 17 × 16대 + Prime 13 × 14대**, 총 30대를 8m × 7m 공간에 배치하여 360도 사각지대를 최소화하고 있습니다. + +### IR 패스 필터 — 적외선만 보는 눈 + +모션캡처 카메라 렌즈 앞에는 **IR 패스 필터(적외선 통과 필터)**가 장착되어 있습니다. 이 필터는 가시광선을 차단하고 적외선 파장(850nm 부근)만 통과시킵니다. 덕분에 형광등, 햇빛, 모니터 빛 등 일반 조명에 의한 간섭이 원천 차단되고, 카메라는 오직 **IR LED에 반사된 마커 빛만** 감지할 수 있습니다. + +촬영 공간의 조명을 완전히 끌 필요가 없는 이유도 이 필터 덕분입니다. 다만 직사광선이나 강한 IR 성분을 포함한 조명은 간섭을 일으킬 수 있어, 스튜디오 환경에서는 IR 간섭이 적은 조명을 사용합니다. + +### 프레임 동기화 — 30대 카메라가 동시에 찍는 법 + +삼각측량이 정확하려면 모든 카메라가 **정확히 같은 순간**에 셔터를 눌러야 합니다. 카메라마다 제각각 다른 타이밍에 촬영하면 빠르게 움직이는 마커의 위치가 카메라별로 달라져 3D 복원이 부정확해집니다. + +OptiTrack은 **하드웨어 동기화(Hardware Sync)** 방식을 사용합니다. 한 대의 카메라가 **Sync Master(동기 마스터)**로 지정되어 타이밍 신호를 생성하고, 나머지 카메라들이 이 신호에 맞춰 동시에 노출합니다. + +- **Ethernet 카메라(Prime 시리즈)**: 동기 신호가 이더넷 연결 자체에 내장되어 있거나, OptiTrack의 eSync 허브를 통해 전달됩니다. 별도 동기 케이블이 필요 없습니다. +- **USB 카메라(Flex 시리즈)**: 카메라 간에 전용 동기 케이블을 데이지 체인으로 연결합니다. + +이 동기화의 정밀도는 **마이크로초(μs) 단위**로, 30대 카메라가 사실상 완벽히 같은 순간에 촬영합니다. + +--- + +## 2단계: PoE — 하나의 케이블로 전력과 데이터를 동시에 + +### PoE(Power over Ethernet)란? + +OptiTrack Prime 시리즈 카메라는 **PoE(Power over Ethernet)** 방식으로 연결됩니다. 일반 이더넷 케이블(Cat5e/Cat6) 한 줄로 **전력 공급과 데이터 전송을 동시에** 처리하는 기술입니다. + +![PoE 스위치와 카메라 연결](optical-mocap-pipeline/images/poe-switch.png) + +### 기술 표준 + +| 표준 | 최대 전력 | 비고 | +|------|---------|------| +| **IEEE 802.3af (PoE)** | 포트당 15.4W | 기본 모션캡처 카메라에 충분 | +| **IEEE 802.3at (PoE+)** | 포트당 25.5W | 고프레임레이트 카메라나 IR LED 출력이 높은 경우 | + +OptiTrack 카메라는 보통 **5~12W** 정도를 소비하므로 PoE 표준 범위 내에서 충분히 동작합니다. + +### 네트워크 토폴로지 + +카메라는 **스타(Star) 토폴로지**로 연결됩니다. 각 카메라가 PoE 스위치의 개별 포트에 1:1로 연결되는 구조입니다. 데이지 체인(직렬 연결)은 사용하지 않습니다. + +
    +
    +
    CAM 1
    +
    CAM 2
    +
    CAM 3
    +
    ···
    +
    CAM N
    +
    + + + + + + + +
    +
    PoE 스위치
    + +
    호스트 PC
    +
    +
    + +30대 카메라라면 24포트 + 8포트 PoE+ 스위치를 조합하거나 48포트 스위치를 사용합니다. 스위치 선택 시 **총 PoE 전력 예산**(예: 30대 × 12W = 360W)을 확인해야 합니다. + +### PoE의 장점 + +- **케이블 1개로 해결** — 천장에 설치된 카메라마다 전원 어댑터를 따로 연결할 필요 없음 +- **깔끔한 시공** — 케이블 수가 절반으로 줄어 설치와 관리가 간편 +- **중앙 전원 관리** — 스위치에서 카메라 전원을 일괄 ON/OFF 가능 + +--- + +## 3단계: 카메라가 보내는 데이터 — 2D 센트로이드 + +카메라에서 PC로 전송되는 데이터가 무엇인지 이해하는 것이 파이프라인의 핵심입니다. + +![Motive 카메라 2D 뷰 — 마커가 밝은 점으로 표시된 모습](optical-mocap-pipeline/images/motive-2d-centroid.png) + +### 카메라 내부 처리 과정 + +각 OptiTrack 카메라에는 **적외선(IR) LED 링**이 카메라 렌즈 주변에 장착되어 있습니다. 이 LED가 적외선을 쏘면, 배우 몸에 부착된 **재귀반사 마커**가 빛을 카메라 방향으로 반사합니다. 카메라 센서는 이 반사광을 그레이스케일 IR 이미지로 촬영합니다. + +여기서 중요한 점은, 카메라가 이 이미지를 **그대로 PC에 보내지 않는다**는 것입니다. 카메라 내부 프로세서가 먼저 처리합니다: + +**1. 스레시홀딩(Thresholding)** +밝기가 일정 기준(임계값) 이상인 픽셀만 남기고 나머지를 제거합니다. 적외선을 반사하는 마커만 밝게 빛나므로, 배경과 마커를 분리하는 과정입니다. + +**2. 블롭 검출(Blob Detection)** +밝은 픽셀들이 모여 있는 영역(블롭)을 하나의 마커 후보로 인식합니다. + +**3. 2D 센트로이드 계산** +각 블롭의 **정확한 중심점(센트로이드)**을 서브픽셀 정밀도(약 0.1픽셀)로 계산합니다. 블롭 내 각 픽셀의 밝기를 가중치로 사용하는 가중 평균 방식입니다. + +### PC로 전송되는 데이터 + +기본 트래킹 모드에서 카메라가 PC로 보내는 것은 **2D 센트로이드 데이터**입니다: + +- 각 마커 후보의 **(x, y) 좌표** + 크기 정보 +- 카메라 1대당 프레임당 수백 바이트 수준의 매우 작은 데이터 + +이렇게 작은 데이터량 덕분에 **40대 이상의 카메라가 기가비트 이더넷 하나로도 충분**합니다. 원시 그레이스케일 이미지를 전송할 수도 있지만(디버깅/시각화용), 이 경우 카메라당 수 MB/s가 필요하므로 일반 트래킹에서는 사용하지 않습니다. + +> 즉, 카메라는 "영상을 찍어서 보내는 장치"가 아니라 **"마커 위치를 계산해서 좌표만 보내는 센서"**에 가깝습니다. + +여기서 한 가지 의문이 들 수 있습니다 — 왜 모션캡처 카메라는 일반 카메라에 비해 그렇게 비쌀까? 이유는 위에서 설명한 과정에 있습니다. 일반 카메라는 찍은 영상을 그대로 보내면 끝이지만, 모션캡처 카메라는 **내부에 전용 프로세서를 탑재**하고 있어서 스레시홀딩, 블롭 검출, 서브픽셀 센트로이드 계산까지 초당 240~360프레임으로 실시간 처리합니다. 카메라 한 대가 사실상 **영상 처리 전용 소형 컴퓨터**를 품고 있는 셈이죠. + +--- + +## 4단계: 캘리브레이션 — 카메라의 눈을 정렬하다 + +3D 복원을 하기 전에 반드시 거쳐야 하는 과정이 있습니다. 소프트웨어가 각 카메라의 **정확한 위치, 방향, 렌즈 특성**을 파악하는 **캘리브레이션(Calibration)**입니다. + +![캘리브레이션 완드(왼쪽)와 그라운드 플레인 프레임(오른쪽)](optical-mocap-pipeline/images/calibration-tools.webp) + +### 완딩(Wanding) — 공간을 스캔하다 + +오퍼레이터가 LED 또는 마커가 부착된 **캘리브레이션 완드(Wand, 막대)**를 들고 캡처 볼륨 전체를 걸어다니며 휘두릅니다. 완드의 마커 간 거리는 정확히 알려져 있기 때문에, 각 카메라가 완드를 수천 프레임 동안 촬영하면 소프트웨어가 다음을 계산할 수 있습니다: + +- **내부 파라미터(Intrinsic Parameters)** — 초점 거리, 렌즈 왜곡 계수 등 카메라 렌즈 고유의 특성 +- **외부 파라미터(Extrinsic Parameters)** — 3D 공간에서 카메라의 정확한 위치와 방향 + +이 계산에는 **번들 조정(Bundle Adjustment)**이라는 최적화 알고리즘이 사용됩니다. 수천 개의 2D 관측 데이터를 기반으로 모든 카메라의 파라미터를 동시에 최적화하는 과정입니다. + +### 그라운드 플레인 설정 + +완딩이 끝나면 바닥에 **L자형 캘리브레이션 프레임(Ground Plane)**을 놓습니다. 이 프레임의 마커 3개 이상이 바닥면과 좌표 원점을 정의합니다: + +- 어디가 (0, 0, 0)인지 (원점) +- 어느 방향이 X, Y, Z 축인지 +- 바닥면의 높이 기준 + +이렇게 캘리브레이션이 완료되면, 소프트웨어는 어떤 카메라의 2D 좌표든 정확한 3D 광선으로 변환할 수 있게 됩니다. + +### 캘리브레이션 품질 + +Motive 소프트웨어는 캘리브레이션 후 각 카메라의 **재투영 오차(Reprojection Error)**를 표시합니다. 이 값이 작을수록(보통 0.5px 이하) 캘리브레이션이 정확하다는 의미입니다. 오차가 큰 카메라는 위치를 조정하거나 재캘리브레이션합니다. + +--- + +## 5단계: 2D → 3D 복원 (삼각측량) + +PC에 도착한 2D 센트로이드들이 어떻게 3D 좌표로 변환되는지 살펴봅니다. + +### 삼각측량(Triangulation) 원리 + +1. 캘리브레이션으로 확보한 각 카메라의 **정확한 3D 위치, 방향, 렌즈 특성**을 활용합니다 +2. 카메라의 2D 센트로이드 좌표에서 **광선(Ray)**을 쏩니다 — 카메라 위치에서 센트로이드 방향으로 3D 공간을 향해 뻗어나가는 직선 +3. 같은 마커를 본 **2대 이상의 카메라에서 쏜 광선들이 교차하는 점**이 곧 마커의 3D 좌표입니다 + + + +### 실제로는 완벽히 교차하지 않는다 + +노이즈, 렌즈 왜곡, 캘리브레이션 오차 등으로 인해 광선들이 정확히 한 점에서 만나는 경우는 거의 없습니다. 그래서 **최소자승법(Least Squares Optimization)**을 사용합니다: + +- 모든 광선까지의 거리 합이 최소가 되는 3D 좌표를 계산 +- 이때 각 광선과 복원된 3D 점 사이의 거리를 **잔차(Residual)**라고 합니다 +- 잔차가 작을수록 복원 품질이 좋다는 의미 — 잘 캘리브레이션된 OptiTrack 시스템에서는 **서브밀리미터(0.5mm 이하) 수준의 잔차**를 기대할 수 있습니다 + +### 카메라 수의 영향 + +| 해당 마커를 보는 카메라 수 | 효과 | +|---------------------------|------| +| **2대** | 3D 복원 가능 (최소 조건) | +| **3대** | 정확도 향상 + 1대가 가려져도 추적 유지 | +| **4대 이상** | 높은 정확도 + 강한 오클루전 내성 | + +--- + +## 6단계: 마커 식별과 라벨링 + +### 마커 슈트와 마커 배치 + +3D 복원을 의미 있는 모션 데이터로 만들려면, 마커가 신체의 **정확한 위치**에 부착되어야 합니다. + +**마커 사양** +- 지름: 보통 **12~19mm**의 구형 재귀반사 마커 사용 +- 재질: 3M 재귀반사 테이프로 코팅된 폼/플라스틱 구 +- 부착: 벨크로(찍찍이), 양면 테이프, 또는 전용 마커 슈트에 미리 장착 + +**마커셋 규격** +마커를 어디에 몇 개 붙이느냐는 표준화된 **마커셋(Markerset)** 규격을 따릅니다: + +- **Baseline (37 마커)** — OptiTrack 기본 전신 마커셋. 상체, 하체, 머리를 커버하며, 게임/영상 모션캡처에 가장 많이 사용 +- **Baseline + Fingers (~57 마커)** — 위에 손가락 마커 약 20개를 추가한 확장형 +- **Helen Hayes (~15-19 마커)** — 의료/보행 분석 표준. 하체 중심의 최소 마커셋 + +마커는 **뼈가 튀어나온 해부학적 랜드마크**(견봉, 외측 상과, 전상장골극 등)에 부착합니다. 이런 위치는 피부 위에서 뼈의 움직임을 가장 정확히 반영하고, 피부 미끄러짐(Skin Artifact)이 최소화되는 지점입니다. + +3D 복원이 끝나면 매 프레임마다 **이름 없는 3D 점들의 구름(Point Cloud)**이 생성됩니다. "이 점이 왼쪽 무릎 마커인지, 오른쪽 어깨 마커인지"를 판별하는 과정이 **라벨링(Labeling)**입니다. + +![Motive에서 마커가 라벨링된 모습](optical-mocap-pipeline/images/marker-labeling.png) + +### 라벨링 알고리즘 + +**템플릿 매칭(Template Matching)** +캘리브레이션 시 정의한 마커셋의 기하학적 배치(예: 무릎과 발목 마커 사이 거리)를 기준으로, 현재 프레임의 3D 점들을 템플릿과 대조합니다. + +**예측 추적(Predictive Tracking)** +이전 프레임의 속도·가속도를 기반으로 다음 프레임에서 각 마커가 어디에 있을지 예측하고, 가장 가까운 3D 점을 매칭합니다. + +### 마커 스왑(Swap) 문제 + +두 마커가 서로 매우 가까이 지나갈 때, 소프트웨어가 두 마커의 **라벨을 뒤바꿔 버리는 현상**입니다. 광학식 모캡에서 가장 흔한 아티팩트 중 하나입니다. + +해결 방법: +- 후처리에서 수동으로 라벨을 교정 +- 마커 배치를 **비대칭**으로 설계하여 구분을 쉽게 함 +- **액티브 마커(Active Marker)** 사용 — 각 마커가 고유한 적외선 패턴을 발광하여 하드웨어 수준에서 식별, 스왑이 원천 차단됨 + +### 패시브 vs 액티브 마커 + +| 구분 | 패시브 마커 (반사형) | 액티브 마커 (발광형) | +|------|---------------------|---------------------| +| **원리** | 카메라 IR LED의 빛을 반사 | 마커 자체가 고유 IR 패턴 발광 | +| **식별** | 소프트웨어 기반 (스왑 가능성 있음) | 하드웨어 기반 (스왑 없음) | +| **장점** | 가볍고 저렴, 부착 간편 | 자동 식별, 라벨링 오류 없음 | +| **단점** | 라벨링 후처리 필요할 수 있음 | 무겁고, 배터리/전원 필요 | + +대부분의 엔터테인먼트/VTuber 현장에서는 **패시브 마커**가 주로 사용됩니다. 가볍고 편하며, 소프트웨어 성능이 충분히 좋아 대부분의 상황에서 자동 라벨링이 잘 작동하기 때문입니다. + +--- + +## 7단계: 스켈레톤 솔빙 — 점에서 뼈대로 + +라벨링된 3D 마커들을 사람의 **골격(Skeleton)** 구조에 매핑하는 단계입니다. + +### 사전 캘리브레이션 + +촬영 전에 배우가 **T-포즈**(팔을 벌린 자세)를 취하면, 소프트웨어가 마커 위치를 기반으로 각 뼈대 길이(팔 길이, 다리 길이 등)와 관절 위치를 계산합니다. + +이어서 **ROM(Range of Motion) 캡처**를 수행합니다. + +![ROM 캡처 — 다양한 동작으로 관절 범위를 보정하는 과정](optical-mocap-pipeline/images/rom-grid.webp) + 팔 돌리기, 무릎 굽히기, 상체 비틀기 등 다양한 동작을 통해 소프트웨어가 **관절 중심점과 회전축**을 정밀하게 보정합니다. + +### 실시간 솔빙 + +촬영 중에는 매 프레임마다: + +1. 라벨링된 3D 마커 좌표를 받아옴 +2. 마커 위치를 기반으로 각 관절의 **3D 위치와 회전값(Rotation)**을 계산 +3. **역운동학(Inverse Kinematics)** 등의 알고리즘으로 자연스러운 골격 포즈를 산출 +4. 결과: 시간축 위의 모든 관절에 대한 **위치(Translation) + 회전(Rotation)** 데이터 + +### 리지드 바디 트래킹 (소품 추적) + +칼, 총, 카메라 등 소품에 **3개 이상의 마커를 비대칭으로 부착**하면, 소프트웨어가 해당 마커 클러스터를 하나의 강체(Rigid Body)로 인식하여 **6DOF(위치 3축 + 회전 3축)** 추적이 가능합니다. + +--- + +## 8단계: 실시간 스트리밍과 데이터 출력 + +### 실시간 스트리밍 + +![실시간 스트리밍 — Motive에서 게임 엔진으로 모션 데이터 전송](optical-mocap-pipeline/images/realtime-streaming.png) + +OptiTrack Motive는 솔빙된 데이터를 실시간으로 외부 소프트웨어에 전달합니다: + +- **NatNet SDK** — OptiTrack의 자체 프로토콜, UDP 기반으로 저지연 전송 +- **VRPN** — VR/모캡 분야의 표준 프로토콜 + +이를 통해 **Unity, Unreal Engine, MotionBuilder** 등에서 실시간으로 캐릭터를 움직일 수 있습니다. VTuber 라이브 방송이 가능한 것도 이 실시간 스트리밍 덕분입니다. + +### 녹화 데이터 출력 포맷 + +| 포맷 | 용도 | +|------|------| +| **FBX** | 스켈레톤 + 애니메이션 데이터, 게임 엔진/DCC 툴 호환 | +| **BVH** | 계층적 모션 데이터, 리타게팅에 주로 사용 | +| **C3D** | 원시 3D 마커 데이터, 바이오메카닉스/연구 표준 | + +--- + +## 9단계: 후처리 — 데이터를 다듬는 과정 + +![후처리 작업 — Motive에서 모션 데이터를 정리하는 과정](optical-mocap-pipeline/images/post-processing.png) + +실시간 캡처에서 얻은 데이터는 바로 최종 결과물로 쓸 수 있는 경우도 있지만, 대부분의 프로 작업에서는 **후처리(Post-Processing)** 과정을 거칩니다. + +### 갭 필링(Gap Filling) + +오클루전으로 인해 마커가 일시적으로 사라진 구간을 **보간(Interpolation)**으로 채우는 작업입니다. + +- **선형 보간(Linear)** — 단순히 앞뒤 프레임을 직선으로 이음. 짧은 갭에 적합 +- **스플라인 보간(Spline)** — 곡선으로 부드럽게 채움. 자연스러운 동작 유지에 유리 +- **패턴 기반 보간** — 같은 동작을 반복한 다른 테이크의 데이터를 참조하여 채움 + +갭이 길수록 보간 정확도가 떨어지기 때문에, 촬영 시 오클루전을 최소화하는 것이 가장 중요합니다. + +### 스무딩(Smoothing)과 필터링 + +캡처된 데이터에는 미세한 떨림(High-frequency Noise)이 포함될 수 있습니다. 이를 제거하기 위해: + +- **버터워스 필터(Butterworth Filter)** — 지정한 주파수 이상의 노이즈를 제거하는 저역 통과 필터 +- **가우시안 스무딩** — 주변 프레임의 가중 평균으로 떨림을 완화 + +다만 과도한 스무딩은 동작의 **디테일과 임팩트**를 잃게 만들므로, 칼을 휘두르는 순간의 날카로운 움직임까지 뭉개지지 않도록 적절한 강도를 설정해야 합니다. + +### 마커 스왑 교정 + +6단계에서 설명한 마커 스왑이 발생한 구간을 찾아서 라벨을 수동으로 바로잡는 작업입니다. Motive에서는 타임라인 위에서 마커 궤적을 시각적으로 확인하며 교정할 수 있습니다. + +### 리타게팅(Retargeting) + +캡처된 스켈레톤 데이터를 **다른 비율의 캐릭터**에 적용하는 과정입니다. 예를 들어 키 170cm인 배우의 모션 데이터를 키 3m인 거인 캐릭터나 150cm인 어린이 캐릭터에 맞추려면, 관절 회전은 유지하면서 뼈대 길이를 대상 캐릭터에 맞게 재계산해야 합니다. MotionBuilder, Maya, Unreal Engine 등에서 리타게팅 기능을 제공합니다. + +--- + +## 10단계: 현장에서 자주 발생하는 문제와 대응 + +기술적으로 완벽해 보이는 광학식 모캡에도 실무 현장에서 마주치는 문제들이 있습니다. + +### 반사 노이즈(Stray Reflections) + +마커가 아닌 물체에서 적외선이 반사되어 **가짜 마커(Ghost Marker)**가 검출되는 현상입니다. + +- 원인: 금속 표면, 반짝이는 옷, 안경, 시계, 바닥 반사 등 +- 대응: 반사가 일어나는 표면을 무광 테이프로 가리거나, Motive에서 해당 영역을 **마스킹(Masking)** 처리하여 소프트웨어가 무시하도록 설정 + +### 마커 탈락 + +격렬한 동작 중에 마커가 슈트에서 떨어지거나 위치가 틀어지는 경우입니다. + +- 대응: 촬영 전 마커 부착 상태를 꼼꼼히 확인하고, 격한 동작 촬영 시 벨크로 + 양면 테이프를 병행하여 고정력을 높입니다 +- 중간중간 모니터링하며 마커 상태를 체크하는 것도 중요합니다 + +### 의상 제약 + +촬영 시 배우가 입는 옷은 **밝은 색상·무광 소재**가 이상적입니다. 검은색은 마커 반사에 영향이 없지만, 반짝이는 소재나 느슨한 옷은 마커 위치가 불안정해지거나 반사 노이즈를 유발할 수 있습니다. 전용 모캡 슈트를 착용하는 것이 가장 안정적입니다. + +### 캘리브레이션 유지 + +캡처 볼륨 내 온도 변화, 카메라 진동, 삼각대 미세 이동 등으로 캘리브레이션이 서서히 틀어질 수 있습니다. 장시간 촬영 시에는 중간에 **재캘리브레이션**하거나, Motive의 **Continuous Calibration(연속 캘리브레이션)** 기능으로 실시간 보정하는 것이 좋습니다. + +--- + +## 레이턴시 — 움직임에서 화면까지 얼마나 걸릴까? + +전체 파이프라인의 각 단계별 소요 시간입니다. + +| 단계 | 소요 시간 | +|------|----------| +| 카메라 노출 (240fps 기준) | ~4.2ms | +| 카메라 내부 처리 (센트로이드 계산) | ~0.5–1ms | +| 네트워크 전송 (PoE → PC) | < 1ms | +| 3D 복원 + 라벨링 | ~1–2ms | +| 스켈레톤 솔빙 | ~0.5–1ms | +| 스트리밍 출력 (NatNet) | < 1ms | +| **총 종단간 레이턴시** | **약 8–14ms (240fps 기준)** | + +360fps에서는 노출 시간이 줄어 **7ms 이하**까지 가능합니다. 이 정도 레이턴시면 사람이 체감하기 어려운 수준이며, VTuber 라이브 방송에서도 자연스러운 실시간 반응이 가능합니다. + +> 참고: 레이턴시의 대부분은 **카메라 노출 시간(프레임 주기)**이 차지합니다. 프레임레이트가 높을수록 레이턴시가 줄어드는 이유입니다. + +--- + +## 전체 파이프라인 요약 + +
    +
    +
    1. 카메라 설치 · IR 필터 · 프레임 동기화
    +

    30대 카메라를 링 형태로 배치, IR 패스 필터로 적외선만 감지, 하드웨어 싱크로 μs 단위 동기화

    +
    +
    +
    +
    2. PoE 네트워크
    +

    Cat6 한 줄로 전력 + 데이터 동시 전송, 스타 토폴로지로 스위치에 연결

    +
    +
    +
    +
    3. 카메라 온보드 처리 → 2D 센트로이드
    +

    IR LED 발사 → 마커 반사광 수신 → 스레시홀딩 → 블롭 검출 → 서브픽셀 센트로이드 계산 → 좌표만 전송

    +
    +
    +
    +
    4. 캘리브레이션
    +

    완딩으로 카메라 내부/외부 파라미터 산출, 그라운드 플레인으로 좌표계 정의

    +
    +
    +
    +
    5. 2D → 3D 삼각측량
    +

    다수 카메라의 2D 좌표에서 광선 교차 + 최소자승법으로 3D 좌표 복원

    +
    +
    +
    +
    6. 마커 라벨링
    +

    템플릿 매칭 + 예측 추적으로 각 3D 점에 마커 이름 부여

    +
    +
    +
    +
    7. 스켈레톤 솔빙
    +

    T-포즈 + ROM 캘리브레이션 기반, 역운동학으로 관절 위치·회전 계산

    +
    +
    +
    +
    8. 실시간 스트리밍 · 데이터 출력
    +

    NatNet/VRPN으로 Unity/Unreal/MotionBuilder에 실시간 전송, FBX/BVH/C3D 녹화

    +
    +
    +
    +
    9. 후처리
    +

    갭 필링 · 스무딩 · 마커 스왑 교정 · 리타게팅

    +
    +
    +
    +
    최종 결과물
    +

    게임 시네마틱 · VTuber 라이브 · 영상 콘텐츠에 적용 (총 레이턴시 약 8~14ms)

    +
    +
    + +카메라가 찍은 영상이 그대로 PC에 오는 것이 아니라, 카메라가 직접 마커 좌표를 계산해서 보내고, PC는 이 좌표들을 3D로 복원하고 뼈대에 매핑하는 것 — 이것이 광학식 모션캡처의 핵심 원리입니다. + +--- + +## 자주 묻는 질문 (FAQ) + +**Q. 광학식 모션캡처 카메라는 일반 카메라와 뭐가 다른가요?** + +일반 카메라는 풀컬러 영상을 촬영하지만, 모션캡처 카메라는 적외선(IR) 영역에 특화되어 있습니다. IR LED로 마커를 비추고 반사광만 감지하며, 카메라 내부에서 마커의 2D 좌표를 직접 계산하여 좌표 데이터만 PC에 전송합니다. + +**Q. PoE 케이블 길이에 제한이 있나요?** + +이더넷 표준에 따라 PoE 케이블은 **최대 100m**까지 지원됩니다. 대부분의 모션캡처 스튜디오에서는 이 범위를 충분히 충족합니다. + +**Q. 카메라 프레임레이트가 높을수록 항상 좋은가요?** + +프레임레이트가 높으면 빠른 동작 추적과 낮은 레이턴시에 유리하지만, 데이터 처리량이 늘어나고 카메라 해상도가 낮아질 수 있습니다. 일반적으로 VTuber 라이브나 게임 모션캡처에서는 120~240fps면 충분하며, 스포츠 과학 등 초고속 동작 분석에서는 360fps 이상을 사용합니다. + +**Q. 마커 스왑은 얼마나 자주 발생하나요?** + +마커셋이 잘 설계되어 있고 카메라 수가 충분하면 실시간 촬영 중 스왑은 드물게 발생합니다. 다만 빠른 동작이나 마커 간 거리가 가까운 동작(손 맞잡기 등)에서는 발생 확률이 올라가며, 이런 구간은 후처리에서 교정합니다. + +**Q. 삼각측량에 2대면 충분한데 왜 30대나 설치하나요?** + +2대는 이론적 최솟값일 뿐입니다. 실제로는 오클루전(마커 가림), 카메라 각도에 따른 정확도 차이, 리던던시 확보 등을 고려해야 합니다. 30대를 배치하면 어떤 마커든 항상 다수의 카메라가 보고 있으므로, 안정적이고 정확한 추적이 가능합니다. + +**Q. 캘리브레이션은 얼마나 자주 해야 하나요?** + +일반적으로 촬영일 시작 전에 한 번 수행합니다. 다만 장시간 촬영 시 온도 변화나 카메라 미세 이동으로 캘리브레이션이 틀어질 수 있어, 4~6시간 연속 촬영 시 중간에 재캘리브레이션을 권장합니다. OptiTrack Motive의 Continuous Calibration 기능을 사용하면 촬영 중에도 실시간으로 보정이 가능합니다. + +**Q. 반짝이는 옷을 입으면 안 되나요?** + +모션캡처 카메라는 적외선 반사를 감지하기 때문에, 반짝이는 소재(금속 장식, 시퀸, 광택 있는 합성 섬유 등)는 적외선을 반사하여 가짜 마커(Ghost Marker)를 만들 수 있습니다. 전용 모캡 슈트나 무광 소재의 편안한 옷을 착용하는 것이 가장 좋습니다. + +--- + +광학식 모션캡처의 기술적 구조에 대해 더 궁금한 점이 있으시면 [문의 페이지](/contact)에서 편하게 질문해 주세요. 밍글 스튜디오에서 직접 체험하고 싶으시다면 [서비스 안내](/services)를 확인해 보세요. diff --git a/blog/posts/optical-mocap-pipeline/zh.md b/blog/posts/optical-mocap-pipeline/zh.md new file mode 100644 index 0000000..32e96ca --- /dev/null +++ b/blog/posts/optical-mocap-pipeline/zh.md @@ -0,0 +1,484 @@ +--- +title: "光学动作捕捉管线完全解析 — 从摄像头到动作数据" +description: "深入讲解光学动作捕捉的完整技术管线。涵盖摄像头安装、PoE网络、2D质心、标定、3D重建、骨骼解算、后处理以及现场实际问题,共10个详细步骤。" +date: "2026-04-05" +category: "动作捕捉技术" +thumbnail: "images/thumbnail.webp" +--- + +在动作捕捉工作室中,当演员穿上动捕服进行表演时,屏幕上的角色会实时跟随其动作。看起来很简单,但其背后运行着一条精密的技术管线:**摄像头硬件 → 网络传输 → 2D图像处理 → 3D重建 → 骨骼解算 → 实时串流**。 + +本文将逐步剖析光学动作捕捉(以OptiTrack为基准)的完整管线。 + +--- + +## 第1步:摄像头安装与布局策略 + +光学动作捕捉的第一步是决定摄像头**放在哪里、如何布置**。 + +![明格工作室动作捕捉空间](/images/studio/모션캡쳐%20공간%20001.webp) + +### 布局原则 + +- **高度**:通常安装在2~3m高度,向下倾斜约30度 +- **布局形态**:围绕捕捉体积(拍摄空间)呈环形(Ring)布置 +- **双层布局**:在高位和低位交替放置摄像头,可提升垂直方向的覆盖范围 +- **重叠(Overlap)**:捕捉体积内的每个点都必须同时被**至少3台摄像头**看到。三角测量最少需要2台,但3台以上能显著提升精度和遮挡应对能力 + +### 摄像头数量与精度的关系 + +摄像头数量越多: +- 盲区越少 → 遮挡发生概率降低 +- 观测同一标记点的摄像头越多 → 三角测量精度提升 +- 部分摄像头出现问题时其他摄像头可以补偿(冗余性) + +明格工作室配备了**OptiTrack Prime 17 × 16台 + Prime 13 × 14台**,共30台摄像头布置在8m × 7m的空间中,最大限度地减少了360度盲区。 + +### IR通过滤光片 — 只看红外线的眼睛 + +每台动作捕捉摄像头的镜头前方都安装了**IR通过滤光片(红外通过滤光片)**。该滤光片阻挡可见光,仅允许红外线波长(约850nm)通过。因此,荧光灯、阳光、显示器光线等普通照明的干扰被从根本上消除,摄像头只能检测到**IR LED反射的标记点光线**。 + +这也是拍摄空间不需要完全关灯的原因。不过,直射阳光或含有强IR成分的照明仍可能造成干扰,因此工作室环境中使用IR干扰较小的照明设备。 + +### 帧同步 — 30台摄像头如何同时拍摄 + +要使三角测量准确,所有摄像头必须在**完全相同的时刻**按下快门。如果各台摄像头在不同时间拍摄,快速运动的标记点位置会因摄像头而异,导致3D重建不准确。 + +OptiTrack采用**硬件同步(Hardware Sync)**方式。一台摄像头被指定为**Sync Master(同步主机)**生成时序信号,其余摄像头根据该信号同时曝光。 + +- **以太网摄像头(Prime系列)**:同步信号内嵌在以太网连接本身中,或通过OptiTrack的eSync集线器传输。无需单独的同步线缆。 +- **USB摄像头(Flex系列)**:摄像头之间通过专用同步线缆以菊花链方式连接。 + +该同步精度达到**微秒(μs)级别**,30台摄像头实际上在完全相同的时刻进行拍摄。 + +--- + +## 第2步:PoE — 一根线缆同时传输电力和数据 + +### 什么是PoE(Power over Ethernet)? + +OptiTrack Prime系列摄像头通过**PoE(Power over Ethernet)**方式连接。这是一种通过标准以太网线缆(Cat5e/Cat6)**同时提供电力和传输数据**的技术。 + +![PoE交换机与摄像头连接](optical-mocap-pipeline/images/poe-switch.png) + +### 技术标准 + +| 标准 | 最大功率 | 备注 | +|------|---------|------| +| **IEEE 802.3af (PoE)** | 每端口15.4W | 足以满足基本动作捕捉摄像头 | +| **IEEE 802.3at (PoE+)** | 每端口25.5W | 适用于高帧率摄像头或IR LED输出较高的情况 | + +OptiTrack摄像头通常功耗约**5~12W**,完全在PoE标准范围内。 + +### 网络拓扑 + +摄像头以**星型(Star)拓扑**方式连接。每台摄像头1对1连接到PoE交换机的独立端口。不使用菊花链(串行连接)。 + +
    +
    +
    CAM 1
    +
    CAM 2
    +
    CAM 3
    +
    ···
    +
    CAM N
    +
    + + + + + + + +
    +
    PoE交换机
    + +
    主机PC
    +
    +
    + +如果有30台摄像头,可以组合使用24端口 + 8端口的PoE+交换机,或使用48端口交换机。选择交换机时必须确认**PoE总功率预算**(例如:30台 × 12W = 360W)。 + +### PoE的优势 + +- **一根线缆搞定** — 无需为安装在天花板上的每台摄像头单独连接电源适配器 +- **整洁的施工** — 线缆数量减半,安装和管理更加简便 +- **集中电源管理** — 可从交换机统一控制摄像头的开关 + +--- + +## 第3步:摄像头发送的数据 — 2D质心 + +理解摄像头向PC发送的数据内容是管线的核心。 + +![Motive摄像头2D视图 — 标记点显示为明亮的点](optical-mocap-pipeline/images/motive-2d-centroid.png) + +### 摄像头内部处理过程 + +每台OptiTrack摄像头的镜头周围都安装了**红外(IR)LED环**。这些LED发射红外线,演员身上的**逆反射标记点**将光线反射回摄像头方向。摄像头传感器将这些反射光拍摄为灰度IR图像。 + +这里的关键是,摄像头**并不会将这张图像直接发送给PC**。摄像头内部处理器会先进行处理: + +**1. 阈值处理(Thresholding)** +只保留亮度超过一定阈值的像素,其余全部去除。由于只有反射红外线的标记点会发出明亮的光,这个过程实现了标记点与背景的分离。 + +**2. 斑点检测(Blob Detection)** +将明亮像素聚集的区域(斑点)识别为单个标记点候选。 + +**3. 2D质心计算** +以亚像素精度(约0.1像素)计算每个斑点的**精确中心点(质心)**。采用加权平均方法,以斑点内各像素的亮度作为权重。 + +### 发送给PC的数据 + +在默认追踪模式下,摄像头发送给PC的是**2D质心数据**: + +- 每个标记点候选的**(x, y)坐标** + 大小信息 +- 每台摄像头每帧仅数百字节的极小数据量 + +正因为数据量如此之小,**40台以上的摄像头仅需一条千兆以太网即可满足需求**。也可以传输原始灰度图像(用于调试/可视化),但这种情况下每台摄像头需要数MB/s,因此在正常追踪中不使用。 + +> 也就是说,摄像头并不是"拍摄并发送视频的设备",更接近于**"计算标记点位置并仅发送坐标的传感器"**。 + +这里可能会产生一个疑问——为什么动作捕捉摄像头比普通摄像头贵那么多?原因就在于上面描述的处理过程。普通摄像头只需将拍摄的视频原样发送即可,而动作捕捉摄像头**内置了专用处理器**,能以每秒240~360帧的速度实时执行阈值处理、斑点检测和亚像素质心计算。每台摄像头实际上就是一台**专门用于图像处理的小型计算机**。 + +--- + +## 第4步:标定 — 对齐摄像头的视线 + +在进行3D重建之前,有一个必须经历的过程。软件需要了解每台摄像头的**精确位置、方向和镜头特性** — 这就是**标定(Calibration)**。 + +![标定棒(左)和地面参考框架(右)](optical-mocap-pipeline/images/calibration-tools.webp) + +### 挥棒(Wanding) — 扫描空间 + +操作员手持装有LED或标记点的**标定棒(Wand)**,在整个捕捉体积范围内走动并挥舞。由于棒上标记点之间的距离是精确已知的,当各台摄像头拍摄标定棒数千帧后,软件可以计算出: + +- **内参(Intrinsic Parameters)** — 焦距、镜头畸变系数等摄像头镜头固有的特性 +- **外参(Extrinsic Parameters)** — 摄像头在3D空间中的精确位置和方向 + +该计算使用一种名为**光束法平差(Bundle Adjustment)**的优化算法。基于数千个2D观测数据,同时优化所有摄像头的参数。 + +### 地面参考设置 + +挥棒完成后,在地板上放置一个**L形标定框架(Ground Plane)**。该框架上的3个或更多标记点定义了地面和坐标原点: + +- 哪里是(0, 0, 0)(原点) +- 哪个方向是X、Y、Z轴 +- 地面的高度基准 + +标定完成后,软件就能将任何摄像头的2D坐标转换为精确的3D射线。 + +### 标定质量 + +Motive软件在标定后会显示每台摄像头的**重投影误差(Reprojection Error)**。该值越小(通常0.5像素以下),表示标定越精确。误差较大的摄像头需要调整位置或重新标定。 + +--- + +## 第5步:2D → 3D重建(三角测量) + +让我们看看到达PC的2D质心是如何转换为3D坐标的。 + +### 三角测量(Triangulation)原理 + +1. 利用标定获得的每台摄像头的**精确3D位置、方向和镜头特性** +2. 从摄像头的2D质心坐标发射一条**射线(Ray)** — 从摄像头位置沿质心方向延伸到3D空间的直线 +3. 观测同一标记点的**2台或更多摄像头发射的射线交汇之处**即为标记点的3D坐标 + + + +### 实际上射线并不会完美交汇 + +由于噪声、镜头畸变、标定误差等因素,射线几乎不可能精确交于一点。因此使用**最小二乘法(Least Squares Optimization)**: + +- 计算到所有射线距离之和最小的3D坐标 +- 此时每条射线与重建的3D点之间的距离称为**残差(Residual)** +- 残差越小,重建质量越好 — 在标定良好的OptiTrack系统中,可以期望**亚毫米级(0.5mm以下)的残差** + +### 摄像头数量的影响 + +| 观测该标记点的摄像头数 | 效果 | +|-----------------------|------| +| **2台** | 可以进行3D重建(最低条件) | +| **3台** | 精度提升 + 即使1台被遮挡也能维持追踪 | +| **4台以上** | 高精度 + 强遮挡抗性 | + +--- + +## 第6步:标记点识别与标注 + +### 标记点服装与标记点布置 + +要将3D重建转化为有意义的动作数据,标记点必须贴在身体的**精确位置**上。 + +**标记点规格** +- 直径:通常使用**12~19mm**的球形逆反射标记点 +- 材质:覆有3M逆反射胶带的泡沫/塑料球 +- 固定方式:魔术贴、双面胶带,或预装在专用标记点服上 + +**标记点集规格** +标记点贴在哪里、贴几个,遵循标准化的**标记点集(Markerset)**规格: + +- **Baseline(37个标记点)** — OptiTrack默认全身标记点集。覆盖上半身、下半身和头部,是游戏/影视动作捕捉中最常用的 +- **Baseline + Fingers(约57个标记点)** — 在上述基础上增加约20个手指标记点的扩展版 +- **Helen Hayes(约15~19个标记点)** — 医学/步态分析标准。以下半身为中心的最小标记点集 + +标记点贴在**骨骼突出的解剖学标志点**(肩峰、外侧上髁、髂前上棘等)。这些位置在皮肤上最能准确反映骨骼运动,且皮肤滑移(Skin Artifact)最小。 + +3D重建完成后,每一帧都会产生一团**无名称的3D点云(Point Cloud)**。判断"这个点是左膝标记点还是右肩标记点"的过程就是**标注(Labeling)**。 + +![Motive中标记点被标注的样子](optical-mocap-pipeline/images/marker-labeling.png) + +### 标注算法 + +**模板匹配(Template Matching)** +以标定时定义的标记点集的几何布局(如膝盖与踝关节标记点之间的距离)为基准,将当前帧的3D点与模板进行对照。 + +**预测追踪(Predictive Tracking)** +基于前一帧的速度和加速度,预测下一帧各标记点的位置,并与最近的3D点进行匹配。 + +### 标记点交换(Swap)问题 + +当两个标记点非常接近地经过彼此时,软件可能会**交换两个标记点的标签** — 即标签互换现象。这是光学动捕中最常见的伪影之一。 + +解决方法: +- 在后处理中手动纠正标签 +- 将标记点布置设计为**不对称**以便于区分 +- 使用**主动标记点(Active Marker)** — 每个标记点发射独特的红外模式,在硬件层面实现识别,从根本上杜绝交换 + +### 被动标记点 vs 主动标记点 + +| 类别 | 被动标记点(反射型) | 主动标记点(发光型) | +|------|---------------------|---------------------| +| **原理** | 反射摄像头IR LED的光 | 标记点自身发射独特的IR模式 | +| **识别** | 基于软件(可能发生交换) | 基于硬件(无交换) | +| **优点** | 轻便、便宜、易于安装 | 自动识别、无标注错误 | +| **缺点** | 可能需要后处理标注 | 较重,需要电池/电源 | + +在大多数娱乐/VTuber制作现场,主要使用**被动标记点**。因为它们轻便舒适,而且软件性能足够好,在大多数情况下自动标注都能良好运作。 + +--- + +## 第7步:骨骼解算 — 从点到骨架 + +将标注好的3D标记点映射到人体**骨骼(Skeleton)**结构的步骤。 + +### 预标定 + +拍摄前,演员摆出**T-Pose**(双臂展开的姿势),软件根据标记点位置计算各骨骼长度(臂长、腿长等)和关节位置。 + +接着进行**ROM(Range of Motion)捕捉**。 + +![ROM捕捉 — 通过各种动作校准关节范围的过程](optical-mocap-pipeline/images/rom-grid.webp) + 通过旋转手臂、弯曲膝盖、扭转上身等各种动作,软件精确校准**关节中心点和旋转轴**。 + +### 实时解算 + +拍摄过程中,每一帧都会: + +1. 接收标注后的3D标记点坐标 +2. 根据标记点位置计算各关节的**3D位置和旋转值(Rotation)** +3. 通过**逆运动学(Inverse Kinematics)**等算法计算自然的骨骼姿态 +4. 结果:时间轴上所有关节的**位置(Translation)+ 旋转(Rotation)**数据 + +### 刚体追踪(道具追踪) + +在刀、枪、摄像机等道具上**不对称地贴上3个或更多标记点**后,软件会将该标记点集群识别为一个刚体(Rigid Body),实现**6DOF(3轴位置 + 3轴旋转)**追踪。 + +--- + +## 第8步:实时串流与数据输出 + +### 实时串流 + +![实时串流 — 从Motive向游戏引擎发送动作数据](optical-mocap-pipeline/images/realtime-streaming.png) + +OptiTrack Motive将解算后的数据实时传递给外部软件: + +- **NatNet SDK** — OptiTrack自有协议,基于UDP的低延迟传输 +- **VRPN** — VR/动捕领域的标准协议 + +通过这些协议,可以在**Unity、Unreal Engine、MotionBuilder**等软件中实时驱动角色。VTuber直播之所以成为可能,也正是得益于这种实时串流。 + +### 录制数据输出格式 + +| 格式 | 用途 | +|------|------| +| **FBX** | 骨骼 + 动画数据,兼容游戏引擎/DCC工具 | +| **BVH** | 层级动作数据,主要用于重定向 | +| **C3D** | 原始3D标记点数据,生物力学/研究标准 | + +--- + +## 第9步:后处理 — 打磨数据的过程 + +![后处理工作 — 在Motive中整理动作数据的过程](optical-mocap-pipeline/images/post-processing.png) + +实时捕捉获取的数据有时可以直接使用,但大多数专业工作需要经过**后处理(Post-Processing)**阶段。 + +### 间隙填充(Gap Filling) + +用**插值(Interpolation)**填补因遮挡导致标记点暂时消失的区间。 + +- **线性插值(Linear)** — 简单地用直线连接前后帧。适用于短间隙 +- **样条插值(Spline)** — 用曲线平滑填充。有利于保持自然运动 +- **基于模式的插值** — 参考重复相同动作的其他拍摄数据来填充 + +间隙越长,插值精度越低,因此拍摄时最大限度地减少遮挡才是最重要的。 + +### 平滑(Smoothing)与滤波 + +捕捉到的数据可能包含细微抖动(高频噪声)。为去除这些噪声: + +- **巴特沃斯滤波器(Butterworth Filter)** — 去除指定频率以上噪声的低通滤波器 +- **高斯平滑** — 通过周围帧的加权平均来缓解抖动 + +但过度平滑会导致动作的**细节和冲击力**丧失,因此必须设置适当的强度,避免将挥剑瞬间的锐利动作也模糊掉。 + +### 标记点交换校正 + +找到第6步中描述的标记点交换发生的区间,手动纠正标签。在Motive中,可以在时间线上直观地查看和校正标记点轨迹。 + +### 重定向(Retargeting) + +将捕捉到的骨骼数据应用于**不同体型比例的角色**的过程。例如,要将170cm演员的动作数据应用于3m的巨人角色或150cm的儿童角色,需要在保持关节旋转的同时,根据目标角色重新计算骨骼长度。MotionBuilder、Maya、Unreal Engine等提供重定向功能。 + +--- + +## 第10步:现场常见问题及应对方法 + +即便看似技术完美的光学动捕,在实际现场也会遇到各种问题。 + +### 杂散反射(Stray Reflections) + +红外线从标记点以外的物体反射,产生**虚假标记点(Ghost Marker)**的现象。 + +- 原因:金属表面、闪亮的衣服、眼镜、手表、地板反射等 +- 应对:用哑光胶带覆盖反射表面,或在Motive中对该区域进行**遮罩(Masking)**处理,使软件忽略该区域 + +### 标记点脱落 + +剧烈运动中标记点从服装上脱落或位置偏移。 + +- 应对:拍摄前仔细检查标记点的粘贴状态;进行剧烈动作捕捉时,同时使用魔术贴 + 双面胶带增强固定力 +- 中途监控标记点状态也很重要 + +### 服装限制 + +拍摄时演员穿的衣服理想选择是**浅色、哑光材质**。黑色不影响标记点反射,但闪亮材质或宽松衣物会导致标记点位置不稳定或产生杂散反射。穿戴专用动捕服是最稳定的选择。 + +### 标定维护 + +捕捉体积内的温度变化、摄像头振动、三脚架微小移动等因素可能导致标定逐渐偏移。长时间拍摄时,建议中途进行**重新标定**,或使用Motive的**Continuous Calibration(持续标定)**功能进行实时校正。 + +--- + +## 延迟 — 从动作到屏幕需要多久? + +管线各阶段的耗时如下。 + +| 阶段 | 耗时 | +|------|------| +| 摄像头曝光(以240fps为基准) | 约4.2ms | +| 摄像头内部处理(质心计算) | 约0.5~1ms | +| 网络传输(PoE → PC) | < 1ms | +| 3D重建 + 标注 | 约1~2ms | +| 骨骼解算 | 约0.5~1ms | +| 串流输出(NatNet) | < 1ms | +| **总端到端延迟** | **约8~14ms(以240fps为基准)** | + +在360fps下,曝光时间缩短,延迟可降至**7ms以下**。这样的延迟水平人类几乎无法感知,即使在VTuber直播中也能实现自然的实时响应。 + +> 注:延迟的大部分来自**摄像头曝光时间(帧周期)**。这就是帧率越高延迟越低的原因。 + +--- + +## 完整管线总结 + +
    +
    +
    1. 摄像头安装 · IR滤光片 · 帧同步
    +

    30台摄像头环形布置,IR通过滤光片仅检测红外线,硬件同步实现μs级精度

    +
    +
    +
    +
    2. PoE网络
    +

    一根Cat6线缆同时传输电力和数据,以星型拓扑连接至交换机

    +
    +
    +
    +
    3. 摄像头板载处理 → 2D质心
    +

    IR LED发射 → 接收标记点反射光 → 阈值处理 → 斑点检测 → 亚像素质心计算 → 仅传输坐标

    +
    +
    +
    +
    4. 标定
    +

    通过挥棒获取摄像头内参/外参,通过地面参考定义坐标系

    +
    +
    +
    +
    5. 2D → 3D三角测量
    +

    从多台摄像头的2D坐标射出射线交叉 + 最小二乘法重建3D坐标

    +
    +
    +
    +
    6. 标记点标注
    +

    模板匹配 + 预测追踪为每个3D点分配标记点名称

    +
    +
    +
    +
    7. 骨骼解算
    +

    基于T-Pose + ROM标定,通过逆运动学计算关节位置与旋转

    +
    +
    +
    +
    8. 实时串流 · 数据输出
    +

    通过NatNet/VRPN实时传输至Unity/Unreal/MotionBuilder,录制为FBX/BVH/C3D

    +
    +
    +
    +
    9. 后处理
    +

    间隙填充 · 平滑 · 标记点交换校正 · 重定向

    +
    +
    +
    +
    最终成果
    +

    应用于游戏过场动画 · VTuber直播 · 视频内容(总延迟约8~14ms)

    +
    +
    + +摄像头拍摄的图像并不是直接发送到PC的——而是由摄像头自行计算标记点坐标后发送,PC将这些坐标重建为3D并映射到骨骼上。这就是光学动作捕捉的核心原理。 + +--- + +## 常见问题(FAQ) + +**Q. 光学动作捕捉摄像头和普通摄像头有什么区别?** + +普通摄像头拍摄全彩视频,而动作捕捉摄像头专注于红外(IR)光谱。它们用IR LED照射标记点并仅检测反射光,在摄像头内部直接计算标记点的2D坐标,只向PC传输坐标数据。 + +**Q. PoE线缆长度有限制吗?** + +根据以太网标准,PoE线缆最长支持**100m**。大多数动作捕捉工作室完全在此范围内。 + +**Q. 摄像头帧率是不是越高越好?** + +更高的帧率有利于快速动作追踪和降低延迟,但数据处理量会增加,摄像头分辨率可能会降低。通常VTuber直播和游戏动作捕捉120~240fps就已足够,而体育科学等超高速动作分析则使用360fps或更高。 + +**Q. 标记点交换发生的频率有多高?** + +如果标记点集设计良好且摄像头数量充足,实时拍摄中交换现象很少发生。但在快速动作或标记点间距较近的动作(如双手合十等)中概率会增加,这些区间在后处理中校正。 + +**Q. 三角测量2台就够了,为什么要安装30台?** + +2台只是理论最小值。实际上需要考虑遮挡(标记点被挡住)、不同摄像头角度导致的精度差异、冗余保障等因素。布置30台后,任何标记点都始终被多台摄像头观测,能够实现稳定精确的追踪。 + +**Q. 多久需要进行一次标定?** + +通常在每个拍摄日开始前进行一次。但长时间拍摄时,温度变化或摄像头微小移动可能导致标定偏移,因此4~6小时连续拍摄时建议中途重新标定。使用OptiTrack Motive的Continuous Calibration功能,即使在拍摄过程中也能进行实时校正。 + +**Q. 不能穿闪亮的衣服吗?** + +由于动作捕捉摄像头检测的是红外反射,闪亮材质(金属装饰、亮片、有光泽的合成纤维等)可能反射红外线并产生虚假标记点(Ghost Marker)。穿戴专用动捕服或哑光材质的舒适衣物是最佳选择。 + +--- + +如果您对光学动作捕捉的技术结构有更多疑问,欢迎在[联系页面](/contact)随时提问。如果您想在明格工作室亲身体验,请查看[服务介绍](/services)。 diff --git a/build-blog.js b/build-blog.js new file mode 100644 index 0000000..13bd6e6 --- /dev/null +++ b/build-blog.js @@ -0,0 +1,396 @@ +#!/usr/bin/env node +/** + * 밍글 스튜디오 블로그 빌드 스크립트 + * 마크다운 파일을 HTML로 변환하여 블로그 페이지 생성 + * + * 사용법: node build-blog.js + * + * 디렉토리 구조: + * blog/posts/{slug}/ + * ko.md, en.md, ja.md, zh.md ← 언어별 마크다운 + * images/ ← 글별 이미지 + * + * 출력: + * devlog/{slug}.html ← 한국어 글 + * en/devlog/{slug}.html ← 영어 글 + * ja/devlog/{slug}.html ← 일본어 글 + * zh/devlog/{slug}.html ← 중국어 글 + * devlog/index.json ← 목록용 메타데이터 + */ + +const fs = require('fs'); +const path = require('path'); +const matter = require('gray-matter'); +const { marked } = require('marked'); + +const POSTS_DIR = path.join(__dirname, 'blog', 'posts'); +const LANGS = ['ko', 'en', 'ja', 'zh']; +const SITE_URL = 'https://minglestudio.co.kr'; + +// 언어별 설정 +const LANG_CONFIG = { + ko: { outDir: 'devlog', htmlLang: 'ko', locale: 'ko_KR', blogTitle: 'DevLog', studioName: '밍글 스튜디오', prefix: '' }, + en: { outDir: 'en/devlog', htmlLang: 'en', locale: 'en_US', blogTitle: 'DevLog', studioName: 'Mingle Studio', prefix: '/en' }, + ja: { outDir: 'ja/devlog', htmlLang: 'ja', locale: 'ja_JP', blogTitle: 'DevLog', studioName: 'ミングルスタジオ', prefix: '/ja' }, + zh: { outDir: 'zh/devlog', htmlLang: 'zh', locale: 'zh_CN', blogTitle: 'DevLog', studioName: '明格工作室', prefix: '/zh' } +}; + +const NAV_LABELS = { + ko: { about: 'About', services: 'Services', portfolio: 'Portfolio', gallery: 'Gallery', schedule: 'Schedule', devlog: 'DevLog', contact: 'Contact', qna: 'Q&A' }, + en: { about: 'About', services: 'Services', portfolio: 'Portfolio', gallery: 'Gallery', schedule: 'Schedule', devlog: 'DevLog', contact: 'Contact', qna: 'Q&A' }, + ja: { about: '紹介', services: 'サービス', portfolio: 'ポートフォリオ', gallery: 'ギャラリー', schedule: 'スケジュール', devlog: 'DevLog', contact: 'お問い合わせ', qna: 'Q&A' }, + zh: { about: '关于', services: '服务', portfolio: '作品集', gallery: '画廊', schedule: '日程', devlog: 'DevLog', contact: '联系', qna: 'Q&A' } +}; + +const BACK_TO_LIST = { ko: '← 목록으로', en: '← Back to list', ja: '← 一覧に戻る', zh: '← 返回列表' }; +const SHARE_TEXT = { ko: '공유하기', en: 'Share', ja: 'シェアする', zh: '分享' }; +const READ_MORE = { ko: '자세히 보기', en: 'Read more', ja: '続きを読む', zh: '阅读更多' }; +const PUBLISHED = { ko: '발행일', en: 'Published', ja: '公開日', zh: '发布日期' }; + +// marked 설정 — 이미지 경로를 상대 경로로 변환 +marked.use({ + renderer: { + image(token) { + const src = token.href; + const alt = token.text || ''; + const title = token.title ? ` title="${token.title}"` : ''; + return `
    ${alt}
    ${alt}
    `; + } + } +}); + +function build() { + if (!fs.existsSync(POSTS_DIR)) { + console.log('blog/posts/ 디렉토리가 없습니다. 빌드할 글이 없습니다.'); + return; + } + + const slugs = fs.readdirSync(POSTS_DIR).filter(f => + fs.statSync(path.join(POSTS_DIR, f)).isDirectory() + ); + + if (slugs.length === 0) { + console.log('빌드할 글이 없습니다.'); + return; + } + + // 글별 메타데이터 수집 + const allPosts = []; + + for (const slug of slugs) { + const postDir = path.join(POSTS_DIR, slug); + const koFile = path.join(postDir, 'ko.md'); + if (!fs.existsSync(koFile)) { + console.warn(`[SKIP] ${slug}/ko.md 없음`); + continue; + } + + const koMatter = matter(fs.readFileSync(koFile, 'utf-8')); + const meta = koMatter.data; + + // 이미지 디렉토리 확인 및 복사 + const imgSrcDir = path.join(postDir, 'images'); + if (fs.existsSync(imgSrcDir)) { + for (const lang of LANGS) { + const cfg = LANG_CONFIG[lang]; + const imgDestDir = path.join(__dirname, cfg.outDir, slug, 'images'); + copyDirSync(imgSrcDir, imgDestDir); + } + } + + // 각 언어별 HTML 생성 + for (const lang of LANGS) { + const mdFile = path.join(postDir, `${lang}.md`); + if (!fs.existsSync(mdFile)) continue; + + const { data, content } = matter(fs.readFileSync(mdFile, 'utf-8')); + const title = data.title || meta.title || slug; + const description = data.description || meta.description || ''; + const date = data.date || meta.date || ''; + const thumbnail = data.thumbnail || meta.thumbnail || ''; + const category = data.category || meta.category || ''; + + // marked가 한글 문맥에서 **bold** 변환을 누락하는 경우 후처리 + const htmlContent = marked(content).replace(/\*\*(.+?)\*\*/g, '$1'); + const cfg = LANG_CONFIG[lang]; + + // 이미지 경로: 블로그 글 HTML에서 images/... 로 상대 참조 + const postHtml = buildPostPage({ lang, cfg, slug, title, description, date, thumbnail, category, htmlContent, mdContent: content }); + + const outDir = path.join(__dirname, cfg.outDir); + fs.mkdirSync(path.join(outDir, slug), { recursive: true }); + fs.writeFileSync(path.join(outDir, `${slug}.html`), postHtml, 'utf-8'); + console.log(`[OK] ${cfg.outDir}/${slug}.html`); + } + + // 메타데이터 수집 (목록용) + allPosts.push({ + slug, + date: meta.date || '', + category: meta.category || '', + thumbnail: meta.thumbnail || '', + titles: {}, + descriptions: {}, + categories: {} + }); + + for (const lang of LANGS) { + const mdFile = path.join(postDir, `${lang}.md`); + if (!fs.existsSync(mdFile)) continue; + const { data } = matter(fs.readFileSync(mdFile, 'utf-8')); + allPosts[allPosts.length - 1].titles[lang] = data.title || ''; + allPosts[allPosts.length - 1].descriptions[lang] = data.description || ''; + allPosts[allPosts.length - 1].categories[lang] = data.category || ''; + } + } + + // 날짜 내림차순 정렬 + allPosts.sort((a, b) => (b.date || '').localeCompare(a.date || '')); + + // index.json 생성 + const indexPath = path.join(__dirname, 'devlog', 'index.json'); + fs.writeFileSync(indexPath, JSON.stringify(allPosts, null, 2), 'utf-8'); + console.log(`[OK] blog/index.json (${allPosts.length}건)`); +} + +// 마크다운에서 FAQ 추출: **Q. 질문** + 다음 줄(들)이 답변 +function extractFAQ(mdContent) { + const faq = []; + const lines = mdContent.split('\n'); + let i = 0; + while (i < lines.length) { + const qMatch = lines[i].match(/^\*\*Q\.\s*(.+?)\*\*$/); + if (qMatch) { + const question = qMatch[1]; + const answerLines = []; + i++; + while (i < lines.length && !lines[i].match(/^\*\*Q\./) && !lines[i].match(/^---/) && !lines[i].match(/^## /)) { + if (lines[i].trim()) answerLines.push(lines[i].trim()); + i++; + } + if (answerLines.length > 0) { + faq.push({ question, answer: answerLines.join(' ') }); + } + } else { + i++; + } + } + return faq; +} + +function buildPostPage({ lang, cfg, slug, title, description, date, thumbnail, category, htmlContent, mdContent }) { + const pageTitle = `${title} - ${cfg.studioName} ${cfg.blogTitle}`; + const pageUrl = `${SITE_URL}${cfg.prefix}/devlog/${slug}`; + const thumbUrl = thumbnail ? `${SITE_URL}/blog/posts/${slug}/${thumbnail}` : `${SITE_URL}/images/logo/mingle-OG.png`; + const dateFormatted = formatDate(date, lang); + const nav = NAV_LABELS[lang]; + + return ` + + + + + + + + ${escapeHtml(pageTitle)} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${(() => { + const faq = extractFAQ(mdContent || ''); + if (faq.length === 0) return ''; + return ` + `; + })()} + + + + Skip to content + +
    + +
    + +
    +
    +
    +
    + ${BACK_TO_LIST[lang]} + ${category ? `${escapeHtml(category)}` : ''} +

    ${escapeHtml(title)}

    + +
    +
    +
    +
    + ${htmlContent} +
    +
    + +
    +
    + + + + + + +`; +} + +function formatDate(dateStr, lang) { + if (!dateStr) return ''; + const d = new Date(dateStr + 'T00:00:00'); + if (isNaN(d)) return dateStr; + const y = d.getFullYear(), m = d.getMonth() + 1, day = d.getDate(); + if (lang === 'ko') return `${y}년 ${m}월 ${day}일`; + if (lang === 'ja') return `${y}年${m}月${day}日`; + if (lang === 'zh') return `${y}年${m}月${day}日`; + const months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']; + return `${months[m - 1]} ${day}, ${y}`; +} + +function escapeHtml(str) { + return String(str).replace(/&/g,'&').replace(//g,'>').replace(/"/g,'"'); +} + +function copyDirSync(src, dest) { + fs.mkdirSync(dest, { recursive: true }); + for (const entry of fs.readdirSync(src)) { + const srcPath = path.join(src, entry); + const destPath = path.join(dest, entry); + if (fs.statSync(srcPath).isDirectory()) { + copyDirSync(srcPath, destPath); + } else { + fs.copyFileSync(srcPath, destPath); + } + } +} + +build(); diff --git a/components/header.html b/components/header.html index 114af17..84fde47 100644 --- a/components/header.html +++ b/components/header.html @@ -14,6 +14,7 @@
  • Gallery
  • Schedule
  • +
  • DevLog
  • Contact
  • Q&A
  • diff --git a/contact.html b/contact.html index b5284b7..3327d7f 100644 --- a/contact.html +++ b/contact.html @@ -99,6 +99,7 @@
  • Portfolio
  • Gallery
  • Schedule
  • +
  • DevLog
  • Contact
  • Q&A
  • diff --git a/css/devlog.css b/css/devlog.css new file mode 100644 index 0000000..c2b04c3 --- /dev/null +++ b/css/devlog.css @@ -0,0 +1,633 @@ +/* ======================================== + 블로그 스타일 + ======================================== */ + +/* === 목록 페이지 === */ +.blog-hero { + padding: calc(var(--navbar-height) + var(--spacing-3xl)) 0 var(--spacing-2xl); + text-align: center; + background: var(--gradient-main); + color: #fff; +} + +.blog-hero h1 { + font-size: var(--font-5xl); + font-weight: 700; + margin-bottom: var(--spacing-md); +} + +.blog-hero p { + font-size: var(--font-xl); + opacity: .95; + max-width: 600px; + margin: 0 auto; +} + +.blog-list-section { + padding: var(--spacing-3xl) var(--spacing-xl); + max-width: 1000px; + margin: 0 auto; +} + +/* 카테고리 필터 */ +.blog-filters { + display: flex; + gap: var(--spacing-sm); + flex-wrap: wrap; + margin-bottom: var(--spacing-2xl); + justify-content: center; +} + +.blog-filter-btn { + padding: var(--spacing-xs) var(--spacing-lg); + border: 1.5px solid var(--border-color); + border-radius: 50px; + background: transparent; + color: var(--text-primary); + font-size: .9rem; + cursor: pointer; + transition: all .2s; +} + +.blog-filter-btn:hover, +.blog-filter-btn.active { + background: var(--primary-color); + border-color: var(--primary-color); + color: #fff; +} + +/* 글 그리드 */ +.blog-grid { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); + gap: var(--spacing-xl); +} + +.blog-card { + background: var(--bg-white); + border-radius: var(--border-radius-lg); + box-shadow: var(--shadow-md); + overflow: hidden; + transition: transform .25s, box-shadow .25s; + display: flex; + flex-direction: column; +} + +.blog-card:hover { + transform: translateY(-4px); + box-shadow: var(--shadow-lg); +} + +.blog-card-thumb { + width: 100%; + aspect-ratio: 16 / 9; + object-fit: cover; + background: var(--bg-secondary); +} + +.blog-card-thumb-placeholder { + width: 100%; + aspect-ratio: 16 / 9; + background: linear-gradient(135deg, var(--primary-color) 0%, #ff6600 100%); + display: flex; + align-items: center; + justify-content: center; + color: #fff; + font-size: 2rem; +} + +.blog-card-body { + padding: var(--spacing-lg); + flex: 1; + display: flex; + flex-direction: column; +} + +.blog-card-category { + display: inline-block; + font-size: .75rem; + font-weight: 700; + text-transform: uppercase; + color: var(--primary-color); + margin-bottom: var(--spacing-xs); +} + +.blog-card-title { + font-size: 1.15rem; + font-weight: 700; + margin-bottom: var(--spacing-sm); + color: var(--text-primary); + line-height: 1.4; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + overflow: hidden; +} + +.blog-card-desc { + font-size: .9rem; + color: var(--text-secondary); + line-height: 1.6; + flex: 1; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; + overflow: hidden; + margin-bottom: var(--spacing-md); +} + +.blog-card-footer { + display: flex; + align-items: center; + justify-content: space-between; + font-size: .82rem; + color: var(--text-secondary); +} + +.blog-card-date { + display: flex; + align-items: center; + gap: var(--spacing-xs); +} + +.blog-card-link { + color: var(--primary-color); + font-weight: 600; + text-decoration: none; +} + +.blog-card-link:hover { + text-decoration: underline; +} + +/* 빈 상태 */ +.blog-empty { + text-align: center; + padding: var(--spacing-3xl) 0; + color: var(--text-secondary); +} + +.blog-empty i { + font-size: 3rem; + margin-bottom: var(--spacing-md); + opacity: .4; +} + +.blog-empty p { + font-size: 1.1rem; +} + +/* 로딩 */ +.blog-loading { + text-align: center; + padding: var(--spacing-3xl) 0; +} + +.blog-loading .loading-spinner { + width: 36px; + height: 36px; + border: 3px solid var(--border-color); + border-top-color: var(--primary-color); + border-radius: 50%; + animation: spin .8s linear infinite; + margin: 0 auto var(--spacing-md); +} + +@keyframes spin { + to { transform: rotate(360deg); } +} + +/* === 글 상세 페이지 === */ +.blog-post-header { + padding: calc(var(--navbar-height) + var(--spacing-3xl)) 0 var(--spacing-2xl); + background: var(--gradient-main); + color: #fff; +} + +.blog-post-header .container { + max-width: 800px; + margin: 0 auto; + padding: 0 var(--spacing-xl); +} + +.blog-back-link { + display: inline-block; + color: rgba(255,255,255,.8); + text-decoration: none; + font-size: .9rem; + margin-bottom: var(--spacing-lg); + transition: color .2s; +} + +.blog-back-link:hover { + color: #fff; +} + +.blog-category { + display: inline-block; + padding: var(--spacing-xs) var(--spacing-md); + background: rgba(255,255,255,.2); + border-radius: 50px; + font-size: .8rem; + font-weight: 600; + margin-bottom: var(--spacing-md); +} + +.blog-post-title { + font-size: 2rem; + font-weight: 800; + line-height: 1.3; + margin-bottom: var(--spacing-md); +} + +.blog-post-meta { + font-size: .9rem; + opacity: .8; +} + +.blog-post-meta time { + display: flex; + align-items: center; + gap: var(--spacing-xs); +} + +/* 본문 */ +.blog-post-body { + padding: var(--spacing-3xl) 0; +} + +.blog-post-body .container { + max-width: 800px; + margin: 0 auto; + padding: 0 var(--spacing-xl); +} + +.blog-post-body h2 { + font-size: 1.6rem; + font-weight: 700; + margin: var(--spacing-2xl) 0 var(--spacing-md); + color: var(--text-primary); + border-left: 4px solid var(--primary-color); + padding-left: var(--spacing-md); +} + +.blog-post-body h3 { + font-size: 1.3rem; + font-weight: 700; + margin: var(--spacing-xl) 0 var(--spacing-sm); + color: var(--text-primary); +} + +.blog-post-body p { + font-size: 1.05rem; + line-height: 1.85; + color: var(--text-secondary); + margin-bottom: var(--spacing-lg); +} + +.blog-post-body ul, +.blog-post-body ol { + margin-bottom: var(--spacing-lg); + padding-left: var(--spacing-xl); +} + +.blog-post-body li { + font-size: 1.05rem; + line-height: 1.8; + color: var(--text-secondary); + margin-bottom: var(--spacing-xs); +} + +.blog-post-body blockquote { + margin: var(--spacing-xl) 0; + padding: var(--spacing-lg) var(--spacing-xl); + border-left: 4px solid var(--primary-color); + background: var(--bg-secondary); + border-radius: 0 var(--border-radius) var(--border-radius) 0; +} + +.blog-post-body blockquote p { + margin-bottom: 0; + font-style: italic; +} + +.blog-post-body code { + background: var(--bg-secondary); + padding: 2px 6px; + border-radius: 4px; + font-size: .92em; +} + +.blog-post-body pre { + background: var(--bg-secondary); + padding: var(--spacing-lg); + border-radius: var(--border-radius); + overflow-x: auto; + margin-bottom: var(--spacing-lg); +} + +.blog-post-body pre code { + background: none; + padding: 0; +} + +/* 이미지 figure */ +.blog-figure { + margin: var(--spacing-xl) 0; + text-align: center; +} + +.blog-figure img { + max-width: 100%; + border-radius: var(--border-radius-lg); + box-shadow: var(--shadow-md); +} + +.blog-figure figcaption { + margin-top: var(--spacing-sm); + font-size: .85rem; + color: var(--text-secondary); + font-style: italic; +} + +/* 하단 네비 */ +.blog-post-footer { + padding: var(--spacing-2xl) 0; + border-top: 1px solid var(--border-color); +} + +.blog-post-footer .container { + max-width: 800px; + margin: 0 auto; + padding: 0 var(--spacing-xl); +} + +.blog-back-btn { + display: inline-flex; + align-items: center; + gap: var(--spacing-sm); + padding: var(--spacing-sm) var(--spacing-xl); + background: var(--primary-color); + color: #fff; + border-radius: 50px; + text-decoration: none; + font-weight: 600; + transition: background .2s; +} + +.blog-back-btn:hover { + background: #e67a00; +} + +/* 테이블 */ +.blog-post-body table { + width: 100%; + border-collapse: separate; + border-spacing: 0; + margin: var(--spacing-xl) 0; + border-radius: var(--border-radius-lg); + overflow: hidden; + box-shadow: var(--shadow-md); + font-size: .95rem; +} + +.blog-post-body thead { + background: var(--gradient-main); + color: #fff; +} + +.blog-post-body thead th { + padding: var(--spacing-md) var(--spacing-lg); + font-weight: 700; + text-align: left; + white-space: nowrap; +} + +.blog-post-body tbody tr { + background: var(--bg-white); + transition: background .15s; +} + +.blog-post-body tbody tr:nth-child(even) { + background: var(--bg-secondary); +} + +.blog-post-body tbody tr:hover { + background: rgba(255, 136, 0, .07); +} + +.blog-post-body tbody td { + padding: var(--spacing-sm) var(--spacing-lg); + border-top: 1px solid var(--border-color); + color: var(--text-secondary); + line-height: 1.7; +} + +.blog-post-body tbody td:first-child { + font-weight: 600; + color: var(--text-primary); + white-space: nowrap; +} + +.blog-post-body tbody td strong { + color: var(--primary-color); +} + +@media (max-width: 768px) { + .blog-post-body table { + display: block; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } + + .blog-post-body thead th, + .blog-post-body tbody td { + padding: var(--spacing-sm) var(--spacing-md); + font-size: .85rem; + } +} + +/* 파이프라인 플로우차트 */ +.pipeline-flow { + margin: var(--spacing-xl) 0; + display: flex; + flex-direction: column; + gap: 0; + align-items: center; +} + +.pipeline-step { + background: var(--bg-white); + border: 1.5px solid var(--border-color); + border-radius: var(--border-radius-lg); + padding: var(--spacing-md) var(--spacing-lg); + width: 100%; + max-width: 600px; + transition: border-color .2s, box-shadow .2s; +} + +.pipeline-step:hover { + border-color: var(--primary-color); + box-shadow: var(--shadow-md); +} + +.pipeline-step-title { + font-weight: 700; + color: var(--primary-color); + font-size: .95rem; + margin-bottom: 4px; +} + +.pipeline-step-desc { + font-size: .88rem; + color: var(--text-secondary); + line-height: 1.6; + margin: 0; +} + +.pipeline-step-sub { + padding-left: var(--spacing-lg); + margin-top: 4px; +} + +.pipeline-step-sub p { + font-size: .84rem; + color: var(--text-secondary); + margin: 2px 0; + line-height: 1.5; +} + +.pipeline-arrow { + font-size: 1.3rem; + color: var(--primary-color); + line-height: 1; + padding: 4px 0; +} + +/* 네트워크 다이어그램 */ +.network-diagram { + margin: var(--spacing-xl) 0; + background: var(--bg-secondary); + border-radius: var(--border-radius-lg); + padding: var(--spacing-2xl) var(--spacing-xl); + display: flex; + align-items: stretch; + justify-content: center; + gap: 0; + box-shadow: var(--shadow-sm); +} + +.network-cameras { + display: flex; + flex-direction: column; + justify-content: space-between; + gap: 8px; + flex-shrink: 0; +} + +.network-cam { + display: flex; + align-items: center; +} + +.network-cam-icon { + width: 72px; + height: 34px; + background: var(--gradient-main); + border-radius: 8px; + display: flex; + align-items: center; + justify-content: center; + color: #fff; + font-size: .7rem; + font-weight: 700; + flex-shrink: 0; + letter-spacing: .5px; +} + +.network-lines { + width: 100px; + flex-shrink: 0; + align-self: stretch; +} + +.network-lines line { + stroke: var(--primary-color); + stroke-width: 1.5; + opacity: .4; +} + +.network-center { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: 0; + flex-shrink: 0; +} + +.network-switch, .network-pc { + padding: var(--spacing-lg) var(--spacing-2xl); + border-radius: var(--border-radius-lg); + font-weight: 700; + font-size: .95rem; + text-align: center; + box-shadow: var(--shadow-md); + white-space: nowrap; +} + +.network-switch { + background: var(--gradient-main); + color: #fff; +} + +.network-pc { + background: var(--bg-white); + border: 2px solid var(--primary-color); + color: var(--primary-color); +} + +.network-link { + width: 2px; + height: 40px; + background: var(--primary-color); + opacity: .4; +} + +@media (max-width: 768px) { + .network-diagram { + flex-direction: column; + padding: var(--spacing-xl) var(--spacing-lg); + gap: var(--spacing-md); + align-items: center; + } + + .network-cameras { + flex-direction: row; + flex-wrap: wrap; + justify-content: center; + gap: 6px; + } + + .network-lines { display: none; } + + .network-cam-icon { + width: 52px; + height: 30px; + font-size: .6rem; + } + + .pipeline-step { + max-width: 100%; + } +} + +/* === 반응형 === */ +@media (max-width: 768px) { + .blog-hero h1 { font-size: var(--font-3xl); } + .blog-hero p { font-size: var(--font-base); } + .blog-grid { grid-template-columns: 1fr; } + .blog-post-title { font-size: 1.5rem; } + .blog-post-body h2 { font-size: 1.3rem; } + .blog-post-body p, .blog-post-body li { font-size: 1rem; } +} diff --git a/devlog.html b/devlog.html new file mode 100644 index 0000000..33e996b --- /dev/null +++ b/devlog.html @@ -0,0 +1,187 @@ + + + + + + + + + + DevLog - 밍글 스튜디오 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 본문 바로가기 + + +
    + + +
    + +
    +
    +
    +

    DevLog

    +

    모션캡처 기술과 작업 과정을 공유합니다

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + + + + + + + + + \ No newline at end of file diff --git a/devlog/index.json b/devlog/index.json new file mode 100644 index 0000000..d1474dd --- /dev/null +++ b/devlog/index.json @@ -0,0 +1,50 @@ +[ + { + "slug": "inertial-vs-optical-mocap", + "date": "2026-04-05", + "category": "모션캡처 기술", + "thumbnail": "images/thumbnail.webp", + "titles": { + "ko": "모션캡처 관성식 vs 광학식, 어떤 차이가 있을까?", + "en": "Inertial vs Optical Motion Capture: What's the Difference?", + "ja": "モーションキャプチャー 慣性式 vs 光学式、どんな違いがある?", + "zh": "动作捕捉惯性式 vs 光学式,有什么区别?" + }, + "descriptions": { + "ko": "모션캡처의 두 가지 대표 방식인 관성식(IMU)과 광학식(Optical)의 원리, 장비별 특징, 커뮤니티 평가까지 한눈에 비교합니다.", + "en": "A comprehensive comparison of the two major motion capture methods — inertial (IMU) and optical — covering their principles, key equipment, and community feedback.", + "ja": "モーションキャプチャーの二大方式である慣性式(IMU)と光学式(Optical)の原理、機材ごとの特徴、コミュニティの評価まで一目で比較します。", + "zh": "全面比较动作捕捉两大主流方式——惯性式(IMU)与光学式(Optical)的原理、各类设备特征及社区评价。" + }, + "categories": { + "ko": "모션캡처 기술", + "en": "Motion Capture Technology", + "ja": "モーションキャプチャー技術", + "zh": "动作捕捉技术" + } + }, + { + "slug": "optical-mocap-pipeline", + "date": "2026-04-05", + "category": "모션캡처 기술", + "thumbnail": "images/thumbnail.webp", + "titles": { + "ko": "광학식 모션캡처 파이프라인 완전 해부 — 카메라부터 모션 데이터까지", + "en": "Complete Anatomy of the Optical Motion Capture Pipeline — From Cameras to Motion Data", + "ja": "光学式モーションキャプチャーパイプライン完全解剖 ― カメラからモーションデータまで", + "zh": "光学动作捕捉管线完全解析 — 从摄像头到动作数据" + }, + "descriptions": { + "ko": "광학식 모션캡처의 전체 기술 파이프라인을 심화 해설합니다. 카메라 설치, PoE 네트워크, 2D 센트로이드, 캘리브레이션, 3D 복원, 스켈레톤 솔빙, 후처리, 현장 실무 이슈까지 10단계로 상세히 다룹니다.", + "en": "An in-depth guide to the entire optical motion capture technical pipeline. We cover camera installation, PoE networking, 2D centroids, calibration, 3D reconstruction, skeleton solving, post-processing, and on-set practical issues in 10 detailed steps.", + "ja": "光学式モーションキャプチャーの技術パイプライン全体を詳しく解説します。カメラ設置、PoEネットワーク、2Dセントロイド、キャリブレーション、3D復元、スケルトンソルビング、後処理、現場の実務課題まで10ステップで詳細に取り上げます。", + "zh": "深入讲解光学动作捕捉的完整技术管线。涵盖摄像头安装、PoE网络、2D质心、标定、3D重建、骨骼解算、后处理以及现场实际问题,共10个详细步骤。" + }, + "categories": { + "ko": "모션캡처 기술", + "en": "Motion Capture Technology", + "ja": "モーションキャプチャー技術", + "zh": "动作捕捉技术" + } + } +] \ No newline at end of file diff --git a/devlog/inertial-vs-optical-mocap.html b/devlog/inertial-vs-optical-mocap.html new file mode 100644 index 0000000..e95202b --- /dev/null +++ b/devlog/inertial-vs-optical-mocap.html @@ -0,0 +1,508 @@ + + + + + + + + + 모션캡처 관성식 vs 광학식, 어떤 차이가 있을까? - 밍글 스튜디오 DevLog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Skip to content + +
    + +
    + +
    +
    +
    +
    + ← 목록으로 + 모션캡처 기술 +

    모션캡처 관성식 vs 광학식, 어떤 차이가 있을까?

    + +
    +
    +
    +
    +

    모션캡처에 관심을 가지다 보면 가장 먼저 마주치는 질문이 있습니다.

    +

    "관성식이랑 광학식, 뭐가 다른 거야?"

    +

    이 글에서는 두 방식의 원리부터 대표 장비, 실제 사용자들의 평가까지 정리해 보겠습니다.

    +
    +

    광학식(Optical) 모션캡처란?

    +

    광학식은 적외선 카메라반사 마커를 이용하는 방식입니다.

    +

    촬영 공간 주변에 여러 대의 적외선(IR) 카메라를 설치하고, 배우의 관절 위치에 지름 10~20mm 정도의 재귀반사(Retro-reflective) 마커를 부착합니다. 각 카메라는 적외선 LED를 쏘아 마커에서 반사되어 돌아오는 빛을 감지하고, 이를 통해 2D 이미지상의 마커 좌표를 추출합니다.

    +

    최소 2대 이상의 카메라가 같은 마커를 동시에 포착하면, 삼각측량(Triangulation) 원리로 해당 마커의 정확한 3D 좌표를 계산할 수 있습니다. 카메라 수가 많을수록 정확도가 올라가고 사각지대가 줄어들기 때문에, 전문 스튜디오에서는 보통 12~40대 이상의 카메라를 배치합니다.

    +

    이렇게 매 프레임마다 모든 마커의 3D 좌표가 절대 위치로 기록되므로, 시간이 아무리 지나도 데이터가 누적 오차 없이 정확하게 유지됩니다.

    +

    +

    장점

    +
      +
    • 서브밀리미터 정확도 — 0.1mm 수준의 정밀한 위치 추적이 가능
    • +
    • 드리프트 없음 — 절대 좌표 기반이라 시간이 지나도 데이터가 밀리지 않음
    • +
    • 다수 오브젝트 동시 추적 — 배우 + 소품 + 세트 요소까지 함께 캡처 가능
    • +
    • 낮은 지연시간 — 약 5~10ms로 실시간 피드백에 적합
    • +
    +

    한계

    +
      +
    • 전용 촬영 공간이 필요 (카메라 설치 + 환경 통제)
    • +
    • 셋업 및 캘리브레이션에 30~90분 소요
    • +
    • 오클루전(가림) 이슈 — 마커가 카메라에 보이지 않으면 추적이 끊김
    • +
    +

    대표 장비

    +

    OptiTrack (PrimeX 시리즈)

    +
      +
    • 광학식 중 가성비 최강으로 평가받는 브랜드
    • +
    • Motive 소프트웨어의 사용 편의성이 좋고, Unity/Unreal 플러그인 생태계가 탄탄
    • +
    • 게임 개발사, VTuber 프로덕션, 대학 연구실에서 폭넓게 사용
    • +
    • 커뮤니티 평가: "이 가격대에서 이 정확도는 OptiTrack이 유일하다" 는 의견이 지배적
    • +
    +

    Vicon (Vero / Vantage 시리즈)

    +
      +
    • 영화 VFX 업계의 골드 스탠다드 — 헐리우드 AAA급 영화 대부분이 Vicon으로 촬영
    • +
    • 최상급 정확도와 안정성, 강력한 후처리 소프트웨어(Shogun)
    • +
    • 커뮤니티 평가: "정확도는 최고지만, 소규모 스튜디오에는 과한 투자"
    • +
    +

    Qualisys

    +
      +
    • 의료/스포츠 바이오메카닉스 분야에서 강세
    • +
    • 보행 분석, 임상 연구, 스포츠 과학에 특화
    • +
    • 엔터테인먼트 분야 사용자 커뮤니티는 상대적으로 작은 편
    • +
    +
    +

    관성식(IMU) 모션캡처란?

    +

    관성식은 IMU(Inertial Measurement Unit, 관성 측정 장치) 센서를 몸에 부착하거나 슈트에 내장하여 움직임을 측정하는 방식입니다.

    +

    각 IMU 센서에는 세 가지 핵심 센서가 들어 있습니다:

    +
      +
    • 가속도계(Accelerometer) — 선형 가속도를 측정하여 이동 방향과 속도를 파악
    • +
    • 자이로스코프(Gyroscope) — 각속도를 측정하여 회전량을 계산
    • +
    • 지자기계(Magnetometer) — 지구 자기장을 기준으로 방향(Heading)을 보정
    • +
    +

    이 세 센서의 데이터를 센서 퓨전(Sensor Fusion) 알고리즘으로 결합하면, 해당 센서가 부착된 신체 부위의 3D 방향(Orientation)을 실시간으로 계산할 수 있습니다. 보통 15~17개의 센서를 상체, 하체, 팔, 다리 등 주요 관절에 배치하고, 각 센서 간의 관계를 통해 전신 골격 데이터를 추출합니다.

    +

    다만 가속도계를 이중 적분하여 위치를 구하는 과정에서 오차가 누적(드리프트)되기 때문에, "공간 어디에 서 있는가"라는 글로벌 위치는 시간이 지날수록 부정확해집니다. 이것이 관성식의 근본적인 한계입니다.

    +

    +

    장점

    +
      +
    • 공간 제약 없음 — 야외, 좁은 공간, 어디서든 가능
    • +
    • 빠른 셋업 — 슈트 착용 후 5~15분이면 캡처 시작
    • +
    • 오클루전 문제 없음 — 센서가 몸에 부착되어 가림 이슈가 없음
    • +
    +

    한계

    +
      +
    • 드리프트 — 시간이 지날수록 위치 데이터가 밀려남 (누적 오차)
    • +
    • 글로벌 위치 정확도 낮음 — "어디에 서 있는가"를 정확히 알기 어려움
    • +
    • 자기장 간섭 — 금속 구조물, 전자기기 근처에서 데이터 왜곡 발생
    • +
    • 소품이나 환경과의 상호작용 추적이 어려움
    • +
    +

    대표 장비

    +

    Xsens MVN (현 Movella)

    +
      +
    • 관성식 중 정확도와 신뢰성 1위로 꼽히는 장비
    • +
    • 자동차 산업, 인체공학, 게임 애니메이션 분야에서 폭넓게 활용
    • +
    • 커뮤니티 평가: "관성식을 쓸 거면 Xsens가 답이다", 다만 "글로벌 위치 드리프트는 어쩔 수 없다"
    • +
    +

    Rokoko Smartsuit Pro

    +
      +
    • 가격 접근성이 최대 장점 — 인디 개발자, 1인 크리에이터에게 인기
    • +
    • Rokoko Studio 소프트웨어가 직관적이고 리타겟팅 기능이 편리
    • +
    • 커뮤니티 평가: "이 가격에 이 정도면 놀랍다", 반면 "장시간 촬영 시 드리프트가 눈에 띈다", "정밀 작업에는 한계가 있다"
    • +
    +

    Noitom Perception Neuron

    +
      +
    • 일부 모델에서 손가락 추적 지원, 컴팩트한 폼팩터
    • +
    • 커뮤니티 평가: "Neuron 3에서 많이 개선됐지만", "드리프트 이슈가 아직 있다", "소프트웨어(Axis Studio) 안정성이 아쉽다"
    • +
    +
    +

    한눈에 비교

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    항목광학식 (Optical)관성식 (IMU)
    추적 원리적외선 카메라 + 반사 마커 삼각측량IMU 센서 (가속도계 + 자이로 + 지자기계)
    위치 정확도서브밀리미터 (0.1mm) — 절대 좌표드리프트 발생 — 시간 경과 시 누적 오차
    회전 정확도위치 데이터에서 파생 (매우 높음)1~3도 수준 (센서 퓨전 알고리즘 의존)
    드리프트없음 — 매 프레임 절대 위치 측정있음 — 가속도 이중적분 시 오차 누적
    오클루전(가림)마커가 카메라에 안 보이면 추적 불가문제 없음 — 센서가 직접 몸에 부착
    자기장 간섭영향 없음금속·전자기기 근처에서 데이터 왜곡
    지연시간(Latency)~5-10ms~10-20ms
    셋업 시간30~90분 (카메라 배치 + 캘리브레이션)5~15분 (슈트 착용 + 간단 보정)
    촬영 공간전용 스튜디오 필요 (카메라 설치·환경 통제)어디서든 가능 (야외, 좁은 공간 OK)
    다인 촬영마커셋 구분으로 동시 캡처 가능슈트별 독립이라 동시 가능하나 상호작용 어려움
    소품/오브젝트 추적마커 부착으로 함께 추적 가능별도 센서 필요, 실질적으로 어려움
    손가락 추적전용 핸드 마커셋으로 고정밀 추적일부 장비만 지원, 정밀도 제한적
    후처리 작업량오클루전 구간 갭 필링 필요드리프트 보정 + 위치 정리 필요
    대표 장비OptiTrack, Vicon, QualisysXsens, Rokoko, Noitom
    주요 활용 분야게임/영화 최종 캡처, VTuber 라이브, 연구프리비즈, 야외 촬영, 인디/개인 콘텐츠
    +
    +

    마커리스(Markerless) 방식은?

    +

    최근에는 카메라 영상만으로 AI가 동작을 추출하는 마커리스 모션캡처도 주목받고 있습니다. Move.ai, Captury, Plask 등이 대표적이며, 마커 부착 없이 일반 카메라로도 캡처가 가능하다는 점에서 진입 장벽이 매우 낮습니다.

    +

    하지만 현 시점에서 마커리스 방식은 정확도와 안정성 면에서 광학식·관성식에 크게 미치지 못합니다. 관절 위치가 튀거나 떨리는 지터(Jitter) 현상이 빈번하고, 빠른 동작이나 오클루전 상황에서 추적이 불안정합니다. 프리비즈나 레퍼런스 수준에서는 활용 가능하지만, 게임·방송·영화 등 최종 결과물에 바로 쓸 수 있는 수준은 아직 아닙니다.

    +

    기술 발전 속도가 빠른 분야이므로 앞으로 기대할 만하지만, 현재 프로 현장에서는 여전히 광학식과 관성식이 주류입니다.

    +
    +

    커뮤니티는 어떻게 평가할까?

    +

    Reddit(r/gamedev, r/vfx), CGSociety 등 모션캡처 관련 커뮤니티에서 반복적으로 등장하는 의견을 정리하면:

    +
    +

    "최종 퀄리티가 중요한 작업은 광학식, 빠른 반복과 접근성이 중요하면 관성식"

    +
    +

    실제로 많은 프로 스튜디오가 두 방식을 병행합니다. 관성식으로 빠르게 프리비즈(사전 시각화)나 동작 블로킹을 잡고, 최종 촬영은 광학식으로 진행하는 워크플로우가 일반적입니다.

    +

    1인 크리에이터나 인디 팀이라면 Rokoko처럼 진입 장벽이 낮은 관성식으로 시작하되, 정밀도가 필요한 프로젝트에서는 광학식 스튜디오를 대관하는 방식이 가장 현실적이라는 의견이 많습니다.

    +
    +

    밍글 스튜디오가 광학식을 선택한 이유

    +

    밍글 스튜디오는 OptiTrack 카메라 30대 (Prime 17 × 16대 + Prime 13 × 14대)를 갖춘 광학식 모션캡처 스튜디오입니다. 광학식을 선택한 이유는 명확합니다.

    +
      +
    • 정확도 — 게임 시네마틱, VTuber 라이브, 방송 콘텐츠 등 최종 결과물에 직결되는 작업에는 서브밀리미터 정확도가 필수적
    • +
    • 실시간 스트리밍 — VTuber 라이브 방송처럼 실시간 피드백이 필요한 상황에서 드리프트 없는 안정적 데이터 제공
    • +
    • 소품 연동 — 칼, 총, 의자 등 소품과의 인터랙션까지 정밀하게 추적 가능
    • +
    • 가성비 — OptiTrack은 Vicon 대비 합리적인 가격으로 프로급 정확도 제공
    • +
    • 손가락 추적 보완 — 광학식의 약점인 손가락 추적을 Rokoko 글러브로 보완하여, 전신은 광학식의 정밀도로, 손가락은 관성식 글러브의 안정적인 추적으로 각 방식의 장점만 결합
    • +
    +

    이처럼 광학식과 관성식은 반드시 양자택일이 아닙니다. 각 방식의 강점을 조합하면 단일 방식으로는 도달하기 어려운 퀄리티를 만들어낼 수 있습니다.

    +

    8m x 7m 캡처 공간에서 30대 카메라가 360도 사각지대 없이 추적하기 때문에, 오클루전 이슈도 최소화됩니다.

    +

    밍글 스튜디오 촬영 워크플로우

    +

    실제로 밍글 스튜디오에서 모션캡처 대관을 이용하시면 다음과 같은 흐름으로 진행됩니다.

    +

    1단계: 사전 협의 +촬영 목적, 필요한 인원 수, 캡처할 동작의 종류를 사전에 상담합니다. 라이브 방송의 경우 아바타, 배경, 프랍(소품) 세팅도 이 단계에서 협의합니다.

    +

    2단계: 촬영 준비 (세팅) +스튜디오에 도착하시면 전문 오퍼레이터가 마커 부착, 캘리브레이션, 아바타 매핑을 진행합니다. 라이브 방송 패키지의 경우 캐릭터·배경·프랍 세팅이 포함되어 있어 별도 준비가 필요 없습니다.

    +

    3단계: 본 촬영 / 라이브 방송 +OptiTrack 30대 카메라 + Rokoko 글러브로 전신과 손가락을 동시에 캡처합니다. 실시간 모니터링을 통해 촬영 현장에서 바로 결과를 확인할 수 있고, 원격 디렉션도 지원합니다.

    +

    4단계: 데이터 전달 / 후처리 +촬영이 끝나면 모션 데이터를 바로 받아보실 수 있습니다. 필요에 따라 데이터 클린업(노이즈 제거, 프레임 보정)이나 고객 아바타에 최적화된 리타게팅 후작업도 가능합니다.

    +
    +

    어떤 방식을 선택해야 할까?

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    상황추천 방식추천 장비이유
    개인 유튜브/VTuber 콘텐츠관성식Rokoko, Perception Neuron간편한 셋업, 공간 제약 없음
    야외·로케이션 촬영관성식Xsens MVN공간 제약 없음, 높은 신뢰성
    프리비즈·동작 블로킹관성식Rokoko, Xsens빠른 반복 작업에 유리
    게임 시네마틱·최종 애니메이션광학식OptiTrack, Vicon서브밀리미터 정확도 필수
    VTuber 라이브 방송 (고퀄리티)광학식OptiTrack실시간 스트리밍 + 드리프트 없음
    소품·환경 인터랙션광학식OptiTrack, Vicon오브젝트에 마커 부착으로 동시 추적
    의료·스포츠 연구광학식Vicon, Qualisys임상 수준 정밀 데이터 필요
    자동차·인체공학 분석관성식Xsens MVN실제 작업 환경에서 측정 가능
    +

    자체 장비 구매가 부담스럽다면, 광학식 스튜디오 대관이 가장 효율적인 선택입니다. 고가의 장비를 직접 갖추지 않아도 프로급 결과물을 얻을 수 있습니다.

    +
    +

    자주 묻는 질문 (FAQ)

    +

    Q. 모션캡처 광학식과 관성식의 가장 큰 차이는 무엇인가요?

    +

    광학식은 적외선 카메라와 반사 마커로 절대 위치를 추적하여 서브밀리미터(0.1mm) 수준의 정확도를 제공합니다. 관성식은 IMU 센서를 착용하여 공간 제약 없이 어디서든 캡처가 가능하지만, 시간이 지날수록 위치 데이터에 드리프트(누적 오차)가 발생합니다.

    +

    Q. VTuber 모션캡처에는 어떤 방식이 좋나요?

    +

    간단한 개인 콘텐츠라면 관성식(Rokoko, Perception Neuron)으로 충분합니다. 하지만 고퀄리티 라이브 방송이나 정밀한 동작이 필요한 경우에는 드리프트가 없는 광학식이 적합합니다.

    +

    Q. 관성식 모션캡처의 드리프트란 무엇인가요?

    +

    드리프트는 IMU 센서의 가속도 데이터를 이중 적분하여 위치를 계산하는 과정에서 생기는 누적 오차입니다. 촬영 시간이 길어질수록 캐릭터의 위치가 실제와 어긋나는 현상이 발생하며, 자기장 간섭이 있는 환경에서는 더 심해질 수 있습니다.

    +

    Q. 광학식 모션캡처의 오클루전 문제는 어떻게 해결하나요?

    +

    오클루전은 마커가 카메라에 가려져 보이지 않을 때 발생합니다. 카메라 수를 늘려 사각지대를 줄이고, 소프트웨어의 갭 필링(Gap Filling) 기능으로 빠진 구간을 보간하여 해결합니다. 밍글 스튜디오의 경우 30대 카메라를 360도로 배치하여 오클루전을 최소화하고 있습니다.

    +

    Q. 두 방식을 함께 사용할 수 있나요?

    +

    네, 가능합니다. 실제로 많은 스튜디오가 전신은 광학식으로, 손가락은 관성식 글러브로 캡처하는 하이브리드 방식을 사용합니다. 밍글 스튜디오도 OptiTrack 광학식에 Rokoko 글러브를 결합하여 전신과 손가락 모두 고품질로 추적합니다.

    +

    Q. 모션캡처 스튜디오를 대관하면 장비를 직접 사지 않아도 되나요?

    +

    맞습니다. 광학식 장비는 직접 구매하면 상당한 투자가 필요하기 때문에, 필요한 프로젝트에서만 스튜디오를 대관하는 것이 가장 효율적인 방법입니다. 장비 구매, 셋업, 유지보수 부담 없이 프로급 결과물을 얻을 수 있습니다.

    +
    +

    광학식 모션캡처, 직접 경험해 보세요

    +

    장비를 직접 구매하지 않아도 됩니다. 밍글 스튜디오에서 OptiTrack 30대 + Rokoko 글러브 풀 셋업을 시간 단위로 이용할 수 있습니다.

    +
      +
    • 모션캡처 녹화 — 전신/페이셜 캡처 + 실시간 모니터링 + 모션 데이터 제공
    • +
    • 라이브 방송 풀패키지 — 아바타·배경·프랍 세팅 + 실시간 스트리밍까지 올인원
    • +
    +

    자세한 서비스 내용과 요금은 서비스 안내 페이지에서, 촬영 일정은 스케줄 페이지에서 확인하실 수 있습니다. 궁금한 점이 있으시면 문의 페이지에서 편하게 연락 주세요.

    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/devlog/inertial-vs-optical-mocap/images/Sam_ROM_Raw.mp4 b/devlog/inertial-vs-optical-mocap/images/Sam_ROM_Raw.mp4 new file mode 100644 index 0000000..e73575e Binary files /dev/null and b/devlog/inertial-vs-optical-mocap/images/Sam_ROM_Raw.mp4 differ diff --git a/devlog/inertial-vs-optical-mocap/images/basketball-rigid-body-2x-web.mp4 b/devlog/inertial-vs-optical-mocap/images/basketball-rigid-body-2x-web.mp4 new file mode 100644 index 0000000..d793bb4 Binary files /dev/null and b/devlog/inertial-vs-optical-mocap/images/basketball-rigid-body-2x-web.mp4 differ diff --git a/devlog/inertial-vs-optical-mocap/images/thumbnail.webp b/devlog/inertial-vs-optical-mocap/images/thumbnail.webp new file mode 100644 index 0000000..b9e19f6 Binary files /dev/null and b/devlog/inertial-vs-optical-mocap/images/thumbnail.webp differ diff --git a/devlog/optical-mocap-pipeline.html b/devlog/optical-mocap-pipeline.html new file mode 100644 index 0000000..40de1b0 --- /dev/null +++ b/devlog/optical-mocap-pipeline.html @@ -0,0 +1,669 @@ + + + + + + + + + 광학식 모션캡처 파이프라인 완전 해부 — 카메라부터 모션 데이터까지 - 밍글 스튜디오 DevLog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Skip to content + +
    + +
    + +
    +
    +
    +
    + ← 목록으로 + 모션캡처 기술 +

    광학식 모션캡처 파이프라인 완전 해부 — 카메라부터 모션 데이터까지

    + +
    +
    +
    +
    +

    모션캡처 스튜디오에서 배우가 슈트를 입고 움직이면 화면 속 캐릭터가 실시간으로 따라 움직입니다. 간단해 보이지만, 그 뒤에는 카메라 하드웨어 → 네트워크 전송 → 2D 영상 처리 → 3D 복원 → 스켈레톤 솔빙 → 실시간 스트리밍이라는 정밀한 기술 파이프라인이 돌아가고 있습니다.

    +

    이 글에서는 광학식 모션캡처(OptiTrack 기준)의 전체 파이프라인을 단계별로 해부합니다.

    +
    +

    1단계: 카메라 설치와 배치 전략

    +

    광학식 모션캡처의 첫 번째 단계는 카메라를 어디에, 어떻게 배치하느냐입니다.

    +

    밍글 스튜디오 모션캡처 공간
    밍글 스튜디오 모션캡처 공간

    +

    배치 원칙

    +
      +
    • 높이: 보통 2~3m 높이에 설치하며, 30도 정도 아래를 향하도록 각도를 잡습니다
    • +
    • 배치 형태: 캡처 볼륨(촬영 공간) 둘레를 감싸는 링(Ring) 형태로 배치
    • +
    • 2단 배치: 높은 위치와 낮은 위치에 카메라를 교차 배치하면 수직 방향 커버리지가 향상됩니다
    • +
    • 중첩(Overlap): 캡처 볼륨 내의 모든 지점이 최소 3대 이상의 카메라에 동시에 보여야 합니다. 삼각측량에는 최소 2대가 필요하지만, 3대 이상이면 정확도와 오클루전 대응력이 크게 올라갑니다
    • +
    +

    카메라 수와 정확도의 관계

    +

    카메라 수가 많을수록:

    +
      +
    • 사각지대가 줄어듦 → 오클루전 발생 확률 감소
    • +
    • 같은 마커를 보는 카메라가 많아짐 → 삼각측량 정확도 향상
    • +
    • 일부 카메라에 문제가 생겨도 다른 카메라가 보완 (리던던시)
    • +
    +

    밍글 스튜디오의 경우 OptiTrack Prime 17 × 16대 + Prime 13 × 14대, 총 30대를 8m × 7m 공간에 배치하여 360도 사각지대를 최소화하고 있습니다.

    +

    IR 패스 필터 — 적외선만 보는 눈

    +

    모션캡처 카메라 렌즈 앞에는 IR 패스 필터(적외선 통과 필터)가 장착되어 있습니다. 이 필터는 가시광선을 차단하고 적외선 파장(850nm 부근)만 통과시킵니다. 덕분에 형광등, 햇빛, 모니터 빛 등 일반 조명에 의한 간섭이 원천 차단되고, 카메라는 오직 IR LED에 반사된 마커 빛만 감지할 수 있습니다.

    +

    촬영 공간의 조명을 완전히 끌 필요가 없는 이유도 이 필터 덕분입니다. 다만 직사광선이나 강한 IR 성분을 포함한 조명은 간섭을 일으킬 수 있어, 스튜디오 환경에서는 IR 간섭이 적은 조명을 사용합니다.

    +

    프레임 동기화 — 30대 카메라가 동시에 찍는 법

    +

    삼각측량이 정확하려면 모든 카메라가 정확히 같은 순간에 셔터를 눌러야 합니다. 카메라마다 제각각 다른 타이밍에 촬영하면 빠르게 움직이는 마커의 위치가 카메라별로 달라져 3D 복원이 부정확해집니다.

    +

    OptiTrack은 하드웨어 동기화(Hardware Sync) 방식을 사용합니다. 한 대의 카메라가 Sync Master(동기 마스터)로 지정되어 타이밍 신호를 생성하고, 나머지 카메라들이 이 신호에 맞춰 동시에 노출합니다.

    +
      +
    • Ethernet 카메라(Prime 시리즈): 동기 신호가 이더넷 연결 자체에 내장되어 있거나, OptiTrack의 eSync 허브를 통해 전달됩니다. 별도 동기 케이블이 필요 없습니다.
    • +
    • USB 카메라(Flex 시리즈): 카메라 간에 전용 동기 케이블을 데이지 체인으로 연결합니다.
    • +
    +

    이 동기화의 정밀도는 마이크로초(μs) 단위로, 30대 카메라가 사실상 완벽히 같은 순간에 촬영합니다.

    +
    +

    2단계: PoE — 하나의 케이블로 전력과 데이터를 동시에

    +

    PoE(Power over Ethernet)란?

    +

    OptiTrack Prime 시리즈 카메라는 PoE(Power over Ethernet) 방식으로 연결됩니다. 일반 이더넷 케이블(Cat5e/Cat6) 한 줄로 전력 공급과 데이터 전송을 동시에 처리하는 기술입니다.

    +

    PoE 스위치와 카메라 연결
    PoE 스위치와 카메라 연결

    +

    기술 표준

    + + + + + + + + + + + + + + + + + + +
    표준최대 전력비고
    IEEE 802.3af (PoE)포트당 15.4W기본 모션캡처 카메라에 충분
    IEEE 802.3at (PoE+)포트당 25.5W고프레임레이트 카메라나 IR LED 출력이 높은 경우
    +

    OptiTrack 카메라는 보통 5~12W 정도를 소비하므로 PoE 표준 범위 내에서 충분히 동작합니다.

    +

    네트워크 토폴로지

    +

    카메라는 스타(Star) 토폴로지로 연결됩니다. 각 카메라가 PoE 스위치의 개별 포트에 1:1로 연결되는 구조입니다. 데이지 체인(직렬 연결)은 사용하지 않습니다.

    +
    +
    +
    CAM 1
    +
    CAM 2
    +
    CAM 3
    +
    ···
    +
    CAM N
    +
    + + + + + + + +
    +
    PoE 스위치
    + +
    호스트 PC
    +
    +
    + +

    30대 카메라라면 24포트 + 8포트 PoE+ 스위치를 조합하거나 48포트 스위치를 사용합니다. 스위치 선택 시 총 PoE 전력 예산(예: 30대 × 12W = 360W)을 확인해야 합니다.

    +

    PoE의 장점

    +
      +
    • 케이블 1개로 해결 — 천장에 설치된 카메라마다 전원 어댑터를 따로 연결할 필요 없음
    • +
    • 깔끔한 시공 — 케이블 수가 절반으로 줄어 설치와 관리가 간편
    • +
    • 중앙 전원 관리 — 스위치에서 카메라 전원을 일괄 ON/OFF 가능
    • +
    +
    +

    3단계: 카메라가 보내는 데이터 — 2D 센트로이드

    +

    카메라에서 PC로 전송되는 데이터가 무엇인지 이해하는 것이 파이프라인의 핵심입니다.

    +

    Motive 카메라 2D 뷰 — 마커가 밝은 점으로 표시된 모습
    Motive 카메라 2D 뷰 — 마커가 밝은 점으로 표시된 모습

    +

    카메라 내부 처리 과정

    +

    각 OptiTrack 카메라에는 적외선(IR) LED 링이 카메라 렌즈 주변에 장착되어 있습니다. 이 LED가 적외선을 쏘면, 배우 몸에 부착된 재귀반사 마커가 빛을 카메라 방향으로 반사합니다. 카메라 센서는 이 반사광을 그레이스케일 IR 이미지로 촬영합니다.

    +

    여기서 중요한 점은, 카메라가 이 이미지를 그대로 PC에 보내지 않는다는 것입니다. 카메라 내부 프로세서가 먼저 처리합니다:

    +

    1. 스레시홀딩(Thresholding) +밝기가 일정 기준(임계값) 이상인 픽셀만 남기고 나머지를 제거합니다. 적외선을 반사하는 마커만 밝게 빛나므로, 배경과 마커를 분리하는 과정입니다.

    +

    2. 블롭 검출(Blob Detection) +밝은 픽셀들이 모여 있는 영역(블롭)을 하나의 마커 후보로 인식합니다.

    +

    3. 2D 센트로이드 계산 +각 블롭의 정확한 중심점(센트로이드)을 서브픽셀 정밀도(약 0.1픽셀)로 계산합니다. 블롭 내 각 픽셀의 밝기를 가중치로 사용하는 가중 평균 방식입니다.

    +

    PC로 전송되는 데이터

    +

    기본 트래킹 모드에서 카메라가 PC로 보내는 것은 2D 센트로이드 데이터입니다:

    +
      +
    • 각 마커 후보의 (x, y) 좌표 + 크기 정보
    • +
    • 카메라 1대당 프레임당 수백 바이트 수준의 매우 작은 데이터
    • +
    +

    이렇게 작은 데이터량 덕분에 40대 이상의 카메라가 기가비트 이더넷 하나로도 충분합니다. 원시 그레이스케일 이미지를 전송할 수도 있지만(디버깅/시각화용), 이 경우 카메라당 수 MB/s가 필요하므로 일반 트래킹에서는 사용하지 않습니다.

    +
    +

    즉, 카메라는 "영상을 찍어서 보내는 장치"가 아니라 "마커 위치를 계산해서 좌표만 보내는 센서"에 가깝습니다.

    +
    +

    여기서 한 가지 의문이 들 수 있습니다 — 왜 모션캡처 카메라는 일반 카메라에 비해 그렇게 비쌀까? 이유는 위에서 설명한 과정에 있습니다. 일반 카메라는 찍은 영상을 그대로 보내면 끝이지만, 모션캡처 카메라는 내부에 전용 프로세서를 탑재하고 있어서 스레시홀딩, 블롭 검출, 서브픽셀 센트로이드 계산까지 초당 240~360프레임으로 실시간 처리합니다. 카메라 한 대가 사실상 영상 처리 전용 소형 컴퓨터를 품고 있는 셈이죠.

    +
    +

    4단계: 캘리브레이션 — 카메라의 눈을 정렬하다

    +

    3D 복원을 하기 전에 반드시 거쳐야 하는 과정이 있습니다. 소프트웨어가 각 카메라의 정확한 위치, 방향, 렌즈 특성을 파악하는 캘리브레이션(Calibration)입니다.

    +

    캘리브레이션 완드(왼쪽)와 그라운드 플레인 프레임(오른쪽)
    캘리브레이션 완드(왼쪽)와 그라운드 플레인 프레임(오른쪽)

    +

    완딩(Wanding) — 공간을 스캔하다

    +

    오퍼레이터가 LED 또는 마커가 부착된 캘리브레이션 완드(Wand, 막대)를 들고 캡처 볼륨 전체를 걸어다니며 휘두릅니다. 완드의 마커 간 거리는 정확히 알려져 있기 때문에, 각 카메라가 완드를 수천 프레임 동안 촬영하면 소프트웨어가 다음을 계산할 수 있습니다:

    +
      +
    • 내부 파라미터(Intrinsic Parameters) — 초점 거리, 렌즈 왜곡 계수 등 카메라 렌즈 고유의 특성
    • +
    • 외부 파라미터(Extrinsic Parameters) — 3D 공간에서 카메라의 정확한 위치와 방향
    • +
    +

    이 계산에는 번들 조정(Bundle Adjustment)이라는 최적화 알고리즘이 사용됩니다. 수천 개의 2D 관측 데이터를 기반으로 모든 카메라의 파라미터를 동시에 최적화하는 과정입니다.

    +

    그라운드 플레인 설정

    +

    완딩이 끝나면 바닥에 L자형 캘리브레이션 프레임(Ground Plane)을 놓습니다. 이 프레임의 마커 3개 이상이 바닥면과 좌표 원점을 정의합니다:

    +
      +
    • 어디가 (0, 0, 0)인지 (원점)
    • +
    • 어느 방향이 X, Y, Z 축인지
    • +
    • 바닥면의 높이 기준
    • +
    +

    이렇게 캘리브레이션이 완료되면, 소프트웨어는 어떤 카메라의 2D 좌표든 정확한 3D 광선으로 변환할 수 있게 됩니다.

    +

    캘리브레이션 품질

    +

    Motive 소프트웨어는 캘리브레이션 후 각 카메라의 재투영 오차(Reprojection Error)를 표시합니다. 이 값이 작을수록(보통 0.5px 이하) 캘리브레이션이 정확하다는 의미입니다. 오차가 큰 카메라는 위치를 조정하거나 재캘리브레이션합니다.

    +
    +

    5단계: 2D → 3D 복원 (삼각측량)

    +

    PC에 도착한 2D 센트로이드들이 어떻게 3D 좌표로 변환되는지 살펴봅니다.

    +

    삼각측량(Triangulation) 원리

    +
      +
    1. 캘리브레이션으로 확보한 각 카메라의 정확한 3D 위치, 방향, 렌즈 특성을 활용합니다
    2. +
    3. 카메라의 2D 센트로이드 좌표에서 광선(Ray)을 쏩니다 — 카메라 위치에서 센트로이드 방향으로 3D 공간을 향해 뻗어나가는 직선
    4. +
    5. 같은 마커를 본 2대 이상의 카메라에서 쏜 광선들이 교차하는 점이 곧 마커의 3D 좌표입니다
    6. +
    +

    +

    실제로는 완벽히 교차하지 않는다

    +

    노이즈, 렌즈 왜곡, 캘리브레이션 오차 등으로 인해 광선들이 정확히 한 점에서 만나는 경우는 거의 없습니다. 그래서 최소자승법(Least Squares Optimization)을 사용합니다:

    +
      +
    • 모든 광선까지의 거리 합이 최소가 되는 3D 좌표를 계산
    • +
    • 이때 각 광선과 복원된 3D 점 사이의 거리를 잔차(Residual)라고 합니다
    • +
    • 잔차가 작을수록 복원 품질이 좋다는 의미 — 잘 캘리브레이션된 OptiTrack 시스템에서는 서브밀리미터(0.5mm 이하) 수준의 잔차를 기대할 수 있습니다
    • +
    +

    카메라 수의 영향

    + + + + + + + + + + + + + + + + + + + +
    해당 마커를 보는 카메라 수효과
    2대3D 복원 가능 (최소 조건)
    3대정확도 향상 + 1대가 가려져도 추적 유지
    4대 이상높은 정확도 + 강한 오클루전 내성
    +
    +

    6단계: 마커 식별과 라벨링

    +

    마커 슈트와 마커 배치

    +

    3D 복원을 의미 있는 모션 데이터로 만들려면, 마커가 신체의 정확한 위치에 부착되어야 합니다.

    +

    마커 사양

    +
      +
    • 지름: 보통 12~19mm의 구형 재귀반사 마커 사용
    • +
    • 재질: 3M 재귀반사 테이프로 코팅된 폼/플라스틱 구
    • +
    • 부착: 벨크로(찍찍이), 양면 테이프, 또는 전용 마커 슈트에 미리 장착
    • +
    +

    마커셋 규격 +마커를 어디에 몇 개 붙이느냐는 표준화된 마커셋(Markerset) 규격을 따릅니다:

    +
      +
    • Baseline (37 마커) — OptiTrack 기본 전신 마커셋. 상체, 하체, 머리를 커버하며, 게임/영상 모션캡처에 가장 많이 사용
    • +
    • Baseline + Fingers (~57 마커) — 위에 손가락 마커 약 20개를 추가한 확장형
    • +
    • Helen Hayes (~15-19 마커) — 의료/보행 분석 표준. 하체 중심의 최소 마커셋
    • +
    +

    마커는 뼈가 튀어나온 해부학적 랜드마크(견봉, 외측 상과, 전상장골극 등)에 부착합니다. 이런 위치는 피부 위에서 뼈의 움직임을 가장 정확히 반영하고, 피부 미끄러짐(Skin Artifact)이 최소화되는 지점입니다.

    +

    3D 복원이 끝나면 매 프레임마다 이름 없는 3D 점들의 구름(Point Cloud)이 생성됩니다. "이 점이 왼쪽 무릎 마커인지, 오른쪽 어깨 마커인지"를 판별하는 과정이 라벨링(Labeling)입니다.

    +

    Motive에서 마커가 라벨링된 모습
    Motive에서 마커가 라벨링된 모습

    +

    라벨링 알고리즘

    +

    템플릿 매칭(Template Matching) +캘리브레이션 시 정의한 마커셋의 기하학적 배치(예: 무릎과 발목 마커 사이 거리)를 기준으로, 현재 프레임의 3D 점들을 템플릿과 대조합니다.

    +

    예측 추적(Predictive Tracking) +이전 프레임의 속도·가속도를 기반으로 다음 프레임에서 각 마커가 어디에 있을지 예측하고, 가장 가까운 3D 점을 매칭합니다.

    +

    마커 스왑(Swap) 문제

    +

    두 마커가 서로 매우 가까이 지나갈 때, 소프트웨어가 두 마커의 라벨을 뒤바꿔 버리는 현상입니다. 광학식 모캡에서 가장 흔한 아티팩트 중 하나입니다.

    +

    해결 방법:

    +
      +
    • 후처리에서 수동으로 라벨을 교정
    • +
    • 마커 배치를 비대칭으로 설계하여 구분을 쉽게 함
    • +
    • 액티브 마커(Active Marker) 사용 — 각 마커가 고유한 적외선 패턴을 발광하여 하드웨어 수준에서 식별, 스왑이 원천 차단됨
    • +
    +

    패시브 vs 액티브 마커

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    구분패시브 마커 (반사형)액티브 마커 (발광형)
    원리카메라 IR LED의 빛을 반사마커 자체가 고유 IR 패턴 발광
    식별소프트웨어 기반 (스왑 가능성 있음)하드웨어 기반 (스왑 없음)
    장점가볍고 저렴, 부착 간편자동 식별, 라벨링 오류 없음
    단점라벨링 후처리 필요할 수 있음무겁고, 배터리/전원 필요
    +

    대부분의 엔터테인먼트/VTuber 현장에서는 패시브 마커가 주로 사용됩니다. 가볍고 편하며, 소프트웨어 성능이 충분히 좋아 대부분의 상황에서 자동 라벨링이 잘 작동하기 때문입니다.

    +
    +

    7단계: 스켈레톤 솔빙 — 점에서 뼈대로

    +

    라벨링된 3D 마커들을 사람의 골격(Skeleton) 구조에 매핑하는 단계입니다.

    +

    사전 캘리브레이션

    +

    촬영 전에 배우가 T-포즈(팔을 벌린 자세)를 취하면, 소프트웨어가 마커 위치를 기반으로 각 뼈대 길이(팔 길이, 다리 길이 등)와 관절 위치를 계산합니다.

    +

    이어서 ROM(Range of Motion) 캡처를 수행합니다.

    +

    ROM 캡처 — 다양한 동작으로 관절 범위를 보정하는 과정
    ROM 캡처 — 다양한 동작으로 관절 범위를 보정하는 과정
    + 팔 돌리기, 무릎 굽히기, 상체 비틀기 등 다양한 동작을 통해 소프트웨어가 관절 중심점과 회전축을 정밀하게 보정합니다.

    +

    실시간 솔빙

    +

    촬영 중에는 매 프레임마다:

    +
      +
    1. 라벨링된 3D 마커 좌표를 받아옴
    2. +
    3. 마커 위치를 기반으로 각 관절의 3D 위치와 회전값(Rotation)을 계산
    4. +
    5. 역운동학(Inverse Kinematics) 등의 알고리즘으로 자연스러운 골격 포즈를 산출
    6. +
    7. 결과: 시간축 위의 모든 관절에 대한 위치(Translation) + 회전(Rotation) 데이터
    8. +
    +

    리지드 바디 트래킹 (소품 추적)

    +

    칼, 총, 카메라 등 소품에 3개 이상의 마커를 비대칭으로 부착하면, 소프트웨어가 해당 마커 클러스터를 하나의 강체(Rigid Body)로 인식하여 6DOF(위치 3축 + 회전 3축) 추적이 가능합니다.

    +
    +

    8단계: 실시간 스트리밍과 데이터 출력

    +

    실시간 스트리밍

    +

    실시간 스트리밍 — Motive에서 게임 엔진으로 모션 데이터 전송
    실시간 스트리밍 — Motive에서 게임 엔진으로 모션 데이터 전송

    +

    OptiTrack Motive는 솔빙된 데이터를 실시간으로 외부 소프트웨어에 전달합니다:

    +
      +
    • NatNet SDK — OptiTrack의 자체 프로토콜, UDP 기반으로 저지연 전송
    • +
    • VRPN — VR/모캡 분야의 표준 프로토콜
    • +
    +

    이를 통해 Unity, Unreal Engine, MotionBuilder 등에서 실시간으로 캐릭터를 움직일 수 있습니다. VTuber 라이브 방송이 가능한 것도 이 실시간 스트리밍 덕분입니다.

    +

    녹화 데이터 출력 포맷

    + + + + + + + + + + + + + + + + + + + +
    포맷용도
    FBX스켈레톤 + 애니메이션 데이터, 게임 엔진/DCC 툴 호환
    BVH계층적 모션 데이터, 리타게팅에 주로 사용
    C3D원시 3D 마커 데이터, 바이오메카닉스/연구 표준
    +
    +

    9단계: 후처리 — 데이터를 다듬는 과정

    +

    후처리 작업 — Motive에서 모션 데이터를 정리하는 과정
    후처리 작업 — Motive에서 모션 데이터를 정리하는 과정

    +

    실시간 캡처에서 얻은 데이터는 바로 최종 결과물로 쓸 수 있는 경우도 있지만, 대부분의 프로 작업에서는 후처리(Post-Processing) 과정을 거칩니다.

    +

    갭 필링(Gap Filling)

    +

    오클루전으로 인해 마커가 일시적으로 사라진 구간을 보간(Interpolation)으로 채우는 작업입니다.

    +
      +
    • 선형 보간(Linear) — 단순히 앞뒤 프레임을 직선으로 이음. 짧은 갭에 적합
    • +
    • 스플라인 보간(Spline) — 곡선으로 부드럽게 채움. 자연스러운 동작 유지에 유리
    • +
    • 패턴 기반 보간 — 같은 동작을 반복한 다른 테이크의 데이터를 참조하여 채움
    • +
    +

    갭이 길수록 보간 정확도가 떨어지기 때문에, 촬영 시 오클루전을 최소화하는 것이 가장 중요합니다.

    +

    스무딩(Smoothing)과 필터링

    +

    캡처된 데이터에는 미세한 떨림(High-frequency Noise)이 포함될 수 있습니다. 이를 제거하기 위해:

    +
      +
    • 버터워스 필터(Butterworth Filter) — 지정한 주파수 이상의 노이즈를 제거하는 저역 통과 필터
    • +
    • 가우시안 스무딩 — 주변 프레임의 가중 평균으로 떨림을 완화
    • +
    +

    다만 과도한 스무딩은 동작의 디테일과 임팩트를 잃게 만들므로, 칼을 휘두르는 순간의 날카로운 움직임까지 뭉개지지 않도록 적절한 강도를 설정해야 합니다.

    +

    마커 스왑 교정

    +

    6단계에서 설명한 마커 스왑이 발생한 구간을 찾아서 라벨을 수동으로 바로잡는 작업입니다. Motive에서는 타임라인 위에서 마커 궤적을 시각적으로 확인하며 교정할 수 있습니다.

    +

    리타게팅(Retargeting)

    +

    캡처된 스켈레톤 데이터를 다른 비율의 캐릭터에 적용하는 과정입니다. 예를 들어 키 170cm인 배우의 모션 데이터를 키 3m인 거인 캐릭터나 150cm인 어린이 캐릭터에 맞추려면, 관절 회전은 유지하면서 뼈대 길이를 대상 캐릭터에 맞게 재계산해야 합니다. MotionBuilder, Maya, Unreal Engine 등에서 리타게팅 기능을 제공합니다.

    +
    +

    10단계: 현장에서 자주 발생하는 문제와 대응

    +

    기술적으로 완벽해 보이는 광학식 모캡에도 실무 현장에서 마주치는 문제들이 있습니다.

    +

    반사 노이즈(Stray Reflections)

    +

    마커가 아닌 물체에서 적외선이 반사되어 가짜 마커(Ghost Marker)가 검출되는 현상입니다.

    +
      +
    • 원인: 금속 표면, 반짝이는 옷, 안경, 시계, 바닥 반사 등
    • +
    • 대응: 반사가 일어나는 표면을 무광 테이프로 가리거나, Motive에서 해당 영역을 마스킹(Masking) 처리하여 소프트웨어가 무시하도록 설정
    • +
    +

    마커 탈락

    +

    격렬한 동작 중에 마커가 슈트에서 떨어지거나 위치가 틀어지는 경우입니다.

    +
      +
    • 대응: 촬영 전 마커 부착 상태를 꼼꼼히 확인하고, 격한 동작 촬영 시 벨크로 + 양면 테이프를 병행하여 고정력을 높입니다
    • +
    • 중간중간 모니터링하며 마커 상태를 체크하는 것도 중요합니다
    • +
    +

    의상 제약

    +

    촬영 시 배우가 입는 옷은 밝은 색상·무광 소재가 이상적입니다. 검은색은 마커 반사에 영향이 없지만, 반짝이는 소재나 느슨한 옷은 마커 위치가 불안정해지거나 반사 노이즈를 유발할 수 있습니다. 전용 모캡 슈트를 착용하는 것이 가장 안정적입니다.

    +

    캘리브레이션 유지

    +

    캡처 볼륨 내 온도 변화, 카메라 진동, 삼각대 미세 이동 등으로 캘리브레이션이 서서히 틀어질 수 있습니다. 장시간 촬영 시에는 중간에 재캘리브레이션하거나, Motive의 Continuous Calibration(연속 캘리브레이션) 기능으로 실시간 보정하는 것이 좋습니다.

    +
    +

    레이턴시 — 움직임에서 화면까지 얼마나 걸릴까?

    +

    전체 파이프라인의 각 단계별 소요 시간입니다.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    단계소요 시간
    카메라 노출 (240fps 기준)~4.2ms
    카메라 내부 처리 (센트로이드 계산)~0.5–1ms
    네트워크 전송 (PoE → PC)< 1ms
    3D 복원 + 라벨링~1–2ms
    스켈레톤 솔빙~0.5–1ms
    스트리밍 출력 (NatNet)< 1ms
    총 종단간 레이턴시약 8–14ms (240fps 기준)
    +

    360fps에서는 노출 시간이 줄어 7ms 이하까지 가능합니다. 이 정도 레이턴시면 사람이 체감하기 어려운 수준이며, VTuber 라이브 방송에서도 자연스러운 실시간 반응이 가능합니다.

    +
    +

    참고: 레이턴시의 대부분은 카메라 노출 시간(프레임 주기)이 차지합니다. 프레임레이트가 높을수록 레이턴시가 줄어드는 이유입니다.

    +
    +
    +

    전체 파이프라인 요약

    +
    +
    +
    1. 카메라 설치 · IR 필터 · 프레임 동기화
    +

    30대 카메라를 링 형태로 배치, IR 패스 필터로 적외선만 감지, 하드웨어 싱크로 μs 단위 동기화

    +
    +
    +
    +
    2. PoE 네트워크
    +

    Cat6 한 줄로 전력 + 데이터 동시 전송, 스타 토폴로지로 스위치에 연결

    +
    +
    +
    +
    3. 카메라 온보드 처리 → 2D 센트로이드
    +

    IR LED 발사 → 마커 반사광 수신 → 스레시홀딩 → 블롭 검출 → 서브픽셀 센트로이드 계산 → 좌표만 전송

    +
    +
    +
    +
    4. 캘리브레이션
    +

    완딩으로 카메라 내부/외부 파라미터 산출, 그라운드 플레인으로 좌표계 정의

    +
    +
    +
    +
    5. 2D → 3D 삼각측량
    +

    다수 카메라의 2D 좌표에서 광선 교차 + 최소자승법으로 3D 좌표 복원

    +
    +
    +
    +
    6. 마커 라벨링
    +

    템플릿 매칭 + 예측 추적으로 각 3D 점에 마커 이름 부여

    +
    +
    +
    +
    7. 스켈레톤 솔빙
    +

    T-포즈 + ROM 캘리브레이션 기반, 역운동학으로 관절 위치·회전 계산

    +
    +
    +
    +
    8. 실시간 스트리밍 · 데이터 출력
    +

    NatNet/VRPN으로 Unity/Unreal/MotionBuilder에 실시간 전송, FBX/BVH/C3D 녹화

    +
    +
    +
    +
    9. 후처리
    +

    갭 필링 · 스무딩 · 마커 스왑 교정 · 리타게팅

    +
    +
    +
    +
    최종 결과물
    +

    게임 시네마틱 · VTuber 라이브 · 영상 콘텐츠에 적용 (총 레이턴시 약 8~14ms)

    +
    +
    + +

    카메라가 찍은 영상이 그대로 PC에 오는 것이 아니라, 카메라가 직접 마커 좌표를 계산해서 보내고, PC는 이 좌표들을 3D로 복원하고 뼈대에 매핑하는 것 — 이것이 광학식 모션캡처의 핵심 원리입니다.

    +
    +

    자주 묻는 질문 (FAQ)

    +

    Q. 광학식 모션캡처 카메라는 일반 카메라와 뭐가 다른가요?

    +

    일반 카메라는 풀컬러 영상을 촬영하지만, 모션캡처 카메라는 적외선(IR) 영역에 특화되어 있습니다. IR LED로 마커를 비추고 반사광만 감지하며, 카메라 내부에서 마커의 2D 좌표를 직접 계산하여 좌표 데이터만 PC에 전송합니다.

    +

    Q. PoE 케이블 길이에 제한이 있나요?

    +

    이더넷 표준에 따라 PoE 케이블은 최대 100m까지 지원됩니다. 대부분의 모션캡처 스튜디오에서는 이 범위를 충분히 충족합니다.

    +

    Q. 카메라 프레임레이트가 높을수록 항상 좋은가요?

    +

    프레임레이트가 높으면 빠른 동작 추적과 낮은 레이턴시에 유리하지만, 데이터 처리량이 늘어나고 카메라 해상도가 낮아질 수 있습니다. 일반적으로 VTuber 라이브나 게임 모션캡처에서는 120~240fps면 충분하며, 스포츠 과학 등 초고속 동작 분석에서는 360fps 이상을 사용합니다.

    +

    Q. 마커 스왑은 얼마나 자주 발생하나요?

    +

    마커셋이 잘 설계되어 있고 카메라 수가 충분하면 실시간 촬영 중 스왑은 드물게 발생합니다. 다만 빠른 동작이나 마커 간 거리가 가까운 동작(손 맞잡기 등)에서는 발생 확률이 올라가며, 이런 구간은 후처리에서 교정합니다.

    +

    Q. 삼각측량에 2대면 충분한데 왜 30대나 설치하나요?

    +

    2대는 이론적 최솟값일 뿐입니다. 실제로는 오클루전(마커 가림), 카메라 각도에 따른 정확도 차이, 리던던시 확보 등을 고려해야 합니다. 30대를 배치하면 어떤 마커든 항상 다수의 카메라가 보고 있으므로, 안정적이고 정확한 추적이 가능합니다.

    +

    Q. 캘리브레이션은 얼마나 자주 해야 하나요?

    +

    일반적으로 촬영일 시작 전에 한 번 수행합니다. 다만 장시간 촬영 시 온도 변화나 카메라 미세 이동으로 캘리브레이션이 틀어질 수 있어, 4~6시간 연속 촬영 시 중간에 재캘리브레이션을 권장합니다. OptiTrack Motive의 Continuous Calibration 기능을 사용하면 촬영 중에도 실시간으로 보정이 가능합니다.

    +

    Q. 반짝이는 옷을 입으면 안 되나요?

    +

    모션캡처 카메라는 적외선 반사를 감지하기 때문에, 반짝이는 소재(금속 장식, 시퀸, 광택 있는 합성 섬유 등)는 적외선을 반사하여 가짜 마커(Ghost Marker)를 만들 수 있습니다. 전용 모캡 슈트나 무광 소재의 편안한 옷을 착용하는 것이 가장 좋습니다.

    +
    +

    광학식 모션캡처의 기술적 구조에 대해 더 궁금한 점이 있으시면 문의 페이지에서 편하게 질문해 주세요. 밍글 스튜디오에서 직접 체험하고 싶으시다면 서비스 안내를 확인해 보세요.

    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/devlog/optical-mocap-pipeline/images/calibration-tools.webp b/devlog/optical-mocap-pipeline/images/calibration-tools.webp new file mode 100644 index 0000000..7a0d0b3 Binary files /dev/null and b/devlog/optical-mocap-pipeline/images/calibration-tools.webp differ diff --git a/devlog/optical-mocap-pipeline/images/continuous-calibration-web.mp4 b/devlog/optical-mocap-pipeline/images/continuous-calibration-web.mp4 new file mode 100644 index 0000000..b92719a Binary files /dev/null and b/devlog/optical-mocap-pipeline/images/continuous-calibration-web.mp4 differ diff --git a/devlog/optical-mocap-pipeline/images/marker-labeling.png b/devlog/optical-mocap-pipeline/images/marker-labeling.png new file mode 100644 index 0000000..4a81f7a Binary files /dev/null and b/devlog/optical-mocap-pipeline/images/marker-labeling.png differ diff --git a/devlog/optical-mocap-pipeline/images/motive-2d-centroid.png b/devlog/optical-mocap-pipeline/images/motive-2d-centroid.png new file mode 100644 index 0000000..30dda34 Binary files /dev/null and b/devlog/optical-mocap-pipeline/images/motive-2d-centroid.png differ diff --git a/devlog/optical-mocap-pipeline/images/poe-switch.png b/devlog/optical-mocap-pipeline/images/poe-switch.png new file mode 100644 index 0000000..f09dff0 Binary files /dev/null and b/devlog/optical-mocap-pipeline/images/poe-switch.png differ diff --git a/devlog/optical-mocap-pipeline/images/post-processing.png b/devlog/optical-mocap-pipeline/images/post-processing.png new file mode 100644 index 0000000..75a4d43 Binary files /dev/null and b/devlog/optical-mocap-pipeline/images/post-processing.png differ diff --git a/devlog/optical-mocap-pipeline/images/realtime-streaming.png b/devlog/optical-mocap-pipeline/images/realtime-streaming.png new file mode 100644 index 0000000..2d30cae Binary files /dev/null and b/devlog/optical-mocap-pipeline/images/realtime-streaming.png differ diff --git a/devlog/optical-mocap-pipeline/images/rom-1.webp b/devlog/optical-mocap-pipeline/images/rom-1.webp new file mode 100644 index 0000000..bcb9c10 Binary files /dev/null and b/devlog/optical-mocap-pipeline/images/rom-1.webp differ diff --git a/devlog/optical-mocap-pipeline/images/rom-2.webp b/devlog/optical-mocap-pipeline/images/rom-2.webp new file mode 100644 index 0000000..607ec01 Binary files /dev/null and b/devlog/optical-mocap-pipeline/images/rom-2.webp differ diff --git a/devlog/optical-mocap-pipeline/images/rom-3.webp b/devlog/optical-mocap-pipeline/images/rom-3.webp new file mode 100644 index 0000000..75cbbaf Binary files /dev/null and b/devlog/optical-mocap-pipeline/images/rom-3.webp differ diff --git a/devlog/optical-mocap-pipeline/images/rom-4.webp b/devlog/optical-mocap-pipeline/images/rom-4.webp new file mode 100644 index 0000000..4ad423e Binary files /dev/null and b/devlog/optical-mocap-pipeline/images/rom-4.webp differ diff --git a/devlog/optical-mocap-pipeline/images/rom-grid.webp b/devlog/optical-mocap-pipeline/images/rom-grid.webp new file mode 100644 index 0000000..e2d4f48 Binary files /dev/null and b/devlog/optical-mocap-pipeline/images/rom-grid.webp differ diff --git a/devlog/optical-mocap-pipeline/images/thumbnail.webp b/devlog/optical-mocap-pipeline/images/thumbnail.webp new file mode 100644 index 0000000..4a81f7a Binary files /dev/null and b/devlog/optical-mocap-pipeline/images/thumbnail.webp differ diff --git a/en/about.html b/en/about.html index 8dd3b6b..f54478e 100644 --- a/en/about.html +++ b/en/about.html @@ -105,6 +105,7 @@
  • Portfolio
  • Gallery
  • Schedule
  • +
  • DevLog
  • Contact
  • Q&A
  • diff --git a/en/backgrounds.html b/en/backgrounds.html index 7ab0ba8..be7786c 100644 --- a/en/backgrounds.html +++ b/en/backgrounds.html @@ -78,6 +78,7 @@
  • Portfolio
  • Gallery
  • Schedule
  • +
  • DevLog
  • Contact
  • Q&A
  • diff --git a/en/contact.html b/en/contact.html index 9b6fe27..f1fb034 100644 --- a/en/contact.html +++ b/en/contact.html @@ -105,6 +105,7 @@
  • Portfolio
  • Gallery
  • Schedule
  • +
  • DevLog
  • Contact
  • Q&A
  • diff --git a/en/devlog.html b/en/devlog.html new file mode 100644 index 0000000..cbbe444 --- /dev/null +++ b/en/devlog.html @@ -0,0 +1,187 @@ + + + + + + + + + + DevLog - Mingle Studio + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Skip to content + + +
    + + +
    + +
    +
    +
    +

    DevLog

    +

    Sharing motion capture technology and our creative process

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + + + + + + + + + \ No newline at end of file diff --git a/en/devlog/inertial-vs-optical-mocap.html b/en/devlog/inertial-vs-optical-mocap.html new file mode 100644 index 0000000..8cf5c98 --- /dev/null +++ b/en/devlog/inertial-vs-optical-mocap.html @@ -0,0 +1,508 @@ + + + + + + + + + Inertial vs Optical Motion Capture: What's the Difference? - Mingle Studio DevLog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Skip to content + +
    + +
    + +
    +
    +
    +
    + ← Back to list + Motion Capture Technology +

    Inertial vs Optical Motion Capture: What's the Difference?

    + +
    +
    +
    +
    +

    When you start getting into motion capture, there's one question you'll encounter right away.

    +

    "What's the difference between inertial and optical?"

    +

    In this article, we'll cover everything from the underlying principles of each method to the leading equipment and real-world user feedback.

    +
    +

    What Is Optical Motion Capture?

    +

    Optical motion capture uses infrared cameras and reflective markers.

    +

    Multiple infrared (IR) cameras are installed around the capture space, and retro-reflective markers approximately 10–20mm in diameter are attached to the performer's joints. Each camera emits infrared LED light and detects the light reflected back from the markers, extracting 2D marker coordinates from the image.

    +

    When at least two cameras simultaneously capture the same marker, the precise 3D coordinates of that marker can be calculated using the principle of triangulation. The more cameras there are, the higher the accuracy and the fewer blind spots, which is why professional studios typically use 12 to 40 or more cameras.

    +

    Because every marker's 3D coordinates are recorded as absolute positions in every frame, the data remains accurate with zero cumulative drift no matter how much time passes.

    +

    +

    Advantages

    +
      +
    • Sub-millimeter accuracy — Precise positional tracking at the 0.1mm level
    • +
    • No drift — Absolute coordinate-based, so data never shifts over time
    • +
    • Simultaneous multi-object tracking — Capture performers + props + set elements together
    • +
    • Low latency — Approximately 5–10ms, ideal for real-time feedback
    • +
    +

    Limitations

    +
      +
    • Requires a dedicated capture space (camera installation + environment control)
    • +
    • Setup and calibration take 30–90 minutes
    • +
    • Occlusion issues — Tracking is lost when markers are hidden from cameras
    • +
    +

    Leading Equipment

    +

    OptiTrack (PrimeX Series)

    +
      +
    • Widely regarded as the best value for money among optical systems
    • +
    • Motive software is user-friendly with a strong Unity/Unreal plugin ecosystem
    • +
    • Broadly used by game developers, VTuber productions, and university research labs
    • +
    • Community feedback: "At this price point, OptiTrack is the only option for this level of accuracy" is the prevailing opinion
    • +
    +

    Vicon (Vero / Vantage Series)

    +
      +
    • The gold standard in the film VFX industry — the vast majority of Hollywood AAA films are shot with Vicon
    • +
    • Top-tier accuracy and stability, powerful post-processing software (Shogun)
    • +
    • Community feedback: "Accuracy is the best, but it's overkill for small studios"
    • +
    +

    Qualisys

    +
      +
    • Strong in medical/sports biomechanics
    • +
    • Specialized in gait analysis, clinical research, and sports science
    • +
    • Relatively smaller user community in the entertainment sector
    • +
    +
    +

    What Is Inertial (IMU) Motion Capture?

    +

    Inertial motion capture uses IMU (Inertial Measurement Unit) sensors attached to the body or embedded in a suit to measure movement.

    +

    Each IMU sensor contains three core components:

    +
      +
    • Accelerometer — Measures linear acceleration to determine direction and speed of movement
    • +
    • Gyroscope — Measures angular velocity to calculate rotation
    • +
    • Magnetometer — Uses Earth's magnetic field as a reference to correct heading
    • +
    +

    By combining data from these three sensors using sensor fusion algorithms, the 3D orientation of each body part the sensor is attached to can be calculated in real time. Typically, 15–17 sensors are placed on key joints across the upper body, lower body, arms, and legs, and the relationships between sensors are used to extract full-body skeletal data.

    +

    However, because calculating position from accelerometer data requires double integration, errors accumulate (drift), meaning the global position — "where exactly am I standing in space?" — becomes increasingly inaccurate over time. This is the fundamental limitation of inertial systems.

    +

    +

    Advantages

    +
      +
    • No spatial constraints — Works outdoors, in tight spaces, anywhere
    • +
    • Quick setup — Ready to capture in 5–15 minutes after putting on the suit
    • +
    • No occlusion issues — Sensors are attached directly to the body, so there's no line-of-sight problem
    • +
    +

    Limitations

    +
      +
    • Drift — Positional data shifts over time (cumulative error)
    • +
    • Low global position accuracy — Difficult to determine precisely "where you are standing"
    • +
    • Magnetic interference — Data distortion near metal structures or electronic equipment
    • +
    • Difficult to track props or environmental interactions
    • +
    +

    Leading Equipment

    +

    Xsens MVN (now Movella)

    +
      +
    • Considered #1 in accuracy and reliability among inertial systems
    • +
    • Widely used in the automotive industry, ergonomics, and game animation
    • +
    • Community feedback: "If you're going inertial, Xsens is the answer", though "global position drift is unavoidable"
    • +
    +

    Rokoko Smartsuit Pro

    +
      +
    • Price accessibility is the biggest advantage — Popular with indie developers and solo creators
    • +
    • Rokoko Studio software is intuitive with convenient retargeting features
    • +
    • Community feedback: "For this price, it's impressive", but also "drift becomes noticeable in long sessions", "there are limits for precision work"
    • +
    +

    Noitom Perception Neuron

    +
      +
    • Some models support finger tracking, compact form factor
    • +
    • Community feedback: "Neuron 3 is a big improvement", but "drift issues still exist", "software (Axis Studio) stability could be better"
    • +
    +
    +

    Side-by-Side Comparison

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    CategoryOpticalInertial (IMU)
    Tracking PrincipleIR cameras + reflective marker triangulationIMU sensors (accelerometer + gyroscope + magnetometer)
    Positional AccuracySub-millimeter (0.1mm) — absolute coordinatesDrift occurs — cumulative error over time
    Rotational AccuracyDerived from positional data (very high)1–3 degrees (depends on sensor fusion algorithm)
    DriftNone — absolute position measured every framePresent — error accumulates from double integration of acceleration
    OcclusionTracking lost when markers are hidden from camerasNo issue — sensors are directly attached to the body
    Magnetic InterferenceNot affectedData distortion near metals/electronics
    Latency~5–10ms~10–20ms
    Setup Time30–90 min (camera placement + calibration)5–15 min (suit on + quick calibration)
    Capture SpaceDedicated studio required (camera setup + environment control)Anywhere (outdoors, small spaces OK)
    Multi-person CaptureSimultaneous capture possible with distinct marker setsIndependent per suit, simultaneous possible but interaction is difficult
    Prop/Object TrackingTrackable by attaching markersRequires separate sensors, practically difficult
    Finger TrackingHigh-precision tracking with dedicated hand marker setsOnly some devices support it, limited precision
    Post-processing WorkloadGap filling needed for occlusion segmentsDrift correction + position cleanup needed
    Leading EquipmentOptiTrack, Vicon, QualisysXsens, Rokoko, Noitom
    Primary Use CasesGame/film final capture, VTuber live, researchPrevisualization, outdoor shoots, indie/personal content
    +
    +

    What About Markerless Motion Capture?

    +

    Recently, markerless motion capture, where AI extracts motion from camera footage alone, has been gaining attention. Move.ai, Captury, and Plask are notable examples, and the barrier to entry is very low since capture is possible with regular cameras without any markers.

    +

    However, at this point, markerless methods fall significantly short of optical and inertial systems in terms of accuracy and stability. Joint positions frequently exhibit jitter (jumping or shaking), and tracking becomes unstable during fast movements or occlusion situations. It can be useful for previsualization or reference purposes, but it is not yet at a level where it can be directly used in final deliverables for games, broadcast, or film.

    +

    This is a rapidly advancing field worth watching, but for now, optical and inertial systems remain the mainstream in professional production.

    +
    +

    What Does the Community Think?

    +

    Summarizing the recurring opinions from motion capture communities on Reddit (r/gamedev, r/vfx), CGSociety, and others:

    +
    +

    "Optical for work where final quality matters, inertial for when speed and accessibility are the priority."

    +
    +

    In practice, many professional studios use both methods in tandem. A common workflow is to quickly block out movements or create previz with inertial, then do the final capture with optical.

    +

    For solo creators or indie teams, the prevailing advice is to start with an accessible inertial system like Rokoko, but rent an optical studio for projects that demand precision.

    +
    +

    Why Mingle Studio Chose Optical

    +

    Mingle Studio is an optical motion capture studio equipped with 30 OptiTrack cameras (16x Prime 17 + 14x Prime 13). The reasons for choosing optical are clear:

    +
      +
    • Accuracy — Sub-millimeter accuracy is essential for work that directly feeds into final deliverables such as game cinematics, VTuber live streams, and broadcast content
    • +
    • Real-time streaming — Provides stable, drift-free data for situations requiring real-time feedback, like VTuber live broadcasts
    • +
    • Prop integration — Precisely tracks interactions with props such as swords, guns, and chairs
    • +
    • Value for money — OptiTrack delivers professional-grade accuracy at a more reasonable price compared to Vicon
    • +
    • Finger tracking supplement — Optical's weakness in finger tracking is complemented by Rokoko gloves, combining the precision of optical for full-body with the reliable finger tracking of inertial gloves — the best of both worlds
    • +
    +

    As such, optical and inertial are not necessarily an either-or choice. Combining the strengths of each method can achieve a level of quality that would be difficult to reach with a single approach alone.

    +

    With 30 cameras covering 360 degrees in an 8m x 7m capture space, occlusion issues are minimized.

    +

    Mingle Studio Capture Workflow

    +

    Here's how a typical motion capture session works when you book Mingle Studio:

    +

    Step 1: Pre-consultation +We discuss the purpose of the shoot, number of performers needed, and types of motions to capture. For live broadcasts, avatar, background, and prop setup are also coordinated at this stage.

    +

    Step 2: Shoot Preparation (Setup) +When you arrive at the studio, a professional operator handles marker placement, calibration, and avatar mapping. For live broadcast packages, character, background, and prop setup are included — no separate preparation needed.

    +

    Step 3: Main Capture / Live Broadcast +Full-body and finger capture are performed simultaneously using 30 OptiTrack cameras + Rokoko gloves. Real-time monitoring lets you check results on the spot, and remote direction is also supported.

    +

    Step 4: Data Delivery / Post-processing +After the shoot, motion data is delivered promptly. Depending on your needs, data cleanup (noise removal, frame correction) and retargeting optimized for your avatar are also available.

    +
    +

    Which Method Should You Choose?

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ScenarioRecommended MethodRecommended EquipmentReason
    Personal YouTube/VTuber contentInertialRokoko, Perception NeuronEasy setup, no spatial constraints
    Outdoor/location shootsInertialXsens MVNNo spatial constraints, high reliability
    Previz/motion blockingInertialRokoko, XsensIdeal for fast iterative work
    Game cinematics/final animationOpticalOptiTrack, ViconSub-millimeter accuracy essential
    High-quality VTuber live streamingOpticalOptiTrackReal-time streaming + no drift
    Prop/environment interactionOpticalOptiTrack, ViconSimultaneous tracking via markers on objects
    Medical/sports researchOpticalVicon, QualisysClinical-grade precision data required
    Automotive/ergonomics analysisInertialXsens MVNMeasurement possible in real work environments
    +

    If purchasing your own equipment is too costly, renting an optical studio is the most efficient choice. You can get professional-grade results without the expense of owning the equipment yourself.

    +
    +

    Frequently Asked Questions (FAQ)

    +

    Q. What is the biggest difference between optical and inertial motion capture?

    +

    Optical tracks absolute positions using infrared cameras and reflective markers, providing sub-millimeter (0.1mm) accuracy. Inertial uses wearable IMU sensors that allow capture anywhere without spatial constraints, but positional data develops drift (cumulative error) over time.

    +

    Q. Which method is better for VTuber motion capture?

    +

    For simple personal content, inertial (Rokoko, Perception Neuron) is sufficient. However, for high-quality live broadcasts or when precise movements are needed, optical — which has no drift — is the better choice.

    +

    Q. What is drift in inertial motion capture?

    +

    Drift is the cumulative error that occurs when calculating position through double integration of IMU sensor acceleration data. The longer the capture session, the more the character's position diverges from reality, and this effect worsens in environments with magnetic interference.

    +

    Q. How is the occlusion problem in optical motion capture solved?

    +

    Occlusion occurs when markers are blocked from camera view. It's addressed by increasing the number of cameras to reduce blind spots and using software gap-filling functions to interpolate missing segments. Mingle Studio, for example, uses 30 cameras arranged in 360 degrees to minimize occlusion.

    +

    Q. Can both methods be used together?

    +

    Yes. In practice, many studios use a hybrid approach — optical for full-body and inertial gloves for fingers. Mingle Studio combines OptiTrack optical capture with Rokoko gloves, achieving high-quality tracking for both full-body and fingers.

    +

    Q. If I rent a motion capture studio, do I not need to buy equipment myself?

    +

    That's correct. Since purchasing optical equipment requires a substantial investment, renting a studio only for the projects that need it is the most efficient approach. You get professional-grade results without the burden of equipment purchase, setup, and maintenance.

    +
    +

    Experience Optical Motion Capture for Yourself

    +

    You don't need to buy the equipment yourself. At Mingle Studio, you can use a full setup of 30 OptiTrack cameras + Rokoko gloves on an hourly basis.

    +
      +
    • Motion Capture Recording — Full-body/facial capture + real-time monitoring + motion data delivery
    • +
    • Live Broadcast Full Package — Avatar, background, and prop setup + real-time streaming, all-in-one
    • +
    +

    For detailed service information and pricing, visit our Services page. To check available session times, see our Schedule page. If you have any questions, feel free to reach out via our Contact page.

    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/en/devlog/inertial-vs-optical-mocap/images/Sam_ROM_Raw.mp4 b/en/devlog/inertial-vs-optical-mocap/images/Sam_ROM_Raw.mp4 new file mode 100644 index 0000000..e73575e Binary files /dev/null and b/en/devlog/inertial-vs-optical-mocap/images/Sam_ROM_Raw.mp4 differ diff --git a/en/devlog/inertial-vs-optical-mocap/images/basketball-rigid-body-2x-web.mp4 b/en/devlog/inertial-vs-optical-mocap/images/basketball-rigid-body-2x-web.mp4 new file mode 100644 index 0000000..d793bb4 Binary files /dev/null and b/en/devlog/inertial-vs-optical-mocap/images/basketball-rigid-body-2x-web.mp4 differ diff --git a/en/devlog/inertial-vs-optical-mocap/images/thumbnail.webp b/en/devlog/inertial-vs-optical-mocap/images/thumbnail.webp new file mode 100644 index 0000000..b9e19f6 Binary files /dev/null and b/en/devlog/inertial-vs-optical-mocap/images/thumbnail.webp differ diff --git a/en/devlog/optical-mocap-pipeline.html b/en/devlog/optical-mocap-pipeline.html new file mode 100644 index 0000000..8eae1d0 --- /dev/null +++ b/en/devlog/optical-mocap-pipeline.html @@ -0,0 +1,669 @@ + + + + + + + + + Complete Anatomy of the Optical Motion Capture Pipeline — From Cameras to Motion Data - Mingle Studio DevLog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Skip to content + +
    + +
    + +
    +
    +
    +
    + ← Back to list + Motion Capture Technology +

    Complete Anatomy of the Optical Motion Capture Pipeline — From Cameras to Motion Data

    + +
    +
    +
    +
    +

    When an actor wearing a suit moves in a motion capture studio, the on-screen character follows in real time. It looks simple, but behind the scenes runs a precise technical pipeline: camera hardware → network transmission → 2D image processing → 3D reconstruction → skeleton solving → real-time streaming.

    +

    In this article, we dissect the entire pipeline of optical motion capture (based on OptiTrack) step by step.

    +
    +

    Step 1: Camera Installation and Placement Strategy

    +

    The first step in optical motion capture is deciding where and how to place the cameras.

    +

    Mingle Studio motion capture space
    Mingle Studio motion capture space

    +

    Placement Principles

    +
      +
    • Height: Cameras are typically mounted at 2–3m height, angled about 30 degrees downward
    • +
    • Layout: Arranged in a ring formation surrounding the capture volume (shooting space)
    • +
    • Two-tier placement: Alternating cameras at high and low positions improves vertical coverage
    • +
    • Overlap: Every point within the capture volume must be visible to at least 3 cameras simultaneously. Triangulation requires a minimum of 2, but 3 or more significantly improves accuracy and occlusion resilience
    • +
    +

    Relationship Between Camera Count and Accuracy

    +

    More cameras means:

    +
      +
    • Fewer blind spots → reduced probability of occlusion
    • +
    • More cameras seeing the same marker → improved triangulation accuracy
    • +
    • Other cameras compensate if some have issues (redundancy)
    • +
    +

    At Mingle Studio, we use OptiTrack Prime 17 × 16 units + Prime 13 × 14 units, a total of 30 cameras arranged in an 8m × 7m space to minimize 360-degree blind spots.

    +

    IR Pass Filter — Eyes That See Only Infrared

    +

    An IR pass filter (infrared pass filter) is mounted in front of each motion capture camera lens. This filter blocks visible light and allows only infrared wavelengths (around 850nm) to pass through. This eliminates interference from fluorescent lights, sunlight, monitor glow, and other ambient lighting, allowing the camera to detect only marker light reflected from IR LEDs.

    +

    This filter is also the reason the studio lighting doesn't need to be completely turned off. However, direct sunlight or lighting with strong IR components can still cause interference, so studios use lighting with minimal IR emission.

    +

    Frame Synchronization — How 30 Cameras Shoot Simultaneously

    +

    For accurate triangulation, all cameras must trigger their shutters at exactly the same moment. If each camera captures at different timings, the position of fast-moving markers would vary between cameras, making 3D reconstruction inaccurate.

    +

    OptiTrack uses a hardware synchronization (Hardware Sync) method. One camera is designated as the Sync Master, generating timing signals, while the remaining cameras expose simultaneously in sync with this signal.

    +
      +
    • Ethernet cameras (Prime series): The sync signal is embedded in the Ethernet connection itself or delivered through OptiTrack's eSync hub. No separate sync cable is needed.
    • +
    • USB cameras (Flex series): Cameras are connected via dedicated sync cables in a daisy chain.
    • +
    +

    The precision of this synchronization is at the microsecond (μs) level, meaning all 30 cameras capture at virtually the exact same moment.

    +
    +

    Step 2: PoE — Power and Data Through a Single Cable

    +

    What Is PoE (Power over Ethernet)?

    +

    OptiTrack Prime series cameras connect via PoE (Power over Ethernet). This technology delivers both power and data simultaneously through a single standard Ethernet cable (Cat5e/Cat6).

    +

    PoE switch and camera connection
    PoE switch and camera connection

    +

    Technical Standards

    + + + + + + + + + + + + + + + + + + +
    StandardMax PowerNotes
    IEEE 802.3af (PoE)15.4W per portSufficient for standard motion capture cameras
    IEEE 802.3at (PoE+)25.5W per portFor high-frame-rate cameras or those with high IR LED output
    +

    OptiTrack cameras typically consume around 5–12W, well within the PoE standard range.

    +

    Network Topology

    +

    Cameras are connected in a star topology. Each camera connects 1:1 to an individual port on the PoE switch. Daisy chaining (serial connection) is not used.

    +
    +
    +
    CAM 1
    +
    CAM 2
    +
    CAM 3
    +
    ···
    +
    CAM N
    +
    + + + + + + + +
    +
    PoE Switch
    + +
    Host PC
    +
    +
    + +

    For 30 cameras, you would combine a 24-port + 8-port PoE+ switch or use a 48-port switch. When selecting a switch, you must verify the total PoE power budget (e.g., 30 cameras × 12W = 360W).

    +

    Advantages of PoE

    +
      +
    • One cable does it all — no need for separate power adapters for each ceiling-mounted camera
    • +
    • Clean installation — cable count is cut in half, simplifying installation and management
    • +
    • Centralized power management — cameras can be collectively powered ON/OFF from the switch
    • +
    +
    +

    Step 3: What the Camera Sends — 2D Centroids

    +

    Understanding what data is transmitted from cameras to the PC is the key to the pipeline.

    +

    Motive camera 2D view — markers displayed as bright dots
    Motive camera 2D view — markers displayed as bright dots

    +

    Camera Internal Processing

    +

    Each OptiTrack camera has an infrared (IR) LED ring mounted around the camera lens. These LEDs emit infrared light, which is reflected back toward the camera by retroreflective markers attached to the actor's body. The camera sensor captures this reflected light as a grayscale IR image.

    +

    The important point here is that the camera does not send this raw image directly to the PC. The camera's internal processor handles it first:

    +

    1. Thresholding +Only pixels above a certain brightness threshold are kept; the rest are discarded. Since only markers reflecting infrared light appear bright, this process separates markers from the background.

    +

    2. Blob Detection +Clusters of bright pixels (blobs) are recognized as individual marker candidates.

    +

    3. 2D Centroid Calculation +The precise center point (centroid) of each blob is calculated with sub-pixel precision (approximately 0.1 pixels). This uses a weighted average method where the brightness of each pixel within the blob serves as the weight.

    +

    Data Transmitted to the PC

    +

    In the default tracking mode, what the camera sends to the PC is 2D centroid data:

    +
      +
    • (x, y) coordinates + size information for each marker candidate
    • +
    • Extremely small data — only a few hundred bytes per frame per camera
    • +
    +

    Thanks to this small data volume, 40+ cameras can operate on a single Gigabit Ethernet connection. Raw grayscale images can also be transmitted (for debugging/visualization), but this requires several MB/s per camera and is not used during normal tracking.

    +
    +

    In other words, the camera is not "a device that captures and sends video" but rather closer to "a sensor that calculates marker positions and sends only coordinates."

    +
    +

    You might wonder — why are motion capture cameras so expensive compared to regular cameras? The answer lies in the process described above. Regular cameras simply send the captured footage as-is, but motion capture cameras have a dedicated onboard processor that performs thresholding, blob detection, and sub-pixel centroid calculation in real time at 240–360 frames per second. Each camera essentially contains a small computer dedicated to image processing.

    +
    +

    Step 4: Calibration — Aligning the Camera Eyes

    +

    There is a mandatory process before 3D reconstruction can happen. The software must determine each camera's exact position, orientation, and lens characteristics — this is calibration.

    +

    Calibration wand (left) and ground plane frame (right)
    Calibration wand (left) and ground plane frame (right)

    +

    Wanding — Scanning the Space

    +

    An operator walks through the entire capture volume while waving a calibration wand — a rod with LEDs or markers attached. Since the distances between the wand's markers are precisely known, when each camera captures the wand over thousands of frames, the software can calculate:

    +
      +
    • Intrinsic Parameters — characteristics unique to the camera lens, such as focal length and lens distortion coefficients
    • +
    • Extrinsic Parameters — the camera's exact position and orientation in 3D space
    • +
    +

    This calculation uses an optimization algorithm called Bundle Adjustment. It simultaneously optimizes all camera parameters based on thousands of 2D observation data points.

    +

    Ground Plane Setup

    +

    After wanding, an L-shaped calibration frame (Ground Plane) is placed on the floor. Three or more markers on this frame define the floor plane and coordinate origin:

    +
      +
    • Where (0, 0, 0) is (the origin)
    • +
    • Which directions are the X, Y, Z axes
    • +
    • The height reference of the floor plane
    • +
    +

    Once calibration is complete, the software can convert any camera's 2D coordinates into an accurate 3D ray.

    +

    Calibration Quality

    +

    Motive software displays the reprojection error for each camera after calibration. The smaller this value (typically 0.5px or below), the more accurate the calibration. Cameras with large errors are repositioned or recalibrated.

    +
    +

    Step 5: 2D → 3D Reconstruction (Triangulation)

    +

    Let's examine how the 2D centroids arriving at the PC are converted into 3D coordinates.

    +

    Triangulation Principle

    +
      +
    1. Utilizing each camera's exact 3D position, orientation, and lens characteristics obtained through calibration
    2. +
    3. Casting a ray from the camera's 2D centroid coordinate — a straight line extending from the camera position through the centroid direction into 3D space
    4. +
    5. The point where rays from 2 or more cameras viewing the same marker intersect is the marker's 3D coordinate
    6. +
    +

    +

    In Reality, Rays Don't Intersect Perfectly

    +

    Due to noise, lens distortion, calibration errors, and other factors, rays almost never meet at a single exact point. That's why Least Squares Optimization is used:

    +
      +
    • Calculates the 3D coordinate where the sum of distances to all rays is minimized
    • +
    • The distance between each ray and the reconstructed 3D point is called the residual
    • +
    • Smaller residuals mean better reconstruction quality — in a well-calibrated OptiTrack system, sub-millimeter residuals (below 0.5mm) can be expected
    • +
    +

    Impact of Camera Count

    + + + + + + + + + + + + + + + + + + + +
    Number of cameras seeing the markerEffect
    23D reconstruction possible (minimum requirement)
    3Improved accuracy + tracking maintained even if 1 camera is occluded
    4 or moreHigh accuracy + strong occlusion resilience
    +
    +

    Step 6: Marker Identification and Labeling

    +

    Marker Suit and Marker Placement

    +

    To turn 3D reconstruction into meaningful motion data, markers must be attached at precise locations on the body.

    +

    Marker Specifications

    +
      +
    • Diameter: Typically 12–19mm spherical retroreflective markers
    • +
    • Material: Foam/plastic spheres coated with 3M retroreflective tape
    • +
    • Attachment: Velcro, double-sided tape, or pre-mounted on dedicated marker suits
    • +
    +

    Markerset Standards +The number and placement of markers follow standardized markerset specifications:

    +
      +
    • Baseline (37 markers) — OptiTrack's default full-body markerset. Covers upper body, lower body, and head; the most commonly used for game/video motion capture
    • +
    • Baseline + Fingers (~57 markers) — Extended version adding approximately 20 finger markers
    • +
    • Helen Hayes (~15–19 markers) — Medical/gait analysis standard. A minimal markerset focused on the lower body
    • +
    +

    Markers are placed at anatomical landmarks where bones protrude (acromion, lateral epicondyle, anterior superior iliac spine, etc.). These locations most accurately reflect bone movement through the skin and minimize skin artifact.

    +

    After 3D reconstruction, each frame produces a cloud of unnamed 3D points (Point Cloud). The process of determining "is this point the left knee marker or the right shoulder marker?" is labeling.

    +

    Markers labeled in Motive
    Markers labeled in Motive

    +

    Labeling Algorithms

    +

    Template Matching +Based on the geometric arrangement of the markerset defined during calibration (e.g., the distance between knee and ankle markers), the current frame's 3D points are compared against the template.

    +

    Predictive Tracking +Based on velocity and acceleration from previous frames, the software predicts where each marker will be in the next frame and matches it to the nearest 3D point.

    +

    Marker Swap Problem

    +

    When two markers pass very close to each other, the software may swap their labels — a phenomenon where labels are exchanged. This is one of the most common artifacts in optical mocap.

    +

    Solutions:

    +
      +
    • Manually correct labels in post-processing
    • +
    • Design marker placement to be asymmetric for easier differentiation
    • +
    • Use active markers — each marker emits a unique infrared pattern, enabling hardware-level identification and completely eliminating swaps
    • +
    +

    Passive vs Active Markers

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    CategoryPassive Markers (Reflective)Active Markers (Self-emitting)
    PrincipleReflects light from camera IR LEDsEach marker emits a unique IR pattern
    IdentificationSoftware-based (swap possible)Hardware-based (no swaps)
    AdvantagesLightweight, inexpensive, easy to attachAuto-identification, no labeling errors
    DisadvantagesMay require post-processing labelingHeavier, requires battery/power
    +

    In most entertainment/VTuber production environments, passive markers are primarily used. They are lightweight and comfortable, and software performance is good enough that automatic labeling works well in most situations.

    +
    +

    Step 7: Skeleton Solving — From Points to a Skeletal Structure

    +

    This step maps labeled 3D markers to a human skeleton structure.

    +

    Pre-Calibration

    +

    Before shooting, the actor strikes a T-pose (arms outstretched), and the software calculates bone lengths (arm length, leg length, etc.) and joint positions based on marker locations.

    +

    This is followed by a ROM (Range of Motion) capture.

    +

    ROM capture — calibrating joint ranges through various movements
    ROM capture — calibrating joint ranges through various movements
    + Through various movements such as arm circles, knee bends, and torso twists, the software precisely calibrates joint center points and rotation axes.

    +

    Real-Time Solving

    +

    During capture, for every frame:

    +
      +
    1. Receives labeled 3D marker coordinates
    2. +
    3. Calculates the 3D position and rotation of each joint based on marker positions
    4. +
    5. Algorithms such as Inverse Kinematics compute a natural skeletal pose
    6. +
    7. Result: Translation + Rotation data for all joints across the timeline
    8. +
    +

    Rigid Body Tracking (Prop Tracking)

    +

    By attaching 3 or more markers in an asymmetric pattern to props like swords, guns, or cameras, the software recognizes the marker cluster as a single rigid body, enabling 6DOF (3 axes of position + 3 axes of rotation) tracking.

    +
    +

    Step 8: Real-Time Streaming and Data Output

    +

    Real-Time Streaming

    +

    Real-time streaming — sending motion data from Motive to a game engine
    Real-time streaming — sending motion data from Motive to a game engine

    +

    OptiTrack Motive delivers solved data to external software in real time:

    +
      +
    • NatNet SDK — OptiTrack's proprietary protocol, UDP-based low-latency transmission
    • +
    • VRPN — A standard protocol in the VR/mocap field
    • +
    +

    This enables real-time character animation in Unity, Unreal Engine, MotionBuilder, and more. VTuber live broadcasts are possible thanks to this real-time streaming.

    +

    Recorded Data Output Formats

    + + + + + + + + + + + + + + + + + + + +
    FormatUse Case
    FBXSkeleton + animation data, compatible with game engines/DCC tools
    BVHHierarchical motion data, primarily used for retargeting
    C3DRaw 3D marker data, biomechanics/research standard
    +
    +

    Step 9: Post-Processing — Refining the Data

    +

    Post-processing — cleaning up motion data in Motive
    Post-processing — cleaning up motion data in Motive

    +

    Data from real-time capture can sometimes be used as-is, but most professional work involves a post-processing stage.

    +

    Gap Filling

    +

    This fills gaps where markers temporarily disappeared due to occlusion using interpolation.

    +
      +
    • Linear interpolation — Simply connects the frames before and after with a straight line. Suitable for short gaps
    • +
    • Spline interpolation — Fills with smooth curves. Better for maintaining natural movement
    • +
    • Pattern-based interpolation — References data from other takes of the same repeated movement
    • +
    +

    The longer the gap, the less accurate the interpolation, which is why minimizing occlusion during shooting is most important.

    +

    Smoothing and Filtering

    +

    Captured data may contain subtle jitter (high-frequency noise). To remove this:

    +
      +
    • Butterworth filter — A low-pass filter that removes noise above a specified frequency
    • +
    • Gaussian smoothing — Reduces jitter using a weighted average of surrounding frames
    • +
    +

    However, excessive smoothing can cause loss of detail and impact in the motion, so the strength must be set appropriately to avoid blurring sharp movements like sword swings.

    +

    Marker Swap Correction

    +

    This involves finding sections where marker swaps (described in Step 6) occurred and manually correcting the labels. In Motive, you can visually inspect and correct marker trajectories on the timeline.

    +

    Retargeting

    +

    The process of applying captured skeleton data to a character with different proportions. For example, to apply motion data from a 170cm actor to a 3m giant character or a 150cm child character, joint rotations must be preserved while bone lengths are recalculated to match the target character. MotionBuilder, Maya, Unreal Engine, and others provide retargeting functionality.

    +
    +

    Step 10: Common On-Set Issues and Solutions

    +

    Even seemingly perfect optical mocap encounters real-world challenges on set.

    +

    Stray Reflections

    +

    Infrared light reflecting off objects other than markers creates ghost markers — false marker detections.

    +
      +
    • Causes: Metal surfaces, shiny clothing, glasses, watches, floor reflections, etc.
    • +
    • Solution: Cover reflective surfaces with matte tape, or use masking in Motive to tell the software to ignore those areas
    • +
    +

    Marker Detachment

    +

    Markers may fall off the suit or shift position during intense movements.

    +
      +
    • Solution: Carefully check marker attachment before shooting; for vigorous motion capture, combine Velcro + double-sided tape for stronger adhesion
    • +
    • It's also important to periodically monitor marker condition during sessions
    • +
    +

    Clothing Restrictions

    +

    Actors should ideally wear light-colored, matte-material clothing during capture. Black doesn't affect marker reflection, but shiny materials or loose clothing can cause unstable marker positions or stray reflections. Wearing a dedicated mocap suit is the most reliable option.

    +

    Calibration Maintenance

    +

    Calibration can gradually drift due to temperature changes within the capture volume, camera vibrations, or minor tripod shifts. For extended shooting sessions, it's recommended to recalibrate midway, or use Motive's Continuous Calibration feature for real-time correction during capture.

    +
    +

    Latency — How Long From Movement to Screen?

    +

    Here is the time breakdown for each stage of the pipeline.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    StageDuration
    Camera exposure (at 240fps)~4.2ms
    Camera internal processing (centroid calculation)~0.5–1ms
    Network transmission (PoE → PC)< 1ms
    3D reconstruction + labeling~1–2ms
    Skeleton solving~0.5–1ms
    Streaming output (NatNet)< 1ms
    Total end-to-end latencyApprox. 8–14ms (at 240fps)
    +

    At 360fps, the exposure time decreases, making latencies below 7ms achievable. This level of latency is imperceptible to humans, enabling natural real-time response even in VTuber live broadcasts.

    +
    +

    Note: Most of the latency comes from the camera exposure time (frame period). This is why higher frame rates result in lower latency.

    +
    +
    +

    Full Pipeline Summary

    +
    +
    +
    1. Camera Installation · IR Filter · Frame Sync
    +

    30 cameras arranged in a ring, IR pass filters detect infrared only, hardware sync at μs precision

    +
    +
    +
    +
    2. PoE Network
    +

    Single Cat6 cable carries power + data, star topology connection to switch

    +
    +
    +
    +
    3. Camera Onboard Processing → 2D Centroids
    +

    IR LED emission → marker reflection received → thresholding → blob detection → sub-pixel centroid calculation → coordinates transmitted

    +
    +
    +
    +
    4. Calibration
    +

    Wanding to determine camera intrinsic/extrinsic parameters, ground plane to define coordinate system

    +
    +
    +
    +
    5. 2D → 3D Triangulation
    +

    Ray intersection from multiple cameras' 2D coordinates + least squares optimization to reconstruct 3D coordinates

    +
    +
    +
    +
    6. Marker Labeling
    +

    Template matching + predictive tracking to assign marker names to each 3D point

    +
    +
    +
    +
    7. Skeleton Solving
    +

    Based on T-pose + ROM calibration, inverse kinematics to calculate joint positions and rotations

    +
    +
    +
    +
    8. Real-Time Streaming · Data Output
    +

    Real-time transmission to Unity/Unreal/MotionBuilder via NatNet/VRPN, recording in FBX/BVH/C3D

    +
    +
    +
    +
    9. Post-Processing
    +

    Gap filling · smoothing · marker swap correction · retargeting

    +
    +
    +
    +
    Final Output
    +

    Applied to game cinematics · VTuber live · video content (total latency approx. 8–14ms)

    +
    +
    + +

    The camera does not send raw footage to the PC — instead, the camera calculates marker coordinates internally and sends only those, while the PC reconstructs them in 3D and maps them to a skeleton. This is the core principle of optical motion capture.

    +
    +

    Frequently Asked Questions (FAQ)

    +

    Q. How is an optical motion capture camera different from a regular camera?

    +

    Regular cameras capture full-color video, but motion capture cameras are specialized for the infrared (IR) spectrum. They illuminate markers with IR LEDs, detect only reflected light, and internally calculate the markers' 2D coordinates, transmitting only coordinate data to the PC.

    +

    Q. Is there a length limit for PoE cables?

    +

    According to the Ethernet standard, PoE cables support a maximum of 100m. Most motion capture studios easily fall within this range.

    +

    Q. Is a higher camera frame rate always better?

    +

    Higher frame rates are advantageous for fast motion tracking and lower latency, but they increase data throughput and may reduce camera resolution. Generally, 120–240fps is sufficient for VTuber live and game motion capture, while 360fps or higher is used for ultra-high-speed motion analysis in sports science and similar fields.

    +

    Q. How often do marker swaps occur?

    +

    If the markerset is well-designed and there are enough cameras, swaps during real-time capture are rare. However, the probability increases during fast movements or when markers are close together (such as hand clasping), and these sections are corrected in post-processing.

    +

    Q. If 2 cameras are enough for triangulation, why install 30?

    +

    Two cameras is merely the theoretical minimum. In practice, you must account for occlusion (marker obstruction), accuracy variations based on camera angle, and redundancy. With 30 cameras deployed, every marker is always seen by multiple cameras, enabling stable and accurate tracking.

    +

    Q. How often does calibration need to be done?

    +

    Typically, calibration is performed once at the start of each shooting day. However, during extended sessions, calibration can drift due to temperature changes or minor camera movement, so recalibration is recommended during 4–6 hour continuous shoots. Using OptiTrack Motive's Continuous Calibration feature allows real-time correction even during capture.

    +

    Q. Is it not allowed to wear shiny clothing?

    +

    Because motion capture cameras detect infrared reflections, shiny materials (metal decorations, sequins, glossy synthetic fabrics, etc.) can reflect infrared light and create ghost markers. Wearing a dedicated mocap suit or comfortable clothing made of matte materials is best.

    +
    +

    If you have further questions about the technical structure of optical motion capture, feel free to ask on our contact page. If you'd like to experience it firsthand at Mingle Studio, check out our services page.

    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/en/devlog/optical-mocap-pipeline/images/calibration-tools.webp b/en/devlog/optical-mocap-pipeline/images/calibration-tools.webp new file mode 100644 index 0000000..7a0d0b3 Binary files /dev/null and b/en/devlog/optical-mocap-pipeline/images/calibration-tools.webp differ diff --git a/en/devlog/optical-mocap-pipeline/images/continuous-calibration-web.mp4 b/en/devlog/optical-mocap-pipeline/images/continuous-calibration-web.mp4 new file mode 100644 index 0000000..b92719a Binary files /dev/null and b/en/devlog/optical-mocap-pipeline/images/continuous-calibration-web.mp4 differ diff --git a/en/devlog/optical-mocap-pipeline/images/marker-labeling.png b/en/devlog/optical-mocap-pipeline/images/marker-labeling.png new file mode 100644 index 0000000..4a81f7a Binary files /dev/null and b/en/devlog/optical-mocap-pipeline/images/marker-labeling.png differ diff --git a/en/devlog/optical-mocap-pipeline/images/motive-2d-centroid.png b/en/devlog/optical-mocap-pipeline/images/motive-2d-centroid.png new file mode 100644 index 0000000..30dda34 Binary files /dev/null and b/en/devlog/optical-mocap-pipeline/images/motive-2d-centroid.png differ diff --git a/en/devlog/optical-mocap-pipeline/images/poe-switch.png b/en/devlog/optical-mocap-pipeline/images/poe-switch.png new file mode 100644 index 0000000..f09dff0 Binary files /dev/null and b/en/devlog/optical-mocap-pipeline/images/poe-switch.png differ diff --git a/en/devlog/optical-mocap-pipeline/images/post-processing.png b/en/devlog/optical-mocap-pipeline/images/post-processing.png new file mode 100644 index 0000000..75a4d43 Binary files /dev/null and b/en/devlog/optical-mocap-pipeline/images/post-processing.png differ diff --git a/en/devlog/optical-mocap-pipeline/images/realtime-streaming.png b/en/devlog/optical-mocap-pipeline/images/realtime-streaming.png new file mode 100644 index 0000000..2d30cae Binary files /dev/null and b/en/devlog/optical-mocap-pipeline/images/realtime-streaming.png differ diff --git a/en/devlog/optical-mocap-pipeline/images/rom-1.webp b/en/devlog/optical-mocap-pipeline/images/rom-1.webp new file mode 100644 index 0000000..bcb9c10 Binary files /dev/null and b/en/devlog/optical-mocap-pipeline/images/rom-1.webp differ diff --git a/en/devlog/optical-mocap-pipeline/images/rom-2.webp b/en/devlog/optical-mocap-pipeline/images/rom-2.webp new file mode 100644 index 0000000..607ec01 Binary files /dev/null and b/en/devlog/optical-mocap-pipeline/images/rom-2.webp differ diff --git a/en/devlog/optical-mocap-pipeline/images/rom-3.webp b/en/devlog/optical-mocap-pipeline/images/rom-3.webp new file mode 100644 index 0000000..75cbbaf Binary files /dev/null and b/en/devlog/optical-mocap-pipeline/images/rom-3.webp differ diff --git a/en/devlog/optical-mocap-pipeline/images/rom-4.webp b/en/devlog/optical-mocap-pipeline/images/rom-4.webp new file mode 100644 index 0000000..4ad423e Binary files /dev/null and b/en/devlog/optical-mocap-pipeline/images/rom-4.webp differ diff --git a/en/devlog/optical-mocap-pipeline/images/rom-grid.webp b/en/devlog/optical-mocap-pipeline/images/rom-grid.webp new file mode 100644 index 0000000..e2d4f48 Binary files /dev/null and b/en/devlog/optical-mocap-pipeline/images/rom-grid.webp differ diff --git a/en/devlog/optical-mocap-pipeline/images/thumbnail.webp b/en/devlog/optical-mocap-pipeline/images/thumbnail.webp new file mode 100644 index 0000000..4a81f7a Binary files /dev/null and b/en/devlog/optical-mocap-pipeline/images/thumbnail.webp differ diff --git a/en/gallery.html b/en/gallery.html index 8fbe645..dfebf8d 100644 --- a/en/gallery.html +++ b/en/gallery.html @@ -105,6 +105,7 @@
  • Portfolio
  • Gallery
  • Schedule
  • +
  • DevLog
  • Contact
  • Q&A
  • diff --git a/en/index.html b/en/index.html index 992692e..d74e8d3 100644 --- a/en/index.html +++ b/en/index.html @@ -179,7 +179,7 @@ - + @@ -207,79 +207,6 @@ height="0" width="0" style="display:none;visibility:hidden"> - - -
    @@ -297,6 +224,7 @@
  • Portfolio
  • Gallery
  • Schedule
  • +
  • DevLog
  • Contact
  • Q&A
  • @@ -1092,6 +1020,6 @@ - + \ No newline at end of file diff --git a/en/portfolio.html b/en/portfolio.html index 13a559b..9ae2182 100644 --- a/en/portfolio.html +++ b/en/portfolio.html @@ -164,6 +164,7 @@
  • Portfolio
  • Gallery
  • Schedule
  • +
  • DevLog
  • Contact
  • Q&A
  • diff --git a/en/props.html b/en/props.html index 10af730..cf29217 100644 --- a/en/props.html +++ b/en/props.html @@ -78,6 +78,7 @@
  • Portfolio
  • Gallery
  • Schedule
  • +
  • DevLog
  • Contact
  • Q&A
  • diff --git a/en/qna.html b/en/qna.html index 7ad5cd7..f0b5c08 100644 --- a/en/qna.html +++ b/en/qna.html @@ -105,6 +105,7 @@
  • Portfolio
  • Gallery
  • Schedule
  • +
  • DevLog
  • Contact
  • Q&A
  • diff --git a/en/services.html b/en/services.html index 32f7610..4fb2344 100644 --- a/en/services.html +++ b/en/services.html @@ -106,6 +106,7 @@
  • Portfolio
  • Gallery
  • Schedule
  • +
  • DevLog
  • Contact
  • Q&A
  • diff --git a/gallery.html b/gallery.html index de5b82f..afccd1d 100644 --- a/gallery.html +++ b/gallery.html @@ -99,6 +99,7 @@
  • Portfolio
  • Gallery
  • Schedule
  • +
  • DevLog
  • Contact
  • Q&A
  • diff --git a/i18n/en.json b/i18n/en.json index 3192752..462d264 100644 --- a/i18n/en.json +++ b/i18n/en.json @@ -7,6 +7,7 @@ "portfolio": "Portfolio", "gallery": "Gallery", "schedule": "Schedule", + "devlog": "DevLog", "contact": "Contact", "qna": "Q&A" }, diff --git a/i18n/ja.json b/i18n/ja.json index 37b426a..6ab0055 100644 --- a/i18n/ja.json +++ b/i18n/ja.json @@ -7,6 +7,7 @@ "portfolio": "Portfolio", "gallery": "Gallery", "schedule": "Schedule", + "devlog": "DevLog", "contact": "Contact", "qna": "Q&A" }, diff --git a/i18n/ko.json b/i18n/ko.json index d403b07..c5e9a84 100644 --- a/i18n/ko.json +++ b/i18n/ko.json @@ -7,6 +7,7 @@ "portfolio": "Portfolio", "gallery": "Gallery", "schedule": "Schedule", + "devlog": "DevLog", "contact": "Contact", "qna": "Q&A" }, diff --git a/i18n/zh.json b/i18n/zh.json index 4f1697b..49a5f61 100644 --- a/i18n/zh.json +++ b/i18n/zh.json @@ -7,6 +7,7 @@ "portfolio": "Portfolio", "gallery": "Gallery", "schedule": "Schedule", + "devlog": "DevLog", "contact": "Contact", "qna": "Q&A" }, diff --git a/images/sign/오로치이 이치루.webp b/images/sign/오로치이 이치루.webp new file mode 100644 index 0000000..8d8e319 Binary files /dev/null and b/images/sign/오로치이 이치루.webp differ diff --git a/images/sign/쿠로사와 쿄코.webp b/images/sign/쿠로사와 쿄코.webp new file mode 100644 index 0000000..ad2f04c Binary files /dev/null and b/images/sign/쿠로사와 쿄코.webp differ diff --git a/images/sign/토카미 키나.webp b/images/sign/토카미 키나.webp new file mode 100644 index 0000000..2ab486e Binary files /dev/null and b/images/sign/토카미 키나.webp differ diff --git a/index.html b/index.html index 0c430dd..20252b9 100644 --- a/index.html +++ b/index.html @@ -178,7 +178,7 @@ - + @@ -201,81 +201,6 @@ height="0" width="0" style="display:none;visibility:hidden"> - - -
    @@ -293,6 +218,7 @@
  • Portfolio
  • Gallery
  • Schedule
  • +
  • DevLog
  • Contact
  • Q&A
  • @@ -1101,6 +1027,6 @@ - + \ No newline at end of file diff --git a/ja/about.html b/ja/about.html index 7231d45..6c39eb9 100644 --- a/ja/about.html +++ b/ja/about.html @@ -105,6 +105,7 @@
  • Portfolio
  • Gallery
  • Schedule
  • +
  • DevLog
  • Contact
  • Q&A
  • diff --git a/ja/backgrounds.html b/ja/backgrounds.html index 00fe5ec..b1bcd70 100644 --- a/ja/backgrounds.html +++ b/ja/backgrounds.html @@ -78,6 +78,7 @@
  • Portfolio
  • Gallery
  • Schedule
  • +
  • DevLog
  • Contact
  • Q&A
  • diff --git a/ja/contact.html b/ja/contact.html index d157ec5..59ca030 100644 --- a/ja/contact.html +++ b/ja/contact.html @@ -105,6 +105,7 @@
  • Portfolio
  • Gallery
  • Schedule
  • +
  • DevLog
  • Contact
  • Q&A
  • diff --git a/ja/devlog.html b/ja/devlog.html new file mode 100644 index 0000000..1b7d325 --- /dev/null +++ b/ja/devlog.html @@ -0,0 +1,187 @@ + + + + + + + + + + DevLog - ミングルスタジオ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 本文へスキップ + + +
    + + +
    + +
    +
    +
    +

    DevLog

    +

    モーションキャプチャー技術と制作過程を共有します

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + + + + + + + + + \ No newline at end of file diff --git a/ja/devlog/inertial-vs-optical-mocap.html b/ja/devlog/inertial-vs-optical-mocap.html new file mode 100644 index 0000000..415d1c4 --- /dev/null +++ b/ja/devlog/inertial-vs-optical-mocap.html @@ -0,0 +1,508 @@ + + + + + + + + + モーションキャプチャー 慣性式 vs 光学式、どんな違いがある? - ミングルスタジオ DevLog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Skip to content + +
    + +
    + +
    +
    +
    +
    + ← 一覧に戻る + モーションキャプチャー技術 +

    モーションキャプチャー 慣性式 vs 光学式、どんな違いがある?

    + +
    +
    +
    +
    +

    モーションキャプチャーに興味を持ち始めると、最初にぶつかる疑問があります。

    +

    「慣性式と光学式、何が違うの?」

    +

    この記事では、二つの方式の原理から代表的な機材、実際のユーザー評価までまとめてご紹介します。

    +
    +

    光学式(Optical)モーションキャプチャーとは?

    +

    光学式は赤外線カメラ反射マーカーを使用する方式です。

    +

    撮影空間の周囲に複数の赤外線(IR)カメラを設置し、アクターの関節位置に直径10〜20mm程度の再帰反射(Retro-reflective)マーカーを取り付けます。各カメラは赤外線LEDを照射し、マーカーから反射して戻ってくる光を検出することで、2D画像上のマーカー座標を抽出します。

    +

    少なくとも2台以上のカメラが同じマーカーを同時に捉えると、三角測量(Triangulation)の原理でそのマーカーの正確な3D座標を計算できます。カメラの台数が多いほど精度が上がり死角が減るため、プロのスタジオでは通常12〜40台以上のカメラを配置します。

    +

    このように毎フレームごとにすべてのマーカーの3D座標が絶対位置として記録されるため、時間がどれだけ経過してもデータが累積誤差なく正確に維持されます。

    +

    +

    メリット

    +
      +
    • サブミリメートル精度 — 0.1mm レベルの精密な位置追跡が可能
    • +
    • ドリフトなし — 絶対座標基準のため、時間が経ってもデータがズレない
    • +
    • 複数オブジェクトの同時追跡 — アクター+小道具+セット要素まで一緒にキャプチャー可能
    • +
    • 低レイテンシー — 約5〜10msで、リアルタイムフィードバックに最適
    • +
    +

    制約

    +
      +
    • 専用の撮影空間が必要(カメラ設置+環境制御)
    • +
    • セットアップとキャリブレーションに30〜90分かかる
    • +
    • オクルージョン(遮蔽)問題 — マーカーがカメラから見えなくなると追跡が途切れる
    • +
    +

    代表的な機材

    +

    OptiTrack(PrimeXシリーズ)

    +
      +
    • 光学式の中でコストパフォーマンス最強と評価されるブランド
    • +
    • Motiveソフトウェアの使いやすさが良く、Unity/Unrealプラグインのエコシステムが充実
    • +
    • ゲーム開発会社、VTuberプロダクション、大学研究室で幅広く使用
    • +
    • コミュニティ評価:*「この価格帯でこの精度はOptiTrackだけ」*という意見が主流
    • +
    +

    Vicon(Vero / Vantageシリーズ)

    +
      +
    • 映画VFX業界のゴールドスタンダード — ハリウッドAAA級映画のほとんどがViconで撮影
    • +
    • 最高級の精度と安定性、強力なポストプロセスソフトウェア(Shogun)
    • +
    • コミュニティ評価:「精度は最高だが、小規模スタジオには過大な投資」
    • +
    +

    Qualisys

    +
      +
    • 医療・スポーツバイオメカニクス分野に強い
    • +
    • 歩行分析、臨床研究、スポーツ科学に特化
    • +
    • エンターテインメント分野のユーザーコミュニティは比較的小規模
    • +
    +
    +

    慣性式(IMU)モーションキャプチャーとは?

    +

    慣性式はIMU(Inertial Measurement Unit、慣性計測装置)センサーを体に取り付けるか、スーツに内蔵して動きを計測する方式です。

    +

    各IMUセンサーには3つのコアセンサーが搭載されています:

    +
      +
    • 加速度計(Accelerometer) — 線形加速度を計測し、移動方向と速度を把握
    • +
    • ジャイロスコープ(Gyroscope) — 角速度を計測し、回転量を算出
    • +
    • 地磁気計(Magnetometer) — 地球の磁場を基準に方向(Heading)を補正
    • +
    +

    この3つのセンサーのデータをセンサーフュージョン(Sensor Fusion)アルゴリズムで統合すると、センサーが取り付けられた身体部位の3D方向(Orientation)をリアルタイムで計算できます。通常15〜17個のセンサーを上半身、下半身、腕、脚などの主要関節に配置し、各センサー間の関係から全身骨格データを抽出します。

    +

    ただし、加速度計のデータを二重積分して位置を求める過程で誤差が蓄積(ドリフト)するため、「空間のどこに立っているか」というグローバル位置は時間の経過とともに不正確になります。これが慣性式の根本的な限界です。

    +

    +

    メリット

    +
      +
    • 空間の制約なし — 屋外、狭い場所、どこでも可能
    • +
    • 素早いセットアップ — スーツ着用後5〜15分でキャプチャー開始
    • +
    • オクルージョン問題なし — センサーが体に直接取り付けられているため遮蔽の問題がない
    • +
    +

    制約

    +
      +
    • ドリフト — 時間の経過とともに位置データがズレる(累積誤差)
    • +
    • グローバル位置精度が低い — 「どこに立っているか」を正確に把握しにくい
    • +
    • 磁場干渉 — 金属構造物や電子機器の近くでデータが歪む
    • +
    • 小道具や環境とのインタラクション追跡が困難
    • +
    +

    代表的な機材

    +

    Xsens MVN(現Movella)

    +
      +
    • 慣性式の中で精度と信頼性No.1と評価される機材
    • +
    • 自動車産業、人間工学、ゲームアニメーション分野で幅広く活用
    • +
    • コミュニティ評価:「慣性式を使うならXsens一択」、ただし*「グローバル位置のドリフトはどうしようもない」*
    • +
    +

    Rokoko Smartsuit Pro

    +
      +
    • 価格のアクセシビリティが最大の利点 — インディー開発者、個人クリエイターに人気
    • +
    • Rokoko Studioソフトウェアが直感的で、リターゲティング機能が便利
    • +
    • コミュニティ評価:「この価格でこのクオリティは驚き」、一方で*「長時間撮影ではドリフトが目立つ」「精密作業には限界がある」*
    • +
    +

    Noitom Perception Neuron

    +
      +
    • 一部モデルで指追跡をサポート、コンパクトなフォームファクター
    • +
    • コミュニティ評価:「Neuron 3で大幅に改善された」、しかし*「ドリフトの問題はまだある」「ソフトウェア(Axis Studio)の安定性が惜しい」*
    • +
    +
    +

    一目で比較

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    項目光学式(Optical)慣性式(IMU)
    追跡原理赤外線カメラ+反射マーカー三角測量IMUセンサー(加速度計+ジャイロ+地磁気計)
    位置精度サブミリメートル(0.1mm) — 絶対座標ドリフト発生 — 時間経過で累積誤差
    回転精度位置データから導出(非常に高い)1〜3度レベル(センサーフュージョンアルゴリズムに依存)
    ドリフトなし — 毎フレーム絶対位置を計測あり — 加速度二重積分時に誤差蓄積
    オクルージョン(遮蔽)マーカーがカメラに見えないと追跡不可問題なし — センサーが直接体に取り付け
    磁場干渉影響なし金属・電子機器の近くでデータ歪み
    レイテンシー〜5-10ms〜10-20ms
    セットアップ時間30〜90分(カメラ配置+キャリブレーション)5〜15分(スーツ着用+簡易補正)
    撮影空間専用スタジオ必要(カメラ設置・環境制御)どこでも可能(屋外、狭い場所OK)
    複数人撮影マーカーセットの区分で同時キャプチャー可能スーツごとに独立で同時可能だがインタラクションが難しい
    小道具/オブジェクト追跡マーカー取り付けで同時追跡可能別途センサーが必要、実質的に困難
    指追跡専用ハンドマーカーセットで高精度追跡一部機材のみ対応、精度に限界
    後処理作業量オクルージョン区間のギャップフィリングが必要ドリフト補正+位置整理が必要
    代表的な機材OptiTrack、Vicon、QualisysXsens、Rokoko、Noitom
    主な活用分野ゲーム/映画の最終キャプチャー、VTuberライブ、研究プリビズ、屋外撮影、インディー/個人コンテンツ
    +
    +

    マーカーレス方式とは?

    +

    最近では、カメラ映像だけでAIが動作を抽出するマーカーレスモーションキャプチャーも注目を集めています。Move.ai、Captury、Plaskなどが代表的で、マーカーの取り付けなしに一般的なカメラでもキャプチャーが可能という点で参入障壁が非常に低いです。

    +

    しかし、現時点でマーカーレス方式は精度と安定性の面で光学式・慣性式に大きく及びません。関節位置が飛んだり震えたりするジッター(Jitter)現象が頻繁に発生し、速い動きやオクルージョンの状況で追跡が不安定になります。プリビズやリファレンスレベルでは活用可能ですが、ゲーム・放送・映画などの最終成果物にそのまま使えるレベルにはまだ達していません。

    +

    技術の進歩が速い分野なので今後期待できますが、現在のプロの現場では依然として光学式と慣性式が主流です。

    +
    +

    コミュニティはどう評価している?

    +

    Reddit(r/gamedev、r/vfx)、CGSocietyなどモーションキャプチャー関連コミュニティで繰り返し見られる意見をまとめると:

    +
    +

    「最終クオリティが重要な作業は光学式、素早い反復とアクセシビリティが重要なら慣性式」

    +
    +

    実際に多くのプロスタジオが二つの方式を併用しています。慣性式で素早くプリビズ(事前視覚化)やモーションブロッキングを行い、最終撮影は光学式で行うというワークフローが一般的です。

    +

    個人クリエイターやインディーチームであれば、Rokokoのように参入障壁の低い慣性式で始めつつ、精度が必要なプロジェクトでは光学式スタジオをレンタルするのが最も現実的だという意見が多いです。

    +
    +

    ミングルスタジオが光学式を選んだ理由

    +

    ミングルスタジオはOptiTrackカメラ30台(Prime 17 × 16台 + Prime 13 × 14台)を備えた光学式モーションキャプチャースタジオです。光学式を選んだ理由は明確です。

    +
      +
    • 精度 — ゲームシネマティック、VTuberライブ、放送コンテンツなど最終成果物に直結する作業にはサブミリメートル精度が不可欠
    • +
    • リアルタイムストリーミング — VTuberライブ放送のようにリアルタイムフィードバックが必要な場面で、ドリフトのない安定したデータを提供
    • +
    • 小道具連携 — 剣、銃、椅子などの小道具とのインタラクションまで精密に追跡可能
    • +
    • コストパフォーマンス — OptiTrackはViconに比べて合理的な価格でプロ級の精度を提供
    • +
    • 指追跡の補完 — 光学式の弱点である指追跡をRokokoグローブで補完し、全身は光学式の精度で、指は慣性式グローブの安定した追跡で、各方式のメリットだけを組み合わせ
    • +
    +

    このように光学式と慣性式は必ずしも二者択一ではありません。各方式の強みを組み合わせることで、単一方式では到達しにくいクオリティを生み出すことができます。

    +

    8m x 7mのキャプチャー空間に30台のカメラが360度死角なく追跡するため、オクルージョンの問題も最小化されています。

    +

    ミングルスタジオの撮影ワークフロー

    +

    実際にミングルスタジオでモーションキャプチャーのスタジオレンタルをご利用いただくと、以下の流れで進行します。

    +

    ステップ1:事前相談 +撮影の目的、必要な人数、キャプチャーする動作の種類を事前にご相談します。ライブ放送の場合、アバター、背景、プロップ(小道具)のセッティングもこの段階で打ち合わせします。

    +

    ステップ2:撮影準備(セッティング) +スタジオにお越しいただくと、専門オペレーターがマーカー取り付け、キャリブレーション、アバターマッピングを行います。ライブ放送パッケージの場合、キャラクター・背景・プロップのセッティングが含まれているため、別途の準備は不要です。

    +

    ステップ3:本撮影 / ライブ放送 +OptiTrack 30台カメラ + Rokokoグローブで全身と指を同時にキャプチャーします。リアルタイムモニタリングにより撮影現場ですぐに結果を確認でき、リモートディレクションにも対応しています。

    +

    ステップ4:データ納品 / 後処理 +撮影終了後、モーションデータをすぐにお受け取りいただけます。必要に応じて、データクリーンアップ(ノイズ除去、フレーム補正)やお客様のアバターに最適化されたリターゲティングの後処理も可能です。

    +
    +

    どちらの方式を選ぶべき?

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    シチュエーション推奨方式推奨機材理由
    個人YouTube/VTuberコンテンツ慣性式Rokoko、Perception Neuron簡単なセットアップ、空間の制約なし
    屋外・ロケ撮影慣性式Xsens MVN空間の制約なし、高い信頼性
    プリビズ・モーションブロッキング慣性式Rokoko、Xsens素早い反復作業に有利
    ゲームシネマティック・最終アニメーション光学式OptiTrack、Viconサブミリメートル精度が必須
    VTuberライブ放送(高品質)光学式OptiTrackリアルタイムストリーミング+ドリフトなし
    小道具・環境インタラクション光学式OptiTrack、Viconオブジェクトにマーカー取り付けで同時追跡
    医療・スポーツ研究光学式Vicon、Qualisys臨床レベルの精密データが必要
    自動車・人間工学分析慣性式Xsens MVN実際の作業環境で計測可能
    +

    自前で機材を購入するのが負担であれば、光学式スタジオのレンタルが最も効率的な選択です。高額な機材を自分で揃えなくても、プロ級の成果物を得ることができます。

    +
    +

    よくある質問(FAQ)

    +

    Q. モーションキャプチャーの光学式と慣性式の最大の違いは何ですか?

    +

    光学式は赤外線カメラと反射マーカーで絶対位置を追跡し、サブミリメートル(0.1mm)レベルの精度を提供します。慣性式はIMUセンサーを着用して空間の制約なくどこでもキャプチャーが可能ですが、時間の経過とともに位置データにドリフト(累積誤差)が発生します。

    +

    Q. VTuberのモーションキャプチャーにはどちらの方式が良いですか?

    +

    シンプルな個人コンテンツであれば慣性式(Rokoko、Perception Neuron)で十分です。しかし、高品質なライブ放送や精密な動作が必要な場合は、ドリフトのない光学式が適しています。

    +

    Q. 慣性式モーションキャプチャーのドリフトとは何ですか?

    +

    ドリフトとは、IMUセンサーの加速度データを二重積分して位置を計算する過程で生じる累積誤差です。撮影時間が長くなるほどキャラクターの位置が実際とずれていく現象が発生し、磁場干渉のある環境ではさらに悪化する可能性があります。

    +

    Q. 光学式モーションキャプチャーのオクルージョン問題はどう解決しますか?

    +

    オクルージョンは、マーカーがカメラから遮られて見えなくなった時に発生します。カメラの台数を増やして死角を減らし、ソフトウェアのギャップフィリング(Gap Filling)機能で欠落区間を補間して解決します。ミングルスタジオの場合、30台のカメラを360度に配置してオクルージョンを最小化しています。

    +

    Q. 二つの方式を同時に使うことはできますか?

    +

    はい、可能です。実際に多くのスタジオが全身は光学式で、指は慣性式グローブでキャプチャーするハイブリッド方式を採用しています。ミングルスタジオもOptiTrack光学式にRokokoグローブを組み合わせ、全身と指の両方を高品質で追跡しています。

    +

    Q. モーションキャプチャースタジオをレンタルすれば、機材を自分で買わなくていいのですか?

    +

    その通りです。光学式機材は自分で購入するとかなりの投資が必要なため、必要なプロジェクトの時だけスタジオをレンタルするのが最も効率的な方法です。機材の購入、セットアップ、メンテナンスの負担なくプロ級の成果物を得ることができます。

    +
    +

    光学式モーションキャプチャーを実際に体験してみませんか

    +

    機材を自分で購入する必要はありません。ミングルスタジオではOptiTrack 30台 + Rokokoグローブのフルセットアップを時間単位でご利用いただけます。

    +
      +
    • モーションキャプチャー収録 — 全身/フェイシャルキャプチャー+リアルタイムモニタリング+モーションデータ提供
    • +
    • ライブ放送フルパッケージ — アバター・背景・プロップセッティング+リアルタイムストリーミングまでオールインワン
    • +
    +

    詳しいサービス内容と料金はサービス案内ページで、撮影スケジュールはスケジュールページでご確認いただけます。ご質問がありましたらお問い合わせページからお気軽にご連絡ください。

    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/ja/devlog/inertial-vs-optical-mocap/images/Sam_ROM_Raw.mp4 b/ja/devlog/inertial-vs-optical-mocap/images/Sam_ROM_Raw.mp4 new file mode 100644 index 0000000..e73575e Binary files /dev/null and b/ja/devlog/inertial-vs-optical-mocap/images/Sam_ROM_Raw.mp4 differ diff --git a/ja/devlog/inertial-vs-optical-mocap/images/basketball-rigid-body-2x-web.mp4 b/ja/devlog/inertial-vs-optical-mocap/images/basketball-rigid-body-2x-web.mp4 new file mode 100644 index 0000000..d793bb4 Binary files /dev/null and b/ja/devlog/inertial-vs-optical-mocap/images/basketball-rigid-body-2x-web.mp4 differ diff --git a/ja/devlog/inertial-vs-optical-mocap/images/thumbnail.webp b/ja/devlog/inertial-vs-optical-mocap/images/thumbnail.webp new file mode 100644 index 0000000..b9e19f6 Binary files /dev/null and b/ja/devlog/inertial-vs-optical-mocap/images/thumbnail.webp differ diff --git a/ja/devlog/optical-mocap-pipeline.html b/ja/devlog/optical-mocap-pipeline.html new file mode 100644 index 0000000..db2487b --- /dev/null +++ b/ja/devlog/optical-mocap-pipeline.html @@ -0,0 +1,669 @@ + + + + + + + + + 光学式モーションキャプチャーパイプライン完全解剖 ― カメラからモーションデータまで - ミングルスタジオ DevLog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Skip to content + +
    + +
    + +
    +
    +
    +
    + ← 一覧に戻る + モーションキャプチャー技術 +

    光学式モーションキャプチャーパイプライン完全解剖 ― カメラからモーションデータまで

    + +
    +
    +
    +
    +

    モーションキャプチャースタジオで俳優がスーツを着て動くと、画面上のキャラクターがリアルタイムで追従します。一見シンプルに見えますが、その裏ではカメラハードウェア → ネットワーク伝送 → 2D映像処理 → 3D復元 → スケルトンソルビング → リアルタイムストリーミングという精密な技術パイプラインが動いています。

    +

    この記事では、光学式モーションキャプチャー(OptiTrack基準)のパイプライン全体をステップごとに解剖します。

    +
    +

    ステップ1:カメラの設置と配置戦略

    +

    光学式モーションキャプチャーの最初のステップは、カメラをどこに、どのように配置するかです。

    +

    ミングルスタジオ モーションキャプチャー空間
    ミングルスタジオ モーションキャプチャー空間

    +

    配置の原則

    +
      +
    • 高さ:通常2〜3mの高さに設置し、約30度下向きに角度を調整します
    • +
    • 配置形態:キャプチャーボリューム(撮影空間)の周囲を囲むリング(Ring)形態で配置
    • +
    • 2段配置:高い位置と低い位置にカメラを交互に配置すると、垂直方向のカバレッジが向上します
    • +
    • オーバーラップ(重複):キャプチャーボリューム内のすべてのポイントが最低3台以上のカメラに同時に見える必要があります。三角測量には最低2台が必要ですが、3台以上になると精度とオクルージョン対応力が大幅に向上します
    • +
    +

    カメラ台数と精度の関係

    +

    カメラの台数が多いほど:

    +
      +
    • 死角が減る → オクルージョン発生確率の減少
    • +
    • 同じマーカーを見るカメラが増える → 三角測量精度の向上
    • +
    • 一部のカメラに問題が生じても他のカメラが補完(冗長性)
    • +
    +

    ミングルスタジオではOptiTrack Prime 17 × 16台 + Prime 13 × 14台、合計30台を8m × 7mの空間に配置し、360度の死角を最小化しています。

    +

    IRパスフィルター ― 赤外線だけを見る目

    +

    モーションキャプチャーカメラのレンズ前面にはIRパスフィルター(赤外線通過フィルター)が装着されています。このフィルターは可視光線を遮断し、赤外線波長(850nm付近)のみを通過させます。これにより蛍光灯、太陽光、モニターの光など一般的な照明による干渉が根本的に遮断され、カメラはIR LEDに反射したマーカーの光のみを検出できます。

    +

    撮影空間の照明を完全に消す必要がないのもこのフィルターのおかげです。ただし直射日光や強いIR成分を含む照明は干渉を引き起こす可能性があるため、スタジオ環境ではIR干渉の少ない照明を使用します。

    +

    フレーム同期 ― 30台のカメラが同時に撮影する方法

    +

    三角測量を正確に行うには、すべてのカメラがまったく同じ瞬間にシャッターを切る必要があります。カメラごとにバラバラのタイミングで撮影すると、高速移動するマーカーの位置がカメラごとに異なり、3D復元が不正確になります。

    +

    OptiTrackはハードウェア同期(Hardware Sync)方式を採用しています。1台のカメラがSync Master(同期マスター)に指定されてタイミング信号を生成し、残りのカメラがこの信号に合わせて同時に露光します。

    +
      +
    • Ethernetカメラ(Primeシリーズ):同期信号がEthernet接続自体に内蔵されているか、OptiTrackのeSyncハブを通じて伝達されます。別途の同期ケーブルは不要です。
    • +
    • USBカメラ(Flexシリーズ):カメラ間を専用同期ケーブルでデイジーチェーン接続します。
    • +
    +

    この同期の精度はマイクロ秒(μs)単位で、30台のカメラが事実上完全に同じ瞬間に撮影します。

    +
    +

    ステップ2:PoE ― 1本のケーブルで電力とデータを同時に

    +

    PoE(Power over Ethernet)とは?

    +

    OptiTrack PrimeシリーズのカメラはPoE(Power over Ethernet)方式で接続されます。標準のEthernetケーブル(Cat5e/Cat6)1本で電力供給とデータ伝送を同時に行う技術です。

    +

    PoEスイッチとカメラの接続
    PoEスイッチとカメラの接続

    +

    技術規格

    + + + + + + + + + + + + + + + + + + +
    規格最大電力備考
    IEEE 802.3af (PoE)ポートあたり15.4W基本的なモーションキャプチャーカメラに十分
    IEEE 802.3at (PoE+)ポートあたり25.5W高フレームレートカメラやIR LED出力が高い場合
    +

    OptiTrackカメラは通常5〜12W程度の消費電力なので、PoE規格の範囲内で十分に動作します。

    +

    ネットワークトポロジー

    +

    カメラはスター(Star)トポロジーで接続されます。各カメラがPoEスイッチの個別ポートに1対1で接続される構造です。デイジーチェーン(直列接続)は使用しません。

    +
    +
    +
    CAM 1
    +
    CAM 2
    +
    CAM 3
    +
    ···
    +
    CAM N
    +
    + + + + + + + +
    +
    PoEスイッチ
    + +
    ホストPC
    +
    +
    + +

    30台のカメラの場合、24ポート + 8ポートのPoE+スイッチを組み合わせるか、48ポートスイッチを使用します。スイッチ選択時にはPoE総電力バジェット(例:30台 × 12W = 360W)を確認する必要があります。

    +

    PoEの利点

    +
      +
    • ケーブル1本で解決 ― 天井に設置されたカメラごとに電源アダプターを別途接続する必要なし
    • +
    • すっきりした施工 ― ケーブル数が半分に削減され、設置と管理が簡便
    • +
    • 集中電源管理 ― スイッチからカメラの電源を一括ON/OFF可能
    • +
    +
    +

    ステップ3:カメラが送るデータ ― 2Dセントロイド

    +

    カメラからPCへ送信されるデータが何かを理解することが、パイプラインの核心です。

    +

    Motiveカメラ2Dビュー ― マーカーが明るい点として表示されている様子
    Motiveカメラ2Dビュー ― マーカーが明るい点として表示されている様子

    +

    カメラ内部の処理過程

    +

    各OptiTrackカメラには、カメラレンズの周囲に赤外線(IR)LEDリングが装着されています。このLEDが赤外線を照射すると、俳優の身体に取り付けられた再帰反射マーカーが光をカメラ方向に反射します。カメラセンサーはこの反射光をグレースケールIR画像として撮影します。

    +

    ここで重要なのは、カメラがこの画像をそのままPCに送信するわけではないということです。カメラ内部のプロセッサーがまず処理を行います:

    +

    1. スレッショルディング(Thresholding) +一定基準(閾値)以上の明るさのピクセルのみを残し、残りを除去します。赤外線を反射するマーカーだけが明るく光るため、背景とマーカーを分離する処理です。

    +

    2. ブロブ検出(Blob Detection) +明るいピクセルが集まっている領域(ブロブ)を1つのマーカー候補として認識します。

    +

    3. 2Dセントロイド計算 +各ブロブの正確な中心点(セントロイド)をサブピクセル精度(約0.1ピクセル)で計算します。ブロブ内の各ピクセルの明るさを重みとして使用する加重平均方式です。

    +

    PCに送信されるデータ

    +

    デフォルトのトラッキングモードでカメラがPCに送るのは2Dセントロイドデータです:

    +
      +
    • 各マーカー候補の(x, y)座標 + サイズ情報
    • +
    • カメラ1台あたり1フレームあたり数百バイトの非常に小さなデータ
    • +
    +

    このように小さなデータ量のおかげで、40台以上のカメラでもギガビットEthernet1本で十分です。生のグレースケール画像も送信可能ですが(デバッグ/可視化用)、その場合カメラあたり数MB/sが必要なため、通常のトラッキングでは使用しません。

    +
    +

    つまり、カメラは「映像を撮って送る装置」ではなく、「マーカー位置を計算して座標だけを送るセンサー」に近い存在です。

    +
    +

    ここで一つ疑問が生じるかもしれません ― なぜモーションキャプチャーカメラは通常のカメラと比べてあれほど高価なのか? その理由は上で説明した処理にあります。通常のカメラは撮影した映像をそのまま送って終わりですが、モーションキャプチャーカメラは内部に専用プロセッサーを搭載しており、スレッショルディング、ブロブ検出、サブピクセルセントロイド計算までを毎秒240〜360フレームでリアルタイム処理します。カメラ1台が事実上映像処理専用の小型コンピューターを内蔵しているのです。

    +
    +

    ステップ4:キャリブレーション ― カメラの目を揃える

    +

    3D復元の前に必ず経なければならないプロセスがあります。ソフトウェアが各カメラの正確な位置、方向、レンズ特性を把握するキャリブレーション(Calibration)です。

    +

    キャリブレーションワンド(左)とグラウンドプレーンフレーム(右)
    キャリブレーションワンド(左)とグラウンドプレーンフレーム(右)

    +

    ワンディング(Wanding) ― 空間をスキャンする

    +

    オペレーターがLEDまたはマーカーが取り付けられたキャリブレーションワンド(Wand、棒)を持ち、キャプチャーボリューム全体を歩き回りながら振ります。ワンドのマーカー間の距離は正確に分かっているため、各カメラがワンドを数千フレームにわたって撮影すると、ソフトウェアは以下を計算できます:

    +
      +
    • 内部パラメータ(Intrinsic Parameters) ― 焦点距離、レンズ歪み係数などカメラレンズ固有の特性
    • +
    • 外部パラメータ(Extrinsic Parameters) ― 3D空間におけるカメラの正確な位置と方向
    • +
    +

    この計算にはバンドル調整(Bundle Adjustment)という最適化アルゴリズムが使用されます。数千の2D観測データに基づいて、すべてのカメラのパラメータを同時に最適化するプロセスです。

    +

    グラウンドプレーンの設定

    +

    ワンディングが完了したら、床にL字型のキャリブレーションフレーム(Ground Plane)を置きます。このフレームの3つ以上のマーカーが床面と座標原点を定義します:

    +
      +
    • どこが(0, 0, 0)か(原点)
    • +
    • どの方向がX、Y、Z軸か
    • +
    • 床面の高さ基準
    • +
    +

    キャリブレーションが完了すると、ソフトウェアはどのカメラの2D座標でも正確な3D光線に変換できるようになります。

    +

    キャリブレーション品質

    +

    Motiveソフトウェアはキャリブレーション後、各カメラの再投影誤差(Reprojection Error)を表示します。この値が小さいほど(通常0.5px以下)、キャリブレーションが正確であることを意味します。誤差が大きいカメラは位置を調整するか再キャリブレーションします。

    +
    +

    ステップ5:2D → 3D復元(三角測量)

    +

    PCに到着した2Dセントロイドがどのように3D座標に変換されるかを見ていきます。

    +

    三角測量(Triangulation)の原理

    +
      +
    1. キャリブレーションで取得した各カメラの正確な3D位置、方向、レンズ特性を活用します
    2. +
    3. カメラの2Dセントロイド座標から光線(Ray)を射出します ― カメラ位置からセントロイド方向に3D空間へ伸びる直線
    4. +
    5. 同じマーカーを見た2台以上のカメラから射出された光線が交差する点がマーカーの3D座標です
    6. +
    +

    +

    実際には完全に交差しない

    +

    ノイズ、レンズ歪み、キャリブレーション誤差などにより、光線が正確に1点で交わることはほぼありません。そのため最小二乗法(Least Squares Optimization)を使用します:

    +
      +
    • すべての光線までの距離の合計が最小になる3D座標を計算
    • +
    • この時、各光線と復元された3Dポイントとの距離を残差(Residual)と呼びます
    • +
    • 残差が小さいほど復元品質が高い ― 適切にキャリブレーションされたOptiTrackシステムではサブミリメートル(0.5mm以下)レベルの残差が期待できます
    • +
    +

    カメラ台数の影響

    + + + + + + + + + + + + + + + + + + + +
    該当マーカーを見ているカメラ台数効果
    2台3D復元可能(最低条件)
    3台精度向上 + 1台が遮られてもトラッキング維持
    4台以上高精度 + 強力なオクルージョン耐性
    +
    +

    ステップ6:マーカー識別とラベリング

    +

    マーカースーツとマーカー配置

    +

    3D復元を意味のあるモーションデータにするには、マーカーが身体の正確な位置に取り付けられている必要があります。

    +

    マーカー仕様

    +
      +
    • 直径:通常12〜19mmの球形再帰反射マーカーを使用
    • +
    • 素材:3M再帰反射テープでコーティングされたフォーム/プラスチック球
    • +
    • 取り付け:ベルクロ(面ファスナー)、両面テープ、または専用マーカースーツにあらかじめ装着
    • +
    +

    マーカーセット規格 +マーカーをどこに何個付けるかは標準化されたマーカーセット(Markerset)規格に従います:

    +
      +
    • Baseline(37マーカー) ― OptiTrack基本フルボディマーカーセット。上半身、下半身、頭部をカバーし、ゲーム/映像モーションキャプチャーで最も多く使用
    • +
    • Baseline + Fingers(約57マーカー) ― 上記に指マーカー約20個を追加した拡張版
    • +
    • Helen Hayes(約15〜19マーカー) ― 医療/歩行分析の標準。下半身中心の最小マーカーセット
    • +
    +

    マーカーは骨が突出した解剖学的ランドマーク(肩峰、外側上顆、上前腸骨棘など)に取り付けます。これらの位置は皮膚上で骨の動きを最も正確に反映し、スキンアーティファクト(皮膚の滑り)が最小化されるポイントです。

    +

    3D復元が完了すると、各フレームに名前のない3Dポイントの群(Point Cloud)が生成されます。「このポイントは左膝マーカーなのか、右肩マーカーなのか」を判別するプロセスがラベリング(Labeling)です。

    +

    Motiveでマーカーがラベリングされた様子
    Motiveでマーカーがラベリングされた様子

    +

    ラベリングアルゴリズム

    +

    テンプレートマッチング(Template Matching) +キャリブレーション時に定義されたマーカーセットの幾何学的配置(例:膝と足首のマーカー間距離)を基準に、現在のフレームの3Dポイントをテンプレートと照合します。

    +

    予測追跡(Predictive Tracking) +前のフレームの速度・加速度に基づいて、次のフレームで各マーカーがどこにあるかを予測し、最も近い3Dポイントとマッチングします。

    +

    マーカースワップ(Swap)問題

    +

    2つのマーカーが互いに非常に近くを通過する際、ソフトウェアが2つのマーカーのラベルを入れ替えてしまう現象です。光学式モーキャプで最もよく見られるアーティファクトの一つです。

    +

    解決方法:

    +
      +
    • 後処理で手動でラベルを修正
    • +
    • マーカー配置を非対称に設計して区別を容易にする
    • +
    • アクティブマーカー(Active Marker)の使用 ― 各マーカーが固有の赤外線パターンを発光し、ハードウェアレベルで識別、スワップを根本的に防止
    • +
    +

    パッシブ vs アクティブマーカー

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    区分パッシブマーカー(反射型)アクティブマーカー(発光型)
    原理カメラIR LEDの光を反射マーカー自体が固有のIRパターンを発光
    識別ソフトウェアベース(スワップの可能性あり)ハードウェアベース(スワップなし)
    利点軽量で安価、取り付け簡単自動識別、ラベリングエラーなし
    欠点ラベリング後処理が必要な場合あり重く、バッテリー/電源が必要
    +

    ほとんどのエンターテインメント/VTuber現場ではパッシブマーカーが主に使用されています。軽くて快適であり、ソフトウェアの性能が十分に高いため、ほとんどの状況で自動ラベリングがうまく機能するからです。

    +
    +

    ステップ7:スケルトンソルビング ― 点から骨格へ

    +

    ラベリングされた3Dマーカーを人間の骨格(Skeleton)構造にマッピングするステップです。

    +

    事前キャリブレーション

    +

    撮影前に俳優がTポーズ(両腕を広げた姿勢)をとると、ソフトウェアがマーカー位置を基に各骨の長さ(腕の長さ、脚の長さなど)と関節位置を計算します。

    +

    続いてROM(Range of Motion)キャプチャーを実行します。

    +

    ROMキャプチャー ― さまざまな動きで関節範囲を補正する過程
    ROMキャプチャー ― さまざまな動きで関節範囲を補正する過程
    + 腕回し、膝曲げ、上半身ひねりなどさまざまな動きを通じて、ソフトウェアが関節中心点と回転軸を精密に補正します。

    +

    リアルタイムソルビング

    +

    撮影中は毎フレームごとに:

    +
      +
    1. ラベリングされた3Dマーカー座標を受け取る
    2. +
    3. マーカー位置を基に各関節の3D位置と回転値(Rotation)を計算
    4. +
    5. 逆運動学(Inverse Kinematics)などのアルゴリズムで自然な骨格ポーズを算出
    6. +
    7. 結果:タイムライン上のすべての関節に対する位置(Translation)+ 回転(Rotation)データ
    8. +
    +

    リジッドボディトラッキング(小道具追跡)

    +

    刀、銃、カメラなどの小道具に3つ以上のマーカーを非対称に取り付けると、ソフトウェアがそのマーカークラスターを1つの剛体(Rigid Body)として認識し、6DOF(位置3軸 + 回転3軸)トラッキングが可能になります。

    +
    +

    ステップ8:リアルタイムストリーミングとデータ出力

    +

    リアルタイムストリーミング

    +

    リアルタイムストリーミング ― Motiveからゲームエンジンへモーションデータを送信
    リアルタイムストリーミング ― Motiveからゲームエンジンへモーションデータを送信

    +

    OptiTrack Motiveはソルビングされたデータをリアルタイムで外部ソフトウェアに伝達します:

    +
      +
    • NatNet SDK ― OptiTrack独自のプロトコル、UDPベースの低遅延伝送
    • +
    • VRPN ― VR/モーキャプ分野の標準プロトコル
    • +
    +

    これによりUnity、Unreal Engine、MotionBuilderなどでリアルタイムにキャラクターを動かすことができます。VTuberのライブ配信が可能なのも、このリアルタイムストリーミングのおかげです。

    +

    録画データ出力フォーマット

    + + + + + + + + + + + + + + + + + + + +
    フォーマット用途
    FBXスケルトン + アニメーションデータ、ゲームエンジン/DCCツール互換
    BVH階層的モーションデータ、リターゲティングに主に使用
    C3D生の3Dマーカーデータ、バイオメカニクス/研究標準
    +
    +

    ステップ9:後処理 ― データを整える過程

    +

    後処理作業 ― Motiveでモーションデータを整理する過程
    後処理作業 ― Motiveでモーションデータを整理する過程

    +

    リアルタイムキャプチャーで得たデータはそのまま最終成果物として使える場合もありますが、ほとんどのプロの作業では後処理(Post-Processing)過程を経ます。

    +

    ギャップフィリング(Gap Filling)

    +

    オクルージョンによりマーカーが一時的に消えた区間を補間(Interpolation)で埋める作業です。

    +
      +
    • 線形補間(Linear) ― 単純に前後のフレームを直線でつなぐ。短いギャップに適合
    • +
    • スプライン補間(Spline) ― 曲線でなめらかに埋める。自然な動きの維持に有利
    • +
    • パターンベース補間 ― 同じ動きを繰り返した別テイクのデータを参照して埋める
    • +
    +

    ギャップが長いほど補間の精度が落ちるため、撮影時にオクルージョンを最小化することが最も重要です。

    +

    スムージング(Smoothing)とフィルタリング

    +

    キャプチャーされたデータには微細な振動(高周波ノイズ)が含まれることがあります。これを除去するために:

    +
      +
    • バターワースフィルター(Butterworth Filter) ― 指定した周波数以上のノイズを除去するローパスフィルター
    • +
    • ガウシアンスムージング ― 周辺フレームの加重平均で振動を緩和
    • +
    +

    ただし過度なスムージングは動きのディテールとインパクトを失わせるため、剣を振るう瞬間の鋭い動きまでぼやけないよう、適切な強度を設定する必要があります。

    +

    マーカースワップ修正

    +

    ステップ6で説明したマーカースワップが発生した区間を見つけて、ラベルを手動で修正する作業です。Motiveではタイムライン上でマーカーの軌跡を視覚的に確認しながら修正できます。

    +

    リターゲティング(Retargeting)

    +

    キャプチャーされたスケルトンデータを異なるプロポーションのキャラクターに適用するプロセスです。例えば身長170cmの俳優のモーションデータを身長3mの巨人キャラクターや150cmの子供キャラクターに合わせるには、関節の回転を維持しながら骨の長さを対象キャラクターに合わせて再計算する必要があります。MotionBuilder、Maya、Unreal Engineなどがリターゲティング機能を提供しています。

    +
    +

    ステップ10:現場で頻発する問題と対応

    +

    技術的に完璧に見える光学式モーキャプにも、実務現場で直面する問題があります。

    +

    反射ノイズ(Stray Reflections)

    +

    マーカー以外の物体から赤外線が反射され、偽マーカー(Ghost Marker)が検出される現象です。

    +
      +
    • 原因:金属表面、光沢のある服、メガネ、腕時計、床の反射など
    • +
    • 対応:反射が起きる表面をマットテープで覆うか、Motiveで該当エリアをマスキング(Masking)処理してソフトウェアが無視するよう設定
    • +
    +

    マーカー脱落

    +

    激しい動きの最中にマーカーがスーツから外れたり位置がずれたりするケースです。

    +
      +
    • 対応:撮影前にマーカーの取り付け状態を丁寧に確認し、激しいモーションキャプチャー時にはベルクロ + 両面テープを併用して固定力を高めます
    • +
    • 途中でモニタリングしながらマーカーの状態をチェックすることも重要です
    • +
    +

    衣装の制約

    +

    撮影時に俳優が着る服は明るい色・マット素材が理想的です。黒色はマーカーの反射に影響しませんが、光沢のある素材やゆるい服はマーカー位置が不安定になったり反射ノイズを引き起こす可能性があります。専用モーキャプスーツを着用するのが最も安定的です。

    +

    キャリブレーションの維持

    +

    キャプチャーボリューム内の温度変化、カメラの振動、三脚の微細な移動などにより、キャリブレーションが徐々にずれることがあります。長時間撮影時には途中で再キャリブレーションするか、MotiveのContinuous Calibration(連続キャリブレーション)機能でリアルタイム補正することをお勧めします。

    +
    +

    レイテンシー ― 動きから画面まで何ミリ秒?

    +

    パイプライン各ステップの所要時間です。

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ステップ所要時間
    カメラ露光(240fps基準)約4.2ms
    カメラ内部処理(セントロイド計算)約0.5〜1ms
    ネットワーク伝送(PoE → PC)< 1ms
    3D復元 + ラベリング約1〜2ms
    スケルトンソルビング約0.5〜1ms
    ストリーミング出力(NatNet)< 1ms
    総エンドツーエンドレイテンシー約8〜14ms(240fps基準)
    +

    360fpsでは露光時間が短縮され、7ms以下まで可能です。このレベルのレイテンシーは人間が体感するのが難しい水準で、VTuberのライブ配信でも自然なリアルタイム反応が可能です。

    +
    +

    参考:レイテンシーの大部分はカメラ露光時間(フレーム周期)が占めています。フレームレートが高いほどレイテンシーが下がるのはこのためです。

    +
    +
    +

    パイプライン全体のまとめ

    +
    +
    +
    1. カメラ設置・IRフィルター・フレーム同期
    +

    30台のカメラをリング形態で配置、IRパスフィルターで赤外線のみ検出、ハードウェアシンクでμs単位の同期

    +
    +
    +
    +
    2. PoEネットワーク
    +

    Cat6ケーブル1本で電力 + データ同時伝送、スタートポロジーでスイッチに接続

    +
    +
    +
    +
    3. カメラオンボード処理 → 2Dセントロイド
    +

    IR LED照射 → マーカー反射光受信 → スレッショルディング → ブロブ検出 → サブピクセルセントロイド計算 → 座標のみ送信

    +
    +
    +
    +
    4. キャリブレーション
    +

    ワンディングでカメラ内部/外部パラメータを算出、グラウンドプレーンで座標系を定義

    +
    +
    +
    +
    5. 2D → 3D三角測量
    +

    複数カメラの2D座標から光線交差 + 最小二乗法で3D座標を復元

    +
    +
    +
    +
    6. マーカーラベリング
    +

    テンプレートマッチング + 予測追跡で各3Dポイントにマーカー名を付与

    +
    +
    +
    +
    7. スケルトンソルビング
    +

    Tポーズ + ROMキャリブレーション基盤、逆運動学で関節の位置・回転を計算

    +
    +
    +
    +
    8. リアルタイムストリーミング・データ出力
    +

    NatNet/VRPNでUnity/Unreal/MotionBuilderにリアルタイム伝送、FBX/BVH/C3D録画

    +
    +
    +
    +
    9. 後処理
    +

    ギャップフィリング・スムージング・マーカースワップ修正・リターゲティング

    +
    +
    +
    +
    最終成果物
    +

    ゲームシネマティック・VTuberライブ・映像コンテンツに適用(総レイテンシー約8〜14ms)

    +
    +
    + +

    カメラが撮影した映像がそのままPCに送られるのではなく、カメラが自らマーカー座標を計算して送信し、PCがこの座標を3Dに復元してスケルトンにマッピングする ― これが光学式モーションキャプチャーの核心原理です。

    +
    +

    よくある質問(FAQ)

    +

    Q. 光学式モーションキャプチャーカメラは一般のカメラと何が違いますか?

    +

    一般のカメラはフルカラー映像を撮影しますが、モーションキャプチャーカメラは赤外線(IR)領域に特化しています。IR LEDでマーカーを照らし反射光のみを検出し、カメラ内部でマーカーの2D座標を直接計算して座標データのみをPCに送信します。

    +

    Q. PoEケーブルの長さに制限はありますか?

    +

    Ethernet規格に従い、PoEケーブルは最大100mまでサポートされています。ほとんどのモーションキャプチャースタジオではこの範囲を十分に満たします。

    +

    Q. カメラのフレームレートは高ければ高いほど良いですか?

    +

    フレームレートが高いと高速な動きの追跡と低レイテンシーに有利ですが、データ処理量が増え、カメラの解像度が低下する可能性があります。一般的にVTuberライブやゲームモーションキャプチャーでは120〜240fpsで十分であり、スポーツ科学などの超高速動作分析では360fps以上を使用します。

    +

    Q. マーカースワップはどのくらいの頻度で発生しますか?

    +

    マーカーセットが適切に設計されていてカメラ台数が十分であれば、リアルタイム撮影中のスワップは稀にしか発生しません。ただし高速な動きやマーカー間の距離が近い動作(手を合わせるなど)では発生確率が上がり、このような区間は後処理で修正します。

    +

    Q. 三角測量に2台で十分なのに、なぜ30台も設置するのですか?

    +

    2台は理論的な最小値にすぎません。実際にはオクルージョン(マーカーの遮蔽)、カメラ角度による精度の差、冗長性の確保などを考慮する必要があります。30台を配置すればどのマーカーも常に多数のカメラから見えるため、安定的で正確なトラッキングが可能です。

    +

    Q. キャリブレーションはどのくらいの頻度で行う必要がありますか?

    +

    一般的に撮影日の開始前に1回実施します。ただし長時間撮影時には温度変化やカメラの微細な移動でキャリブレーションがずれる可能性があるため、4〜6時間の連続撮影時には途中で再キャリブレーションを推奨します。OptiTrack MotiveのContinuous Calibration機能を使用すれば、撮影中でもリアルタイムで補正が可能です。

    +

    Q. 光沢のある服を着てはいけないのですか?

    +

    モーションキャプチャーカメラは赤外線の反射を検出するため、光沢のある素材(金属装飾、スパンコール、光沢のある合成繊維など)は赤外線を反射して偽マーカー(Ghost Marker)を作る可能性があります。専用モーキャプスーツやマット素材の快適な服を着用するのが最善です。

    +
    +

    光学式モーションキャプチャーの技術的な構造についてさらにご質問がありましたら、お問い合わせページからお気軽にご質問ください。ミングルスタジオで直接体験されたい方はサービス案内をご覧ください。

    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/ja/devlog/optical-mocap-pipeline/images/calibration-tools.webp b/ja/devlog/optical-mocap-pipeline/images/calibration-tools.webp new file mode 100644 index 0000000..7a0d0b3 Binary files /dev/null and b/ja/devlog/optical-mocap-pipeline/images/calibration-tools.webp differ diff --git a/ja/devlog/optical-mocap-pipeline/images/continuous-calibration-web.mp4 b/ja/devlog/optical-mocap-pipeline/images/continuous-calibration-web.mp4 new file mode 100644 index 0000000..b92719a Binary files /dev/null and b/ja/devlog/optical-mocap-pipeline/images/continuous-calibration-web.mp4 differ diff --git a/ja/devlog/optical-mocap-pipeline/images/marker-labeling.png b/ja/devlog/optical-mocap-pipeline/images/marker-labeling.png new file mode 100644 index 0000000..4a81f7a Binary files /dev/null and b/ja/devlog/optical-mocap-pipeline/images/marker-labeling.png differ diff --git a/ja/devlog/optical-mocap-pipeline/images/motive-2d-centroid.png b/ja/devlog/optical-mocap-pipeline/images/motive-2d-centroid.png new file mode 100644 index 0000000..30dda34 Binary files /dev/null and b/ja/devlog/optical-mocap-pipeline/images/motive-2d-centroid.png differ diff --git a/ja/devlog/optical-mocap-pipeline/images/poe-switch.png b/ja/devlog/optical-mocap-pipeline/images/poe-switch.png new file mode 100644 index 0000000..f09dff0 Binary files /dev/null and b/ja/devlog/optical-mocap-pipeline/images/poe-switch.png differ diff --git a/ja/devlog/optical-mocap-pipeline/images/post-processing.png b/ja/devlog/optical-mocap-pipeline/images/post-processing.png new file mode 100644 index 0000000..75a4d43 Binary files /dev/null and b/ja/devlog/optical-mocap-pipeline/images/post-processing.png differ diff --git a/ja/devlog/optical-mocap-pipeline/images/realtime-streaming.png b/ja/devlog/optical-mocap-pipeline/images/realtime-streaming.png new file mode 100644 index 0000000..2d30cae Binary files /dev/null and b/ja/devlog/optical-mocap-pipeline/images/realtime-streaming.png differ diff --git a/ja/devlog/optical-mocap-pipeline/images/rom-1.webp b/ja/devlog/optical-mocap-pipeline/images/rom-1.webp new file mode 100644 index 0000000..bcb9c10 Binary files /dev/null and b/ja/devlog/optical-mocap-pipeline/images/rom-1.webp differ diff --git a/ja/devlog/optical-mocap-pipeline/images/rom-2.webp b/ja/devlog/optical-mocap-pipeline/images/rom-2.webp new file mode 100644 index 0000000..607ec01 Binary files /dev/null and b/ja/devlog/optical-mocap-pipeline/images/rom-2.webp differ diff --git a/ja/devlog/optical-mocap-pipeline/images/rom-3.webp b/ja/devlog/optical-mocap-pipeline/images/rom-3.webp new file mode 100644 index 0000000..75cbbaf Binary files /dev/null and b/ja/devlog/optical-mocap-pipeline/images/rom-3.webp differ diff --git a/ja/devlog/optical-mocap-pipeline/images/rom-4.webp b/ja/devlog/optical-mocap-pipeline/images/rom-4.webp new file mode 100644 index 0000000..4ad423e Binary files /dev/null and b/ja/devlog/optical-mocap-pipeline/images/rom-4.webp differ diff --git a/ja/devlog/optical-mocap-pipeline/images/rom-grid.webp b/ja/devlog/optical-mocap-pipeline/images/rom-grid.webp new file mode 100644 index 0000000..e2d4f48 Binary files /dev/null and b/ja/devlog/optical-mocap-pipeline/images/rom-grid.webp differ diff --git a/ja/devlog/optical-mocap-pipeline/images/thumbnail.webp b/ja/devlog/optical-mocap-pipeline/images/thumbnail.webp new file mode 100644 index 0000000..4a81f7a Binary files /dev/null and b/ja/devlog/optical-mocap-pipeline/images/thumbnail.webp differ diff --git a/ja/gallery.html b/ja/gallery.html index fff67f8..21e5554 100644 --- a/ja/gallery.html +++ b/ja/gallery.html @@ -105,6 +105,7 @@
  • Portfolio
  • Gallery
  • Schedule
  • +
  • DevLog
  • Contact
  • Q&A
  • diff --git a/ja/index.html b/ja/index.html index 236df69..01232e1 100644 --- a/ja/index.html +++ b/ja/index.html @@ -179,7 +179,7 @@ - + @@ -207,79 +207,6 @@ height="0" width="0" style="display:none;visibility:hidden"> - - -
    @@ -297,6 +224,7 @@
  • Portfolio
  • Gallery
  • Schedule
  • +
  • DevLog
  • Contact
  • Q&A
  • @@ -1092,6 +1020,6 @@ - + \ No newline at end of file diff --git a/ja/portfolio.html b/ja/portfolio.html index 7362033..ce0ef79 100644 --- a/ja/portfolio.html +++ b/ja/portfolio.html @@ -164,6 +164,7 @@
  • Portfolio
  • Gallery
  • Schedule
  • +
  • DevLog
  • Contact
  • Q&A
  • diff --git a/ja/props.html b/ja/props.html index cb830de..0962d5a 100644 --- a/ja/props.html +++ b/ja/props.html @@ -78,6 +78,7 @@
  • Portfolio
  • Gallery
  • Schedule
  • +
  • DevLog
  • Contact
  • Q&A
  • diff --git a/ja/qna.html b/ja/qna.html index eb2e3a7..68ac25b 100644 --- a/ja/qna.html +++ b/ja/qna.html @@ -105,6 +105,7 @@
  • Portfolio
  • Gallery
  • Schedule
  • +
  • DevLog
  • Contact
  • Q&A
  • diff --git a/ja/services.html b/ja/services.html index 6034440..a38277b 100644 --- a/ja/services.html +++ b/ja/services.html @@ -106,6 +106,7 @@
  • Portfolio
  • Gallery
  • Schedule
  • +
  • DevLog
  • Contact
  • Q&A
  • diff --git a/js/devlog.js b/js/devlog.js new file mode 100644 index 0000000..be63dd8 --- /dev/null +++ b/js/devlog.js @@ -0,0 +1,131 @@ +/** + * 밍글 스튜디오 블로그 목록 페이지 + * blog/index.json에서 글 목록을 불러와 렌더링 + */ +(function() { + 'use strict'; + + var grid = document.getElementById('blogGrid'); + var filtersWrap = document.getElementById('blogFilters'); + var loadingEl = document.getElementById('blogLoading'); + if (!grid) return; + + var lang = document.documentElement.lang || 'ko'; + var langPrefix = { ko: '', en: '/en', ja: '/ja', zh: '/zh' }; + var prefix = langPrefix[lang] || ''; + + var readMore = { ko: '자세히 보기', en: 'Read more', ja: '続きを読む', zh: '阅读更多' }; + var emptyText = { ko: '아직 작성된 글이 없습니다.', en: 'No posts yet.', ja: 'まだ記事がありません。', zh: '暂无文章。' }; + var allText = { ko: '전체', en: 'All', ja: 'すべて', zh: '全部' }; + + var allPosts = []; + var currentFilter = 'all'; + + function init() { + fetch('/devlog/index.json?t=' + Date.now()) + .then(function(res) { return res.json(); }) + .then(function(posts) { + allPosts = posts; + if (loadingEl) loadingEl.style.display = 'none'; + buildFilters(); + renderPosts(); + }) + .catch(function() { + if (loadingEl) loadingEl.style.display = 'none'; + grid.innerHTML = '

    ' + emptyText[lang] + '

    '; + }); + } + + function buildFilters() { + if (!filtersWrap || allPosts.length === 0) return; + + var categories = {}; + allPosts.forEach(function(p) { + var cat = (p.categories && p.categories[lang]) || (p.categories && p.categories.ko) || p.category || ''; + if (cat) categories[cat] = true; + }); + + var cats = Object.keys(categories).sort(); + if (cats.length < 2) { filtersWrap.style.display = 'none'; return; } + + var html = ''; + cats.forEach(function(c) { + html += ''; + }); + filtersWrap.innerHTML = html; + + filtersWrap.addEventListener('click', function(e) { + var btn = e.target.closest('.blog-filter-btn'); + if (!btn) return; + filtersWrap.querySelectorAll('.blog-filter-btn').forEach(function(b) { b.classList.remove('active'); }); + btn.classList.add('active'); + currentFilter = btn.getAttribute('data-cat'); + renderPosts(); + }); + } + + function getCategory(post) { + return (post.categories && post.categories[lang]) || (post.categories && post.categories.ko) || post.category || ''; + } + + function renderPosts() { + var filtered = currentFilter === 'all' ? allPosts : allPosts.filter(function(p) { return getCategory(p) === currentFilter; }); + + if (filtered.length === 0) { + grid.innerHTML = '

    ' + emptyText[lang] + '

    '; + return; + } + + var html = ''; + filtered.forEach(function(post) { + var title = (post.titles && post.titles[lang]) || (post.titles && post.titles.ko) || post.slug; + var desc = (post.descriptions && post.descriptions[lang]) || (post.descriptions && post.descriptions.ko) || ''; + var cat = getCategory(post); + var thumb = post.thumbnail ? '/blog/posts/' + post.slug + '/' + post.thumbnail : ''; + var url = prefix + '/devlog/' + post.slug; + var date = formatDate(post.date); + + html += ''; + }); + + grid.innerHTML = html; + } + + function formatDate(dateStr) { + if (!dateStr) return ''; + var d = new Date(dateStr + 'T00:00:00'); + if (isNaN(d)) return dateStr; + var y = d.getFullYear(), m = d.getMonth() + 1, day = d.getDate(); + if (lang === 'ko') return y + '.' + m + '.' + day; + if (lang === 'ja' || lang === 'zh') return y + '/' + m + '/' + day; + var months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']; + return months[m - 1] + ' ' + day + ', ' + y; + } + + function escapeHtml(str) { + var div = document.createElement('div'); + div.textContent = str; + return div.innerHTML; + } + + if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', init); + } else { + init(); + } +})(); diff --git a/js/i18n.js b/js/i18n.js index 3a4efa8..63b134c 100644 --- a/js/i18n.js +++ b/js/i18n.js @@ -38,8 +38,8 @@ this.currentLang = lang; document.documentElement.lang = lang; - // 만약 서버에서 미리 번역된 HTML(SSG)이 아니라 클라이언트 사이드에서 변경이 필요한 경우 - if (lang !== DEFAULT_LANG && pathLang === DEFAULT_LANG) { + // 기본 언어가 아니면 JSON 번역 파일 로드 (동적 컴포넌트 번역용) + if (lang !== DEFAULT_LANG) { return this.loadLang(lang).then(() => { this.ready = true; }); diff --git a/package-lock.json b/package-lock.json index b3b99a8..d767c6e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,6 +10,8 @@ "license": "MIT", "devDependencies": { "cheerio": "^1.2.0", + "gray-matter": "^4.0.3", + "marked": "^17.0.5", "serve": "^14.2.0" } }, @@ -88,6 +90,16 @@ "dev": true, "license": "MIT" }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, "node_modules/boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", @@ -977,6 +989,49 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gray-matter": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", + "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "js-yaml": "^3.13.1", + "kind-of": "^6.0.2", + "section-matter": "^1.0.0", + "strip-bom-string": "^1.0.0" + }, + "engines": { + "node": ">=6.0" + } + }, "node_modules/htmlparser2": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.1.0.tgz", @@ -1023,6 +1078,16 @@ "node": ">=0.10.0" } }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-port-reachable": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/is-port-reachable/-/is-port-reachable-4.0.0.tgz", @@ -1036,6 +1101,43 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/js-yaml": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/marked": { + "version": "17.0.5", + "resolved": "https://registry.npmjs.org/marked/-/marked-17.0.5.tgz", + "integrity": "sha512-6hLvc0/JEbRjRgzI6wnT2P1XuM1/RrrDEX0kPt0N7jGm1133g6X7DlxFasUIx+72aKAr904GTxhSLDrd5DIlZg==", + "dev": true, + "license": "MIT", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 20" + } + }, "node_modules/nth-check": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", @@ -1109,6 +1211,20 @@ "dev": true, "license": "MIT" }, + "node_modules/section-matter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", + "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/serve": { "version": "14.2.5", "resolved": "https://registry.npmjs.org/serve/-/serve-14.2.5.tgz", @@ -1269,6 +1385,23 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/strip-bom-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", + "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/undici": { "version": "7.22.0", "resolved": "https://registry.npmjs.org/undici/-/undici-7.22.0.tgz", diff --git a/package.json b/package.json index 400aefd..ae810bd 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,8 @@ "preview": "python -m http.server 8000", "python": "python server.py", "test": "echo \"웹사이트를 http://localhost:8000 에서 확인하세요\" && npm run dev", - "build:i18n": "node build_i18n.js" + "build:i18n": "node build_i18n.js", + "build:devlog": "node build-blog.js" }, "keywords": [ "motion-capture", @@ -27,6 +28,8 @@ }, "devDependencies": { "cheerio": "^1.2.0", + "gray-matter": "^4.0.3", + "marked": "^17.0.5", "serve": "^14.2.0" } -} \ No newline at end of file +} diff --git a/portfolio.html b/portfolio.html index b3ff696..48b53ea 100644 --- a/portfolio.html +++ b/portfolio.html @@ -158,6 +158,7 @@
  • Portfolio
  • Gallery
  • Schedule
  • +
  • DevLog
  • Contact
  • Q&A
  • diff --git a/props.html b/props.html index 5621990..7e326ab 100644 --- a/props.html +++ b/props.html @@ -72,6 +72,7 @@
  • Portfolio
  • Gallery
  • Schedule
  • +
  • DevLog
  • Contact
  • Q&A
  • diff --git a/qna.html b/qna.html index df1cefe..2fa11ea 100644 --- a/qna.html +++ b/qna.html @@ -99,6 +99,7 @@
  • Portfolio
  • Gallery
  • Schedule
  • +
  • DevLog
  • Contact
  • Q&A
  • diff --git a/services.html b/services.html index 094a25b..8eeb6a2 100644 --- a/services.html +++ b/services.html @@ -100,6 +100,7 @@
  • Portfolio
  • Gallery
  • Schedule
  • +
  • DevLog
  • Contact
  • Q&A
  • diff --git a/sitemap.xml b/sitemap.xml index e38d8f6..a5c03ce 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -43,6 +43,11 @@ daily 0.7 + + https://minglestudio.co.kr/devlog + weekly + 0.7 + @@ -85,6 +90,11 @@ daily 0.6 + + https://minglestudio.co.kr/en/devlog + weekly + 0.6 + @@ -127,6 +137,11 @@ daily 0.6 + + https://minglestudio.co.kr/ja/devlog + weekly + 0.6 + @@ -169,5 +184,10 @@ daily 0.6 + + https://minglestudio.co.kr/zh/devlog + weekly + 0.6 + diff --git a/zh/about.html b/zh/about.html index 6c9544c..55d3f6d 100644 --- a/zh/about.html +++ b/zh/about.html @@ -105,6 +105,7 @@
  • Portfolio
  • Gallery
  • Schedule
  • +
  • DevLog
  • Contact
  • Q&A
  • diff --git a/zh/backgrounds.html b/zh/backgrounds.html index 0e0c53f..476c274 100644 --- a/zh/backgrounds.html +++ b/zh/backgrounds.html @@ -78,6 +78,7 @@
  • Portfolio
  • Gallery
  • Schedule
  • +
  • DevLog
  • Contact
  • Q&A
  • diff --git a/zh/contact.html b/zh/contact.html index f0afde0..8e156ce 100644 --- a/zh/contact.html +++ b/zh/contact.html @@ -105,6 +105,7 @@
  • Portfolio
  • Gallery
  • Schedule
  • +
  • DevLog
  • Contact
  • Q&A
  • diff --git a/zh/devlog.html b/zh/devlog.html new file mode 100644 index 0000000..010c982 --- /dev/null +++ b/zh/devlog.html @@ -0,0 +1,187 @@ + + + + + + + + + + DevLog - 明格工作室 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 跳转到正文 + + +
    + + +
    + +
    +
    +
    +

    DevLog

    +

    分享动作捕捉技术和制作过程

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + + + + + + + + + \ No newline at end of file diff --git a/zh/devlog/inertial-vs-optical-mocap.html b/zh/devlog/inertial-vs-optical-mocap.html new file mode 100644 index 0000000..21858ad --- /dev/null +++ b/zh/devlog/inertial-vs-optical-mocap.html @@ -0,0 +1,508 @@ + + + + + + + + + 动作捕捉惯性式 vs 光学式,有什么区别? - 明格工作室 DevLog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Skip to content + +
    + +
    + +
    +
    +
    +
    + ← 返回列表 + 动作捕捉技术 +

    动作捕捉惯性式 vs 光学式,有什么区别?

    + +
    +
    +
    +
    +

    当你开始关注动作捕捉时,最先遇到的问题就是:

    +

    "惯性式和光学式,到底有什么区别?"

    +

    本文将从两种方式的原理出发,涵盖代表性设备及真实用户评价,为你做一次全面的梳理。

    +
    +

    什么是光学式(Optical)动作捕捉?

    +

    光学式采用红外摄像机反射标记点来实现动作捕捉。

    +

    在拍摄空间周围安装多台红外(IR)摄像机,并在演员的关节位置贴上直径约10~20mm的回射(Retro-reflective)标记点。每台摄像机发射红外LED光,检测从标记点反射回来的光线,从而在2D图像中提取标记点坐标。

    +

    当至少两台摄像机同时捕捉到同一个标记点时,就可以利用三角测量(Triangulation)原理计算出该标记点精确的3D坐标。摄像机数量越多,精度越高,盲区越少,因此专业工作室通常配备12至40台以上的摄像机。

    +

    由于每一帧中所有标记点的3D坐标都以绝对位置记录,无论经过多长时间,数据都能保持准确,不会产生累积误差。

    +

    +

    优点

    +
      +
    • 亚毫米精度 — 可实现0.1mm级别的精确位置追踪
    • +
    • 无漂移 — 基于绝对坐标,数据不会随时间推移而偏移
    • +
    • 多目标同步追踪 — 可同时捕捉演员 + 道具 + 场景元素
    • +
    • 低延迟 — 约5~10ms,非常适合实时反馈
    • +
    +

    局限

    +
      +
    • 需要专用拍摄空间(安装摄像机 + 环境控制)
    • +
    • 搭建和校准需要30~90分钟
    • +
    • 遮挡(Occlusion)问题 — 标记点被遮挡时无法追踪
    • +
    +

    代表性设备

    +

    OptiTrack(PrimeX系列)

    +
      +
    • 被评为光学式中性价比最高的品牌
    • +
    • Motive软件易用性好,Unity/Unreal插件生态完善
    • +
    • 广泛应用于游戏开发公司、VTuber制作团队、高校研究实验室
    • +
    • 社区评价:*"在这个价位上能达到这种精度的只有OptiTrack"*是主流观点
    • +
    +

    Vicon(Vero / Vantage系列)

    +
      +
    • 影视VFX行业的黄金标准 — 好莱坞大多数AAA级电影都使用Vicon拍摄
    • +
    • 最顶级的精度与稳定性,强大的后处理软件(Shogun)
    • +
    • 社区评价:"精度是最好的,但对小型工作室来说投资过大"
    • +
    +

    Qualisys

    +
      +
    • 在医疗/运动生物力学领域表现强劲
    • +
    • 专注于步态分析、临床研究、运动科学
    • +
    • 在娱乐领域的用户社区相对较小
    • +
    +
    +

    什么是惯性式(IMU)动作捕捉?

    +

    惯性式通过将IMU(Inertial Measurement Unit,惯性测量单元)传感器贴在身体上或内置于动捕服中来测量运动。

    +

    每个IMU传感器内含三个核心组件:

    +
      +
    • 加速度计(Accelerometer) — 测量线性加速度,判断运动方向和速度
    • +
    • 陀螺仪(Gyroscope) — 测量角速度,计算旋转量
    • +
    • 磁力计(Magnetometer) — 以地球磁场为基准校正朝向(Heading)
    • +
    +

    通过传感器融合(Sensor Fusion)算法将这三种传感器的数据进行整合,可以实时计算传感器所贴身体部位的3D朝向(Orientation)。通常将15~17个传感器分布在上身、下身、手臂、腿部等主要关节处,通过各传感器之间的关系提取全身骨骼数据。

    +

    但是,由于需要对加速度计数据进行二次积分来计算位置,误差会逐渐累积(漂移),因此"我站在空间的哪个位置"这一全局位置会随着时间推移变得越来越不准确。这就是惯性式的根本局限。

    +

    +

    优点

    +
      +
    • 不受空间限制 — 室外、狭小空间,随时随地可用
    • +
    • 快速搭建 — 穿上动捕服后5~15分钟即可开始捕捉
    • +
    • 无遮挡问题 — 传感器直接贴在身上,不存在视线遮挡问题
    • +
    +

    局限

    +
      +
    • 漂移 — 位置数据随时间推移而偏移(累积误差)
    • +
    • 全局位置精度低 — 难以精确判断"站在哪里"
    • +
    • 磁场干扰 — 在金属结构、电子设备附近数据会失真
    • +
    • 难以追踪道具或与环境的交互
    • +
    +

    代表性设备

    +

    Xsens MVN(现Movella)

    +
      +
    • 被认为是惯性式中精度和可靠性第一的设备
    • +
    • 广泛应用于汽车行业、人体工程学、游戏动画领域
    • +
    • 社区评价:"用惯性式的话,Xsens就是答案",但*"全局位置漂移是无法避免的"*
    • +
    +

    Rokoko Smartsuit Pro

    +
      +
    • 价格亲民是最大优势 — 深受独立开发者和个人创作者的欢迎
    • +
    • Rokoko Studio软件直观易用,重定向功能方便
    • +
    • 社区评价:"这个价格能做到这种程度,令人惊叹",但也有*"长时间拍摄漂移明显""精细工作有局限"*
    • +
    +

    Noitom Perception Neuron

    +
      +
    • 部分型号支持手指追踪,紧凑的外形设计
    • +
    • 社区评价:"Neuron 3改进了很多",但*"漂移问题仍然存在""软件(Axis Studio)稳定性有待提高"*
    • +
    +
    +

    一目了然的对比

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    项目光学式(Optical)惯性式(IMU)
    追踪原理红外摄像机 + 反射标记点三角测量IMU传感器(加速度计 + 陀螺仪 + 磁力计)
    位置精度亚毫米(0.1mm) — 绝对坐标存在漂移 — 随时间累积误差
    旋转精度从位置数据推导(非常高)1~3度水平(取决于传感器融合算法)
    漂移 — 每帧测量绝对位置有 — 加速度二次积分时误差累积
    遮挡标记点被遮挡时无法追踪无问题 — 传感器直接贴在身上
    磁场干扰不受影响在金属/电子设备附近数据失真
    延迟~5-10ms~10-20ms
    搭建时间30~90分钟(摄像机布置 + 校准)5~15分钟(穿戴动捕服 + 简单校正)
    拍摄空间需要专用工作室(安装摄像机·环境控制)随时随地(室外、狭小空间均可)
    多人拍摄通过区分标记组可同时捕捉每套动捕服独立运行,可同时使用但交互困难
    道具/物体追踪在道具上贴标记点即可同步追踪需要额外传感器,实际操作困难
    手指追踪专用手部标记组实现高精度追踪仅部分设备支持,精度有限
    后期处理工作量需要对遮挡区间进行间隙填充需要漂移校正 + 位置修正
    代表性设备OptiTrack、Vicon、QualisysXsens、Rokoko、Noitom
    主要应用领域游戏/电影最终捕捉、VTuber直播、研究预可视化、户外拍摄、独立/个人内容
    +
    +

    无标记(Markerless)方式如何?

    +

    近年来,仅通过摄像机画面由AI提取动作的无标记动作捕捉也备受关注。Move.ai、Captury、Plask等是其中的代表,由于无需贴标记点、用普通摄像机即可捕捉,入门门槛非常低。

    +

    然而,目前无标记方式在精度和稳定性方面远远不及光学式和惯性式。关节位置频繁出现抖动(Jitter)现象,在快速动作或遮挡情况下追踪变得不稳定。在预可视化或参考用途上可以使用,但在游戏、广播、电影等领域,尚未达到可以直接用于最终成品的水平。

    +

    这是一个技术进步非常快的领域,未来值得期待,但目前在专业制作现场,光学式和惯性式仍然是主流。

    +
    +

    社区怎么评价?

    +

    综合Reddit(r/gamedev、r/vfx)、CGSociety等动作捕捉相关社区中反复出现的观点:

    +
    +

    "对最终质量要求高的工作用光学式,注重速度和便捷性的用惯性式。"

    +
    +

    实际上,很多专业工作室两种方式并用。先用惯性式快速完成预可视化(Previz)或动作粗排,最终拍摄则使用光学式,这是常见的工作流程。

    +

    对于个人创作者或独立团队,普遍建议是先从Rokoko这样入门门槛低的惯性式开始,在需要精度的项目中租用光学式工作室,这是最现实的方案。

    +
    +

    明格工作室为什么选择光学式

    +

    明格工作室是一家配备了30台OptiTrack摄像机(Prime 17 × 16台 + Prime 13 × 14台)的光学式动作捕捉工作室。选择光学式的理由非常明确:

    +
      +
    • 精度 — 游戏过场动画、VTuber直播、广播内容等直接用于最终成品的工作,亚毫米精度必不可少
    • +
    • 实时串流 — 在VTuber直播等需要实时反馈的场景中,提供无漂移的稳定数据
    • +
    • 道具联动 — 可精确追踪与刀、枪、椅子等道具的交互
    • +
    • 性价比 — OptiTrack以比Vicon更合理的价格提供专业级精度
    • +
    • 手指追踪补充 — 光学式在手指追踪方面的弱点由Rokoko手套弥补,全身采用光学式的精度,手指则利用惯性式手套的稳定追踪——汇集了两种方式各自的优势
    • +
    +

    由此可见,光学式和惯性式并非必须二选一。将各方式的优势组合起来,可以实现单一方式难以达到的品质。

    +

    在8m x 7m的捕捉空间内,30台摄像机实现360度无死角追踪,最大程度减少了遮挡问题。

    +

    明格工作室拍摄工作流程

    +

    当您在明格工作室租用动作捕捉服务时,实际流程如下:

    +

    第一步:前期沟通 +事先沟通拍摄目的、所需人数、需要捕捉的动作类型。如果是直播,还会在此阶段商讨虚拟形象、背景和道具的设置方案。

    +

    第二步:拍摄准备(搭建) +您到达工作室后,专业操作人员将进行标记点贴附、校准和虚拟形象映射。直播套餐已包含角色、背景、道具的搭建,无需额外准备。

    +

    第三步:正式拍摄 / 直播 +使用30台OptiTrack摄像机 + Rokoko手套同时捕捉全身和手指动作。通过实时监控可以在现场立即查看效果,同时支持远程指导。

    +

    第四步:数据交付 / 后期处理 +拍摄结束后即可获取动作数据。根据需要,还可以进行数据清理(去噪、帧校正)以及针对您的虚拟形象优化的重定向后期处理。

    +
    +

    应该选择哪种方式?

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    场景推荐方式推荐设备原因
    个人YouTube/VTuber内容惯性式Rokoko、Perception Neuron搭建简单,不受空间限制
    户外/外景拍摄惯性式Xsens MVN不受空间限制,可靠性高
    预可视化/动作粗排惯性式Rokoko、Xsens适合快速迭代工作
    游戏过场动画/最终动画光学式OptiTrack、Vicon亚毫米精度必不可少
    高品质VTuber直播光学式OptiTrack实时串流 + 无漂移
    道具/环境交互光学式OptiTrack、Vicon在物体上贴标记点即可同步追踪
    医疗/运动研究光学式Vicon、Qualisys需要临床级精密数据
    汽车/人体工程学分析惯性式Xsens MVN可在实际工作环境中测量
    +

    如果自行购买设备负担较大,租用光学式工作室是最高效的选择。无需自己配备昂贵设备,也能获得专业级成果。

    +
    +

    常见问题(FAQ)

    +

    Q. 光学式和惯性式动作捕捉最大的区别是什么?

    +

    光学式通过红外摄像机和反射标记点追踪绝对位置,可提供亚毫米(0.1mm)级别的精度。惯性式佩戴IMU传感器,不受空间限制可随时随地捕捉,但随着时间推移位置数据会产生漂移(累积误差)。

    +

    Q. VTuber动作捕捉应该选哪种方式?

    +

    简单的个人内容用惯性式(Rokoko、Perception Neuron)就足够了。但如果需要高品质的直播或精细动作,没有漂移的光学式更为合适。

    +

    Q. 惯性式动作捕捉的漂移是什么?

    +

    漂移是对IMU传感器的加速度数据进行二次积分计算位置时产生的累积误差。拍摄时间越长,角色位置与实际位置的偏差就越大,在存在磁场干扰的环境中会更加严重。

    +

    Q. 光学式动作捕捉的遮挡问题怎么解决?

    +

    遮挡是指标记点被挡住导致摄像机无法看到时出现的问题。通过增加摄像机数量来减少盲区,并利用软件的间隙填充(Gap Filling)功能对缺失区间进行插值来解决。以明格工作室为例,30台摄像机呈360度布置,将遮挡问题降到最低。

    +

    Q. 两种方式可以同时使用吗?

    +

    可以。实际上,很多工作室采用混合方式——全身用光学式,手指用惯性式手套进行捕捉。明格工作室也将OptiTrack光学式与Rokoko手套相结合,实现全身和手指的高品质追踪。

    +

    Q. 租用动作捕捉工作室就不需要自己买设备了吗?

    +

    没错。光学式设备自行购买需要相当大的投资,因此只在需要的项目中租用工作室是最高效的方式。无需承担设备购买、搭建和维护的负担,即可获得专业级成果。

    +
    +

    亲身体验光学式动作捕捉

    +

    您无需自行购买设备。在明格工作室,您可以按小时使用30台OptiTrack + Rokoko手套的完整配置。

    +
      +
    • 动作捕捉录制 — 全身/面部捕捉 + 实时监控 + 动作数据交付
    • +
    • 直播全套方案 — 虚拟形象·背景·道具搭建 + 实时串流,一站式服务
    • +
    +

    详细的服务内容和价格请查看服务介绍页面,拍摄日程请查看日程页面。如有任何疑问,欢迎通过联系页面随时与我们沟通。

    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/zh/devlog/inertial-vs-optical-mocap/images/Sam_ROM_Raw.mp4 b/zh/devlog/inertial-vs-optical-mocap/images/Sam_ROM_Raw.mp4 new file mode 100644 index 0000000..e73575e Binary files /dev/null and b/zh/devlog/inertial-vs-optical-mocap/images/Sam_ROM_Raw.mp4 differ diff --git a/zh/devlog/inertial-vs-optical-mocap/images/basketball-rigid-body-2x-web.mp4 b/zh/devlog/inertial-vs-optical-mocap/images/basketball-rigid-body-2x-web.mp4 new file mode 100644 index 0000000..d793bb4 Binary files /dev/null and b/zh/devlog/inertial-vs-optical-mocap/images/basketball-rigid-body-2x-web.mp4 differ diff --git a/zh/devlog/inertial-vs-optical-mocap/images/thumbnail.webp b/zh/devlog/inertial-vs-optical-mocap/images/thumbnail.webp new file mode 100644 index 0000000..b9e19f6 Binary files /dev/null and b/zh/devlog/inertial-vs-optical-mocap/images/thumbnail.webp differ diff --git a/zh/devlog/optical-mocap-pipeline.html b/zh/devlog/optical-mocap-pipeline.html new file mode 100644 index 0000000..6343ce0 --- /dev/null +++ b/zh/devlog/optical-mocap-pipeline.html @@ -0,0 +1,669 @@ + + + + + + + + + 光学动作捕捉管线完全解析 — 从摄像头到动作数据 - 明格工作室 DevLog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Skip to content + +
    + +
    + +
    +
    +
    +
    + ← 返回列表 + 动作捕捉技术 +

    光学动作捕捉管线完全解析 — 从摄像头到动作数据

    + +
    +
    +
    +
    +

    在动作捕捉工作室中,当演员穿上动捕服进行表演时,屏幕上的角色会实时跟随其动作。看起来很简单,但其背后运行着一条精密的技术管线:摄像头硬件 → 网络传输 → 2D图像处理 → 3D重建 → 骨骼解算 → 实时串流

    +

    本文将逐步剖析光学动作捕捉(以OptiTrack为基准)的完整管线。

    +
    +

    第1步:摄像头安装与布局策略

    +

    光学动作捕捉的第一步是决定摄像头放在哪里、如何布置

    +

    明格工作室动作捕捉空间
    明格工作室动作捕捉空间

    +

    布局原则

    +
      +
    • 高度:通常安装在2~3m高度,向下倾斜约30度
    • +
    • 布局形态:围绕捕捉体积(拍摄空间)呈环形(Ring)布置
    • +
    • 双层布局:在高位和低位交替放置摄像头,可提升垂直方向的覆盖范围
    • +
    • 重叠(Overlap):捕捉体积内的每个点都必须同时被至少3台摄像头看到。三角测量最少需要2台,但3台以上能显著提升精度和遮挡应对能力
    • +
    +

    摄像头数量与精度的关系

    +

    摄像头数量越多:

    +
      +
    • 盲区越少 → 遮挡发生概率降低
    • +
    • 观测同一标记点的摄像头越多 → 三角测量精度提升
    • +
    • 部分摄像头出现问题时其他摄像头可以补偿(冗余性)
    • +
    +

    明格工作室配备了OptiTrack Prime 17 × 16台 + Prime 13 × 14台,共30台摄像头布置在8m × 7m的空间中,最大限度地减少了360度盲区。

    +

    IR通过滤光片 — 只看红外线的眼睛

    +

    每台动作捕捉摄像头的镜头前方都安装了IR通过滤光片(红外通过滤光片)。该滤光片阻挡可见光,仅允许红外线波长(约850nm)通过。因此,荧光灯、阳光、显示器光线等普通照明的干扰被从根本上消除,摄像头只能检测到IR LED反射的标记点光线

    +

    这也是拍摄空间不需要完全关灯的原因。不过,直射阳光或含有强IR成分的照明仍可能造成干扰,因此工作室环境中使用IR干扰较小的照明设备。

    +

    帧同步 — 30台摄像头如何同时拍摄

    +

    要使三角测量准确,所有摄像头必须在完全相同的时刻按下快门。如果各台摄像头在不同时间拍摄,快速运动的标记点位置会因摄像头而异,导致3D重建不准确。

    +

    OptiTrack采用硬件同步(Hardware Sync)方式。一台摄像头被指定为Sync Master(同步主机)生成时序信号,其余摄像头根据该信号同时曝光。

    +
      +
    • 以太网摄像头(Prime系列):同步信号内嵌在以太网连接本身中,或通过OptiTrack的eSync集线器传输。无需单独的同步线缆。
    • +
    • USB摄像头(Flex系列):摄像头之间通过专用同步线缆以菊花链方式连接。
    • +
    +

    该同步精度达到微秒(μs)级别,30台摄像头实际上在完全相同的时刻进行拍摄。

    +
    +

    第2步:PoE — 一根线缆同时传输电力和数据

    +

    什么是PoE(Power over Ethernet)?

    +

    OptiTrack Prime系列摄像头通过PoE(Power over Ethernet)方式连接。这是一种通过标准以太网线缆(Cat5e/Cat6)同时提供电力和传输数据的技术。

    +

    PoE交换机与摄像头连接
    PoE交换机与摄像头连接

    +

    技术标准

    + + + + + + + + + + + + + + + + + + +
    标准最大功率备注
    IEEE 802.3af (PoE)每端口15.4W足以满足基本动作捕捉摄像头
    IEEE 802.3at (PoE+)每端口25.5W适用于高帧率摄像头或IR LED输出较高的情况
    +

    OptiTrack摄像头通常功耗约5~12W,完全在PoE标准范围内。

    +

    网络拓扑

    +

    摄像头以星型(Star)拓扑方式连接。每台摄像头1对1连接到PoE交换机的独立端口。不使用菊花链(串行连接)。

    +
    +
    +
    CAM 1
    +
    CAM 2
    +
    CAM 3
    +
    ···
    +
    CAM N
    +
    + + + + + + + +
    +
    PoE交换机
    + +
    主机PC
    +
    +
    + +

    如果有30台摄像头,可以组合使用24端口 + 8端口的PoE+交换机,或使用48端口交换机。选择交换机时必须确认PoE总功率预算(例如:30台 × 12W = 360W)。

    +

    PoE的优势

    +
      +
    • 一根线缆搞定 — 无需为安装在天花板上的每台摄像头单独连接电源适配器
    • +
    • 整洁的施工 — 线缆数量减半,安装和管理更加简便
    • +
    • 集中电源管理 — 可从交换机统一控制摄像头的开关
    • +
    +
    +

    第3步:摄像头发送的数据 — 2D质心

    +

    理解摄像头向PC发送的数据内容是管线的核心。

    +

    Motive摄像头2D视图 — 标记点显示为明亮的点
    Motive摄像头2D视图 — 标记点显示为明亮的点

    +

    摄像头内部处理过程

    +

    每台OptiTrack摄像头的镜头周围都安装了红外(IR)LED环。这些LED发射红外线,演员身上的逆反射标记点将光线反射回摄像头方向。摄像头传感器将这些反射光拍摄为灰度IR图像。

    +

    这里的关键是,摄像头并不会将这张图像直接发送给PC。摄像头内部处理器会先进行处理:

    +

    1. 阈值处理(Thresholding) +只保留亮度超过一定阈值的像素,其余全部去除。由于只有反射红外线的标记点会发出明亮的光,这个过程实现了标记点与背景的分离。

    +

    2. 斑点检测(Blob Detection) +将明亮像素聚集的区域(斑点)识别为单个标记点候选。

    +

    3. 2D质心计算 +以亚像素精度(约0.1像素)计算每个斑点的精确中心点(质心)。采用加权平均方法,以斑点内各像素的亮度作为权重。

    +

    发送给PC的数据

    +

    在默认追踪模式下,摄像头发送给PC的是2D质心数据

    +
      +
    • 每个标记点候选的(x, y)坐标 + 大小信息
    • +
    • 每台摄像头每帧仅数百字节的极小数据量
    • +
    +

    正因为数据量如此之小,40台以上的摄像头仅需一条千兆以太网即可满足需求。也可以传输原始灰度图像(用于调试/可视化),但这种情况下每台摄像头需要数MB/s,因此在正常追踪中不使用。

    +
    +

    也就是说,摄像头并不是"拍摄并发送视频的设备",更接近于"计算标记点位置并仅发送坐标的传感器"

    +
    +

    这里可能会产生一个疑问——为什么动作捕捉摄像头比普通摄像头贵那么多?原因就在于上面描述的处理过程。普通摄像头只需将拍摄的视频原样发送即可,而动作捕捉摄像头内置了专用处理器,能以每秒240~360帧的速度实时执行阈值处理、斑点检测和亚像素质心计算。每台摄像头实际上就是一台专门用于图像处理的小型计算机

    +
    +

    第4步:标定 — 对齐摄像头的视线

    +

    在进行3D重建之前,有一个必须经历的过程。软件需要了解每台摄像头的精确位置、方向和镜头特性 — 这就是标定(Calibration)

    +

    标定棒(左)和地面参考框架(右)
    标定棒(左)和地面参考框架(右)

    +

    挥棒(Wanding) — 扫描空间

    +

    操作员手持装有LED或标记点的标定棒(Wand),在整个捕捉体积范围内走动并挥舞。由于棒上标记点之间的距离是精确已知的,当各台摄像头拍摄标定棒数千帧后,软件可以计算出:

    +
      +
    • 内参(Intrinsic Parameters) — 焦距、镜头畸变系数等摄像头镜头固有的特性
    • +
    • 外参(Extrinsic Parameters) — 摄像头在3D空间中的精确位置和方向
    • +
    +

    该计算使用一种名为光束法平差(Bundle Adjustment)的优化算法。基于数千个2D观测数据,同时优化所有摄像头的参数。

    +

    地面参考设置

    +

    挥棒完成后,在地板上放置一个L形标定框架(Ground Plane)。该框架上的3个或更多标记点定义了地面和坐标原点:

    +
      +
    • 哪里是(0, 0, 0)(原点)
    • +
    • 哪个方向是X、Y、Z轴
    • +
    • 地面的高度基准
    • +
    +

    标定完成后,软件就能将任何摄像头的2D坐标转换为精确的3D射线。

    +

    标定质量

    +

    Motive软件在标定后会显示每台摄像头的重投影误差(Reprojection Error)。该值越小(通常0.5像素以下),表示标定越精确。误差较大的摄像头需要调整位置或重新标定。

    +
    +

    第5步:2D → 3D重建(三角测量)

    +

    让我们看看到达PC的2D质心是如何转换为3D坐标的。

    +

    三角测量(Triangulation)原理

    +
      +
    1. 利用标定获得的每台摄像头的精确3D位置、方向和镜头特性
    2. +
    3. 从摄像头的2D质心坐标发射一条射线(Ray) — 从摄像头位置沿质心方向延伸到3D空间的直线
    4. +
    5. 观测同一标记点的2台或更多摄像头发射的射线交汇之处即为标记点的3D坐标
    6. +
    +

    +

    实际上射线并不会完美交汇

    +

    由于噪声、镜头畸变、标定误差等因素,射线几乎不可能精确交于一点。因此使用最小二乘法(Least Squares Optimization)

    +
      +
    • 计算到所有射线距离之和最小的3D坐标
    • +
    • 此时每条射线与重建的3D点之间的距离称为残差(Residual)
    • +
    • 残差越小,重建质量越好 — 在标定良好的OptiTrack系统中,可以期望亚毫米级(0.5mm以下)的残差
    • +
    +

    摄像头数量的影响

    + + + + + + + + + + + + + + + + + + + +
    观测该标记点的摄像头数效果
    2台可以进行3D重建(最低条件)
    3台精度提升 + 即使1台被遮挡也能维持追踪
    4台以上高精度 + 强遮挡抗性
    +
    +

    第6步:标记点识别与标注

    +

    标记点服装与标记点布置

    +

    要将3D重建转化为有意义的动作数据,标记点必须贴在身体的精确位置上。

    +

    标记点规格

    +
      +
    • 直径:通常使用12~19mm的球形逆反射标记点
    • +
    • 材质:覆有3M逆反射胶带的泡沫/塑料球
    • +
    • 固定方式:魔术贴、双面胶带,或预装在专用标记点服上
    • +
    +

    标记点集规格 +标记点贴在哪里、贴几个,遵循标准化的标记点集(Markerset)规格:

    +
      +
    • Baseline(37个标记点) — OptiTrack默认全身标记点集。覆盖上半身、下半身和头部,是游戏/影视动作捕捉中最常用的
    • +
    • Baseline + Fingers(约57个标记点) — 在上述基础上增加约20个手指标记点的扩展版
    • +
    • Helen Hayes(约15~19个标记点) — 医学/步态分析标准。以下半身为中心的最小标记点集
    • +
    +

    标记点贴在骨骼突出的解剖学标志点(肩峰、外侧上髁、髂前上棘等)。这些位置在皮肤上最能准确反映骨骼运动,且皮肤滑移(Skin Artifact)最小。

    +

    3D重建完成后,每一帧都会产生一团无名称的3D点云(Point Cloud)。判断"这个点是左膝标记点还是右肩标记点"的过程就是标注(Labeling)

    +

    Motive中标记点被标注的样子
    Motive中标记点被标注的样子

    +

    标注算法

    +

    模板匹配(Template Matching) +以标定时定义的标记点集的几何布局(如膝盖与踝关节标记点之间的距离)为基准,将当前帧的3D点与模板进行对照。

    +

    预测追踪(Predictive Tracking) +基于前一帧的速度和加速度,预测下一帧各标记点的位置,并与最近的3D点进行匹配。

    +

    标记点交换(Swap)问题

    +

    当两个标记点非常接近地经过彼此时,软件可能会交换两个标记点的标签 — 即标签互换现象。这是光学动捕中最常见的伪影之一。

    +

    解决方法:

    +
      +
    • 在后处理中手动纠正标签
    • +
    • 将标记点布置设计为不对称以便于区分
    • +
    • 使用主动标记点(Active Marker) — 每个标记点发射独特的红外模式,在硬件层面实现识别,从根本上杜绝交换
    • +
    +

    被动标记点 vs 主动标记点

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    类别被动标记点(反射型)主动标记点(发光型)
    原理反射摄像头IR LED的光标记点自身发射独特的IR模式
    识别基于软件(可能发生交换)基于硬件(无交换)
    优点轻便、便宜、易于安装自动识别、无标注错误
    缺点可能需要后处理标注较重,需要电池/电源
    +

    在大多数娱乐/VTuber制作现场,主要使用被动标记点。因为它们轻便舒适,而且软件性能足够好,在大多数情况下自动标注都能良好运作。

    +
    +

    第7步:骨骼解算 — 从点到骨架

    +

    将标注好的3D标记点映射到人体骨骼(Skeleton)结构的步骤。

    +

    预标定

    +

    拍摄前,演员摆出T-Pose(双臂展开的姿势),软件根据标记点位置计算各骨骼长度(臂长、腿长等)和关节位置。

    +

    接着进行ROM(Range of Motion)捕捉

    +

    ROM捕捉 — 通过各种动作校准关节范围的过程
    ROM捕捉 — 通过各种动作校准关节范围的过程
    + 通过旋转手臂、弯曲膝盖、扭转上身等各种动作,软件精确校准关节中心点和旋转轴

    +

    实时解算

    +

    拍摄过程中,每一帧都会:

    +
      +
    1. 接收标注后的3D标记点坐标
    2. +
    3. 根据标记点位置计算各关节的3D位置和旋转值(Rotation)
    4. +
    5. 通过逆运动学(Inverse Kinematics)等算法计算自然的骨骼姿态
    6. +
    7. 结果:时间轴上所有关节的位置(Translation)+ 旋转(Rotation)数据
    8. +
    +

    刚体追踪(道具追踪)

    +

    在刀、枪、摄像机等道具上不对称地贴上3个或更多标记点后,软件会将该标记点集群识别为一个刚体(Rigid Body),实现6DOF(3轴位置 + 3轴旋转)追踪。

    +
    +

    第8步:实时串流与数据输出

    +

    实时串流

    +

    实时串流 — 从Motive向游戏引擎发送动作数据
    实时串流 — 从Motive向游戏引擎发送动作数据

    +

    OptiTrack Motive将解算后的数据实时传递给外部软件:

    +
      +
    • NatNet SDK — OptiTrack自有协议,基于UDP的低延迟传输
    • +
    • VRPN — VR/动捕领域的标准协议
    • +
    +

    通过这些协议,可以在Unity、Unreal Engine、MotionBuilder等软件中实时驱动角色。VTuber直播之所以成为可能,也正是得益于这种实时串流。

    +

    录制数据输出格式

    + + + + + + + + + + + + + + + + + + + +
    格式用途
    FBX骨骼 + 动画数据,兼容游戏引擎/DCC工具
    BVH层级动作数据,主要用于重定向
    C3D原始3D标记点数据,生物力学/研究标准
    +
    +

    第9步:后处理 — 打磨数据的过程

    +

    后处理工作 — 在Motive中整理动作数据的过程
    后处理工作 — 在Motive中整理动作数据的过程

    +

    实时捕捉获取的数据有时可以直接使用,但大多数专业工作需要经过后处理(Post-Processing)阶段。

    +

    间隙填充(Gap Filling)

    +

    插值(Interpolation)填补因遮挡导致标记点暂时消失的区间。

    +
      +
    • 线性插值(Linear) — 简单地用直线连接前后帧。适用于短间隙
    • +
    • 样条插值(Spline) — 用曲线平滑填充。有利于保持自然运动
    • +
    • 基于模式的插值 — 参考重复相同动作的其他拍摄数据来填充
    • +
    +

    间隙越长,插值精度越低,因此拍摄时最大限度地减少遮挡才是最重要的。

    +

    平滑(Smoothing)与滤波

    +

    捕捉到的数据可能包含细微抖动(高频噪声)。为去除这些噪声:

    +
      +
    • 巴特沃斯滤波器(Butterworth Filter) — 去除指定频率以上噪声的低通滤波器
    • +
    • 高斯平滑 — 通过周围帧的加权平均来缓解抖动
    • +
    +

    但过度平滑会导致动作的细节和冲击力丧失,因此必须设置适当的强度,避免将挥剑瞬间的锐利动作也模糊掉。

    +

    标记点交换校正

    +

    找到第6步中描述的标记点交换发生的区间,手动纠正标签。在Motive中,可以在时间线上直观地查看和校正标记点轨迹。

    +

    重定向(Retargeting)

    +

    将捕捉到的骨骼数据应用于不同体型比例的角色的过程。例如,要将170cm演员的动作数据应用于3m的巨人角色或150cm的儿童角色,需要在保持关节旋转的同时,根据目标角色重新计算骨骼长度。MotionBuilder、Maya、Unreal Engine等提供重定向功能。

    +
    +

    第10步:现场常见问题及应对方法

    +

    即便看似技术完美的光学动捕,在实际现场也会遇到各种问题。

    +

    杂散反射(Stray Reflections)

    +

    红外线从标记点以外的物体反射,产生虚假标记点(Ghost Marker)的现象。

    +
      +
    • 原因:金属表面、闪亮的衣服、眼镜、手表、地板反射等
    • +
    • 应对:用哑光胶带覆盖反射表面,或在Motive中对该区域进行遮罩(Masking)处理,使软件忽略该区域
    • +
    +

    标记点脱落

    +

    剧烈运动中标记点从服装上脱落或位置偏移。

    +
      +
    • 应对:拍摄前仔细检查标记点的粘贴状态;进行剧烈动作捕捉时,同时使用魔术贴 + 双面胶带增强固定力
    • +
    • 中途监控标记点状态也很重要
    • +
    +

    服装限制

    +

    拍摄时演员穿的衣服理想选择是浅色、哑光材质。黑色不影响标记点反射,但闪亮材质或宽松衣物会导致标记点位置不稳定或产生杂散反射。穿戴专用动捕服是最稳定的选择。

    +

    标定维护

    +

    捕捉体积内的温度变化、摄像头振动、三脚架微小移动等因素可能导致标定逐渐偏移。长时间拍摄时,建议中途进行重新标定,或使用Motive的Continuous Calibration(持续标定)功能进行实时校正。

    +
    +

    延迟 — 从动作到屏幕需要多久?

    +

    管线各阶段的耗时如下。

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    阶段耗时
    摄像头曝光(以240fps为基准)约4.2ms
    摄像头内部处理(质心计算)约0.5~1ms
    网络传输(PoE → PC)< 1ms
    3D重建 + 标注约1~2ms
    骨骼解算约0.5~1ms
    串流输出(NatNet)< 1ms
    总端到端延迟约8~14ms(以240fps为基准)
    +

    在360fps下,曝光时间缩短,延迟可降至7ms以下。这样的延迟水平人类几乎无法感知,即使在VTuber直播中也能实现自然的实时响应。

    +
    +

    注:延迟的大部分来自摄像头曝光时间(帧周期)。这就是帧率越高延迟越低的原因。

    +
    +
    +

    完整管线总结

    +
    +
    +
    1. 摄像头安装 · IR滤光片 · 帧同步
    +

    30台摄像头环形布置,IR通过滤光片仅检测红外线,硬件同步实现μs级精度

    +
    +
    +
    +
    2. PoE网络
    +

    一根Cat6线缆同时传输电力和数据,以星型拓扑连接至交换机

    +
    +
    +
    +
    3. 摄像头板载处理 → 2D质心
    +

    IR LED发射 → 接收标记点反射光 → 阈值处理 → 斑点检测 → 亚像素质心计算 → 仅传输坐标

    +
    +
    +
    +
    4. 标定
    +

    通过挥棒获取摄像头内参/外参,通过地面参考定义坐标系

    +
    +
    +
    +
    5. 2D → 3D三角测量
    +

    从多台摄像头的2D坐标射出射线交叉 + 最小二乘法重建3D坐标

    +
    +
    +
    +
    6. 标记点标注
    +

    模板匹配 + 预测追踪为每个3D点分配标记点名称

    +
    +
    +
    +
    7. 骨骼解算
    +

    基于T-Pose + ROM标定,通过逆运动学计算关节位置与旋转

    +
    +
    +
    +
    8. 实时串流 · 数据输出
    +

    通过NatNet/VRPN实时传输至Unity/Unreal/MotionBuilder,录制为FBX/BVH/C3D

    +
    +
    +
    +
    9. 后处理
    +

    间隙填充 · 平滑 · 标记点交换校正 · 重定向

    +
    +
    +
    +
    最终成果
    +

    应用于游戏过场动画 · VTuber直播 · 视频内容(总延迟约8~14ms)

    +
    +
    + +

    摄像头拍摄的图像并不是直接发送到PC的——而是由摄像头自行计算标记点坐标后发送,PC将这些坐标重建为3D并映射到骨骼上。这就是光学动作捕捉的核心原理。

    +
    +

    常见问题(FAQ)

    +

    Q. 光学动作捕捉摄像头和普通摄像头有什么区别?

    +

    普通摄像头拍摄全彩视频,而动作捕捉摄像头专注于红外(IR)光谱。它们用IR LED照射标记点并仅检测反射光,在摄像头内部直接计算标记点的2D坐标,只向PC传输坐标数据。

    +

    Q. PoE线缆长度有限制吗?

    +

    根据以太网标准,PoE线缆最长支持100m。大多数动作捕捉工作室完全在此范围内。

    +

    Q. 摄像头帧率是不是越高越好?

    +

    更高的帧率有利于快速动作追踪和降低延迟,但数据处理量会增加,摄像头分辨率可能会降低。通常VTuber直播和游戏动作捕捉120~240fps就已足够,而体育科学等超高速动作分析则使用360fps或更高。

    +

    Q. 标记点交换发生的频率有多高?

    +

    如果标记点集设计良好且摄像头数量充足,实时拍摄中交换现象很少发生。但在快速动作或标记点间距较近的动作(如双手合十等)中概率会增加,这些区间在后处理中校正。

    +

    Q. 三角测量2台就够了,为什么要安装30台?

    +

    2台只是理论最小值。实际上需要考虑遮挡(标记点被挡住)、不同摄像头角度导致的精度差异、冗余保障等因素。布置30台后,任何标记点都始终被多台摄像头观测,能够实现稳定精确的追踪。

    +

    Q. 多久需要进行一次标定?

    +

    通常在每个拍摄日开始前进行一次。但长时间拍摄时,温度变化或摄像头微小移动可能导致标定偏移,因此4~6小时连续拍摄时建议中途重新标定。使用OptiTrack Motive的Continuous Calibration功能,即使在拍摄过程中也能进行实时校正。

    +

    Q. 不能穿闪亮的衣服吗?

    +

    由于动作捕捉摄像头检测的是红外反射,闪亮材质(金属装饰、亮片、有光泽的合成纤维等)可能反射红外线并产生虚假标记点(Ghost Marker)。穿戴专用动捕服或哑光材质的舒适衣物是最佳选择。

    +
    +

    如果您对光学动作捕捉的技术结构有更多疑问,欢迎在联系页面随时提问。如果您想在明格工作室亲身体验,请查看服务介绍

    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/zh/devlog/optical-mocap-pipeline/images/calibration-tools.webp b/zh/devlog/optical-mocap-pipeline/images/calibration-tools.webp new file mode 100644 index 0000000..7a0d0b3 Binary files /dev/null and b/zh/devlog/optical-mocap-pipeline/images/calibration-tools.webp differ diff --git a/zh/devlog/optical-mocap-pipeline/images/continuous-calibration-web.mp4 b/zh/devlog/optical-mocap-pipeline/images/continuous-calibration-web.mp4 new file mode 100644 index 0000000..b92719a Binary files /dev/null and b/zh/devlog/optical-mocap-pipeline/images/continuous-calibration-web.mp4 differ diff --git a/zh/devlog/optical-mocap-pipeline/images/marker-labeling.png b/zh/devlog/optical-mocap-pipeline/images/marker-labeling.png new file mode 100644 index 0000000..4a81f7a Binary files /dev/null and b/zh/devlog/optical-mocap-pipeline/images/marker-labeling.png differ diff --git a/zh/devlog/optical-mocap-pipeline/images/motive-2d-centroid.png b/zh/devlog/optical-mocap-pipeline/images/motive-2d-centroid.png new file mode 100644 index 0000000..30dda34 Binary files /dev/null and b/zh/devlog/optical-mocap-pipeline/images/motive-2d-centroid.png differ diff --git a/zh/devlog/optical-mocap-pipeline/images/poe-switch.png b/zh/devlog/optical-mocap-pipeline/images/poe-switch.png new file mode 100644 index 0000000..f09dff0 Binary files /dev/null and b/zh/devlog/optical-mocap-pipeline/images/poe-switch.png differ diff --git a/zh/devlog/optical-mocap-pipeline/images/post-processing.png b/zh/devlog/optical-mocap-pipeline/images/post-processing.png new file mode 100644 index 0000000..75a4d43 Binary files /dev/null and b/zh/devlog/optical-mocap-pipeline/images/post-processing.png differ diff --git a/zh/devlog/optical-mocap-pipeline/images/realtime-streaming.png b/zh/devlog/optical-mocap-pipeline/images/realtime-streaming.png new file mode 100644 index 0000000..2d30cae Binary files /dev/null and b/zh/devlog/optical-mocap-pipeline/images/realtime-streaming.png differ diff --git a/zh/devlog/optical-mocap-pipeline/images/rom-1.webp b/zh/devlog/optical-mocap-pipeline/images/rom-1.webp new file mode 100644 index 0000000..bcb9c10 Binary files /dev/null and b/zh/devlog/optical-mocap-pipeline/images/rom-1.webp differ diff --git a/zh/devlog/optical-mocap-pipeline/images/rom-2.webp b/zh/devlog/optical-mocap-pipeline/images/rom-2.webp new file mode 100644 index 0000000..607ec01 Binary files /dev/null and b/zh/devlog/optical-mocap-pipeline/images/rom-2.webp differ diff --git a/zh/devlog/optical-mocap-pipeline/images/rom-3.webp b/zh/devlog/optical-mocap-pipeline/images/rom-3.webp new file mode 100644 index 0000000..75cbbaf Binary files /dev/null and b/zh/devlog/optical-mocap-pipeline/images/rom-3.webp differ diff --git a/zh/devlog/optical-mocap-pipeline/images/rom-4.webp b/zh/devlog/optical-mocap-pipeline/images/rom-4.webp new file mode 100644 index 0000000..4ad423e Binary files /dev/null and b/zh/devlog/optical-mocap-pipeline/images/rom-4.webp differ diff --git a/zh/devlog/optical-mocap-pipeline/images/rom-grid.webp b/zh/devlog/optical-mocap-pipeline/images/rom-grid.webp new file mode 100644 index 0000000..e2d4f48 Binary files /dev/null and b/zh/devlog/optical-mocap-pipeline/images/rom-grid.webp differ diff --git a/zh/devlog/optical-mocap-pipeline/images/thumbnail.webp b/zh/devlog/optical-mocap-pipeline/images/thumbnail.webp new file mode 100644 index 0000000..4a81f7a Binary files /dev/null and b/zh/devlog/optical-mocap-pipeline/images/thumbnail.webp differ diff --git a/zh/gallery.html b/zh/gallery.html index 5ced961..c4ca5eb 100644 --- a/zh/gallery.html +++ b/zh/gallery.html @@ -105,6 +105,7 @@
  • Portfolio
  • Gallery
  • Schedule
  • +
  • DevLog
  • Contact
  • Q&A
  • diff --git a/zh/index.html b/zh/index.html index da4de32..1886f16 100644 --- a/zh/index.html +++ b/zh/index.html @@ -179,7 +179,7 @@ - + @@ -207,79 +207,6 @@ height="0" width="0" style="display:none;visibility:hidden"> - - -
    @@ -297,6 +224,7 @@
  • Portfolio
  • Gallery
  • Schedule
  • +
  • DevLog
  • Contact
  • Q&A
  • @@ -1092,6 +1020,6 @@ - + \ No newline at end of file diff --git a/zh/portfolio.html b/zh/portfolio.html index b4c63c4..66b1332 100644 --- a/zh/portfolio.html +++ b/zh/portfolio.html @@ -164,6 +164,7 @@
  • Portfolio
  • Gallery
  • Schedule
  • +
  • DevLog
  • Contact
  • Q&A
  • diff --git a/zh/props.html b/zh/props.html index b451cf9..5b585c8 100644 --- a/zh/props.html +++ b/zh/props.html @@ -78,6 +78,7 @@
  • Portfolio
  • Gallery
  • Schedule
  • +
  • DevLog
  • Contact
  • Q&A
  • diff --git a/zh/qna.html b/zh/qna.html index 0d17020..20561d8 100644 --- a/zh/qna.html +++ b/zh/qna.html @@ -105,6 +105,7 @@
  • Portfolio
  • Gallery
  • Schedule
  • +
  • DevLog
  • Contact
  • Q&A
  • diff --git a/zh/services.html b/zh/services.html index 5688b11..4031295 100644 --- a/zh/services.html +++ b/zh/services.html @@ -106,6 +106,7 @@
  • Portfolio
  • Gallery
  • Schedule
  • +
  • DevLog
  • Contact
  • Q&A