TWA Houdini1/Rigidbody

TWA 후디니 1 RIGIDBODY_15_02 : 4족 로봇 + 리깅베이직

yiss09 2023. 4. 22. 04:36

https://www.twahoudini.com/course/rigidbody1

 

HOUDINI1_ RIGIDBODY

3️⃣ 출동 SIMULATION 기초 이론부터 심화된 내용을 공부합니다. 또한 자동차를 이용한 리깅 시뮬레이션 BASIC을 훈련합니다.

www.twahoudini.com

 

지난 시간에는 Constraint에 대한 추가적인 옵션들을 다루기 위해서 i@condof와 v@condir에 대해서 배웠다.

 

Rigidbody15_part2에서는 지난 시간 숙제였던 경첩과 새롭게 다리가 네 개인 로봇을 만들어보겠다.

 

이 수업의 제목을 Constraint Rigging Basic이라고 한 이유가 있다면, 오늘 수업과 자동차 수업까지에서는 어마어마하게 많은 조각에 대해 일괄적으로 규칙을 적용하는 방식이 아니다.

각각의 조각별로 디테일하게 움직일 방향을 정해주어야하기 때문에, 한땀한땀 위치를 정해주고 잘 작동하는지 확인하는 것이 정말 중요하다.

 

목차 

1. 경첩

2. 다리 1개 로봇

3. 다리 4개 로봇

 

 


1. 경첩

 

세 개의 조각과 조각들 사이마다 보이지 않는 경첩을 만들어주고, 회전에는 어떠한 제약을 걸어 한쪽 방향으로만 회전이 가능한 상태로 만들어주겠다.

복원력이 있는 경우와 없는 경우 모두 만들어주도록 해보겠다.

 

먼저 위치가 x축으로 2만큼씩 떨어진 point 3개를 생성해준다.

그 다음 각각 @name을 다르게 지정해준 뒤, Pack된 Box에 Copy to Points로 점의 정보를 붙여주겠다.

그리고 Dop Network에서 정보를 불러와 결과를 보면 아래로 떨어지는 Box들을 볼 수 있다.

 

이제 해당 Box들간에 경첩을 만들어줄 것이다. 그리고 첫 번째 Box는 공중에 고정시켜 놓을 것이다.

이를 위해서 @active, @animated, @deforming 세팅을 해주겠다.

첫 번째 Box만 @active 값을 0으로 해주고, 나머지 Box들은 Simulation의 영향을 받게 하기위해서 1로 해주겠다.

 

이제 경첩이 놓일 위치를 만들어주려 한다.

포인트들의 중간 값이 되는 point들을 두 개 생성해준다. 두 point가 물체 사이의 경첩이 되어 줄 것이다.

이제 point가 물체를 대변하도록 해주기 위해서 name을 각각 생성해주겠다.

name이 붙은 point들을 Merge해 선으로 만들어준다.

 

경첩이 될 지점은 꺾이거나 파괴되지 않는다고 가정했을 때 위치가 완벽하게 고정되어야 한다. position에 대한 condof 값을 3으로 주겠다.

물체 a와 b의 경첩에서의 회전이 z축 방향으로 회전되기를 원한다. rotation에 대한 condof는 2에 {0,0,1}로 준다.

그 다음 constraint_name과 type을 세팅해주고 Merge 한 뒤, Measure를 달아 @restlength를 측정해준다.

Dop Network안에서 Constraint Network로 방금 만든 Constraint를 불러내준다.

con_con 세팅을 해줌에 따라 경첩의 모양이 회전하는 방향을 쉽게 알 수 있도록 바뀐 것을 볼 수 있다.

 

두 번째 경첩도 첫 번째와 똑같이 세팅해준다.

Simulation 결과를 보면 복원력이 없는 케이스의 결과가 잘 나온 것을 볼 수 있다.

 

이번에는 복원력을 가질 수 있도록 추가적인 Constraint를 만들어주겠다.

회전에 대해서 복원력을 갖출 수 있게 해주기위해서 rotation에 대해 condof가 3인 세팅을 추가해주겠다.

복원력에 대한 Constraint는 Bullet Soft Constraint Relationship을 사용하도록 하겠다.

 

결과를 보면 뻣뻣하게 움직이는 첫 번째 경첩을 볼 수 있다.

