맥스스크립트 기본

Biped Node Hierarchy

스크립팅하는애님 2021. 3. 6. 19:40
728x90
반응형

안녕하세요.

애니메이터가 들려주는 맥스 스크립트의 스크립팅하는 애님입니다.

오늘은 바이패드의 노드를 선택하는 방법에 대해서 알려드리려고 합니다.

일반적인 노드선택 방법은 이미 숙지하고 있을 거라 생각하는데요.

바이패드는 일반적인 선택 외에도 다른 방법이 있습니다.

이유는 일반적으로 바이패드의 이름은 'Bip001'로 시작되는데요. (기억이 가물가물 하지만 MAX9버전은 Bip01이었던 거로 기억합니다.)

여러 개의 바이패드를 하나의 장면에 올려놓으면 같은 이름이 겹쳐 지기 때문에 바이패드의 이름을 변경해야 하는 경우가 발생합니다.

혹은 바이패드 각 부위의 이름을 작업하는 게임이나 애니메이션 환경에 맞춰 변경해야 하는 경우도 발생합니다.

이렇게 변경된 바이패드의 특정 노드를 선택하려면 기존 방식은 상당히 번거롭게 되는데 이를 해결해주는 방법이 필요하기 때문입니다.

 

우선 적당히 바이패드를 하나 만들겠습니다. 그 후에 이름을 변경합니다.

(저는 MyBip로 하겠습니다.)

 

biped.getNode <biped | biped_ctrl> <name | index> [link:<int_link>]

바이패드의 노드 아무 곳이나 선택하고 다음과 같이 입력해 보겠습니다.

 

1
biped.getNode $ #lArm link:4
cs

 

위와 같은 결과가 나왔습니다.

왼손을 나타냅니다.

어째서 그런 결과가 나왔는지 확인해 보겠습니다.

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 : 찾은 오른발을 선택합니다.

복잡해 보이지만 이렇게 무언가를 선택할 때마다 반복되는 명령의 모음은 사용자 함수로 지정하면 되기 때문에 큰 문제는 없습니다.

 

오늘 이야기는 좀 길어지기는 했는데 내용상 나누기가 번거로워서 한 번에 끝냈습니다.

다음 시간에는 생성된 바이패드 노드의 수를 알아보고 변경하는 방법에 대해서 이야기하겠습니다.

728x90
반응형