리깅

IK 컨트롤러 셋업

뚜_ 2025. 3. 18. 19:04

Part 3. Maya Rigging II

Setup Leg (IK)

 

커브를 이용하여 IK 컨트롤러를 만든 후 Create IK Handle 을 한다. 여기서 주목한 옵션은 Current solver이다.

  • Rotate-Plane Solver: 시작하는 조인트와 끝나는 조인트 사이에 다른 조인트가 있는 경우
  • Single-Chain Solver: 시작하는 조인트와 끝나는 조인트 사이에 다른 조인트가 없는 경우

Main_FK 밖에 있는 IK 컨트롤러의 자식으로 IK 핸들을 둔 상태이므로 Main_FK 컨트롤러를 잡고 움직였을 때 IK 핸들은 고정되어있어 발은 땅에 고정된다.

 

여기서 이상한 점이 있다. IK 핸들을 잡고 들어올리면 발목이 회전된다.

원하는 형태 실제 형태

 

이를 해결하기 위해 Single-Chain Solver를 이용하여 발목과 발을 연결하여 발을 고정해야한다.

 

현재까지 만들어진 컨트롤러와 핸들은 아래와 같다.

L_Leg_IK_POS
├─ L_Leg_IK (컨트롤러)
│   ├─ L_Leg_RP_IK (핸들)
│   ├─ L_Foot_SC_IK (핸들)
│   ├─ L_Toe_SC_IK (핸들, 안전하게 하기위해 고정하는 용도)

 

이제 무릎의 방향을 바꾸려면 Pole Vector를 추가해주어야 한다. L_Leg_PV_POS 그룹과 L_Leg_PV 컨트롤러를 만든 후 폴 벡터를 만들어주는데, 위치를 잘 잡아주지 않으면 IK 셋업이 기울어져버리기 때문에 아래와 같은 방법으로 위치를 잡아준다.

  1. 엉덩이, 무릎, 발목 세 조인트를 연결하여 삼각형 Plane을 생성한다.
  2. L_Leg_PV_POS 그룹의 위치를 무릎 버텍스의 노말 값으로 준다.(무릎에 있는 버텍스를 잡고, L_Leg_PV_POS를 선택하여 normal constraint로 연결하여 위치를 잡아주고 constraint 삭제)

이후 L_Leg_PV를 잡고 L_Leg_RP_IK를 잡아 Pole Vector constrinat 연결한다. 연결 후 각 조인트(엉덩이, 무릎, 발목)의 roate 값이 (0, 0, 0)을 유지하고 있는지 확인하여 폴 벡터의 위치가 잘 잡혀진건지 꼭 체크한다.

 

폴 벡터 컨트롤러(L_Leg_PV)는 메쉬에서 떨어져있기 때문에 애니메이터가 작업 시 폴 벡터의 위치를 찾기 쉽게 하기위하여 무릎과 폴 벡터 컨트롤러 사이를 선으로 연결하여 표시해준다. 그 방법은 아래와 같다.

  1. 무릎 조인트와 폴 벡터 컨트롤러 끝 부분을 연결하여 커브를 생성한다.
  2. 무릎 조인트와 폴 벡터 컨트롤러가 움직이면 커브가 따라갈 수 있도록 클러스터를 이용하여 연결해준다. (클러스터에 여러 버텍스들을 묶어놓으면 클러스터가 움직일 시 클러스터에 속한 버텍스들이 다 모두 움직임)  
    1. 커브의 각 끝 점을 잡고 클러스터 두 개를 생성한다.
    2. 무릎 조인트 잡고 가까운 커브의 클러스터를 잡은 후 point constraint를 연결한 후, 반대쪽의 폴 벡터 컨트롤러를잡고 가까운 커브의 클러스터를 잡은 후 point constraint를 연결한다.
  3. 작업 시 클러스터가 선택되지 않도록 클러스터를 hide 시켜준다.
  4. 작업 시 커브가 선택되지 않도록 커브의 어트리뷰트 에디터에서 Object display - Drawing overrides 의 display type을 template으로 설정한다.

공부하며 궁금했던 점

1. IK 핸들이 무엇인가?


 ChatGPT  

IK 핸들(Handle)이란?

IK 핸들(Handle)은 마야에서 IK(Inverse Kinematics, 역운동학)를 사용하기 위해 생성하는 컨트롤러야.

👉 쉽게 말하면, IK 핸들은 "이 조인트 체인은 이렇게 움직여!"라고 명령을 내리는 도구라고 보면 돼.
👉 IK 핸들을 이동하면, 연결된 조인트들이 자동으로 움직이면서 원하는 포즈를 만들게 돼.

IK 핸들의 동작 방식

