- SetProperty 원격 명령을 최초 연결에서만 전송, 재연결 시 스킵
- 정의 재조회(UpdateDefinitions) 쿨다운 5초→15초, 최대 10회 제한
- DrawMarkers/DrawTMarkersetMarkers/DrawCameras/DrawForcePlates 락 범위 축소
- RecordOnPlay 재연결 루프에서 녹화 시작/종료 스킵, 성공 후에만 재시작
- SubscribeMarkers 실패 시 10초 쿨다운 (매 프레임 재시도 방지)
- OnNatNetFrameReceived 내 GetSkeletonDefinitionById를 본 루프 밖으로 이동
- GetMarkerName assetID→이름 캐시 도입 (3중 선형 탐색 제거)
- OptitrackRigidBody Update+OnBeforeRender 이중 NatNet 호출 제거 (캐싱)
- OptitrackSkeletonAnimator_Mingle 스켈레톤 체크 주기 0.1초→1초+지수 백오프
- ToggleRecording 녹화 상태 추적으로 2중 명령 제거
- ResetStreamingSubscriptions 중복 명령 축소
- GetLatestTMarkMarkerStates 디버그 로그 잔재 제거
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- FilterStrength 열거형 및 관련 필드/메서드 전체 삭제
- Update() two-pass 구조를 single-pass로 단순화
- 에디터 인스펙터의 필터 강도 UI 제거
- 프레임 보간 및 어깨 증폭 기능은 유지
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- ShoulderCorrectionFunction.cs 삭제
- CustomRetargetingScript, 에디터, 리모트 컨트롤러, 대시보드에서 참조 전부 제거
- OptitrackSkeletonAnimator_Mingle에 shoulderAmplify 추가 (기본값 2x)
- rest pose 대비 delta를 SlerpUnclamped로 증폭
- 상완 역보정으로 손 위치 보존
- 소스 스켈레톤 단에서 어깨 과장 → 리타게팅 IK가 팔 자동 보정
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
OptiTrack 필터:
- FilterStrength enum (Off/Low/Medium/High/Custom) + 인스펙터 버튼 UI
- two-pass 업데이트: raw 데이터로 IK 포인트 월드 위치 캡처 후 필터 적용
- TryGetRawWorldPosition() API로 필터 전 위치 제공 (접지력 보존)
- 패킷 녹화 기능 (enableRecording 토글, 전체 본 CSV 기록)
TwoBoneIKSolver:
- FK/IK Slerp 블렌딩: positionWeight 0→1 전환 시 튀지 않음
- ComputeKneePosFromSource rejection 벡터에 프레임 회전 적용 (팔 방향 보정)
- ComputeKneePosFromBendGoal rejection 기반으로 재작성 (팔꿈치 힌트 방향 정확도 개선)
CustomRetargetingScript:
- 발/손 IK 타겟에 raw 위치 사용 (필터 스무딩 접지력 저하 방지)
- 팔 소스 참조 제거 (bendGoal 방식이 팔에 더 적합)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- OptitrackStreamingClient.FillBoneSnapshot: L/R 쌍 본은 위치 유지 + 회전 YZ반사 후 스왑, 중심 본(Hip/척추 등)은 위치 X반전 + 회전 YZ반사
- OptitrackStreamingClient.GetLatestRigidBodyState: 리짓바디 위치·회전 YZ반사 (기존)
- GetOrBuildMirrorBoneIdMap: SkeletonName_BoneName 접두사 형식 지원
- 마커/TMarkerset 마커/TMarkerset BonePoses 미러 적용
- OptitrackSkeletonAnimator_Mingle: MirrorMode 토글 시 1€ 필터 상태 자동 리셋
- 월드 공간 미러 코드(ApplyWorldSpaceMirror 등) 제거, 데이터 수신 레벨에서 처리
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- FillBoneSnapshot의 스켈레톤 미러 로직 제거
(로컬 좌표 + 좌우 본 교체 방식은 부모 본 좌표계 차이로 꼬임 발생)
- OptitrackSkeletonAnimator_Mingle에 ApplyWorldSpaceMirror() 추가
- 본 데이터 적용 후 월드 공간에서 전체 포즈 캐시 → 미러 적용
- L/R 본은 상대방 월드 포즈로 교체 + YZ 평면 반사
- 대칭 본은 자기 포즈에 YZ 평면 반사 적용
- 로컬 축 컨벤션 독립적 → 어떤 스켈레톤에서도 정확히 동작
- RigidBody 미러는 기존 GetLatestRigidBodyState() 방식 유지
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>