안녕하세요.
애니메이터가 들려주는 맥스 스크립트의 스크립팅하는 애님입니다.
오늘은 바이패드의 노드를 선택하는 방법에 대해서 알려드리려고 합니다.
일반적인 노드선택 방법은 이미 숙지하고 있을 거라 생각하는데요.
바이패드는 일반적인 선택 외에도 다른 방법이 있습니다.
이유는 일반적으로 바이패드의 이름은 'Bip001'로 시작되는데요. (기억이 가물가물 하지만 MAX9버전은 Bip01이었던 거로 기억합니다.)
여러 개의 바이패드를 하나의 장면에 올려놓으면 같은 이름이 겹쳐 지기 때문에 바이패드의 이름을 변경해야 하는 경우가 발생합니다.
혹은 바이패드 각 부위의 이름을 작업하는 게임이나 애니메이션 환경에 맞춰 변경해야 하는 경우도 발생합니다.
이렇게 변경된 바이패드의 특정 노드를 선택하려면 기존 방식은 상당히 번거롭게 되는데 이를 해결해주는 방법이 필요하기 때문입니다.
우선 적당히 바이패드를 하나 만들겠습니다. 그 후에 이름을 변경합니다.
(저는 MyBip로 하겠습니다.)
biped.getNode <biped | biped_ctrl> <name | index> [link:<int_link>]
바이패드의 노드 아무 곳이나 선택하고 다음과 같이 입력해 보겠습니다.
위와 같은 결과가 나왔습니다.
왼손을 나타냅니다.
어째서 그런 결과가 나왔는지 확인해 보겠습니다.
biped.getNode : 노드를 구해오는 명령입니다.
<biped | biped_ctrl> : 바이패드 또는 바이패드 컨트롤러를 적습니다.
적은 노드 또는 컨트롤러의 바이패드 내에서 적용된다는 의미입니다.
<name | index> : 원하는 부위의 Limb Name이나 인덱스 번호를 적습니다.
해당 내용은 아래에 자세히 적겠습니다.
[link:<int_link>] : 위의 '<name | index>'중 몇번째 노드인지를 적습니다.
여기서 Limb Name이라는것은 팔과 다리 같은 전체적인 것의 명칭을 뜻하고 거기에 link번호를 적으므로서 왼팔의 4번째가 되는 것입니다.
쇄골뼈부터 순서대로 4번째면 손이 됩니다.(쇄골 -> 상박 -> 하박 -> 손)
Index | Limb Name | Link Nodes in Link Index Order |
|||
1 | #larm | L Clavicle | L UpperArm | L Forearm | L Hand |
2 | #rarm | R Clavicle | R UpperArm | R Forearm | R Hand |
3 | #lfingers | L Finger0 | L Finger01 | L Finger02 | L Finger1 |
L Finger11 | L Finger12 | L Finger2 | L Finger21 | ||
L Finger22 | L Finger3 | L Finger31 | L Finger32 | ||
L Finger4 | L Finger41 | L Finger42 | |||
4 | #rfingers | R Finger0 | R Finger01 | R Finger02 | R Finger1 |
R Finger11 | R Finger12 | R Finger2 | R Finger21 | ||
R Finger22 | R Finger3 | R Finger31 | R Finger32 | ||
R Finger4 | R Finger41 | R Finger42 | |||
5 | #lleg | L Thigh | L Calf | L HorseLink | L Foot |
6 | #rleg | R Thigh | R Calf | R HorseLink | R Foot |
7 | #ltoes | L Toe0 | L Toe01 | L Toe02 | L Toe1 |
L Toe11 | L Toe12 | L Toe2 | L Toe21 | ||
L Toe22 | L Toe3 | L Toe31 | L Toe32 | ||
L Toe4 | L Toe41 | L Toe42 | |||
8 | #rtoes | R Toe0 | R Toe01 | R Toe02 | R Toe1 |
R Toe11 | R Toe12 | R Toe2 | R Toe21 | ||
R Toe22 | R Toe3 | R Toe31 | R Toe32 | ||
R Toe4 | R Toe41 | R Toe42 | |||
9 | #spine | Spine | Spine1 | Spine2 | Spine3 |
Spine4 | |||||
10 | #tail | Tail | Tail1 | Tail2 | Tail3 |
Tail4 | |||||
11 | #head | Head | |||
12 | #pelvis | Pelvis | |||
13 | #vertica | Biped COM | |||
14 | #horizontal | Biped COM | |||
15 | #turn | Biped COM | |||
16 | #footprints | Footsteps | |||
17 | #neck | Neck | Neck1 | Neck2 | Neck3 |
Neck4 | |||||
18 | #pony1 | Ponytail1 | Ponytail11 | Ponytail12 | Ponytail13 |
Ponytail14 | |||||
19 | #pony2 | Ponytail2 | Ponytail21 | Ponytail22 | Ponytail23 |
Ponytail24 | |||||
20 | #prop1 | Prop1 | |||
21 | #prop2 | Prop2 | |||
22 | #prop3 | Prop3 | |||
101 | #lfArmTwist | L ForeTwist | L ForeTwist1 | L ForeTwist2 | L ForeTwist3 |
L ForeTwist4 | L ForeTwist5 | L ForeTwist6 | L ForeTwist7 | ||
L ForeTwist8 | L ForeTwist9 | ||||
102 | #rfArmTwist | R ForeTwist | R ForeTwist1 | R ForeTwist2 | R ForeTwist3 |
R ForeTwist4 | R ForeTwist5 | R ForeTwist6 | R ForeTwist7 | ||
R ForeTwist8 | R ForeTwist9 | ||||
103 | #lUparmTwist | L UpTwist | L UpTwist1 | L UpTwist2 | L UpTwist3 |
L UpTwist4 | L UpTwist5 | L UpTwist6 | L UpTwist7 | ||
L UpTwist8 | L UpTwist9 | ||||
104 | #rUparmTwist | R UpTwist | R UpTwist1 | R UpTwist2 | R UpTwist3 |
R UpTwist4 | R UpTwist5 | R UpTwist6 | R UpTwist7 | ||
R UpTwist8 | R UpTwist9 | ||||
105 | #lThighTwist | L ThighTwist | L ThighTwist1 | L ThighTwist2 | L ThighTwist3 |
L ThighTwist4 | L ThighTwist5 | L ThighTwist6 | L ThighTwist7 | ||
L ThighTwist8 | L ThighTwist9 | ||||
106 | #rThighTwist | R ThighTwist | R ThighTwist1 | R ThighTwist2 | R ThighTwist3 |
R ThighTwist4 | R ThighTwist5 | R ThighTwist6 | R ThighTwist7 | ||
R ThighTwist8 | R ThighTwist9 | ||||
107 | #lCalfTwist | L CalfTwist | L CalfTwist1 | L CalfTwist2 | L CalfTwist3 |
L CalfTwist4 | L CalfTwist5 | L CalfTwist6 | L CalfTwist7 | ||
L CalfTwist8 | L CalfTwist9 | ||||
108 | #rCalfTwist | R CalfTwist | R CalfTwist1 | R CalfTwist2 | R CalfTwist3 |
R CalfTwist4 | R CalfTwist5 | R CalfTwist6 | R CalfTwist7 | ||
R CalfTwist8 | R CalfTwist9 | ||||
109 | #lHorseTwist | L HorseTwist | L HorseTwist1 | L HorseTwist2 | L HorseTwist3 |
L HorseTwist4 | L HorseTwist5 | L HorseTwist6 | L HorseTwist7 | ||
L HorseTwist8 | L HorseTwist9 | ||||
110 | #rHorseTwist | R HorseTwist | R HorseTwist1 | R HorseTwist2 | R HorseTwist3 |
R HorseTwist4 | R HorseTwist5 | R HorseTwist6 | R HorseTwist7 | ||
R HorseTwist8 | R HorseTwist9 |
이렇게 적어 놓으면 어떻게 쓰이는 건지 감이 잡히지 않기 때문에 예를 들어 보겠습니다.
스크립트 작업중에 불려진 바이패드의 이름을 모른다고 가정하겠습니다.
그런 우리는 이 바이패드의 오른쪽 발을 스크립트를 이용하여 선택해야 하는 업무가 있다고 합시다.
일반적인 select $'Bip001 R Foot'를 이용해서 오브젝트를 선택하고 싶지만 이름을 알 수 없으므로 선택할 수가 없습니다.
1 우선 바이패드 노드를 확인하도록 하겠습니다.
2 그리고 아무 노드나 선택할 수 있지만 COM을 선택하겠습니다.
3 선택한 COM을 기준으로 오른쪽 발의 이름을 찾겠습니다.
4 그리고 찾은 오른쪽발의 이름으로 오브젝트를 선택하겠습니다.
이렇게 작동하는 스크립트가 있다면 원하는 노드를 선택할 수 있습니다.
방법은 다음과 같습니다.
1
2
3
4
5
6
7
8
9
10
11
12
|
Nodes = $* as array
cOMNode = undefined
targetNode = undefined
legLinks = 0
for i = 1 to Nodes.count do
(
if((classof Nodes[i] == Biped_Object)and(Nodes[i].parent == undefined)) do
cOMNode = Nodes[i]
)
legLinks = cOMNode.controller.legLinks
targetNode = biped.getNode cOMNode #rleg link:legLinks
select targetNode
|
cs |
1 : 모든 노드를 저장합니다.
2 : COM이 저장될 변수 입니다.
3 : 원하는 노드가 저장될 변수입니다.
4 : 다리 관절 수를 저장합니다.
5 ~ 9 : 저장한 모든 노드를 차례로 확인하면서 바이패드 이면서 부모가 없는 노드를 찾습니다.
이 조건에 만족하는 노드는 COM밖에 없기 때문입니다.
COM을 찾으면 cOMNode에 저장합니다.
10 : 다리 관절 수를 확인합니다.
다리 관절은 일반 관절의 수가 3이고, 역관 절은 4인 변경이 있습니다.
(이 명령어는 아직 이야기하지 않았네요. 다음 시간에 진행하겠습니다.)
11 : 발은 다리 관절의 마지막 부분이기 때문에 다리 관절수와 발의 인덱스 번호는 같은 번호가 나옵니다.
그것을 이용하여 오른발 노드를 찾아 targetNode에 저장합니다.
12 : 찾은 오른발을 선택합니다.
복잡해 보이지만 이렇게 무언가를 선택할 때마다 반복되는 명령의 모음은 사용자 함수로 지정하면 되기 때문에 큰 문제는 없습니다.
오늘 이야기는 좀 길어지기는 했는데 내용상 나누기가 번거로워서 한 번에 끝냈습니다.
다음 시간에는 생성된 바이패드 노드의 수를 알아보고 변경하는 방법에 대해서 이야기하겠습니다.
'맥스스크립트 기본' 카테고리의 다른 글
Biped Vertical_Horizontal_Turn(Body):Matrix3 Controller(4) (0) | 2021.03.10 |
---|---|
Biped Vertical_Horizontal_Turn(Body):Matrix3 Controller(3) (0) | 2021.03.09 |
Biped Vertical_Horizontal_Turn(Body):Matrix3 Controller(2) (1) | 2021.03.08 |
Biped Vertical_Horizontal_Turn(Body):Matrix3 Controller(1) (0) | 2021.03.07 |
Biped Copy and Paste Posture Methods(4) (0) | 2021.03.05 |
Biped Copy and Paste Posture Methods(3) (0) | 2021.03.04 |
Biped Copy and Paste Posture Methods(2) (0) | 2021.03.03 |
Biped Copy and Paste Posture Methods(1) (0) | 2021.03.02 |