https://www.twahoudini.com/course/rigidbody1
HOUDINI1_ RIGIDBODY
3️⃣ 출동 SIMULATION 기초 이론부터 심화된 내용을 공부합니다. 또한 자동차를 이용한 리깅 시뮬레이션 BASIC을 훈련합니다.
www.twahoudini.com
오늘부터의 수업에서는 Constraint 세팅에 필요한 node들을 미리 만들어두고 시작하겠다.
s@constraint_type, s@constraint_name
s@name
s@prep_name
i@active, i@animated, i@deforming
f@restlength
위의 Attributes에 대한 내용을 생성해준다.
그리고 새롭게 i@condof와 v@condir에 대한 내용을 추가하겠다.
Rigidbody15_part1에서는 i@condof와 v@condir에 대한 내용이 오늘 수업의 핵심이 되겠다.
목차
1. i@condof, v@condir
2. 숙제
1. i@condof, v@condir
허공에서 Sphere가 지속적으로 생성되어 공중에 떠 있는 Box에 부딪히는 Simulation을 만들어보겠다.
Box를 만들어 Pack해준 뒤 aad 세팅과 name을 정해준다.
Box가 중력의 영향을 받지 않고 공중에 떠있기를 원하기에 @active를 0으로 해주겠다.
다음은 Constraint 세팅을 해줄 차례이다.
점 두개를 생성해 하나의 점에는 Box라는 이름을 다른 하나에는 아무것도 적어주지 않겠다. name이 지정되지 않은 것은 그냥 공간상에 고정이 되어 있기를 원한다고 보면 된다.
두 점을 선으로 만든 뒤 Constraint type과 name, 길이(restlength)를 정해준다.
이제 Dop Network 안에서 RigidBody Simulation에서의 Hard Constraint에 관한 세팅을 해준다.
그리고 지속적으로 나타나는 Sphere를 생성하기 위해서 Sop Network 안에서 세팅해주겠다.
Sphere가 생성될 때 랜덤한 위치 속도로 날아가게 해주고, Switch로 생성 빈도를 정해주었다.
이때 처음으로 Switch를 두 번 사용하여, 조건 안에 조건을 넣어주었다.
결과를 보면 30 Frame이 되기 전 Sphere가 나타나지 않다가 30 Frame 이후부터 10 Frame 마다 생성되는 Sphere를 볼 수 있다.
이때 생성된 Sphere는 사라지지 않고 중력에 의해 Box에 부딪힌 후 튕겨져 나와 계속하여 아래로 떨어진다.
Sop Network 안에서 Attribute Wrangle로 Sphere의 @P.y가 -0.5보다 작을 때 제거되도록 해주겠다.
만약에 Hard Constraint Relationship이 아닌, Bullet Soft Constraint Relationship이 선택된다면 어떨까?
충돌에 의해 약간씩 흔들리는 것처럼 묘사되는 것을 볼 수 있다.(Box의 @active는 1로 바꿔주었다.)
Stiffness 값을 낮춰주면 더 크게 흔들리는 것을 볼 수 있다.
이제부터 본격적으로 세팅을 바꿔가며 새로운 것을 공부해볼 예정이다.
일단 먼저, all로 설정되어 있던 Constraint type을 position과 rotation으로 분리해 따로 세팅을 잡아보겠다.
Dop Network 안에서도 Soft Constraint를 position, rotation 따로 사용하였다.
결과를 보면 Constraint type을 all로 하나만 사용하였을 때와 둘을 따로 동시에 사용했을 때가 같은 것을 볼 수 있다.
i@condof와 v@condir에 대한 이론 설명이다.
지금까지 우리가 이용한 @constraint_type은 all, position, rotation이다.
이때 물체 사이에 보통 하나의 Constraint를 써왔었다.
그 방식은 물체의 중심과 물체의 중심을 연결해서 쓰거나, 물체 사이에 관절처럼 공간상에 Constraint를 두고 쓰기도 했었다.
그런데 방금 처음으로 서로 다른 Constraint 두 개를 동일한 한 쌍의 물체에 적용을 한 것이었다.
하나는 position으로써, 다른 하나는 rotation으로써 Constraint가 존재하게 되는 것이다.
서로 다른 @constraint_name을 가지는 Constraint가 두 개가 쓰일 수 있다. 이 말은 즉슨 앞으로는 물체 사이의 관계가 한쌍의 Constraint가 아니라 동시에 여러가지 Constraint가 쓰일 수 도 있다는 것을 뜻한다.
예시를 들자면, 두 물체 사이에 all이라는 @constraint_type을 가진 Hard, Soft, Glue Constraint를 모두 사용할 수 도 있다. 그리고 position type의 hard, rotation type의 har와 soft 세 개를 동시에 사용할 수도 있다.
그런데 이렇게 많은 Constraint가 동시에 필요한 순간이 있을까?
일반적으로 Constraint가 겹겹이 쓰이는 이유는 두 가지이다.
1. Constraint의 합성 때문에 여러 관계를 동시에 써야하는 순간들이 있다.
Constraint를 활용해 Simulation이 가능하게 Rigging하려면 단순히 all type만으로는 부족하다. position과 rotation에도 각각 4가지 분류가 더 존재한다.
2. 조건에 따라 쓰고자 하는 Constraint가 바뀔 때 여러 Constraint를 겹겹이 준비해주어야 한다. 그 조건이 시간, 위치, 길이가 될 수가 있다.
시간이 조건이 된다면, 40 Frame 이전에는 Hard였다가, 40 Frame 이후에는 Soft로 바뀌게 할 수도 있다.
앞선 1번에서 말했던 position과 rotation의 추가적인 4가지 분류가 바로 con_con이다.
@condof의 정확한 명칭은 Constrained Degrees of Freedom이다.
condof가 바로 4가지 분류를 조절할 수 있는 Attributes이다. 분류, 종류에 대해 선택해주는 Attributes이기에 @condof는 Integer 정보가 된다.
그리고 condof와 따라 다녀하는 정보가 있는데 바로 @condir이다. @condir은 Constraint Direction이다.
condir은 vector 정보로 여기서 정한 방향에 의해 condof를 이용한 Constraint를 어떤 식을 분류할지를 정해주게 된다.
우리가 기존에 써온 Constraint type이 position이라는건, 위치를 고정하는게 맞다.
대신, 기본적으로 Hard를 쓰던, Soft를 쓰던 간에 기준을 벗어나지 않도록 움직임이 고정되는 style이었다. 이렇게 아무것도설정하지 않은 상태가 condof가 3일 때와 같다.
그리고 condof의 단계가 낮아지면 낮아질수록 움직일 수 있는 방향의 수가 한 개씩 늘어나게 된다.
condof = 3은 움직임이 딱딱하게 고정된다.
condof = 2는 condir의 방향으로만 움직인다.
condof = 1은 condir의 방향만을 제외한 모든 방향으로 움직인다.
condof = 0은 물체가 어디로든 움직이며, 단지 연결관계에 대한 체크만 한다. 즉, 어떠한 복원력도 없다는 것을 뜻한다.
position뿐 아니라 rotation에서도 위와 같은 시스템으로 작동하게 된다.
일단은 con_con 세팅을 활용하기 좋도록, position에 대한 constraint와 rotation에 대한 constraint를 따로 만들어주겠다.
condir에 {0,1,0}의 값을 주고 position이 움직이지 않도록 condof 값을 3을 주겠다. con_set을 가져와 type을 position으로 지정한다.
rotation에 대해선 {0,0,1}의 방향으로 회전되기를 원하기에 condof 값을 2를 주겠다.
두 값을 Merge로 묶은 다음 Measure node로 @restlength 값을 측정해주겠다.
Hard Constraint를 두 개 생성하여 각각 pos와 rot에 대해서 고정시켜주겠다.
지금의 Constraint의 position은 위치를 고정해둔 상태이다. 그렇다면 pos에 대한 con_con 세팅을 잡지 않은 상태와 같지 않을까?
By pass로 con_con 세팅을 잠시 꺼주고 Simulation을 실행시켜보겠다.
예상외로 position이 고정되어 있기 보다는 공이 닿기도 전에 Box가 아래로 떨어지는 것을 볼 수 있다.
con_con의 Geometry Spreadsheet을 보면, By Pass로 잠시 꺼두었기 때문에 condof 세팅이 없는 상태이다. 이 상태에서 condof 세팅이 있는 rot과 Merge를 하게 되면서 pos에 없던 con_con 세팅 값이 모두 0으로 생성되는 것을 볼 수 있다.
condof 값이 0이 되었다는 것은 위치에 대한 고정이 없다는 것을 뜻한다. 그래서 방향도 주어지지 않은 상태가 된다.
이에 결과로 Simulation의 중력에 의해 아래로 떨어지는 Box가 생성되는 것이다.
이건 원했던 결과가 아니기에 Constraint를 따로 작업해주도록 하겠다.
Constraint를 가져오기 위해 만들어둔 Null의 이름도 따로 만들어준다.
Constraint가 다른 이름으로 저장되어 있기 때문에 Dop Network 안에서 Constraint Network 또한 2개가 필요하다.
Constraint Network의 SOP Path를 각각 지정해준다. 그리고 각각의 SOP Path에서 불러온 Constraint에 알맞게 Hard Constraint를 연결해준다.
결과를 보면 공중에 고정되어 있고, 충돌에 의해 회전이 작동하는 것을 볼 수 있다.
하지만 하나의 관절에 대해 여러 Constraint Network를 사용하는 것은 좋지 않은 방법이라 볼 수 있다. Constraint 마다 가지고 있는 Attributes가 다른 것이 안전하지 않기 때문이다.
이러한 이유로 position이나 rotation 중 한 곳이라도 condof 세팅이 필요하다면 둘 다 해주는 것이 좋다.
이제 필요한 Constraint 전부 condof 세팅을 해준 뒤, Merge로 묶어주어 작업하겠다.
Dop Network 안에서도 하나의 Constraint Network만을 이용하겠다.
이제 이렇게 어떠한 고정력도 없이 그냥 회전하는 것이 아니라, 복원력을 가지고 있는 상태에서 회전은 z축만 활용하도록 해보겠다.
먼저 추가적인 복원력을 만들기 위해서, 회전에 대한 고정을 하나 더 만들어주겠다.
반드시 새로 만들어진 Constraint에도 con_con 세팅을 해주도록 한다. rotation에 대해 원래 각도로 고정되도록 해준다.
추가적인 Constraint가 달렸더니 Constraint들이 합성이되면서 다이빙대와 같은 효과를 내는 것을 볼 수 있다.
이때 좀 더 반동을 크게 해주고 싶다면 떨어지는 물체의 무게를 키워주거나, Box의 Stiffness 값을 낮추어 고정력을 떨어뜨리면 된다.
또한 스프링 같은 느낌을 지워주려면 Damping Ratio를 높여주면 된다.
지금까지는 하나의 관절에서만 합성 과정이 이루어졌었다.
Hard Constraint는 회전할 수 있는 방향에 대해서 세팅이 되었고, Soft Constraint는 복원력의 역할을 하였다.
이때 Soft Constraint의 Stiffness와 Damping Ratio 값을 변경해 복원력을 변경해줄 수 있었다.
이제 Position에 대해서 condof 세팅을 활용해보도록 하겠다.
rotation은 고정된 상태로 position의 y축에 대해서만 움직일 수 있도록 만들어주겠다.
복원에 필요한 Constraint의 type은 position으로 해준다.
결과를 보면 Sphere가 Box의 어느 구간에 충돌하던 위아래로만 움직이는 것을 볼 수 있다.
이때 Damping Ratio를 낮춰줌으로써 스프링 같은 효과를 만들어낼 수 있다.
그러면 지금 상태에서 복원력이 없다면 어떻게 될까?
복원력이 없기에 중력에 의해 공이 닿기도 전에 아래로 떨어지는 Box를 볼 수 있다. 이에 중력 또한 By Pass 해줘보겠다.
그 다음 중력이 없기에 공이 아래로 떨어질 수 있도록, SOP Network에서 Col 그릇에 대해 아래 방향으로 향하는 속도 값을 추가해준다.
Simulation 결과를 보면 공에 충돌하는 순간 그 힘에 의해 아래로 떨어지는 Box를 볼 수 있다.
2. 숙제
숙제 1, 회전문
숙제 2, 경첩, Damping ratio
'TWA Houdini1 > Rigidbody' 카테고리의 다른 글
TWA 후디니 1 RIGIDBODY_15_03 : 자동차 basic 리깅 + 자동화 (0) | 2023.04.23 |
---|---|
TWA 후디니 1 RIGIDBODY_15_02 : 4족 로봇 + 리깅베이직 (0) | 2023.04.22 |
TWA 후디니 1 RIGIDBODY_14_02 : 한땀 한땀 컨스트레인트 구하기 (0) | 2023.04.08 |
TWA 후디니 1 RIGIDBODY_14_01 : 의자 다시 만들기 (0) | 2023.04.07 |
TWA 후디니 1 RIGIDBODY_13 : Glue, Hard, Soft Constraint 기본기 (0) | 2023.04.07 |