WWolves Den

Control Rig · 약 3분

발 높이 보간으로 스냅을 줄이기

지면 측정값과 포즈 적용값을 분리하고 프레임 시간과 상태 초기화를 고려해 흔들림을 줄입니다.

Wolfgadeok · 업데이트

측정값을 바로 적용하면 생기는 문제

발 아래 높이가 한 프레임 사이에 바뀌면 목표값을 그대로 대입한 발은 순간적으로 이동합니다. 보간 노드를 우회해 목표 오프셋을 바로 현재 오프셋에 연결하면 이런 스냅을 비교할 수 있습니다. 이 실험은 문제의 원인을 찾는 데 유용합니다. 다만 보간이 없어서 생긴 스냅과 잘못된 지형을 번갈아 맞혀 생긴 흔들림은 서로 다른 원인이므로 구분해야 합니다.

두 개의 상태를 둡니다. TargetOffset은 이번 추적이 원하는 높이이고 CurrentOffset은 실제로 포즈에 적용할 높이입니다. 매 평가에서 CurrentOffset을 TargetOffset 쪽으로 이동시킵니다. 상승과 하강 속도를 다르게 설정할 수도 있지만, 빠른 상승과 느린 하강이 모든 캐릭터의 걷기에 자연스러운 것은 아닙니다. 계단을 오르는 속도와 다리를 드는 애니메이션을 함께 보며 조율합니다.

오른발 목표 높이를 Alpha Interpolate로 보간해 적용 높이에 저장하는 그래프
목표 높이인 ZOffset_R_Target과 적용 높이인 ZOffset_R을 분리한 예입니다. 보간 속도 15는 예시 값이며, 실제 이동 속도와 프레임률에서 반응을 확인해 조정합니다. 이전 버전의 에디터 화면으로, 현재 버전과 메뉴 배치가 다를 수 있습니다. 이미지를 누르면 크게 볼 수 있습니다.

보간의 시간과 초기값

매 프레임 고정된 비율을 적용하는 방식은 프레임률에 따라 반응 속도가 달라질 수 있습니다. 예를 들어 매번 10%씩 접근하면 120fps에서 30fps보다 훨씬 자주 보정합니다. 사용 중인 노드가 Delta Time을 어떻게 적용하는지 확인하고 같은 이동을 여러 프레임률에서 비교합니다. 보간 계수를 직접 계산할 경우에는 시간 기반 감쇠를 하나의 방식으로 일관되게 적용합니다.

새로 생성된 캐릭터가 이미 높은 턱 위에 서 있을 때 0에서 서서히 올라가게 할지, 최초 유효값으로 바로 초기화할지는 연출 선택입니다. 순간이동, 메시 교체, 리그 재초기화에서는 이전 발 높이를 가져오지 않도록 상태를 리셋해야 합니다. 이전 맵의 오프셋을 새 위치에서 이어 쓰면 추적 자체는 맞더라도 첫 순간에 다리가 떨릴 수 있습니다.

부드러움과 정확성 사이의 검증

보간이 너무 느리면 발이 표면을 뚫고 지나가거나 공중에서 늦게 내려옵니다. 충분히 부드럽다는 이유만으로 끝내지 말고 실제 지면과의 최대 오차도 봅니다. 보간 전후 값을 그래프로 기록하면 원래 입력이 튀는지, 지연만 과도한지 판단할 수 있습니다. 추적 반지름, 지형 충돌, IK 가중치가 잘못된 상태에서 보간을 세게 걸어 증상을 숨기지 않습니다.

  1. 보간을 끈 복제 그래프로 원시 목표값을 확인합니다.
  2. 평지·턱·경사에서 상승과 하강을 따로 조정합니다.
  3. 낮은 프레임률과 높은 프레임률에서 도달 시간을 비교합니다.
  4. 순간이동과 점프 후 착지에서 상태가 적절히 초기화되는지 확인합니다.

참고 자료