이때 Stiffness 값을 낮춰주면 통통 튀는 것과 같은 효과를 낼 수 있다.

두 번째 경첩에도 똑같은 세팅을 적용해준다면, Constraint 전체적으로 복원력을 가진 것을 볼 수 있다.

 

 


2. 다리 1개 로봇

 

다리 네 개를 가진 어떠한 구조물이 있고, 처음에 등장하면서 지면에 착지한 다음 하늘로 튀어 올랐다가 다시 바닥에 착지하는 장면을 만들어보려 한다.

몸통이 존재하고 하나의 다리를 먼저 예쁘게 만들어주는 것이 중요하다.

다리 하나에 대한 Constraint 시스템이 만들어지고 나면, 그때 다리를 네 개로 늘려주고 원하는 Animation을 넣어주도록 하겠다.

 

앞서 주어진 좌표에 따라 points 네 개를 준비해준다. point들을 두 개씩 묶어준다음 선으로 만들어준다.

그 다음 다리를 만들기 위해서 Carve로 선의 길이를 앞 뒤로 0.15만큼씩 줄여준다.

Polywire로 선의 두께를 늘려줌으로써 다리를 완성시킬 수 있다.

그 다음 발 부분은 마지막 point를 Copy to points로 tube에 붙여준다. End caps 후, 사이즈를 조절해준다.

Box를 생성해 사이즈를 키워준다면, 한쪽 다리의 모델링이 완성된다.

 

Constraint 세팅을 잡음에 있어, 관절이되는 point들은 각각의 조각을 대변할 이름을 가지고 있어야 한다.

동일한 내용을 반복하게될 때 쉽게 시스템을 이식할 수 있도록, 앞으로 벌어질 일을 예상하면서 작업해주는 것이 좋다.

그래서 우리가 만들어둔 관절에 쓰일 point와 조각들을 다 그룹으로 분류해준 다음 깔끔하게 다시 Blast 해주도록 하겠다. 이렇게 line을 예쁘게 짜두는 작업이 디테일한 작업에 들어가기 전 도움이 된다.

몸통은 body, 관절은 c0~2, 조각은 p0~2로 해주겠다. 그리고 이름의 뒤엔 a~d가 붙어 어떤 다리의 관절인지 구분할 수 있도록 해주겠다.

 

정보를 모아준 뒤 Blast로 깔끔하게 다시 분해해주었다면, 이제 조각들에 대해서 Pack해준 뒤 name과 aad세팅을 해주겠다. body의 @active를 0, 그 외 나머지 모두 1로 해주겠다.

이때 이후에 다리의 갯수를 늘리는 작업에 들어갈 때 이름이 업데이트 되어야한다는 것을 염두해두어야 한다.

Dop Network 안에서 조각에 대한 정보를 불러오겠다.

결과를 보면 물체에 대한 세팅이 잘 준비된 것을 볼 수 있다.

 

이제 Constraint에 대한 세팅을 해줄 차례이다.

각각의 조각을 대변하기 위한 name을 가져와 point에 붙여준다. 그 다음 두 point를 합쳐 line으로 만들어준다.

con_con 세팅과 con_set 세팅을 해준다.

현재 다리의 위치에 따라 z축 방향으로 관절이 회전할 수 있도록 해주겠다. 복원력은 rotation에서 작동하도록 해준다.

 

결과를 보면 관절이 잘 연결된 것을 볼 수 있다. 원하는 느낌으로 Stiffness 값과 Damping Ratio를 조절해준다.

 

 


3. 다리 4개 로봇

 

이제 다리를 네 개로 늘려주고 너저분한 시스템을 최대한 깔끔하게 정리해보도록 하겠다.

 

먼저 아래의 Constraint 시스템을 잠시 끊어주도록 하겠다.

현재 body와 다리 하나가 준비되어 있다.

Transform node로 다리를 rotation 시켜 몸통의 네 부분에 다리가 생기도록 해주겠다.

이때 body를 포함해 transform할 경우 body가 4개 생기게 되어 중복되기 때문에, body 부분은 끊어서 따로 빼주도록 하겠다.

 

다리가 네 개 달린 모델링이 완성되었지만, 지금의 상태에서는 body 부분이 빠졌기 때문에 이전에 만들어둔 Constraint 세팅이 작동하지 않는다.

