https://www.twahoudini.com/course/rigidbody1
HOUDINI1_ RIGIDBODY
3️⃣ 출동 SIMULATION 기초 이론부터 심화된 내용을 공부합니다. 또한 자동차를 이용한 리깅 시뮬레이션 BASIC을 훈련합니다.
www.twahoudini.com
Rigidbody13에서는 지금까지 배운 Constraint의 기본지식과 Rigidbody 지식을 활용해서 몇가지 간단한 예제들을 만들어보려 한다.
그 과정에서 물체 사이의 관계를 만들면 어떤 묘사들이 가능해지는지 실험해보려 한다.
그리고 Soft Constraint와 Glue Constraint도 간단히 다루어보려 한다.
1. 예제 1(복습)
2. 예제 2(Primitive Properties)
3. 예제 3(Soft Constraint)
4. 예제 4(스프링)
5. 예제 5(Hard,Soft,Glue)
1. 예제 1(복습)
첫 번째 예제이다.
두 물체 사이에 어떠한 연결 관계가 있고, 아래에 있는 Box가 위에 있는 Box에 매달려 있다.
그리고 밑에 있는 Box가 어느 시점에 힘을 받아서 좌우로 움직이는 것을 볼 수 있다.
먼저 Box 2개를 생성해 아래에서 움직일 추가 될 Object를 box, 위에서 고정대의 역할을 할 Object를 pivot이라 하겠다.
각각의 Object에 이름을 지정해주고 @active를 미리 정해주겠다.
Simulation의 영향을 받을 box만 @active 값을 1로 준다.
Constraint에 대한 세팅을 해줄 차례이다.
이름의 정보를 가지고 있는 Objects로부터 면을 제거하고 점을 떼어낸다.
그 다음 선으로 연결해준 뒤, Constraint에 대한 type과 name을 정해준다. Measure를 달아 @restlength에 대한 값도 정의해준다.
이제 Dop Network 안에서 RigidBody Simulation에 필요한 세팅을 해주고 난 뒤, Constraint, 그리고 추가 움직이기 위한 Sourcing까지 마무리해준다.
Simulation을 돌려보면 고정대에 매달려 움직이다가 점점 속도가 줄어드는 추를 볼 수 있다.
예제1은 지난 RigidBody12에서의 복습이라고 봐도 좋다.
2. 예제 2(Primitive Properties)
이전까지의 작업에서는 두 물체 사이에 연결 관계를 제공했을 때, 두 개의 경첩이 있었다.
그런데 이번에는 한 개의 경첩으로 연결된 물체를 만들어볼 예정이다.
그리고 예제1과 같은 세팅에서 경첩의 위치가 바뀜에 따라 결과가 어떻게 나타나는지 보겠다.
우리가 Constraint(물체 사이의 관계)를 만들 때, Constraint에 필요한 선을 만들 때 사용되는 점은 물체의 위치를 대변해주었다.
그래서 가장 신경을 써주어야 했던 것은 대변할 위치가 가질 이름이다. 바로 점이 대변할 위치와 같은 이름을 가지고 있어야 했었다.
그렇게 대변할 위치가 잘 정해졌을 때 두 위치를 연결해서 Constraint로 만들어주게 된다.
그런데 만약 Object를 대변할 위치가 해당 Object의 중간이 아닌, 다른 위치가 될 수 있을까?
이에 대해 작업해보도록 하겠다.
앞의 예제1의 세팅을 가져와 이용하겠다.
Pack되어 있던 Box를 Unpack해준 뒤, Blast로 위에 있는 Box에서는 아랫면을, 아래에 있는 Box에서는 윗면을 떼어내도록 하겠다.
Blast로 떼어낸 면의 중심이 되는 위치 정보를 얻기 위해서, Bound node로 면의 중심위치를 얻어준 뒤 Add로 점을 제외한 모든 면을 제거해주었다.
그 다음 Box에 이용된 @name을 가져와 붙여주어, 해당 points들이 Box를 대변할 위치로 인식하게 해주었다.
그 다음 점들을 선으로 만들어주고 Constraint에 필요한 세팅들을 해주었다.
Simulation 결과를 보면 경첩의 위치가 바뀐 것을 볼 수 있다.
그 다음은 경첩의 위치를 Box 외부, Box와 Box의 중간으로 옮긴 결과이다.
하나의 경첩으로 보이지만, 두 경첩이 겹쳐있는 것이라고 할 수 있다.
이제 좀 더 쉬운 방법을 소개하겠다.
바로 Primitive Properties를 이용한 방법이다.
Do Transformation의 Scale 값을 변경해줌으로써 Primitive의 사이즈를 변경해줄 수 있다.
Scale의 y값을 0으로 해줌으로써 우리가 얻고자 했던 두 경첩이 하나로 겹쳐 움직이는 모션을 만들 수 있었다.
3. 예제 3(Soft Constraint)
Sphere가 회전하는 Box에 매달려 회전에 딸려가는 모션을 만들어보려한다.
이때 Constraint의 type을 "all"과 "position" 두 가지로 만들어 비교해볼 예정이다.
Box와 Sphere를 하나씩 생성해 Pack해준 뒤, Copy to Points로 name과 @active, @animated, @deforming에 대한 정보를 넘겨주었다.
Pack된 Box에 Transform으로 Animation을 주어 @animated가 작동될 수 있도록 해주었다.
먼저 Constraint의 type은 "all"로 두었다.
이번에는 Primitive Properties로 경첩의 위치를 바꾸어 보았다. @constraint_type은 "all"이다.
회전에 의해 겹쳐있던 두 개의 경첩이 벌어지는 것을 볼 수 있다.
이는 Hard Constraint에서의 복원력보다 회전하는 힘이 더 강해서 벌어진 결과라고 볼 수 있다.
위의 세팅에서 @constraint_type을 "position"으로 변경한 결과이다.
상대 각도는 고정되었지만 거리가 고정되어 흔들거리는 것을 볼 수 있다.
이제 Soft Constraint를 사용해보려 한다.
Soft Constraint에 관련된 node들을 보면, 그 종류가 다양한 것을 볼 수 있다.
하지만 우리는 그 중 Bullet Soft Constraint Relationship을 사용하려 한다.
지금까지 사용한 Hard Constraint의 특징으로는 탄성이 있다. 그런데 Hard Constraint는 복원력이 너무 강해서 탄성의 느낌이 굉장히 짧고 단호한 느낌이다.
하지만 지금부터 이용할 Soft Constraint는 복원력이 Hard Constraint에 비해 상대적으로 약하다. 이 때문에 탄성의 묘사가 더 제대로 될 것이다.
여기서 눈여겨 볼 것은 바로 경첩의 모양이다. Soft Constraint로 전환하면서 느낌이 달라진 것을 볼 수 있다.
만약에 Stiffness 뻣뻣한 정도를 낮추거나 높인다면 결과가 어떻게 달라지는지 보겠다.
왼쪽의 결과는 Stiffness를 5, 오른쪽은 100을 준 결과이다.
Stiffness 값이 낮아짐에 따라 경첩 부분이 고무줄과 같은 느낌으로 표현된다.
반대로 Stiffness 값이 올라가면 복원력이 높아져 마치 Hard Constraint와 같이 표현된다고 볼 수 있다.
4. 예제 4(스프링)
이번 예제에서는 큰 Box가 작은 Box에 떨어지는데 충돌에 의해 작은 Box에 탄성이 일어나 큰 Box가 튕겨나가는 것처럼 묘사해보도록 하겠다.
이때 작은 Box에 사용되는 Box의 갯수는 2개이다. Simulation 이후 후보정을 하여 두 Box가 하나의 Box처럼 보이도록 해주겠다.
예제2의 세팅을 가져와 사용하겠다.
먼저 Box의 y축 사이즈를 줄이고, 위치를 변경해준다.
Constraint의 type은 "all"로 두겠다.
그 다음 위의 작은 Box에 충돌할 큰 Box를 생성해준다.
Simulatio에서 중력과 탄성의 영향을 받아야하기 때문에 active를 1로 해주겠다.
Dop Network 안에서 Col을 불러온다.
이때 중요한 것은 Constraint는 Constraint 세팅이 되어 있는 box 그릇 아래에만 붙는다.
큰 Box가 떨어지면서 작은 Box에 큰 충격을 주고 싶다면, Col의 Density 값을 높여주도록 하자.
이제 후보정을 해줄 차례이다.
작은 Box를 Unpack한 뒤 가장자리 8개의 점을 Blast로 떼어내어준다.
이제 Add로 남은 면을 제거하고 points만 남겨준다.
그 다음 Polygon type의 Box를 생성해 point number의 위치가 잘 맞는지 확인한 후 앞서 얻은 점의 P 정보를 Attribute Copy로 Box에 넘겨준다.
points의 위치 정보에 따라 Box의 형태가 변형된 것을 볼 수 있다.
숙제로 스프링은 만들어보았지만, 아직 스프링처럼 points의 갯수가 많은 primitive를 Constraint로써 쓰는 법은 잘 모르겠다. 좀 더 연구해보아야겠다.
5. 예제 5(Hard,Soft,Glue)
이번에는 하나의 Constraint 세팅을 가지고 Hard Constraint Relationship, Soft Constraint Relationship, Glue Constraint Relationship에서의 결과 차이를 비교해볼 예정이다.
세로로 쌓인 4개의 Box에 속도를 가진 Box가 날라와 충돌하는 모션을 만들어보겠다.
4개의 점을 위로 쌓아준 뒤 위치정보를 Pack된 Box로 넘겨주겠다.
points마다 각기 다른 @name 정보를 가질 수 있도록 해주겠다.
이제 제일 아래의 0번 point의 active 값만을 0으로 두고 나머지 points는 active 값을 1로 두려한다.
Blast로 0번 점과 나머지를 분리준 뒤 각기 따로 작업 후 다시 Merge로 합쳐주겠다.
이렇게 만들어진 정보를 box라 하겠다.
다음으로는 Constraint에 대한 정보를 만들어주려 한다.
@name의 정보를 가지고 있는 점들을 Add node를 이용해 선으로 만들어주겠다. 그 다음 PolyCut으로 모든 Points 구간에 대해 Cut 해주도록 하겠다.
For-each Primitive를 달아 Single Pass로 본다면 이렇게 points를 기준으로 line이 구간마다 분리된 모습을 볼 수 있다.
그 다음 모든 line에 Constraint type과 name을 동일하게 지정해준다.
Measure를 달아 @restlength를 정의해주겠다.
이제 Dop Network 안에서 RigidBody Simulation을 위한 세팅과 충돌을 위한 Sourcing을 해준다.
Sop Network 안에서 만들어지는 Object에도 active 설정을 해주도록 한다.
위의 세팅에서 각각 Hard Constraint Relationship, Soft Constraint Relationship, Glue Constraint Relationship으로 Simulation한 결과이다.
Glue Constraint의 경우 경첩 위치가 풀이 붙는 위치라고 생각할 수 있다.
때문에 Primitive Properties로 경첩의 위치를 Box간의 면과 면이 맞닿는 부분으로 맞춰준다면 풀로 붙은 것과 같은 효과를 제대로 볼 수 있다.
'TWA Houdini1 > Rigidbody' 카테고리의 다른 글
TWA 후디니 1 RIGIDBODY_14_02 : 한땀 한땀 컨스트레인트 구하기 (0) | 2023.04.08 |
---|---|
TWA 후디니 1 RIGIDBODY_14_01 : 의자 다시 만들기 (0) | 2023.04.07 |
TWA 후디니 1 RIGIDBODY_12 : AAD 개념과 세팅 & 진자운동 (0) | 2023.04.07 |
TWA 후디니 1 RIGIDBODY_11 : Constraint 기본 개념 (0) | 2023.04.06 |
TWA 후디니 1 RIGIDBODY_09 : 총알+레고+플랭크 소싱으로서 시뮬레이션하기 (0) | 2023.03.31 |