With Modular Rig
새로 추가된 모듈러릭을 사용해 보다가,애니메이터가 아닌 사람들도 간단한 애니는 쉽게 만들수 있으면 좋겠다고 생각 했습니다.
그래서 애니메이션을 스크립트로 만들어 보려 합니다.
우선 모든 로코모션의 시작 애니메이션인 기본 대기 모션을 만들어 보겠습니다.
 |
ActorActionUtility생성 |
아웃라이너에서 실행 해야 하니,CreateAnimation이름의 액터액션유틸리티를 생성해 줍니다.
 |
커스텀 이벤트 |
커스텀 이벤트를 하나 생성 해 주고 call in editor 를 체크 해 줍니다.
인풋인자 두개를 추가 해 줍니다.스타트 프레임과 엔드 프레임 입니다.
 |
Script Actor Action |
시작과 끝을 알아야 하는 이유는,스크립트로 애니메이션을 만드는 방식이 pose to pose 애니메이션 제작 방식과 같기 때문 입니다.
시퀀서의 컨트롤릭 트랙을 가져와야 하니 아래와 같이 만들어 줍니다.
시퀀스에 요소들을 가져오고 그중 컨트롤릭 트랙을 가져옵니다.
 |
컨트롤릭의 파라미터 섹션을 가져와 변수로 저장해 줍니다.
|
 |
여기까지 내용을 함수로 만들어 준다. |
이제 키를 찍어 주면 됩니다.
 |
키애니메이션 작업 방식
|
컨트롤러 선택 - 키값 - 프레임 이동 - 키값 -프레임 이동 - 키값
이 과정을 자동화 해야 합니다.
골반 애니메이션으로 시작 해 보겠습니다.
 |
5개의 키포즈 프레임 |
이렇게 5개의 키포즈 프레임에 키포즈를 찍어줄 생각입니다.
우선 키를 찍어 보겠습니다.
Addkey 라는 함수를 하나 만들었습니다.
 |
AddKey 함수 |
섹션의 모든 채널을 가져오고 float 값의 채널에 0.0 값을 입력해 줍니다.
실행을 해 보면
0프레임에 모든 컨트롤러의 키가 찍힙니다.
이제 여기서 선별적인 키프레임 작업을 해야 합니다.
만약 내가 유니크한 이름의 컨트롤러를 만들었다면 이후 작업 부분에서 본인의 컨트롤러 이름을 사용 하면 됩니다.
저는 기본 생성된 이름 그대로 사용 합니다.
그럼 모든 채널에서 골반에 해당 하는 부분만 가져와서 원하는 값을 입력해 주면 내가 구현 하려 하는 기능이 만들어 지는 겁니다.
 |
body_ctrl |
body_ctrl 골반을 움직이는 컨트롤러의 이름입니다.
그리고 해당하는 채널 리스트는 아래와 같습니다.
body_ctrl.Location.Y , body_ctrl.Location.Z 이렇게 두개 채널에 키를 찍어야 합니다.
그냥 해 주면 되는데 함수를 범용으로 사용 하기 위해 수정을 좀 해주도록 하겠습니다.
인풋에 필요한 부분들을 추가 해 줍니다.
일단 지금 생각 나는건 이정도이니 더 필요한게 있으면 진행 하면서 추가 하도록 하겠습니다.
내가 찾는 컨트롤러가 맞는지 확인하고 맞다면 설정한 프레임에 설정한 값을 찍어주도록 합니다.
모듈러 릭의 이름은 컨트롤릭과 다릅니다.
 |
이런식으로 계층구조를 모두 포함 합니다. |
잘라서 필요한 부분만 사용 하면 됩니다.
이렇게 마지막 : 를 찾고 그 앞으로 모두 지워줍니다.
내가 가지고 있는 컨트롤러 이름에 + 로케이션x 를 더해주고 두 이름이 일치 하는지 비교 합니다.
만약 두 이름이 같으면 원하는 프레임에 원하는 값을 넣어줍니다.
50frame 에 location x 50 을 넣어 줬습니다.
정상적으로 작동 합니다.
그럼 이제 키프레임에 모두 키를 찍어 보겠습니다.
AddKey 함수를 범용으로 사용 하겠다고 생각은 하고 있는데, 각 컨트롤러 마다 프레임 위치는 통일 시킬수 있지만 할당 값은 달라야 합니다.
프레임 위치에 따라 값은 예측 가능 하니 일단 프레임을 배열로 만들어 줍니다.
여기서 인덱스0,인덱스4는 알고 있습니다.각각 스타트프레임과 엔드프레임이죠
엔드프레임을 반으로 나눠서 중간 프레임 인덱스2를 할당해 주고 중간 프레임을 반으로 나눠 인덱스 1을 만들어 줍니다.그리고 마지막으로 중간 프레임에 인덱스 1을 더해 인덱스3을 만들어 줍니다.
 |
이렇게 배열을 만들어줍니다.
|
키프레임 배열을 이렇게 루프로 돌려주면 내가 원하는 위치에 모두 키가 생성이 되겠죠
테스트 해 봅니다.
의도한대로 작동을 하고 있습니다.
내가 만드려는 골반 애니메이션을 다시 한번 정리 해 보겠습니다.
 |
타원형으로 움직이게
|
 |
일단 포즈를 만들어 봅니다. |
지저분한 부분을 정리 해 주겠습니다.
 |
