애니메이션 애드온의 제작 #2

11.15

경직구간 설정. 충돌은 아니지만 충돌을 처리하기 위해 만들었다. 다른 기능과는 다르게 본 단위로 움직이므로 가장 마지막 단계에서 처리하는 편이 좋겠다. 원리는 단순한데, 시작과 끝의 보간을 없애 그래프를 평평하게 만든다. 완전히 자연스러운 애니메이션이라고 보기는 힘들지만, 설정된 값으로 최대한 쉽게 애니메이션을 만들 수 있다. 어려울 줄 알았는데, 의외로 쉽게 풀렸다. 오굳

첫프레임 보간비율을 추가. 어쩐지 여기 항목 점점 늘어난다(…) 이 값은 키를 물려줬을 때, 키를 미는 과정에서 0프레임에 키가 비는 현상을 보간해준다.

더불어 오일러와 쿼터니온 중 안쓰는 커브를 삭제하는 기능도 추가. 데이터가 좀 더 깔끔해졌다.

이제 루핑키를 처리할 수 있다.

그것까진 좋은데, 키가 너무 많다. 사용하는 키는 20프레임인데, 이를 만들기 위해 양쪽으로 40프레임씩이 더 붙어야 한다. 유니티가 이걸 어떻게 받아들이는지 확인해보자.

맙소사. 마이너스 프레임을 0으로 친다. 키 최적화 기능이 필요하다.

키 최적화는 단순히 앞뒤로 짜르면 되겠지 싶었는데, 키를 지우며 리스트가 동적으로 변해 오류를 냈다. 이를 해결하려면 키를 뒤에서부터 지워야 한다. for~in reverse()를 사용하면 된다. 이걸 알아내느라 한참 걸렸다.

캐릭터가 다리를 움직여 치마가 들리면 불규칙한 움직임이 일어난다. 회전 보간은 이럴 때 사용하기 위한 기능이다. 원래 계획에 있었던 것이지만, 구현은 예상보다 더 괜찮은 결과를 보여줬다. 흐뭇.

지금까지 한 것과, 앞으로 할 것들. 거..거의 끝나간다!

11.16

월드축 기준으로 붙이기는 어느 정도 원형을 보존해주기는 하지만, 약간 아쉬울 때가 많았다. 섞기를 만들자.

0.5비율로 섞었을 때

월드 0.7 : 로컬 0.3일 때

코드 리팩토링을 몇 번이나 한 보람이 있다. 흑흑. 뒤로 갈수록 구현이 쉬워진다.

이제 남은 건 이렇게 2개이다.

초기값으로 보간은 alt+r(초기값으로 되돌리기)이 너무 극단적이라 중간값을 쓰고 싶을 때 사용한다. 대략 1/3정도씩 줄어든다.

회전키는 사람손으로 부드럽게 잡기는 어렵다. 이걸 잘 처리하기 위해선 원형커브를 만들고 룩앳을 달아서 그걸 쫓도록 하는 아주 번거로운 과정을 거쳐야 하는데, 그냥 회전값에 sin, cos을 더하면 될 일 아닌가? 싶어서 러프하게 구현해봤더니 잘 된다. 해당 키는 8각을 그리는 키인데, 좀 더 부드러운 곡선을 원한다면 각을 늘려주면 된다. 좋아. 회전 프로퍼티를 넣어보자…싶었는데 타임오버. 오늘은 여기까지

11.17

생각보다 설정할 것들이 많아 카테고리를 따로 뺐다. 대부분 예상했던대로 잘 동작했으나, 계산을 오일러 기반으로 하고 있기 때문에 짐벌락 현상이 발생한다! 때때로 아주 과한 애니메이션에 부적합할 수 있다. 이걸 해결한 게 쿼터니온인데, 그건 컴터만 알아듣는 숫자고. 내가 할 수 있는 건 여기까지인 것 같다.

다음으로 할 일은 그룹본이 아닌 본에게 키를 복사하는 기능이다.

…는 enum만 추가하니 쉽게 됐다.

야호.

회전키 제작과 루프키 버그 수정. 또한 그룹본이 아닌 본에도 애니메이션을 줄 수 있도록 한다. 예상했던 기능들은 이제 모두 구현했다. 이제 미뤄왔던 애드온 기능을 추가하고 마무리 하면 되겠다.

오늘의 깨달음:

  • matrix_basis는 부모를 기준으로 한 상대적인 회전행렬을 리턴하지만, 이걸 오일러로 바꾸어 숫자를 조작한다고 해서 반드시 축대로 정확히 움직이는 것은 아니다. 아마도 오일러 공식 때문인 것으로 보인다.
  • 이를 해결하려면 bpy.ops.transform.rotate()를 사용해야 한다.

애니메이션 애드온의 제작 #2”의 2개의 생각

  1. 노약자님 블로그를 보다 보니 문득 달인의 가게가 생각나네요. 달인의 비법 레시피가 방송에 다 나오는데, ‘이거 이렇게 다 알려주셔도 괜찮은 거예요?’ 하면 ‘다 알려줘도 못 따라한다’는 그거… ㅎㅎ

댓글 남기기