앨리스의 세컨더리 애니메이션

4.10

세컨더리 애니메이션이란 본체의 애니메이션에 따라 부차적으로 필요한 애니메이션을 뜻한다. 캐릭터가 몸을 움직였을 때 따라오는 망토의 애니메이션이 대표적인 세컨더리 애니메이션이다. 애니메이터들이 매우 싫어하는 작업이다.

이를 위해 프로젝트 작업 초반에 세컨더리 애니메이션 전용 애드온을 만들었었는데, 역시 고장났다(…)

다행히 큰 고장은 아니었다.

경직은 충돌을 수동으로 처리하기 위해 만든 기능이다. 치마가 저렇게 뚫리는 걸 해결하기 위해 만들어둔 기능이었지만, 전혀 도움이 되지 않는다. 역시 이론과 실전은 다르다.

어떻게 할 지 고민하던 끝에 이런걸 찾았다.

메쉬에 오브젝트를 스냅해주는 것이다. 이걸 다리에 스냅하고, 본이 포인트를 보게 하면…잘 쓰면 뭔가 될 것 같은데..

설계 중… 완벽하진 않지만, 어쨌거나 본을 ‘밖으로 끄집어 내는 일’은 가능해 보인다.

하지만 롤(Roll)이 고려되지 않는다는 단점이 있다.

그른데 트랙 투를 이렇게 하면 어찌 될 듯…?

구상은 끝났다. 이제 만들어보자. 작업을 하다보니 그룹본 보간 기능이 좌/우 한 쪽에만 적용되는 옵션이 있으면 좋겠다.

그럭저럭 해결은 됐지만, 몇가지 기능이 더 필요하다.

  • 몸에 본을 붙일 때의 이격치
  • 경직구간 기능 제거

4.11

러프한 구현. 오퍼레이터를 사용하기 때문에 속도가 꽤 느리다! 실전은 역시 이론과 다른 법이지만, 본이 루트에 가까울 수록 더 괜찮은 결과를 보여줬다. 일단 계산을 최소화하기 위해 최적화 코드를 넣고, 보간법을 기존과 다르게 해주어야 할 것 같다.

계산 시 불필요한 걸 걸러줬더니 60초 -> 15초로 단축됐다! 상황에 따라 다르긴 하지만, 충분히 사용할 수 있을 것 같다.

최근 블렌더 사용 시에 오토세이브가 작동하지 않는 문제가 있었다. 처음엔 대수롭지 않게 생각하다가 몇 번 작업을 날리고 나니 생각이 바뀌었다. 대체 왜 그래…

몇몇 포럼을 뒤적여보니 모달연산자를 실행할 경우 오토세이브가 작동하지 않는다고 되어 있다.

https://docs.blender.org/api/current/bpy.types.Operator.html#modal-execution

뭔 소린지 하나도 모르겠지만, 애드온이 계속해서 이벤트를 체크하면 문제를 일으키는 것 같다. 시간을 리셋하는 걸까… 여튼 이같은 애드온을 2개 알고 있다. Auto Reload와 KitBash3D이다. 범인은 KitBash3D였다. 외부프로그램과 계속 통신을 하느라 모달연산자를 실행하는 모양이다.

이제는 사용하지도 않는 애드온 때문에 골머리를 썩었다. 여튼 이제 잘 작동한다. 마음의 안정이 찾아왔다.

그룹본 보간하기는 공식을 바꿔야 한다. 컬리전을 계산하며 본이 벌어지는 경우, 이를 보완해주기 위한 기능이다. 보기엔 쉬운데 저게 참 어려웠다. 화려한 것은 모두 잡기술이다. 정말 중요한 것은 보기엔 단순해도 구현난이도가 무척 높을 때가 많다.

기본은 이것이다. 이제 가운데 본을 보간하면

그 중간으로 움직인다.

예정했던 기능은 완료. 기능은 이상이 없는데, 칼주름이라 뾰족한 부분이 파묻히는 문제가 있다. 이를 수동으로 끄집어내어주는 기능이 좀 더 필요할 것 같다.

기능은 거의 완성됐지만, 몇가지 편의기능이 더 있으면 좋겠다. 오늘은 타임오버.

4.12

보간 도중 본이 안쪽으로 파고드는 버그가 있었다.

이 버그는 충돌알고리즘으로 사용했던 shrink wrap제약조건이 문제가 된다. 시스템이 갑옷 아랫쪽에 튀어나온 단면을 충돌영역으로 잡음으로서 원치 않는 오류를 내고 있었다. 컬리전은 맨몸 그 자체여야 할 듯…?

애드온은 막바지 테스트 단계. 여기에 적지는 않았지만 버그가 무척이나 많았다. 이제 없겠지. 없어야 해…!

애드온은 이제 정말 길어졌다. 많이도 만들었어.

애드온 완성!…일까?

댓글 남기기