Fix : 필터 로직 수정
This commit is contained in:
parent
6793635c7c
commit
8a6af1eae8
@ -36,12 +36,16 @@ public class OptitrackSkeletonAnimator_Mingle : MonoBehaviour
|
||||
[Header("본 1€ 필터 (속도 적응형 저역통과)")]
|
||||
[Tooltip("활성화 시 빠른 움직임은 그대로, 정지/느린 움직임의 노이즈를 제거합니다.\n단순 EMA보다 모션 보존이 훨씬 우수합니다.")]
|
||||
public bool enableBoneFilter = true;
|
||||
[Tooltip("최소 차단 주파수 (Hz). 낮을수록 정지 시 노이즈 제거 강화. 권장: 1~3 Hz")]
|
||||
[Tooltip("최소 차단 주파수 (Hz). 정지 시 노이즈 제거 강도. 낮을수록 강함. 권장: 2~4 Hz")]
|
||||
[Range(0.1f, 10f)]
|
||||
public float filterMinCutoff = 3.0f;
|
||||
[Tooltip("속도 계수. 높을수록 빠른 움직임 시 지연 감소. 권장: 0.3~1.0")]
|
||||
[Tooltip("속도 계수. 빠른 동작에서 cutoff 상승 속도. 높을수록 지연 감소. 권장: 0.5~2.0")]
|
||||
[Range(0f, 5f)]
|
||||
public float filterBeta = 1.5f;
|
||||
[Tooltip("최대 차단 주파수 상한 (Hz). 빠른 동작에서도 이 이상 주파수는 항상 제거됩니다.\n" +
|
||||
"MagicaCloth2 지터가 빠른 동작에서 발생하면 낮추세요. 권장: 10~20 Hz")]
|
||||
[Range(5f, 120f)]
|
||||
public float filterMaxCutoff = 15.0f;
|
||||
|
||||
private OptitrackSkeletonDefinition m_skeletonDef;
|
||||
private string previousSkeletonName;
|
||||
@ -449,8 +453,8 @@ public class OptitrackSkeletonAnimator_Mingle : MonoBehaviour
|
||||
float dAlpha = OE_Alpha(k_DCutoff, dt);
|
||||
float filtDeriv = s.dOriMag + dAlpha * (speed - s.dOriMag);
|
||||
|
||||
// 적응 cutoff: 빠르면 cutoff 상승
|
||||
float cutoff = filterMinCutoff + filterBeta * filtDeriv;
|
||||
// 적응 cutoff: 빠르면 cutoff 상승, 단 maxCutoff 이상은 항상 제거
|
||||
float cutoff = Mathf.Min(filterMinCutoff + filterBeta * filtDeriv, filterMaxCutoff);
|
||||
float alpha = OE_Alpha(cutoff, dt);
|
||||
Quaternion filtered = Quaternion.Slerp(s.prevOri, raw, alpha);
|
||||
|
||||
@ -478,7 +482,7 @@ public class OptitrackSkeletonAnimator_Mingle : MonoBehaviour
|
||||
float dAlpha = OE_Alpha(k_DCutoff, dt);
|
||||
float filtDeriv = s.dPosMag + dAlpha * (speed - s.dPosMag);
|
||||
|
||||
float cutoff = filterMinCutoff + filterBeta * filtDeriv;
|
||||
float cutoff = Mathf.Min(filterMinCutoff + filterBeta * filtDeriv, filterMaxCutoff);
|
||||
float alpha = OE_Alpha(cutoff, dt);
|
||||
Vector3 filtered = Vector3.Lerp(s.prevPos, raw, alpha);
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user