TWA Houdini1/Rigidbody

TWA 후디니 1 RIGIDBODY_19_04 : 하체세팅 + 찌그러짐 세팅

yiss09 2023. 6. 17. 03:08

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

 

HOUDINI1_ RIGIDBODY

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

www.twahoudini.com

Rigidbody19_04에서는 하체세팅과 서스펜션 세팅을 마무리지어 보겠다.

지금까지는 어떠한 자료에서든 이용될 수 있는 시스템을 만들어왔다면, 오늘은 이 자료에만 쓸 수 있는 단 하나의 세팅을 만들어줄 예정이다.

 

목차

1. Bottom 파츠에 공간 만들기

2. Constraint 세팅

3. Constraint Sourcing

4. 치환(Point Deform)

5. 랜더링

 

 


1. Bottom 파츠에 공간 만들기

 

먼저 Bottom 파츠에서 샤시를 보호하고 있는 부분을 떼어내어주겠다.

떼어낸 부분은 이전 강의에서 만들어두었던 샤시에 포함시켜주도록 하겠다.

샤시가 Pack 되기전 Merge하여 간단하게 합류시켜줄 수 있다.

 

충돌이 일어났을 때 바퀴나 샤시가 Bottom에 닿지 않기를 바란다. 이에 겹칠 것 같은 부분을 빈 공간으로 만들어려주려 한다.

샤시의 proxy 자료에 Bound를 하여 필요한 만큼의 사이즈로 키워주겠다.

그 다음 Boolean을 활용하여 Bottom에 Bound만큼의 공간을 Subtract 해주었다.

샤시가 겹쳐지지 않을 만큼의 공간이 만들어진 것을 확인할 수 있다.

 

바퀴의 경우는 proxy 시스템을 복사하여 그 크기를 원래의 바퀴보다 키워주도록 하겠다.

 

키워준 바퀴의 정보를 Object Merge로 가져와 Boolean에 합류시켜주었다.

바퀴가 움직일만큼의 넉넉한 공간이 비워진 것을 확인할 수 있다.

 

 


2. Constraint 세팅

 

이제 Bottom에 대하여 Constraint 세팅을 해줄 차례이다.

 

Constraint 세팅에 들어가기 전 우리는 충돌에 의해 부서질 부분과 그렇지 않을 부분은 분리해주어야 한다.

Boolean을 한번 더 활용해 Bottom 파츠를 세 구간으로 나누어 주겠다.

 

먼저 앞서 분리해주었던 구간들의 이름이 겹치지 않도록 name 정보에 새로운 정보들을 추가시켜주었다.

그리고 지난 강의에서 만들었던 Voronoi 시스템을 가져와 활용해주었다.

Output1에서의 자료를 o_bottom, Output2를 p_bottom, Output3을 Constraint 자료로써 활용해주었다.

Constraint 정보는 아직 준비되지 않은 상태이기에 p_bottom의 정보만을 Simulation에 합류시켜주었다.

Simulation 결과를 보면 충돌에 의해 조각으로 부서지는 것을 확인할 수 있다.

 

Bottom에서의 front, mid, rear 구간간의 Constraint를 만들어주려 한다.

각 구간의 마주보는 끝부분을 직접 선택한 뒤 Blast로 분리해주었다.

Add로 점만을 남겨주었다.

이렇게 만들어진 점들이 가장 가까운 점을 찾아서 연결되었으면 한다.

 

이를 Ray node의 Minimum Distance를 활용해 가까운 점을 찾아주겠다.

이때 Ray node를 작동시키기 위해선 점이 붙을 곳이 Primitive여야 한다.

Copy to Points로 점들을 Sphere(Primitive) 정보로 만들어주겠다.

결과를 보면 왼쪽 구간에 있던 점이 오른쪽 구간 중 가장 가까운 Primitive에 잘 붙은 것을 확인할 수 있다.

 

두 구간의 점을 Merge로 합쳐준 뒤 선으로 만들어주었다.

이때 Ray로 옮겨간 점이 해당 위치의 Primitive의 name을 가지게 하려면 Ray node의 Import Attributes from Hits로 name 정보를 옮겨주면 된다.

