- 48일차 -
지난 시간에 이어서 오늘은 'Node'를 작업해봤어요.
양쪽 허벅지에 'Locator'를 생성하고 이름은 'L_thigh_distance_locator'와 'L_ankle_distance_locator'로 바꿨어요.
이때의 로케이터는 추후의 작업을 위해 절대 'Freeze'를 하면 안돼요.
다리의 길이가 늘어났다가 다시 원래의 형태로 돌아가는 동작을 만들거에요.
다리가 움직인다 했을 때 로케이터가 다리를 따라 움직일 수 있도록 연결을 해야해요.
'Foot_main_controller'와 'L_ankle_distance_locator'를 선택하고 'Constrain - Point'로 이어주고
'L_thigh_joint'와 'L_thigh_distance_locator'를 선택하고 'Constrain - Point'로 이어줄게요.
노드작업을 하기위해 'Window - Node Editor'를 실행할게요.
그리고 아웃라이너에서 방금만든 로케이터를 선택하고 '휠클릭 - 드래그'로 'Node Editor'에 불러와줄게요.
그러면 이렇게 4개의 오브젝트가 불러와지는데 각각의 오브젝트들을 'Node'라고 불러요.
이름끝에 'Shape'라고 적힌 노드는 채널박스에 없는 정보들이 들어있고
'Group'아이콘이 그려진 노드는 'Transform Node'라 하는데 채널박스의 값들의 정보가 담겨있어요.
우리가 작업할 것은 허벅지와 발목에 생성한 두 로케이터 사이의 거리체크에요.
이동값을 기준으로 작업을 진행할 땐 'Shape'가 아닌 위치값이 담긴 'Transform'을 사용해야합니다.
'Shape'는 사용하지 않을거라 삭제해야하는데 'Node Editor'에서 'Delete'로 지워버리면 완전히 삭제가 되어버려요.
마야상에서 해당기능을 다시 사용할 수 없게되는데 상단의 아이콘중 'Remove selected nodes from graph'를 사용해요.
'Node Editor'에서만 안보이게 설정할 수 있으며 실제로 제거하는게 아닌 숨김기능이에요.
'Tab'을 누르면 새로운 노드를 생성할 수 있는데 거리를 재기위해 'distanceBetween'노드를 생성해줄게요.
노드를 선택하고 숫자키 '1~5'를 누르면 보이는 정보가 달라져요.
'1은 일반노드, 2는 사용되고있는 속성, 3은 오브젝트가 가지고있는 전체속성 4는 자주 사용하는 속성 5는 이름표시변경'
이렇게 확인할 수 있어요.
지금은 '4번, 자주 사용하는 속성'으로 작업을 진행할게요.
발목의 'Translate'는 'distanceBetween'노드의 'Point 1'에 '클릭-드래그'로 연결,
허벅지의 'Translate'는 'distanceBetween'노드의 'Point 2'에 '클릭-드래그'로 연결할게요.
각 노드의 왼쪽에 있는 동그라미는 'Input', 오른쪽에 있는 동그라미는 'Output'이라고 해요.
'1+2=3'이라는 수학적 계산을 진행할 때 1과 2를 'Input', '+'는 'Node', 3은 'Output'이라 생각할 수 있고
어떤 노드를 사용하냐에따라 계산이 달라질 수 있어요.
'Point'의 순서는 상관없지만 어떻게 연결했는지는 작업자가 알고 있어야해요.
'Condition'노드를 생성하고 마찬가지로 4번으로 노드를 펼쳐줄게요.
'Condition'은 조건문이에요.
발목과 허벅지사이의 거리를 계산할 때 항상 모든 상황에서 길어지지는 않을거에요, 걸어갈 때 다리가 늘어나지는 않거든요.
특정한 상황에서만 다리의 길이가 늘어나게 설정을 하겠다는 식의 조건을 제시할 때 사용하는 노드에요.
컨디션노드의 속성창을 보면 'Condition Attributes'항목에서 'First Term'과 'Second Term'을 확인할 수 있어요.
각각 'A'와 'B'라고 칭해서 작업을 진행해볼거고 하단의 'Operation'은 등호에요.
'A'가 'B'보다 'Operation'하면, 이라고 식을 생각할 수 있어요.
'1'가 '3'보다 '='하면, 이라고 식을 만들면 오류가 생겨 'Color If False'의 값이 출력되고
'1'가 '3'보다 '<'하면, 이라고 식을 만들면 계산이 맞아 'Color If True'의 값이 출력돼요.
즉, 2개의 다른 정보를 출력할 수 있어요.
허벅지를 잡아 늘린다고 생각했을 때 허벅지와 발목의 거리(A)가 다리의 최대길이(B)보다 늘어난다고 설정해야해요.
'distanceBetween'노드의 'Distance'값을 컨디션노드의 'First Term'으로 연결해줄게요.
이제 다리의 최대길이값을 정해야하는데 컨트롤러를 움직여서 다리의 조인트가 일자로 펴지도록 설정해볼게요.
발컨트롤러를 살짝만 내려줘도 다리에 연결된 조인트들이 쭉 펴지게돼요.
'Condition'노드의 'First Term'에 최대길이값이 나와있을거에요.
Q. 사람의 다리의 최대길이값은 변하는 수치인가 변하지 않는 수치인가?
A. 변하지 않는 수치
Q. 그렇다면 캐틱터의 다리의 최대길이값은 변하는 수치인가 변하지 않는 수치인가?
A. 변하는 수치
저는 처음에 캐릭터의 다리의 최대길이값이 변한다고 생각했어요.
하지만 제가 생각한 변하는 이유는 캐릭터는 사람과 달리 표현의 자유와 그에서 나오는 허용치라고 생각했는데 이유가 틀렸어요.
캐릭터는 어떤 장면을 만드느냐에따라 캐릭터의 크기가 천차만별로 바뀔 수 있어요.
주변 환경에따라 캐릭터의 크기자체를 변경할 수 있는데
주변의 환경이클때는 캐릭터의 크기를 키우고 주변의 환경이 작을때는 캐릭터의 크기를 그에맞춰 작게하는게 효율적일거에요.
'Condition'노드의 'First Term'수치를 복사하고 'multiplyDivide1'노드를 생성해준 뒤,
'multiplyDivide1'노드의 속성창의 'Multiply-Divide Attrivutes'항목의 'Input'의 첫번째칸에 수치를 입력해줄게요.
1번이나 2번은 상관이 없으니 지금은 2번에 수치를 넣어보겠습니다.
'Main_controller'도 'Node Editor'에 불러왔어요.
지금도 채널박스의 값과 관련된 작업을 할거라서 'Transform'을 이용할거에요.
'Main_controller'노드의 'Scale X'의 'Output'을 'multiplyDivide1'노드의 'Input 1X'에 연결해줄게요.
저는 이전에 'Input 2'에 최대값을 입력했기에 'Input 1X'에 연결을 하는거에요.
Q. 왜 'X'축만 연결을 하나?
A. 부모조인트가 자식조인트를 바라보고있는 방향이 'X축'이라서 그래요. 관절이 늘어나는 방향과 같기때문입니다.
'multiplyDivide1'노드의 'Output X'는 'condition'노드의 'Second Term'에 연결을 해줄게요.
'distanceBetween'노드는 현재의 거리값을, 'multiplyDivide1'노드는 최대로 늘어났을때의 값을 지정해주며
'multiplyDivide'노드의 'Operation'이 'Multiply(곱셈)'로 되어져있는데,
계산하는 방법은 'Input 1' × 'Input2'로 두 수치를 계산하게돼요.
오브젝트의 크기가 작아져 'Input1'의 값이 작아지면 계산값이 낮아지며 반대의 경우에는 계산값이 높아져요.
이번에는 다리사이의 거리값이 늘어나고 줄어드는것을 계산해주기위해 'multiplyDivide2'노드를 새로 생성을 할게요.
'distanceBetween1'노드의 'Distance'아웃풋을 새로만든 'multiplyDivide2'노드의 'Input 1X'의 'Input'에 연결해주고
'multiplyDivide1'노드의 'Output X'를 'multiplyDivide2'노드의 'Input 2X'에 연결을 해줄게요.
'multiplyDivide2'노드는 'Operation'은 'Divide'로 변경을 해줄게요.
계산하는 방법은 'Input 1' ÷ 'Input2'로 두 수치를 계산하는데 그러면 곱하기와 달리 순서가 중요해져요.
1÷2와 2÷1의 결과값이 달라지듯이 순서가 중요한데 수치값이 고정되어야하는 값을 'Input 2'에 넣어주면 돼요.
그래야 두 수치를 나눴을때의 수치값이 달라지는걸 확인할 수 있고 허벅지와 발목의 사이값이 높아질수록 결과값이 커질거고 반대로 사이값이 낮아질수록 결과값이 작아질거에요.
이후의 작업은 다음시간에 이어서 해보도록 하겠습니다.
-
어렵기만한 리깅수업인데 노드를 연결하는 수업을 받고나니 더욱더 다른세상의 것이라는 생각이 들 정도로 많이 어려워요.
원리자체를 이해하려고 해야하는데 처음접하다보니 여러가지로 혼란스럽기만하네요.
그래도 다음이 마지막리깅수업이니 끝까지 열심히 배우도록 해보겠습니다.
-
'Maya' 카테고리의 다른 글
50일차 - 리깅의 노드작업 마무리 (0) | 2021.12.01 |
---|---|
49일차 - 애니메이션의 다른 기능들 (0) | 2021.11.30 |
47일차 - 리깅과 모델링 연결 (0) | 2021.11.29 |
46일차 - 애니메이션 마무리 (0) | 2021.11.26 |
45일차 - 리깅마무리 (0) | 2021.11.24 |