StreamRoger (DepthOcclusionAR) — 프로젝트 구조·사용법

분산 멀티카메라 바디트래킹 · Depth Occlusion AR 무대 시스템 — 라이브 운용명 「ARStageLive」
← 에다 4족보행 리타게팅 전략 (index)  ·  위치 F:\DepthOcclusionAR · 브랜치 master · Unity 6.3 LTS (6000.3.7f1) · URP · 기준일 2026-07-17

1. 개요

StreamRoger는 Orbbec Femto Bolt(RGB-D) 4대를 4대의 PC에 분산 배치해 실시간 바디트래킹과 Depth Occlusion 합성을 수행하는 AR 무대 시스템의 코드명입니다.

자매 프로젝트 XR_Maestro(F:\XR_Maestro)와 워커·NDI·WinRM 분산 인프라를 공유합니다.

SSOT 원칙 — 시스템 스펙·역할의 단일 진실 원천은 repo 내부 파일입니다: pc_sync/config/roles.toml(네트워크·역할), CLAUDE.md/AGENTS.md(PC 프로파일·모듈·마일스톤), pc_sync/profiles/*.json.

2. 핵심 아키텍처

단일 소스 원칙

Femto Bolt + Azure Kinect Body Tracking SDK(K4ABT) 조합으로 Depth와 스켈레톤이 동일 좌표계에서 나옵니다. 이것이 오클루전 정합의 핵심입니다.

듀얼 페이즈

운용 모드 3종

모드구성용도
Mode1K4ABT Full + 실시간 Depth Mesh 오클루전리허설
Mode2Mode1 + 외부 모캅 연동고품질 폴백 (미구현)
Mode3정적 메시 오클루전공연 권장

마일스톤 현황

단계내용상태
M1Depth 스트림·메시완료
M2Body Tracking·아바타완료
M3오클루전 합성완료
M4깊이 보정·안정화 (DepthSmoothing.compute 5커널)구현 완료 튜닝·현장검증 남음
M5핸드 제스처미착수 (우선순위 낮음)
M6연출 시스템·송출 (NDI 코드만, 연출 UI 없음)부분
M7장면 프리셋완료

3. 4PC 분산 구성

PC이더넷 IP (폐쇄망)담당 카메라GPU상태 (07-17)
Main (VOCES)192.168.1.100 (Wi-Fi .50 = 인터넷)Femto A (로컬)RTX 4070 Ti SUPER 16GB정상
Worker1192.168.1.11Femto B (우전방)RTX 4060 Laptop 8GB정상 (64ef462 pull 완료)
Worker2192.168.1.12Femto C (좌후방)RTX 4060 Laptop 8GB다운 IP 탈취
Worker3192.168.1.13Femto D (우후방)RTX 4060 Laptop 8GB다운 WoL 무반응
근본 문제 — 인터넷 공유기와 폐쇄망이 동일 192.168.1.0/24 대역을 공유 중이라 워커 IP가 타 기기에 탈취되는 사고가 반복됩니다. 항구 해결책은 Stage2(폐쇄망 대역 분리). 폐쇄망에 라우터·인터넷 결선 금지.

4. 디렉토리 구조 (주요)

F:\DepthOcclusionAR\
├─ CLAUDE.md / AGENTS.md — 센서·GPU DLL 원칙, PC 프로파일, 모듈·마일스톤 (AGENTS.md는 로컬 미러)
├─ multicam_config.json — 4센서 등록(LOCAL + .11/.12/.13) + camPose 캘리브레이션
├─ Assets\
│  ├─ Scripts\HologramViewer\ — 핵심 런타임 코드 (아래 표)
│  ├─ Editor\ — 씬 빌더·셋업 자동화 (StreamRogerMainSetup, EdaHybrid*SceneSetup 등)
│  ├─ AzureKinectExamples\ — rfilkov K4A 에셋 (KinectManager·인터페이스·NetClient)
│  ├─ Red_Deer\ — Cartoon Cats 팩 (에다 고양이 아바타, URP 변환됨)
│  └─ *.unity — 씬 (§5)
├─ pc_sync\ — 4PC 동기화·운용 인프라
│  ├─ config\roles.toml — 4PC 네트워크·역할·방화벽 SSOT
│  ├─ scripts\ — PreFlight-Check·Start/Stop-StreamRoger·converge·bootstrap
│  ├─ profiles\*.json — PC별 프로파일
│  └─ messages\INBOX_*.md — PC 간 메시지
├─ 연구 보고서\ — 분산 바디트래킹 구현 가이드 v1.4, 하드웨어 결선 가이드
├─ docs\ — K4ABT 정확도 연구, 아바타 교체 가이드, 본 문서
└─ 공연현장_뎁스오클루전_운영_체크리스트.md — 본공연 T-60~T-0 체크리스트

핵심 런타임 코드 (Assets/Scripts/HologramViewer/)

파일역할
KinectDepthOccluder.csDepth 기반 오클루전 코어 (DepthSmoothing.compute 파이프라인 연결)
HologramViewerController.cs운용 모드 전환·합성 총괄 (Mode1/2/3, 뷰센서)
UserBodyBlenderURP.cs / KinectBackgroundRenderer.csURP 합성·배경 렌더
EdaBodySelector.cs에다 배우 선택·락 (SoloLock: 시야 1인 자동 락)
EdaAvatarDriver.csK4ABT → 휴머노이드 아바타 구동 (upperBodyOnly 토글 보유)
ProceduralLegDriver.cs order 300하체 절차적 보행 (walk/trot 게이트 + 2본 IK)
GenericBoneBinder.cs order 400섀도우 휴머노이드 → 고양이 Generic 리그 전사
SimpleSpringChain.cs order 450꼬리·귀 스프링 체인
RetargetDebugVisualizer.cs order 500스켈레톤 3계층 시각 디버거 (F1~F4)
ViewSensorSwitcher.cs4뷰 카메라 전환 ([ ])

5. 씬 구성

용도비고
StreamRogerMain.unityMain PC 운용 씬 — 스트리밍 수집·오클루전 스택 + 정적메시 파이프라인에다 아바타 스택 없음 (씬 분열 — 통합 여부 결정 대기)
DepthOcclusionAR.unity레거시 통합 씬 — 에다 아바타 스택(HVC·EdaAvatarDriver·EdaBodySelector) 보유하이브리드 테스트 씬의 복제 원본
StreamRogerWorker.unity워커 PC 송출 씬 (KinectNetServer)워커 로컬 전용
MultiCameraSetup.unity다카메라 포즈 캘리브레이션 (R 강제보정)worker3 4번째 캘리브레이션 미완
EdaHybridTest.unity상체 라이브/하체 절차적 하이브리드 검증 (단일 standalone)빌더: EdaHybridTestSceneSetup
EdaHybridCatTest.unity4족 고양이 라이브 리타겟 검증 (현재 작업 씬)빌더: EdaHybridCatTestSceneSetup
씬 재생성 원칙 — 하이브리드 테스트 씬은 수동 편집하지 말고 빌더 메뉴로 재생성합니다: Tools > DepthOcclusionAR > Hybrid > Create ... Test Scene... 체인은 DepthOcclusionAR.unity → EdaHybridTest → EdaHybridCatTest 순 복제이며, standalone 강제·DistributedTestManager 비활성·FullModel 설정이 빌더에 내장되어 있습니다.

6. 고양이 리타겟 테스트 (섀도우 휴머노이드 리그)

인간 배우의 고양이 흉내 연기를 퍼펫티어 없이 4족 고양이 아바타로 실시간 복제하는 파이프라인입니다.

데이터 흐름

Femto Bolt (K4ABT 스켈레톤)
  → EdaBodySelector (시야 1인 자동 락)
  → EdaAvatarDriver (상체 라이브, upperBodyOnly=true)     [order 기본]
  → ProceduralLegDriver (하체 절차적 보행, 루트 속도 기반)  [order 300]
  →  ⟨비가시 섀도우 휴머노이드⟩
  → GenericBoneBinder (고양이 Generic 본으로 전사)         [order 400]
      · 야우 → 고양이 루트 이관 (rest 기준 잔차 분리)
      · 척추 spine_02~05 누적 가중
      · 사지: 위치 기반 2본 IK (바인드 절대화)
  → SimpleSpringChain (꼬리·귀)                            [order 450]
  → RetargetDebugVisualizer (시각 진단)                    [order 500]

Play 검증 키 바인딩

기능소속
T섀도우 휴머노이드 메시 표시/숨김GenericBoneBinder
R기준 재캡처 (배우 현재 위치·방향을 원점으로)GenericBoneBinder
HHybrid ↔ Full-live 전환ProceduralLegDriver
P절차적 다리 on/offProceduralLegDriver
G + 화살표Mock root 이동 (카메라 없이 보행 검증)ProceduralLegDriver
F1K4ABT 원시 스켈레톤 (초록=Tracked / 노랑=Inferred)RetargetDebugVisualizer
F2섀도우 리그 본 라인 (시안)RetargetDebugVisualizer
F3고양이 리그 본 라인 (주황)RetargetDebugVisualizer
F4X-Ray (깊이 무시) on/offRetargetDebugVisualizer

HUD 배치

검증 절차 요약

  1. EdaHybridCatTest 오픈 → ▶ Play → 우상단 HUD 「본 발견 26/26」 확인
  2. Console에 [K4ABT] Body tracker started + FullModel 로드 확인, NetClient 접속 에러가 없어야 정상
  3. 카메라 시야에 혼자 진입 → 자동 락 (Tracked: True) → 원하는 원점에서 R
  4. 걷기·회전·팔 뻗기·웅크리기·네발 기기(핵심) 테스트 — F1 스켈레톤으로 추적 붕괴 여부 관찰
  5. 진단법: F1이 무너지면 K4ABT 추적 문제 / F1 정상인데 고양이만 이상하면 전사(바인더) 문제

7. 운용 자동화 (pc_sync/scripts/)

스크립트기능
PreFlight-Check.ps1공연 전 점검 (네트워크·센서·서비스)
Start-StreamRoger.ps1전체 기동 + SHOW_MODE 마커 생성 (공연 중 converge git pull 차단)
Stop-StreamRoger.ps1전체 종료 + SHOW_MODE 해제
converge.ps1평시 5분 주기 SSOT 수렴 (git pull·방화벽·NIC Private 자가치유)
bootstrap.ps1 -Role Worker1/2/3워커 셋업 자동화

8. 주의사항 · 반복 함정

함정내용 · 대처
K4ABT = CUDA 11 전용K4ABT 1.1.2는 CUDA 11 전용. Blackwell(RTX 5080+)은 DirectML 강제. ONNX Runtime 단독 교체 시 크래시
Body Tracking SDK 설치 필수k4abt.dllC:\Program Files\Azure Kinect Body Tracking SDK\tools\에서 CUDA 공급자를 찾음. 프로젝트 내 DLL 복사만으로는 무효 → SDK 설치 + Unity 완전 재시작
Plugins DLL 우선 로드Unity는 SDK/Kinect4AzureSDK/Plugins/의 native DLL을 프로젝트 루트보다 우선 로드 — CUDA DLL 12종은 Plugins 폴더에
GPU 종속 DLL repo 금지CUDA/TensorRT/DirectML/ONNX DLL은 .gitignore — 각 머신 SDK에서 복사
강제종료 잔여물Unity 강제종료 후 Temp\UnityLockfile·__Backupscenes가 남아 재실행·배치를 차단. 삭제 후 재시작. 강제종료해도 프로세스가 좀비로 살아남을 수 있음 — 작업관리자에서 Unity.exe 확인
DistributedTestManager 함정 07-17 발견Awake([DefaultExecutionOrder(-1000)])가 KinectManager.useMultiCamConfig를 강제로 켜서 multicam_config의 NetClient 3대를 부활시킴. enabled=false로는 Awake를 못 막음 → GameObject 자체를 비활성화. 워커 다운 상태에서는 연결 타임아웃 폭주로 에디터 프리즈
모든 센서 바디트래킹 필수성능 위해 끄지 말 것 — 가림 상황 트래킹 유지 목적
신품 Femto BoltD:\orbbec_viewer\OrbbecViewer.exe 1회 실행 → .normalized 마커 확인 (펌웨어 timestamp stale 방지)
재Play 시 센서 재오픈Stop 직후 재Play는 디바이스 미해제로 행 가능 — 몇 초 대기 후 Play, 세션당 Play 최소화

9. 현재 상태 (2026-07-17 밤 기준)