TWA Houdini1/Rigidbody

TWA 후디니 1 RIGIDBODY_11 : Constraint 기본 개념

yiss09 2023. 4. 6. 23:06

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

 

HOUDINI1_ RIGIDBODY

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

www.twahoudini.com

 

"Constraints"라는 단어는 제약, 제한, 통제라는 뜻을 가진다.

후디니에서의 Constraint는 물체와 물체 사이의 관계를 뜻한다. 영어로 표현하자면 Relation between A & B 라고 표현하여도 좋다.

 

Constraints에서의 관계에 대해 설명하기 위해서 사람과 사람 사이의 관계를 예시로 들겠다.

친구, 가족, 연인, 선후배, 동료 관계와 같은 사람 관계처럼 Constraints에도 다양한 관계의 종류가 있다.

즉, Object끼리의 관계를 사용자가 정해줄 수 있다는 뜻이다. 

glue, hard, soft, cone twist, slider, spring과 같은 다양한 Constraints 관계가 존재한다.

 

또한 사람간의 관계를 생각했을 때 그들 사이의 관계가 변할 수 있다. 어떤 조건이나 상황에 따라 친구에서 연인으로, 연인에서 가족으로, 선후배에서 동료로 관계가 변할 수 있다.

후디니에서 다룰 Constraints(물체와 물체 사이의 관계)도 상황과 조건에 따라 바뀔 수 있다. 

 

그리고 친구간의 관계에서는 없는 연인간의 관계에선 꼭 지켜야할 것들이 있을 것이다.

마찬가지로 후디니에서도 각각의 Constraints마다 다루어야할 세팅과 Attributes가 다를 것이다.

 

하지만 각각의 관계에서 다르게 신경써야할 부분도 있지만 모든 인간 관계에서 공통적으로 필요한 부분도 있다. 바로 존중, 경청, 배려와 같은 가치는 어떠한 사람간의 관계에서도 반드시 필요하다.

이처럼 후디니에서도 Constraints에 다양한 관계의 종류가 있지만 공통적으로 필요로 하는 세팅이 있다. 

 

RigidBody11에서는 Constraints에 가장 기본이 되는 세팅이 무엇인지, 그리고 이 중에서도 Glue, Hard Constraints를 시작으로 Constraint를 다루어볼 예정이다.

 

목차

1. 이론 설명

2. Rest Length

 

 


1. 이론 설명

 

Hard Constraints에서는 Position, Rotation, All이라는 내용이 쓰일 예정이다. 이는 각각 어떤 것이 고정되었는지를 뜻한다.

Position은 물체와 물체 사이의 거리가 고정된 것을 뜻한다.

Rotation은 물체끼리의 각도, 즉 회전하는 방향을 고정시킨다.

All은 거리와 각도를 모두 고정시킨 상태이다.

 

이들을 Attribute Wrangle로 표현할 때 새롭게 필요한 Attributes가 있다.

@constraint_name@constraint_type이다.

@constraint_name에 의해서 이용될 Constraints의 이름이 정해진다. 이때 Constraints 끼리의 이름이 같다면 모두 같은Constraints로 인식된다.

@constraint_type에서는 물체와 물체 사이를 어떻게 고정시킬지를 정해줄 수 있다. 위에서 언급된 Position, Rotation, All 중 하나를 선택해 해당 Constraints를 어떻게 고정시킬지를 정해준다.

 

Constraints에 필요한 points가 각각의 Object를 대변한다는 것을 Dop Network가 이해하기 위해서는 각각의 point의 이름이 Object의 이름과 같아야 한다.

그리고 두 점이 이어져 만들어진 line에 두 Box 사이의 관계를 저장해주면 된다. 이때 들어갈 내용이 @constraint_name과 @constraint_type이다. 그리고 정보가 선에 들어갈 예정이기 때문에 RunOver를 Primitives로 해주어야 한다.

 

Constraints를 만드는데 필요한 Points와 Primitives의 갯수에 대해 이야기해보겠다.

위치가 다른 세 개의 Objects가 있다. 이제 이 Objects간에 관계를 만들어주려한다.

두 Constraints의 이름을 같게하고, 하나의 이름을 다르게 해주었다.

이때 사용된 Points는 3 + 6(points) = 9, Primitives는 3 + 3(line) = 6이다.

