Part 2. Maya Rigging I
Outliner
리깅 시작 전 체크할 사항
- 적절하게 네이밍, 그루핑하여 아웃라인 정리
- 메쉬들의 피봇을 모두 (0, 0, 0)으로 만들어주기 (직접 옮기거나 Attribute Selector에서 바꿔줄 수 있음)
- Freeze Transform을 이용하여 모든 메쉬의 Translate, Rotate, Scale 값을 0으로 만들어주기, 이렇게 해주지 않으면 깔끔하지 못하고 게임 엔진에 넣었을 때 문제가 발생할 수 있음
Skeleton
- 조인트 리서치: 어떤 조인트가 필요한가? 어떻게 움직여야하는가?를 확인한다.
- 조인트 셋업
- Create joint 메뉴 사용하거나 스크립트로 joint 입력하여 조인트 생성
- 조인트 위치 잡기
- 조인트의 radius를 조정*
- parent 기능으로 hierarchy 정리
조인트 셋업 시 주의사항
- Create joint 메뉴를 사용 시 조인트를 위치시키고 엔터키를 눌러 생성을 완료해야한다. 그렇지 않으면 조인트 체인이 생성된다.
- 메쉬가 기울어져 있으면 조인트도 기울어져있는게 자연스러우나 조인트에는 rotate 값이 있으면 안된다. 어트리뷰트 에디터에서 Joint Orient 수정을 통해 조인트를 기울여준다. 그러나 이런식의 조정이 번거로울 수 있기 때문에 우선은 rotate 값을 조정 후 조인트를 freeze transform 하면 조인트에 주어졌던 roate 값이 joint orient 값으로 주어진다.
공부하며 궁금했던 점
* 조인트의 radius는 무슨 역할을 하는걸까?
ChatGPT
Maya에서 조인트(Joint)의 Radius 값은 주로 뷰포트에서의 시각적인 크기를 조절하는 역할을 하며, 애니메이션이나 리깅 동작에는 직접적인 영향을 미치지 않습니다.
즉, 조인트의 영향을 받는 스킨(바인딩된 메쉬)이나 애니메이션 변형에는 Radius 값이 아무런 영향을 주지 않습니다.
하지만 몇 가지 간접적인 영향이 있을 수 있습니다:
- 선택의 편의성
- Radius가 너무 작으면 조인트 선택이 어렵고, 너무 크면 다른 조인트나 컨트롤러를 가릴 수 있습니다.
- 적절한 크기로 설정하면 작업하기 편해집니다.
- 비주얼 디버깅
- 리깅할 때 조인트 크기를 조절하면, 특정 조인트의 역할이나 관계를 쉽게 파악할 수 있습니다.
- 조인트 디스플레이 모드에서 영향
- Display > Animation > Joint Size 옵션과 함께 Radius가 조인트 표시 크기에 영향을 미칠 수 있습니다.
결론적으로, 조인트의 Transform이나 Skinned Mesh에 직접적인 영향을 주지는 않지만, 작업 편의성과 가시성 측면에서 조절할 필요가 있는 요소입니다.
freeze transform 시 값에 -0이 들어가는 경우가 있는데 -0이란 숫자는 도대체 무엇인가?
ChatGPT
일반적인 수학에서는 0은 과 동일한 값이지만, 컴퓨터 연산에서는 -0이 실제로 존재할 수 있습니다. 마야(Maya)에서 0이 표시되는 이유는 다음과 같습니다.
1. 부동소수점(Floating Point) 연산 때문
컴퓨터는 IEEE 754 부동소수점 표기법을 사용하여 숫자를 저장하는데, 이 표기법에서는 0과 을 다르게 표현할 수 있습니다.
- +0 : 모든 비트가 0
- −0 : 부호 비트만 1이고 나머지는 0
일반적으로는 과 은 연산 결과에서 차이가 없지만, 특정한 수학적 연산에서는 영향을 미칠 수도 있습니다.
2. 마야의 변형(Transform) 연산 과정에서 발생
마야에서 오브젝트의 Scale, Rotate, Translate 값을 조작할 때, 내부적으로 복잡한 행렬(Matrix) 연산이 일어납니다. 이 과정에서 부동소수점 연산 오차로 인해 이 발생할 수 있습니다.
- 예를 들어, Scale을 음수로 설정했다가 다시 양수로 바꿀 때 이 남을 수 있습니다.
- Freeze Transformations(변환 고정) 시에도 남을 수 있습니다.
해결 방법: 0으로 정리하기
- 수동 입력: -0을 직접 0으로 입력하여 변경
- Freeze Transformations: Modify → Freeze Transformations 실행
- Round-off 처리: Edit → Delete by Type → History 로 과거 변형 데이터 삭제
- Python 스크립트 활용:
import maya.cmds as cmds
selected = cmds.ls(selection=True)
for obj in selected:
for attr in ["translateX", "translateY", "translateZ", "rotateX", "rotateY", "rotateZ", "scaleX", "scaleY", "scaleZ"]:
value = cmds.getAttr(f"{obj}.{attr}")
if value == -0.0:
cmds.setAttr(f"{obj}.{attr}", 0)
위 방법으로 -0 값을 정리하면 불필요한 연산 문제를 방지할 수 있습니다.
마야에서 -0을 봤다고 해서 큰 문제가 있는 건 아니니, 필요할 때만 정리해 주면 됩니다!
'리깅' 카테고리의 다른 글
| IK 컨트롤러 셋업 (0) | 2025.03.18 |
|---|---|
| 인게임 캐릭터 스킨 웨이트 (0) | 2025.03.11 |
| 인게임 캐릭터 조인트 (0) | 2025.03.10 |
| 컨트롤러 셋업 (0) | 2025.03.10 |
| 스킨 웨이트 (0) | 2025.03.06 |