Houdini/Houdini1_Rigidbody

RIGID BODY_18 재질표현 + 어려움🔥🔥🔥 - Ep18_Part 09.철과 강화유리

SevenElevenHou 2023. 5. 7. 02:05

 


나무, 유리, 강화유리, 철 등 이와 같은 물체의 성질을 구현하기 위한 컨셉을 배워보도록 하겠다.

 

이번 강의에서는 철과 강화유리에 대해 공부해보도록 한다.

 


찌그러짐을 묘사할 수 있으면 철의 묘사가 가능하다.

찌그러지는데 조건에 따라 뜯어지기까지 한다면, 강화유리의 묘사가 가능하다.

 

이제는 기본적인 세팅은 툭툭 만들어보자.

box를 만들고, packing해준 다음, box가 위치하게 될 포지션을 잡을 점을 add로 만들어준 뒤, copy stamp 노드로 점을 복사했다. 그리고 각 점에는 @name을 만들어줬고, 이어서 copy to point 노드로 각 점에 box를 복사했다.

복사한 box는 RBD Packed Object로 사용하기 위함이었고, 위에서 만들어줬던 점을 가지고 constraint를 만들었다.

 

dop network 세팅을 해주자.

 

constraint에 변형을 줘보자.

 

찌그러짐을 묘사할 때의 constraint 규칙으로는

어느 임계 충격을 넘어서면 glue constraint에서 soft / hard constraint로 전환되고, 정해준 시간동안 움직임이 허용되다가 다시 glue constraint로 완전히 굳어지도록(strength : -1) 하면 된다.

 

완전히 굳어졌다고 끝나는 것이 아니고, 다시 또 임계 충격을 넘어서면 움직여줄 수 있어야하기 때문에, 위에서 언급한 3단계의 constraint 변화의 cycle 반복이 될 것이다.

 

glue constraint에서 broken constraint가 발생할 경우, broken constraint를 새로운 constraint_name으로 할당해준다.

현재 metal_b는 soft constraint이므로, broken constraint가 발생하면, 그 조각들에 대해 soft constraint로 만들어준다.

 

그리고 b_count에서 임의의 시간을 세어주고,

 

세어준 count가 우리가 움직이기를 원하는 frame 이상이라면, constraint_name을 metal_c로 해준다. 그리고 다음 사이클을 위해 b_count는 0으로 초기화해준다.

 

그 다음엔 완전히 굳어있는 시간을 카운트해주고,

 

임의의 시간이 지나고, constraint_name을 초기 constraint였던 metal_a로 할당해준다.

이 때 c_count는 0으로 초기화해주고, @impact 어트리뷰트 또한 0으로 초기화해준다.

 


새로운 지오메트리에 box를 만들어주고, 위에서 작업한 simulation을 적용해본다.

위 결과물을 따라가는 철판을 만들어줘야한다.

point deform 노드를 사용해서 첫번째 인풋에는 변형이 될 물체(이제 만들어줄 remesh가 적용된 철판), 두번째 인풋은 기준위치, 세번째 인풋으로는 변형을 발생시키는 다른 위치를 연결해주면 된다.


이번에는 rubber toy가 찌그러지도록 해보자.

rubber toy를 만들고, 위치와 스케일을 조정해준 뒤, remesh to grid 노드로(18버전은 없어서...ㅠ) 하나의 덩어리 폴리곤으로 만들어준다.

그리고 약간 거친 면들이 있어서 subdivide 노드로 살짝 부드럽게 해준 뒤, polyextrude 노드로 두께를 준다.

 

그리고 바깥면에 scatter로 점을 뿌려주는데, 바깥면 / 안쪽면을 나누는 방법으로 polyextrude 노드의 parameter 중 Output Geometry and Groups 에서 Front Group과 Back Group을 활성화해준다.

 

이것을 위에서 만들어줬던 시스템에 연결해줘서 voronoi fracture로 조각을 내주고 constraint를 구해주면 된다.

무엇때문인지 만들어줬던 constraint system을 적용하고 시뮬레이션을 진행하면 찌그러지는 것이 아니고 멘탈이 박살나듯이 와사삭 박살이 나버리는 결과를 얻게 되어서, 일단 급하게 voronoi fracture의 두번째 output으로 얻게 되는 constraint 데이터를 가지고 활용해서 진행하였다.

dop network 밖에서 point deform 된 데이터를 확인해보면 잘 찌그러지고 있는 것을 확인할 수 있다.

날려봤더니 아주 철푸덕 찌그러진다.


지금까지 세팅했던 내용은 아주 최소한의 세팅이다.

  • 조건은 훨씬 다양하게 활용이 가능하다.
    • angle 값에 의해 구부러지기를 바란다면, angle 값을 사용할 수 있다.
    • impulse가 조건이 될 수도 있다.
    • impact가 조건이 될 수도 있다.

강화유리의 표현

  • 구부러지면서 끊어짐이 생기면 된다.

어떤 순간에 연결이 끊어지면 좋을까?

  • 기왕이면, 움직임이 발생하는 중(위에서 잡은 세팅에 의하면 constraint name이 metal_b 일 때)에 조각과 조각 사이가 멀어졌다면 끊어지면 될 것이다.

 

위의 이미지와 같이 충격으로 인해 조각들 사이가 벌어지게 되면, constraint와 관련된 sop network에 여러가지 정보가 추가되는데, 그 중 distance에 대한 정보가 있다.

위에서 언급한 끊어지는 순간은 constraint name이 metal_b 이면서, distance 값이 크다면 연결관계를 지우겠다고 하면 될 것이다.


총알이 날아오는 모습을 묘사해보려고 일반 창 크기로 조절을 하고, 최대한 자잘하게 깨지는 모습을 만들고 싶어서 뿌리는 점의 수량을 3000개로 유지했더니 결합력이 상상 이상으로 큰 듯 하다.

무얼 아무리 날려보아도 총알 크기의 물체를 날렸을 때는 깨지는걸 표현하는게 쉽지 않다...

아직 뭔가 잘 몰라서 세팅을 못하는 것이겠지...

적용을 위한 연습이 필요하다.

 

그리고 철의 찌그러지는 묘사에서 왜때문에 constraint system을 적용했을 때 시뮬레이션이 시작하면 그렇게 바사삭 깨져버리는 현상이 발생하는지도 확인을 해봐야할듯 싶다.

 

이렇게 하면 이런 느낌을 표현할 수 있다... 아직은 이렇게밖에 이해와 습득을 못한 느낌이 강하다.

두께가 있는 물체가 찌그러졌을 때의 면의 뒤집힘은 어떻게 할 것인지도 고민을 해봐야할듯 싶다.

 

아, 그리고 오늘 강의 덕분에 지난번 고민했던 콘크리트 안의 철근을 묘사할 수 있을 듯 싶다.

철처럼 구부러지고, 구부러짐이 심해지고 거리가 심하게 늘어나면 끊어지도록 묘사할 수 있지 않을까...? 근데 끊어진다면, 그 단면은 어떻게 처리해야하나...??

일단 구부러지는 것부터 생각해봐야겠다.

 

그리고... 왜 그냥 일반 box에 Alpha만 줬을 뿐인데, 푸른색이 도는걸까...

친해지고 싶지만 아직도 멀게만 느껴지는 후디니이다.