따로 빼놓은 body를 가져와 blast:body와 교체해주도록 하겠다. group도 필요없기에 제거해준다.

결과를 보면 문제없이 잘 작동하는 것을 볼 수 있다.

 

이렇게 되면 지금까지의 과정에서 body를 제외한 나머지 부분을 다리에 대한 시스템으로 볼 수 있다.

그래서 다리에서의 조각별로 묶어주고, constraint는 constraint 끼리 group으로 묶어주도록 하겠다.

그 다음 두 정보를 Merge하여 묶어준다음 Null을 달아주도록 하겠다.

이제 body 부분을 제외한 다리부분을 전부 Subnetwork로 묶어주도록 하겠다.

 

그렇다면 Subnetwork에서 얻은 결과를 가지고, Blast로 실직적인 부피를 가지는 물체인 leg와 cnt를 분리해주도록 하겠다.

이제 각각의 다리에 대해서 Subnetwork를 붙여넣어 leg는 leg끼리, cnt는 cnt끼리 묶어주도록 해줄 예정이다.

그러기 위해선 다리들의 이름에 대해서 업데이트를 해주어야 한다. Attribute Wrangle을 달아 각각의 name에 a~d를 더해주도록 하겠다.

 

하지만 결과를 보면 다리가 body에 제대로 붙어있지 못하는 것을 볼 수 있다.

그 이유는 Geometry Spreadsheet을 보면, re_name을 했을 당시에 body에 a라는 이름이 추가적으로 붙은 것을 볼 수 있다.

하지만 우리가 만들어둔 body의 @name은 body로 되어있다.

 

이를 re_name을 정의하는 곳에서 If문으로 @name이 body라면 어떠한 변경도 일어나지 않도록 해주겠다.

이제 다리가 body에 잘 붙어지게 되었다.

 

name 작업 말고도 다리가 놓여진 방향도 신경써주어야 한다.

180도 돌아간 다리는 원래의 다리의 반대 방향에 놓여 같은 x축 선상에 놓이게 된다. 이런 경우는 따로 손봐줄 부분이 없다.

하지만 90도 또는 270도 돌아가있는 경우는 con_con에서의 v@condir의 방향을 {1,0,0}으로 변경해주어야 한다.

이제 leg따로 cnt따로 묶어주어 leg는 obj라는 이름의 Null로, cnt는 constraint라는 이름의 Null로 저장해주겠다.

Simulation을 보면 원했던 느낌의 네 개의 다리를 가진 로봇이 완성되었다.

 

이제 로봇에 움직임을 주어 관절이 잘 움직이는지 확인해볼 차례이다.

몸통도 움직일 수 있게 @active 값을 1로 바꿔주겠다.

중력으로 아래로 떨어질 것을 대비해 Groundplane을 설치해준다.

RBD Packed Object에서 Initial State 값을 조정해 던져지는 느낌으로 Velocity를 주겠다.

로봇이 튼튼하지 못하다고 느껴진다면, 다리의 복원력에 대한 Stiffness 값을 높여주도록 한다.

 

이번엔 각각의 다리에 대해 무게에 대한 세팅을 잡아주려 한다. 그럼으로써 body의 무게 또한 따로 조절해주려 한다.

Geometry 단계에서 body와 다리에 대해서 Attribute Wrangle로 f@mass에 대한 내용을 만들어주겠다.

몸통을 다리보다 가볍게 해줌으로써 로봇이 더 편하게 버텨내는 느낌을 주었다.

 

마지막으로 로봇이 날아간 다음 착지한 이후에 다시 점프하도록 만들어주려 한다.

Sop Network 세팅으로 해결해주려 한다.

Sop Network 안에서 Object Merge로 robo에 대한 Geometry 정보를 가져온다.

Blast로 body에 대한 point와 아닌 부분을 구분해주겠다.

그 다음 Blast로 body에 대한 부분을 하나 더 만들어준 뒤, 한쪽 body에는 위로 향하는 @v 값을 준다.

이제 Switch node로 96 Frame에 작동하도록 body끼리 묶어준 뒤, 다리와 Merge해준다.

Simulation 결과를 보면 96 Frame에 하늘로 날아 올라갔다가 무사히 착지하는 로봇이 완성되었다.