목차
★ 에다 공연 기능 사용법 (11/04)
1. 개요
2. 핵심 아키텍처
3. 4PC 분산 구성
4. 디렉토리 구조
5. 씬 구성
6. 고양이 리타겟 테스트
7. 운용 자동화
8. 주의사항·함정
9. 현재 상태
★ 에다 공연 기능 사용법 2026-11-04 기준
본편 씬 Da3WebcamOcclusion. 단축키는 게임뷰를 한 번 클릭해 포커스를 둔 상태 에서, 입력칸에 커서가 없을 때 받는다.
라이브 아바타는 에다(Eda_4foot_V02_Latest)이며 아래 기능은 모두 에다 아바타로 녹화 재생 확인함.
한눈에
기능 조작 조건·비고
피아노 위로 점프·앉기·내려오기 Ctrl+H · 착지점 지정 Ctrl+Shift+H 공연 화면(HUD 꺼짐)에서도 동작. 동작은 애니메이터 수정본 v009
건반 밟고 도망 Ctrl+G · 건반 지정 Ctrl+Shift+G 처음 한 번 건반 왼쪽 끝 → 오른쪽 끝 클릭
요한 손잡기 자동 배우 탭에서 에다 배우 「배우」, 요한 「요한 가림」 지정(세션마다)
밥 먹기 자동 · 수동 Ctrl+W 배우가 숙이는 자리 바로 앞에 그릇(아바타 골반–그릇 1 m 이내)
과자 쏟기 Ctrl+I 그릇이 있으면 그릇에, 없으면 아바타 앞 바닥에
소품 배치 무대 스튜디오에서 끌어 놓기 에다 밥그릇 · 과자 봉투(열림) · 과자 봉투 · 물고기 과자
밥그릇 마커 QR 마커 ID24 종전 화분 마커를 그대로 사용
녹화 재생 뎁스맵 자동 재생 시작 때 녹화 시각의 무대 뎁스맵 적용
녹화 바꿔 재생 녹화 목록 → 「선택한 녹화로 바꿔 재생」 재생 중에도 라이브 복귀 없이 바로 전환
녹화별 피아노 위치 자동 녹화마다 착지점·건반 위치 저장, 재생 때 세트로 적용
피아노 점프 (Ctrl+H)
Ctrl+H 한 번 = 피아노 위로 뛰어올라 앉기, 다시 Ctrl+H = 내려와 배우 자리로 복귀. 착지점은 처음 한 번 Ctrl+Shift+H 후 피아노 윗면 클릭.
올라가기 2.0초 · 내려가기 1.8초. 앉은 동안 상체는 배우를 따라감. 꼬리·귀·앞발 움직임은 v009.
v009 는 에다 리그용 — 고양이 아바타(Cat_Unity_Rig_Live)로 바꾸면 예전 시안 동작이 나옴.
건반 밟고 도망 (Ctrl+G)
처음 한 번 Ctrl+Shift+G → 화면에서 건반 왼쪽 끝 클릭 → 오른쪽 끝 클릭. 위치는 저장되어 다음 실행에도 유지.
Ctrl+G → 에다가 놀라 건반 위로 뛰어올라 시·도·레·미·파를 밟으며 반대쪽으로 도망.
요한 손잡기 (자동)
두 배우가 떨어져 있을 때 배우 탭에서 에다 배우는 「이 사람을 배우로 지정」, 요한은 「이 사람을 요한 가림으로 지정」. 요한 지정은 세션마다 다시.
두 배우가 손을 잡으면 0.15초 뒤 아바타가 상체를 세우고 요한 쪽으로 다가서서 앞발로 그 손을 잡음. 손을 떼면 0.6초 뒤 원래 자세로.
배우 지정이 바뀌어 요한이 에다 배우로 잡히면 엉뚱한 쪽으로 손을 뻗음 — 시작 전 두 사람 지정을 확인. 사람 손높이가 높아 팔을 거의 편 채 잡고, 최대 0.6 m 미끄러지듯 다가섬.
밥그릇 놓기 · 밥 먹기 (자동 / Ctrl+W)
마커 : 화분에 쓰던 QR(ID24)을 바닥에 두면 「에다 밥그릇」이 나타남. 첫 사용 때 무대 준비 → 마커 오브제 → 에다 밥그릇에서 위치·크기를 한 번 맞춤.
직접 배치 : 무대 스튜디오(Shift+F1 편집) → 왼쪽 「에셋」에서 「에다 밥그릇」을 화면 바닥으로 끌어 놓기(휠로 크기, Esc 취소). 목록의 「요한·에다 · 에다 밥그릇」은 예전 시안이라 밥 먹기가 인식하지 않음.
에다 배우가 그릇 1 m 안에서 몸을 숙이면 (상체 40° 이상 또는 쪼그려 앉기) 0.4초 뒤 시작, 일어서면 0.6초 뒤 끝. 아바타는 그릇 쪽으로 몸을 돌려 다가가 척추·목·머리를 나눠 굽히고 앞발로 바닥을 짚으며 씹는 동작.
Ctrl+W = 배우 동작과 상관없이 수동 시작/끝(리허설·연출용). 손잡기·피아노 점프 중엔 꺼짐.
그릇 위치가 핵심 — 배우가 실제로 숙일 자리 바로 앞에 그릇을 둔다. 저장된 레이아웃 「eda meal」의 그릇은 11/02 녹화의 숙이는 자리에서 1.3 m 이상 떨어져 있어 자동 시작이 안 됨 — 옮겨서 다시 저장할 것.
과자 쏟기 (Ctrl+I)
Ctrl+I → 과자 봉투가 그릇 옆에 나타나 기울어 과자 약 26개를 쏟음(부스러기 포함). 다 쏟은 봉투는 그릇 옆에 세워 둠.
스튜디오에 「에다 과자 봉투(열림)」을 미리 놓아 두면 그 봉투를 들어 쏟고 제자리에 돌려놓음. 그릇이 없으면 아바타 앞 바닥에 쏟음. 에다가 먹는 동안 그릇 속 과자가 하나씩 줄어듦.
녹화 재생
진단 → 세션 녹화 → 이전 녹화 선택 에서 녹화를 고르고 「선택한 녹화 재생」. Ctrl+F3 = 최근 녹화 재생 / 라이브 복귀.
재생 중 다른 녹화로 바로 전환 : 재생 중에 목록에서 다른 녹화를 고르고 「선택한 녹화로 바꿔 재생」 — 라이브를 거치지 않고 바로 바뀜. 라이브 복귀 때는 재생 전 무대가 돌아옴.
피아노 착지점·건반 위치도 녹화마다 저장 : 녹화하면 그때의 착지점(Ctrl+Shift+H )·건반(Ctrl+Shift+G ) 위치가 녹화 폴더에 함께 남고, 재생하면 뎁스맵과 세트로 적용됨. 라이브로 돌아오면 라이브 위치 그대로. 재생 중에 다시 지정하면 그 녹화에만 저장. 11/04 이전 녹화는 현재 위치를 쓰므로 재생 중 한 번 지정해 두면 다음부터 그 위치로 불러옴. 확인: 진단 ▸ 피아노 점프 「피아노 위치 출처」.
뎁스맵 자동 매칭: 녹화에 저장된 무대 뎁스맵을, 없으면(10/29 이전 녹화) 녹화 시작 직전 12시간 안에 찍은 무대 촬영본을 자동 적용. 화면 메시지 「녹화 시각 무대 촬영본 적용」.
안 될 때
단축키 무반응: 게임뷰를 한 번 클릭 → 다시. 입력칸(「이름으로 찾기」 등)에 커서가 있으면 Esc .
Ctrl+U 는 Unity 6 「실행 취소 기록」 창이라 쓰지 않음. B·J·E 는 단독 키 기능(배경 재캡처 등)이 있어 Ctrl 조합으로도 피함.
Ctrl+W ·Ctrl+I 는 원격 명령으로만 동작 확인 — 실제 키보드에서 반응이 없으면 다른 키로 바꿈.
1. 개요
StreamRoger 는 Orbbec Femto Bolt(RGB-D) 4대를 4대의 PC에 분산 배치해 실시간 바디트래킹과 Depth Occlusion 합성을 수행하는 AR 무대 시스템의 코드명입니다.
용도 ① — 오페라 「고양이 마에스트로 에다」(ARKO 공연예술창작산실 2027 올해의 신작 후보) 무대기술: Depth Occlusion + 실시간 아바타(고양이 리타겟)
용도 ② — 보쎄스A&T 재도전성공패키지 아이템: 글래스리스 라이브 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와 스켈레톤이 동일 좌표계 에서 나옵니다. 이것이 오클루전 정합의 핵심입니다.
듀얼 페이즈
Phase A — 사전 무대 3D 스캔 (StageScanner → 정적 메시)
Phase B — 공연 실시간 스켈레톤 트래킹 + 아바타 합성
운용 모드 3종
모드 구성 용도
Mode1 K4ABT Full + 실시간 Depth Mesh 오클루전 리허설
Mode2 Mode1 + 외부 모캅 연동 고품질 폴백 (미구현)
Mode3 정적 메시 오클루전 공연 권장
마일스톤 현황
단계 내용 상태
M1 Depth 스트림·메시 완료
M2 Body 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 정상
Worker1 192.168.1.11 Femto B (우전방) RTX 4060 Laptop 8GB 정상 (64ef462 pull 완료)
Worker2 192.168.1.12 Femto C (좌후방) RTX 4060 Laptop 8GB 다운 IP 탈취
Worker3 192.168.1.13 Femto D (우후방) RTX 4060 Laptop 8GB 다운 WoL 무반응
네트워크: 폐쇄망 스위치 ipTime H8008S2 (GbE, CAT6). KinectNetServer = UDP 11000 + TCP 11000~11010
센서 동기화: 현재 전 센서 STANDALONE 운용 (2026-06-23 결정). Sync Hub 하드웨어 동기는 공연 화질 필요 시 복구
워커 원격제어: WinRM (_tools/WorkerCtl.psm1, 자격증명 ~/.winrm_admin.cred) + Parsec(GUI)
근본 문제 — 인터넷 공유기와 폐쇄망이 동일 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
H Hybrid ↔ Full-live 전환 ProceduralLegDriver
P 절차적 다리 on/off ProceduralLegDriver
G + 화살표Mock root 이동 (카메라 없이 보행 검증) ProceduralLegDriver
F1 K4ABT 원시 스켈레톤 (초록=Tracked / 노랑=Inferred) RetargetDebugVisualizer
F2 섀도우 리그 본 라인 (시안) RetargetDebugVisualizer
F3 고양이 리그 본 라인 (주황) RetargetDebugVisualizer
F4 X-Ray (깊이 무시) on/off RetargetDebugVisualizer
HUD 배치
좌상단 — ProceduralLegDriver (하이브리드·보행 상태)
우상단 — GenericBoneBinder (본 발견 수·Tracked·yawDelta·게인)
좌하단 — RetargetDebugVisualizer (토글 상태 + 관절 신뢰도 집계)
검증 절차 요약
씬 EdaHybridCatTest 오픈 → ▶ Play → 우상단 HUD 「본 발견 26/26」 확인
Console에 [K4ABT] Body tracker started + FullModel 로드 확인, NetClient 접속 에러가 없어야 정상
카메라 시야에 혼자 진입 → 자동 락 (Tracked: True) → 원하는 원점에서 R
걷기·회전·팔 뻗기·웅크리기·네발 기기(핵심) 테스트 — F1 스켈레톤으로 추적 붕괴 여부 관찰
진단법: 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워커 셋업 자동화
워커 이상 시 1차 확인: converge 로그(pc_sync/state/.local/*.log)와 python 설치 여부
pc_sync/PAUSE_AUTOPUSH 마커 존재 시 converge 자동 push 정지 (현재 활성 — 전 PC)
Main→워커 /32 영구 경로 필요 (Wi-Fi 누수 방지). 어댑터 재설정 시 증발 가능성 있음
8. 주의사항 · 반복 함정
함정 내용 · 대처
K4ABT = CUDA 11 전용 K4ABT 1.1.2는 CUDA 11 전용. Blackwell(RTX 5080+)은 DirectML 강제. ONNX Runtime 단독 교체 시 크래시
Body Tracking SDK 설치 필수 k4abt.dll이 C:\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 Bolt D:\orbbec_viewer\OrbbecViewer.exe 1회 실행 → .normalized 마커 확인 (펌웨어 timestamp stale 방지)
재Play 시 센서 재오픈 Stop 직후 재Play는 디바이스 미해제로 행 가능 — 몇 초 대기 후 Play, 세션당 Play 최소화
9. 현재 상태 (2026-07-17 밤 기준)
Git : HEAD 64ef462 (섀도우 휴머노이드 리그) = origin/master 동기. 미커밋: 07-17 수정분(DTM 비활성·FullModel·시각 디버거·빌더) + Assets/Toon Golden Valley(사용자 임포트, 보류)
07-17 프리즈 사건 해결 : 에디터 다운 2회의 원인 = DistributedTestManager의 NetClient 부활 + 죽은 워커 접속 폭주 → 씬 2개 GO 비활성화 + 빌더 재발 방지 + FullModel 전환 완료 (컴파일 검증 0 에러)
시각 디버거 : RetargetDebugVisualizer 추가 — 씬 재생성(빌더 메뉴) 후 사용 가능
다음 액션 : ① 고양이 리타겟 실기 Play 검증 (네발 자세 K4ABT 품질 핵심) ② worker2·3 복구 (물리 점검 + Stage2 대역 분리) ③ worker3 4번째 캘리브레이션 ④ M6 연출 UI 착수
StreamRoger — F:\DepthOcclusionAR · 문서 생성 2026-07-17 · 상세 SSOT: repo CLAUDE.md / roles.toml / 연구 보고서