- m_dataDescs null 체크 추가: SkipDataDescriptions=true 시 NatNet 스레드 크래시 방지
- m_dataDescs를 NatNet 콜백에서 로컬 변수로 캡처: UpdateDefinitions() 중 참조 교체 레이스 방지
- m_assetIdToNameCache 클리어를 락으로 보호: NatNet 스레드와의 동시 접근 방지
- _EnterFrameDataUpdateLock/_ExitFrameDataUpdateLock을 internal+Obsolete로 변경: 데드락 위험 차단
- OptitrackRawDataReceiver를 FillBoneSnapshot 패턴으로 변경: torn read 방지
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- 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>
- AvatarOutfitController: 의상 변경 시 NiloToon renderCharacter 토글 + VFX/SFX/컬러 플래시 연출
- TransformEffectPreset ScriptableObject 로 프리셋 공유
- 아바타별 isTransforming 플래그로 동시 변신 지원
- 의상 리스트 순서 변경 (▲▼) 기능
- Piloto Studio 파티클 번들 추가
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>