인덱스에 따른 로케이션이나 로테이션 값을 사용해 보려 하니,인덱스도 아웃풋으로 빼줍니다.
|
AddKey 함수로 가서 로케이션Y,Z를 X와 같은 방법으로 추가 해 줍니다.
채널검색으로 로케이션Y,Z를 가져오는 겁니다.
그리고 Transform변수를 하나 생성 합니다.
이벤트 그래프로 돌아와서 아래와 같이 만들어 줍니다.
테스트 작업 입니다.
프레임 인덱스에 따라 pelvis transform의 z 로케이션 값을 설정 해 줍니다.
어떤 결과가 나오는지 봅시다.
포즈를 잡으면서 생긴 float값을 새로운 값으로 변경해 줘서 의도하지 않은 애니메이션이 만들어 지고 있습니다.
디폴트location.z 값이 -29.9입니다. 내가 원하는건 디폴트 값에서 위아래로 살짝 움직이는겁니다.
디폴트 값에 새로운 값을 더해주면 됩니다.
AddKey 함수에서 아래와 같이 수정해 줍니다.
X,Y,Z 모두 디폴트 값을 가져와 더해주는 방식으로 수정해 줍니다.
그리고 다시 테스트 해 봅니다.
의도대로 작동하고 있습니다.
(cos*D,sin*D) 를 컨트롤러의 axis 방향에 맞게 넣어줍니다. X,Z 입니다.
변수를 하나 추가해 줍니다.
추가된 변수 이름은 SizeOfPelvisMovement입니다,.
용도는 펠비스 움직임의 크기를 조절 하기 위해서 입니다.
이제 테스트 해 보겠습니다.
좋아요 잘 작동하고 있어요
키를 수동으로 지우는게 번거롭습니다.
키를 지우는 함수를 하나 만들줘야 겠습니다.
쉽게 봤는데 생각보다 오래 걸렸습니다.
 |
더 좋은 방법이 있다면 꼭 알려주세요! |
시작프레임부터 한프레임씩 키를찍고 지우고를 반복 해 주는 방식으로 만들었습니다.
현재까지 제가 알고 있는 가장 깔끔하게 키를 지울수 있는 방법입니다.
함수를 make frame array 앞에 넣어주고 테스트 해 보면
키는 잘 지워지고 있습니다.
거슬리는 부분이 하나 더 있죠? 루핑문제 입니다.
그래프로 보면 아래와 같습니다.
처음과 끝을 linear로 바꿔주면 그래프상으로 문제가 해결되죠.
키 생성후 수정 해 주는게 어렵지는 않지만 이부분도 자동화 해 보겠습니다.
그냥 처음 프레임과 마지막 프레임의 interpolation 을 linear로 만들어 주면 되겠죠
생각보다 StartFrame,EndFrame사용이 많아 변수로 뽑아 줬습니다.
해당 부분을 모두 수정해 주고 깔끔하게 정리 해 줬습니다.
AddKey 함수로 이동합니다.
로컬 변수를 하나 만들어 줍니다.
매크로도 하나 만들어 줍니다.
현재 프레임이 스타트 이거나 엔드이면 Linear 인터폴레이션을 아니면 Auto 인터폴레이션
그리고 만들어둔 매크로를 아래와 같이 연결 해 주고 로컬 변수도 연결 해 줍니다.
선택된 부분이 새로 만든 로컬변수와 매크로 입니다.
테스트 해 봅니다.
좋아요 완벽하진 않지만 아까보다 훨씬 자연스러운 루핑이 만들어 졌습니다.
골반 회전 방향을 바꿔 보겠습니다. X,Z를 바꿔줍니다. X에 sin*D Z에 cos*D
훨씬 좋아 졌습니다.
이렇게 진행 하겠습니다.Y축의 움직임도 있어야 겠습니다.
그리고 위아래 움직임보다 좌우 움직임을 더 크게 만들어 주겠습니다.
 |
Location.Z 에 들어가는 코사인 디그리 값을 Y에도 똑같이 넣어 줍니다. |
그리고 마지막에 Location.Z/Y 값을 이런 방식으로 수정해 줍니다.
좋아요, 이제 로테이션을 추가 해 봅니다.
어떻게 움직여야 할지 대충 생각 해 보고 대충 키를 잡아 보겠습니다.
 |
요런 느낌으로 |
사인 그래프 처럼 움직이면 될거 같습니다.
우선 AddKey 함수로 가서 Rotation 부분을 만들어 줍니다.
Location 만든걸 복사해서 Rotation 으로 바꿔주면 됩니다.
어렵지 않아요, 우선 로케이션을 하나 복사 해 줍니다.
그리고 이름 찾기 하던 부분을 수정 해 줍니다.
그리고 Location을 Rotation으로 바꿔줍니다.
그리고 연결해 줍니다.
이제 이벤트 그래프로 나가서 로테이션 값을 넣어 테스트 해 봅니다.
두번째 프레임과 4번째 프레임에 각각 50 -50 의 값을 넣어 좌우로 회전하는 모양을 만들어 볼 겁니다. Pelvis Transform의 Rotation 값을 Addkey 함수에 연결 해 주고 확인 해 봅시다.
좋아요 디폴트값을 더한 정확한 값이 들어왔습니다. 정상 작동 하고 있습니다.
그래프로 확인 해 보면 생각 했던 움직임이 만들어 졌습니다.
댓글
댓글 쓰기