그리고 Dop Network 안에서 @constraints_name의 관계를 쓰도록 하겠다. 물체간의 어떤 관계를 사용할지를 Dop Network 안에서 결정해줄 수 있다.

 

 


2. Rest Length

 

이제 후디니 안에서 직접 작업해보도록 하겠다. 앞에서 개념적인 내용을 배웠다고 하더라도 쉽지 않을 수 있다. 그리고 이론 내용동안 배웠던 내용은 모든 종류의 Constraints에 공통적으로 필요한 내용을 배운 것이기에 막상 Hard Constraints를 쓸 때 추가적으로 알아야할 세팅이 있을 것이고, Glue Constraints를 쓰게 된다면 또 다른 무언가가 있을 것이다.

 

Box를 Pack해준 뒤 두 점을 Copy to Points로 연결해준다.

그리고 @name으로 각각의 points에 이름을 지어 Copy to Points로 @name에 대한 정보를 Box로 넘겨준다. 

그 다음 Dop Network에서 RigidBody 기본 세팅을 잡아준다. 이때 Rigid Body Solver의 Input3에 들어갈 Source에 대한 node들은 사용하지 않겠다.

이 상태로 Simulation을 돌리면 두 물체가 잘 작동하는 것을 볼 수 있다. 편하게 보기 위해서 Wireframe 상태에서 작업하였다.

 

이제 Geometry 단계에서 Constraints 세팅을 잡아보겠다.

두 물체가 단단하게 고정된 것처럼 Simulation되길 원한다면 철봉과 같은 형태의 Constraints가 필요할 것이다.

이때 선을 만들기위해 필요한 점을 떼어내어 주겠다. Add로 선으로 만들어준다.

Primitive Wrangle을 달아 @constraint_name과 @constraint_type에 대한 내용을 세팅해준다.

Null을 달아 constraint라는 이름을 붙여준다.

 

다음은 Geometry 단계에서 만든 constraint를 Dop Network 안에서 정의내려주겠다.

물체와 물체 사이의 관계를 계산하기 위해서 Constraint Network node를 새롭게 사용해주겠다.

물체간의 관계가 계산된 다음 Rigid Body Solver에서의 계산이 들어가야하기 때문에 node를 RBD Packed Object 바로 아래에 연결해주도록 하겠다.

Constraint Network 사용에서의 가장 큰 핵심은 Objects간의 관계를 위해 밖에서 마련한 Constraint로 쓰였으면 하는 선(Primitive)을 SOP Path로 불러오는 것이다.

 

두 Objects가 어떻게 고정될지 그 형태를 골라줄 차례이다. 

우리는 Objects끼리 단단히 고정되게 하기 위해서 Hard Constraint Relationship을 새롭게 사용해주도록 하겠다.

Constraint Network의 Input2에 연결해주도록 한다.

이제 Hard Constraint Relationship의 내용을 어떤 Constraint에 적용해주어야할지 name을 적어주겠다.

Hard Constraint Relationship 파라미터의 Data Name에 우리가 밖에서 지정해둔 @constraint_name을 입력해준다.

Simulation을 실행시키면 밖에서 type을 "all"로 설정해두었기에 거리와 각도를 유지한채로 움직이는 것을 볼 수 있다.

 

이번에는 새롭게 Box를 하나 더 추가시켜주겠다.

Constraints를 두 개 생성해주려 하는데, 이때 두 Constraints의 이름을 다르게 해주겠다.

이 상태로 Dop Network 안에서 결과를 보면, 예상과는 다르게 하나의 Constraint만 생성된 것을 볼 수 있다.

그 이유는 우리가 이용하기로한 Hard Constraint Relationship이 하나밖에 없기 때문이다.

 

해결 방법은 간단하다. Constraint를 하나 더 불러내기 위해서 Hard Constraint Relationship을 하나 더 생성해 Merge 해준다. 새롭게 생성한 Hard Constraint Relationship의 Data Name을 변경해주고 나면, Constraint가 두 개로 늘어난 것을 볼 수 있다.

 

앞선 방법에서는 직각의 위치로 배치된 점들을 이용했었다. 이번에는 대각선으로 놓여 점 사이의 길이가 1보다 긴 line을 Constraint로 이용해보겠다.

Blast에서 이용할 점을 변경해준 뒤 Dop Network 안에서 결과를 보겠다.

결과를 보면, 대각선으로 놓여진 Constraint의 길이가 시작하자마자 짧아지는 것을 볼 수 있다.