잘 작동하는 것이 확인되었다면 For-each Primitive로 모든 조각의 점들을 이어주겠다.

이렇게 구간간의 Constraint가 완성되었다.

 

이번에는 bottom_mid와 p_chassis_mid 사이에서 서스펜션의 역할을 할 Constraint를 만들어주려 한다.

bottom_mid의 중간 조각을 떼어내어 이용해주겠다.

그리고 p_chassis_mid에서의 중심점을 Add로 구해주겠다.

 

bottom_mid에서 떼어낸 조각을 Add로 점으로 만들어줄 수 있지만 좀 더 수직에 점이 위치하기를 원하기에 다른 방법을 이용해보겠다.

Transform을 활용해 p_chassis_mid에서의 중심점의 y 값을 조각의 위치만큼 높여주겠다.

그 다음 Attribute Copy를 이용해 조각에서의 name 정보를 이동한 점에 넘겨주겠다.

p_chassis_mid에서의 중심점과 방금 얻어낸 점을 선으로 만들어 원하던 Primitive를 얻어주었다.

 

Constraint의 name과 type을 정해준 뒤 앞에서 만들었던 Constraint와 함께 Simulation에 합류시켜주었다.

p_chassis_mid와 bottom_mid 사이에 Soft Constraint로 된 서스펜션을 만들어줄 수 있었다.

 

 


3. Constraint Sourcing

 

이후에 만들어줄 충돌 Simulation에 의해 앞뒤쪽의 범퍼가 찌그러졌으면 한다.

때문에 앞에서 만들어준 Constraint 중 bottom_front와 bottom_rear에 대하여 Sourcing을 해주려한다.

 

Rigidbody18_09에서 배웠던 철 재질의 느낌을 주는 Constraint Sourcing을 활용해주겠다.

 

Sourcing을 위한 Attribute Wrangle들을 연결해주기 전 각각의 Constraint에 대해서 분리하기 쉽게 Group을 주겠다.

 

ConstraintGeomtry의 Node Info를 확인해보면 Group이 잘 들어와있을 것을 확인할 수 있다.

Blast로 전부 떼어낸 다음, 충격에 의해 찌그러질 구간인 c_bottom_flex만을 Sourcing 해주도록 하겠다.

 

Simulation 결과를 보면 충돌에 의해 뒷범퍼가 찌그러지는 것을 볼 수 있다.

 

 


4. 치환(Point Deform)

 

이제 Simulation 결과를 고화질 자료로 치환해주려한다.

Simulation에서 bottom_front, bottom_mid, bottom_rear만을 떼어내어 다른 자료들과 합쳐주었다.

 

Point Deform을 활용해 Simulation 자료를 고화질 자료로 변경해주려한다.

Timeshift를 활용하여 충돌이 일어나지 않은 시점을 골라 Input2에 넣어주었다.

 

Input1에 들어갈 물체를 얻어주려한다.

제일 처음 Bottom 파츠를 떼어낸 부분으로 가서 작업하였다.

Divide에서 Bricker Polygons를 이용하면 바둑판과 같이 Primitive를 나누어줄 수 있다.

얻어준 자료를 Object Merge로 가져와 Point Deform의 Input1에 연결시켜주었다. 

 

자료 안의 정보가 너무 많은 경우 Point Deform이 오류를 일으키곤 한다.

Clean node로 Attributes 정보를 지워줌으로써 원하던 결과를 얻어줄 수 있다.

충돌에 의해 찌그러진 부분이 너무 울퉁불퉁하다고 느껴진다면, Point Deform에서의 파라미터를 조절해 부드럽게 만들어줄 수 있다.

 

Simulation에서의 결과가 고화질 자료로 잘 치환된 것을 확인할 수 있다.

 

 


5. 랜더링

 

이전에 준비해두었던 Material을 입혀주도록 하겠다.

그리고 Geometry를 하나 더 만들어 Object Merge로 정보를 불러와 Render해주도록 하겠다.

 

이렇게 충돌에 의해 찌그러진 차량의 느낌을 구현해보았다.