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 셋업이 기울어져버리기 때문에 아래와 같은 방법으로 위치를 잡아준다.
- 엉덩이, 무릎, 발목 세 조인트를 연결하여 삼각형 Plane을 생성한다.
- 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)는 메쉬에서 떨어져있기 때문에 애니메이터가 작업 시 폴 벡터의 위치를 찾기 쉽게 하기위하여 무릎과 폴 벡터 컨트롤러 사이를 선으로 연결하여 표시해준다. 그 방법은 아래와 같다.
- 무릎 조인트와 폴 벡터 컨트롤러 끝 부분을 연결하여 커브를 생성한다.
- 무릎 조인트와 폴 벡터 컨트롤러가 움직이면 커브가 따라갈 수 있도록 클러스터를 이용하여 연결해준다. (클러스터에 여러 버텍스들을 묶어놓으면 클러스터가 움직일 시 클러스터에 속한 버텍스들이 다 모두 움직임)
- 커브의 각 끝 점을 잡고 클러스터 두 개를 생성한다.
- 무릎 조인트 잡고 가까운 커브의 클러스터를 잡은 후 point constraint를 연결한 후, 반대쪽의 폴 벡터 컨트롤러를잡고 가까운 커브의 클러스터를 잡은 후 point constraint를 연결한다.
- 작업 시 클러스터가 선택되지 않도록 클러스터를 hide 시켜준다.
- 작업 시 커브가 선택되지 않도록 커브의 어트리뷰트 에디터에서 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 |

