상세 컨텐츠

본문 제목

Hiking: 8주차 프로젝트 마무리

Computer Graphics/Hiking

by Banjosh 2025. 5. 27. 16:07

본문

Hiking 프로젝트는 8주동안 진행되기 위한 프로젝트였으며 여기서 마무리를 지으려 한다.

우선 지난주에 비해 추가된 기능들이다.

 

Root motion을 사용하여 Distance Matching 구현

 기존엔 place in 애니메이션을 이용하여 속도를 인위적으로 만들어냈었다. 따라서 애니메이션과 움직이는 속도가 동기화되지 않아 부자연스러운 부분이 발생하였고 Root motion의 움직임으로 캐릭터를 움직이므로서 애니메이션과 움직이는 거리를 동기화시켰다.

 

발 앞으로 진행시 출발과 도착 normal을 기반으로 자연스럽게 보간

기존엔 발을 앞으로 swing하며 진행하는 경우 현재 바로 아래 위치한 지형의 normal에 맞게 발목 각도를 조정해 부자연스러운 움직임이 발생하였다.

따라서 출발 위치의 지면 normal에 맞는 발목 각도로 출발하여 평지에서의 발목 각도로 변화한 후 도착 위치의 지면 normal에 맞는 발목 각도로 변화시켜 자연스러운 움직임을 만들었다.

 

다음 step 위치의 지면의 경사가 너무 가파른 경우 보폭을 줄여 step 계산

기존은 애니메이션에 맞게 다음 step 위치를 계산하였다. 하지만 다음 step의 위치가 너무 가파른 경사인 경우 부자연스러운 발목 꺾임이 발생하기 때문에 이를 피하기 위해 최대한 경사가 낮은 곳으로 다음 step을 정하였다. 따라서 다음 step의 위치가 부적절한 경우 보폭을 줄여서 움직이게 만들었다.

 

방향 전환 오류 수정

기존엔 각도가 특정 범위 이상 변경된 순간에만 다음 step 위치를 바꿨다. 하지만 이 오차때문에 지면의 normal이 제대로 측정되지 않는 경우가 많아 각도가 조금이라도 변하면 다음 step 위치를 다시 구하도록 만들었다.

 

이번주는 마지막이니 위 사항들이 적용된 다양한 지형에서의 움직임을 전부 영상으로 찍어 보았다.

 

경사로 

 

계단 오르기

 

작은 언덕

 

큰 언덕

 

랜덤 경사 지형

 

이렇듯 이제 왠만한 지형에서는 어느 정도 잘 걸어다니는 것을 볼 수 있다.

 

하지만 당연히 해결하지 못한 오류들은 있기 마련이다.

 

수렴 실패

Jacobian matrix로 수렴시키는 과정에서 사실상 발목과 발가락 각도는 지면의 normal과 애니메이션 정보를 통해 고정값으로 들어가고, 고관절과 무릎의 각도만 변경하게 된다. 이 과정에서 고관절 -> endeffector와 고관절 -> target의 벡터가 일치하고 무릎 -> endeffector와 무릎 -> target의 벡터가 일치하는 경우 Jacobian은 고관절, 무릎의 각도 변화를 시키지 않고 수렴하지 못하는 상황에 빠지게 된다. 즉 제자리에서 자세가 멈춰버린다. 

위 사진을 보면 오른발쪽 지면에 그려져있는 빨간 점이  target이고 연두색 선으로 이어져있는 Bone이 endeffector이다. 위에서 설명한 상황이 발생해 현재 위치에서 수렴하지 못하고 멈춰있는 것을 볼 수 있다.

 

발목 각도 문제

발목 각도에도 문제가 있다. 발목이 최대한 하늘 방향인 world의 +y방향을 보게 만들려했는데, 실제 구현은 발목의 local 좌표계를 기준으로 구현하였다. 따라서  local 좌표계 기준의 +y를 바라보고 있다. 대부분 local의 +y와 world의 +y가 비슷하기에 문제가 없어 보이기도 하지만 발을 기울인 경우 +y가 살짝 비스듬히 기울어 다음과 같이 발목이 하늘을 보지 않는 경우가 발생한다.

이 경우 수렴을 하였음에도 발목이 지면의 각도와 일치하지 않는 상황이 발생한 것이다.

위 사진에서는 왼발의 local +y방향으로 발 각도를 맞춰 지면과 살짝 어긋나있는 것을 볼 수 있다.

 

 

 

이러한 문제들이 있음에도 프로젝트는 정해놓은 8주가 지난 지금 마무리 지으려한다.

그 이유는 프로젝트 후기에 적어보도록 하겠다.

관련글 더보기