ControlRig이란

언리얼에서 스켈레탈 메시(본 구조)를 실시간으로 조작하거나 변형할 수 있게 해주는 리깅 시스템

 

목표

- 각 발의 본(foot_l, foot_r)기준으로 아래 방향 Trace -> 히트 z높이를 얻는다.

- 그 높이를 컨트롤(컨트롤 본)로 전달 -> Modify Transforms로 컨트롤 이동 -> 본이 따라감

- 마지막에 FullBodyIK로 사슬을 풀어 발이 바닥에  "짚도록" 계산

- 골반(pelvis)은 좌우 발 컨트롤의 더 낮은 z에 맞춰 살짝 내려 안정적인 무게중심을 만든다.

 

사용방법

1. ControlRig 생성

2. ImportHierarchy버튼을 누르면 어떤 매쉬를 적용할 것인지 선택 할 수 있다.

3. Foot Trace 함수 추가

- Name으로 'foot_l'을 세팅한다.

- Input에 Foot bone을 추가하고, 타입을 Rig Element Key로 변경한다.

- Rig Element Key란 : 계층의 항목(본/컨트롤/커브)을 타입 + 이름으로 식별하는 키

- Get Transform Bone :  (이름으로도 가져 올 수 있다.)

- FootBone으로부터 z값을 위에서 아래로 Trace처리

 

 

- Draw Line : Debug Line 확인

'foot_l' 부터 Trace처리 된 모습

 

4. ABP 적용

내 프로젝트 기준 ABP_Player에 마지막 Output 처리 전에 해당 ControlRig 노드를 추가 해준다.

- 이렇게하면 에디터 실행 한 후 디버깅이 가능하다.

콘솔 명령어 :  a.AnimNode.ControlRig.Debug 1

 

5. Trace된 Z 위치 (foot_l, foot_r)

6. Alpha Interpolate 적용 : 스무스하게

7. 컨트롤 : 본에 위치를 지정해 놓고 본에 위치를 바꾸기용

- Bone 위치 가져오기 : 방금 생성한 Control Bone으로 생성한 본에 위치를 가져올 수 가 있다.

- SetTransform으로 Bone 위치를 바꾼다.

- Modify Trasnforms을 이용해 컨트롤에 위치를 변경한다. : trace된 위치로 그러면 Bone이 따라 오니까.

 

컨트롤에 위치를 통해 Bone이 어디로 움직여야 할 곳인지 알 수 있다.

 

8. IK적용 

- FullBodyIk : 

- Root는 pelvis

- 앞서 구한 컨트롤 위치로 IK적용한다.

- Settings -> Root behavior : Pint To Input 처리

9. pelvis 

- 지금까지 작업만으로 끝나지 않는다. 결국 골반 위치도 변경해줘야한다.
- 골반위치는 Trace된 왼쪽 컨트롤과 오른쪽 컨틀롤중에 값이 더 작은 z위치로 설정해준다.

- pelvis 위치 적용

 

구현 완료

 

추가로

- 특수한 행동 :점프,기어다니기 중에서는 IK로직이 돌지 않도록 한다.

+ Recent posts