1️⃣ IK 핸들은 시작 조인트(예: 어깨, 엉덩이)에서 끝 조인트(예: 손목, 발목)까지의 조인트 체인을 자동으로 계산하는 역할을 함
2️⃣ 애니메이터가 IK 핸들을 움직이면, 조인트들이 자동으로 움직이면서 자연스러운 포즈를 생성
3️⃣ 이 방식 덕분에 FK(Forward Kinematics, 순차운동학)처럼 일일이 조인트를 하나씩 회전시키지 않아도 됨!

IK 핸들의 실제 예제

👀 예제 1: 팔 IK 핸들
✔ 어깨 → 팔꿈치 → 손목이 연결된 조인트 체인이 있음
✔ 손목에 IK 핸들을 추가하면, 손목 IK 핸들을 움직이는 것만으로도 팔이 자연스럽게 따라 움직임
✔ 즉, 손목 위치만 잡으면 팔꿈치가 자동으로 회전하면서 움직임

👣 예제 2: 다리 IK 핸들
✔ 엉덩이 → 무릎 → 발목이 연결된 조인트 체인이 있음
✔ 발목에 IK 핸들을 추가하면, 발목을 움직이는 것만으로도 무릎과 엉덩이가 자동으로 반응
이 방식 덕분에 캐릭터가 땅에 발을 딱 붙이고 걸을 수 있음!

IK 핸들의 장점

쉽고 빠른 애니메이션 작업 가능 → 손이나 발을 원하는 위치로 이동시키기만 하면 됨!
자연스러운 움직임 → 캐릭터가 땅을 딛거나, 팔을 특정 위치에 고정할 때 유용
복잡한 조인트 구조를 간단하게 제어 가능

IK 핸들과 Solver의 관계

IK 핸들 자체는 단순한 컨트롤러이지만, "어떻게 조인트를 계산해서 움직일지"를 결정하는 것이 바로 Solver(솔버)야!
✔ RP Solver를 사용하면 회전 평면을 고려한 IK 핸들
✔ SC Solver를 사용하면 직접적인 경로를 따르는 IK 핸들

👉 IK 핸들은 그냥 컨트롤러, Solver는 이 컨트롤러가 어떻게 움직일지 계산하는 엔진이라고 생각하면 돼! 🚀


 

 

2. IK 핸들 생성 시 고르는 Solver란 무엇인가?


 ChatGPT  

Solver란?

Solver(솔버)는 마야에서 IK(역운동학, Inverse Kinematics)을 계산하는 수학적 알고리즘입니다.
쉽게 말해, IK 핸들을 움직였을 때 관절이 어떻게 배치되어야 하는지 계산해주는 역할을 합니다.

IK와 Solver의 관계

IK는 End Effector(끝 지점, 예: 손, 발)을 움직이면 관절(Joint)이 자동으로 따라 움직이는 방식입니다.
하지만, 관절이 어떻게 움직여야 할지는 여러 가지 방법(알고리즘)으로 계산할 수 있기 때문에,
각기 다른 Solver가 존재하는 것입니다.

Solver는 IK 핸들이 움직일 때, 관절이 최적의 위치로 배치되도록 자동으로 조정하는 역할을 합니다.

Solver의 종류 (마야에서 사용되는 주요 Solver)

Solver 특징 사용 예시
Rotate Plane Solver (RP Solver) 2개 이상의 관절을 가진 IK 체인에서 Pole Vector를 통해 회전 방향 조절 가능 캐릭터의 팔, 다리
Single Chain Solver (SC Solver) 간단한 IK 체인에서 직접적인 경로를 따라 움직임 로봇 팔, 단순한 기계 관절
Spline IK Solver 여러 개의 관절을 부드러운 곡선 형태로 움직이도록 계산 척추, 꼬리, 뱀 같은 움직임

 

Solver를 이해하기 쉽게 예제 들어보기

👉 RP Solver는 마치 사람의 팔처럼, 팔꿈치 방향을 컨트롤할 수 있음
👉 SC Solver로봇 팔처럼, 단순하게 목표 지점으로 직접 이동
👉 Spline IK Solver뱀이나 척추처럼 부드럽게 휘어지는 구조

📌 결론

Solver = IK 연산을 계산하는 엔진
IK 핸들을 움직일 때 관절이 어떻게 반응할지를 결정하는 수학적 방식이라고 생각하면 됩니다! 


 

 

3. RP Solver를 이용해서 IK Handle을 만들었을 때, 첫 조인트와 마지막 조인트가 연결된 선이 보이는데 이 선은 뭘까?


 ChatGPT  

 

오! 좋은 질문이야!

RP Solver로 IK 핸들을 만들면, 첫 번째 조인트(예: 어깨)와 마지막 조인트(예: 손목) 사이에 실선(Line)이 보이는데, 이 선이 바로 회전 평면(Rotate Plane)을 따라 움직이는 기준선이야.