그 이유는 Hard Constraints에서는 유지하고 싶은 Constraint의 길이를 반드시 제공해주어야 하기 때문이다.

이때 Hard Constraint가 요구하는 길이 정보는 특정 Attributes로써 준비해주어야 하는데, 바로 @restlength이다.

 

Dop Network 밖에서 두 Box와 하나의 Constraint를 준비하였고, 오늘 배운 내용까지의 Constraint 세팅이 완료되었다고 가정하겠다.

@restlength와 Hard Constraint Relationship에서의 Rest Length 파라미터의 역할은 무엇인지, 그리고 지금까지 @restlength 없이도 원하는 작업이 원활하게 되었던 이유가 무엇인지 모두 다 이야기해보겠다.

먼저 @restlength의 역할부터 이야기해보겠다.

Geometry 단계에서 준비한 선의 길이가 이제부터 중요해진다. 그리고 선의 길이 값이 @restlength가 될 것이다.

@restlength가 필요한 이유는 Simulation에서 발생하는 오차 때문이다.

아무리 딱딱하게 고정된 Hard Constraint를 사용한다 할지라도 Simulation 과정에서 충돌에 의해 오차가 발생하게 된다. 이때 오차가 적으면 다행이지만, 당황스럽게 큰 오차가 발생할 수도 있다. 

예를 들자면 한쪽의 Box가 바닥에 끼인 상태에서 다른쪽 Box에 외력이 작용한다면, 그 방향대로 Box가 움직이게 될 것이다. 이때 Constraint가 늘어나는 현상이 발생하게 될 것이다. Hard Constraint를 이용함에 있어 딱딱하게 고정되기를 원하기 때문에 길이가 늘어난 Constraint를 복원하려할 것이다. 이때 복원 과정에서 @restlength가 필요하다. 만약 원래 길이가 3이었는데 5까지 늘어났다면, 외력이 끝나서 여유가 되는 순간에 3까지 돌아가려 할 것이다. 이때 기준이 필요하기 때문에 @restlength가 필요한 것이다.

요약하자면 우리가 Constraint를 활용해서 Simulation에 로드한 물체들 사이의 거리를 딱딱하게 유지하고 싶은 것이다. 이때 그 각각의 거리가 얼마인지 저장해둔 것이 바로 @restlength이다.

@restlength 값은 Measure node를 이용해 구해줄 수 있다.

 

이제 Hard Constraint Relationship에서의 Rest Length 파라미터의 역할에 대해 이야기해보겠다.

Rest Length는 밖에서 준비된 @restlength의 배율로써 곱해지는 값이 된다.

만약 밖에서 준비한 @restlength의 값이 3이고 Rest Length 파라미터에 2가 적혀있다면 3 * 2 = 6이 복원하고자 하는 길이의 기준이 될 것이다.

 

Dop Network 밖에서 @restlength에 관한 내용을 따로 정해주지 않는다면, Dop Network는 @restlength가 1이라고 가정한다. 그리고 Rest Length의 기본값 1이 곱해져 1 * 1 = 1로 길이가 정해질 것이다.

이러한 이유로 원래 Box 간의 간격이 1인 부분에서는 @restlength 값을 지정해주지 않아도 Constraint의 길이가 변하는 문제가 발생하지 않는 것이다.

하지만 대각선으로 놓여진 Constraint의 경우 길이가 √2이기에 기준 값인 1로 돌아감에 따라 길이가 짧아지는 것이다.

 

 

 

결론이다.

Hard Constraint는 강한 복원력을 가진 관계이다.

기준이 되는 길이로 돌아가려는 성질을 가지고 있다. 마찬가지로 Simulation 제공 순간에 제공된 물체들 사이의 각도에 대해서도 복원하려는 성질을 가진다.

길이에 대한 복원력이 Constraint type : Position과 연관이 있는 것이고, 각도에 대한 복원력이 Rotation과 관계가 있다.

만약 강한 충돌에 의해 길이나 각도가 바뀌어서 기준을 넘거나 기분보다 작아진다면, 원래 기준으로 빠르게 돌아가려고 할 것이다. 그래서 약한 충격에는 그냥 단단히 고정된 것처럼 보이지만, 강한 충격이나 쏠림에 의해서는 탄성을 가지는 것처럼 결과가 나올 수 있다.