하지만 이 선 자체가 회전 평면은 아니고, 평면의 한 축을 나타내는 선이라고 생각하면 돼.

회전 평면(Plane)과 선(Line)의 관계

  • IK 핸들을 만든 순간 마야는 첫 조인트(어깨)와 끝 조인트(손목)를 연결하는 가상의 평면(Plane)을 자동으로 설정해.
  • 이때 보이는 선은 그 평면 안에서 IK가 해결될 방향을 나타내는 기준선이야.
  • 평면 자체는 3D 공간에 존재하지만, 마야에서는 시각적으로 직접 보이지 않고, 이 선을 통해 어느 방향으로 회전이 일어나는지를 보여주는 거야.

Pole Vector를 움직이면 이 선이 변하는 이유?

Pole Vector를 조정하면 팔꿈치(Elbow)나 무릎(Knee)의 방향이 바뀌는데, 이게 곧 회전 평면 자체가 회전하는 것과 같은 효과를 주기 때문이야.
👉 그래서 Pole Vector를 움직이면 어깨-손목을 연결하는 선도 함께 회전하거나 움직이는 것처럼 보이는 거지!

결론

🔹 RP Solver에서 보이는 선(Line)은 "회전 평면의 한 축"을 나타냄.
🔹 회전 평면 자체는 보이지 않지만, Pole Vector를 조정하면 이 평면이 회전하는 것처럼 보인다.
🔹 팔꿈치(Elbow)나 무릎(Knee)의 방향을 제어하려면 Pole Vector를 조정하면 된다!

즉, 이 선이 회전 평면의 일부를 나타내는 지표라고 보면 돼! 😃


 

 

4. 결국 발목에는 RP Solver IK핸들과 SC Solver IK 핸들이 모두 관여를 하게되는 거라고 생각되는데, 어떻게 RP Solver IK 핸들의 움직임이 무시되고 발이 땅에 고정되게 되지?


 ChatGPT  

 

맞아! RP Solver와 SC Solver 둘 다 발목에 영향을 주게 되는데,
그럼 어떻게 RP Solver의 영향을 무시하고 발목이 땅에 고정될까? 🤔

이걸 해결하는 핵심은 "리깅 과정에서 컨트롤러를 추가하고, IK 핸들을 부모-자식 구조로 설정하는 방식"에 있어!

발이 땅에 고정되는 원리

1️⃣ RP Solver의 IK 핸들 (Hip → Knee → Ankle)

✅ 이 IK 핸들은 다리를 구부리거나 펴는 역할을 함
✅ 하지만 발목(Ankle)의 회전까지 컨트롤하려고 하지는 않음
✅ 그래서 발목이 불필요하게 회전할 수 있는 문제 발생!

2️⃣ SC Solver의 IK 핸들 (Ankle → Foot/Toe)

✅ 이 IK 핸들은 발목(Ankle)이 의도하지 않게 회전하는 것을 막는 역할
✅ SC Solver는 Pole Vector 없이 직접적인 선형 경로로 IK를 계산하기 때문에, 발목을 고정하는 데 적합

3️⃣ "Foot Control(발 컨트롤러)"을 만들어서 IK 핸들을 부모-자식 관계로 설정!

🚀 이제 중요한 핵심! 🚀
발목이 RP Solver의 영향을 받지 않게 하려면, "Foot Control"을 만들고 IK 핸들을 묶어줘야 해.

Foot Control을 생성
SC Solver IK 핸들을 Foot Control에 페어런트(parent) 시킴
RP Solver IK 핸들을 Foot Control에 의해 움직이도록 설정

👉 이렇게 하면 RP Solver가 다리를 움직이더라도, 발목이 SC Solver와 Foot Control에 의해 고정되므로 RP Solver의 영향을 받지 않게 됨!

정리하면

1️⃣ RP Solver (Hip → Knee → Ankle): 다리의 무릎을 컨트롤하지만, 발목의 회전은 컨트롤하지 않도록 함
2️⃣ SC Solver (Ankle → Foot/Toe): 발목의 회전을 고정하여 땅에 딱 붙어 있도록 함
3️⃣ Foot Control을 이용해 SC Solver와 RP Solver를 묶음 → RP Solver가 발목을 움직이려 해도, Foot Control이 SC Solver를 고정시키기 때문에 발목이 땅에 고정됨!

이제 이해됐어? 😃


위 대답은 잘 이해가 안된다..

 

 

'리깅' 카테고리의 다른 글

FK와 IK 셋업 및 스위치 셋업  (0) 2025.04.10
어트리뷰트 셋업  (0) 2025.04.08
인게임 캐릭터 스킨 웨이트  (0) 2025.03.11
인게임 캐릭터 조인트  (0) 2025.03.10
컨트롤러 셋업  (0) 2025.03.10