본문 바로가기

Houdini/Houdini1_Rigidbody

RIGID BODY_18 재질표현 + 어려움🔥🔥🔥 - Ep18_Part 10.나무와 유리 (이론 끝 휴.. )


Rigid body Simulation

  • 딱딱한 물체에 대한 충돌 시뮬레이션

 

Constraint

  • 물체 사이의 연결규칙

 

물체가 부러짐에 있어서 나무같아보이려면?

  • 각각의 조각이 나무조각처럼 느껴져야한다.
  • 각각의 조각들 사이의 연결관계, 즉 constraint 세팅이 나무느낌이 나야한다.
    • 나무 느낌을 내야하는데, 콘크리트 조각을 내던 방식으로 조각을 만든다면, constraint 조절을 백날 열심히 해봤자 나무처럼 보이진 않을 것이다.

 

마찬가지로, 유리가 유리처럼 보이려면, 유리의 성질을 이해하고, 유리처럼 조각이 나야하며, 유리처럼 부러져야한다.

 

 

지난 시간의 철 / 강화유리는 결이 조금은 다른 작업이었다.

  • 철은 구겨지는 것은 쉽지만, 조각나는 것은 어렵다. 그래서 끊어지지 않는 것으로 묘사했다.
  • 강화유리는 필름과 섬유가 유리에 혼합되어있는 형태라서 일반 유리와는 반응이 다르다. 일반 유리처럼 조각별로 날카롭게 부러지는 것이 아니고, 한번에 작은 조각들로 촤라락 부러지지만, 조각난다고 해서 쉽게 떨어져나가지는 않는다.
    • ex) 자동차 유리

 

나무, 유리, 천은 하나의 강의로 온전히 설명하기엔 무리가 있는 내용이다.

콘크리트의 경우 사이즈, 모양에 상관없이 조각이 나는 규칙이 비슷했기 때문에 일부러 더 깊게 이야기를 진행했지만, 나무나 유리와 같은 특수재질은 작업 상황과 스케일에 따라, 그리고 결에 따라 작업이 다 달라질 수 있다.

어마어마하게 먼 거리에서 나무조각을 묘사하는 것과, 가까이에서 나무조각의 디테일을 슬로우 모션으로 보는 것, 서로 완전 다른 작업이 될 것이다.

마찬가지로 먼거리에서 관찰되는 유리창이 깨지는 묘사와 코앞에서 유리가 깨지는 것을 목격하는 것, 이 두 장면은 서로 같은 로직으로 구현할 수 있는 내용이 아니다.

또한 나무 중에는 결에 따라서 세로, 혹은 가로로 커팅된 나무들도 있다. 나이테가 느껴지도록 통으로 썰린 나무도 있고, 나무를 조각내고 압축시켜서 만들어진 합성목도 존재한다. 

 

이런 것들은 모두 질감표현이 달라져야한다.(와...)

 

이 말인즉슨... 이제는 스스로 RnD를 해야할 때라는 의미이다.

 

후디니에 정답은 없다. 반칙도 없다. 구현되면 잘한거다.

남들과 차별된 것을 만들고 싶다면, 선생님을 따라하는 것을 넘어서서 각자의 압도적인 RnD가 준비되어야한다.


나무 표현

 

조각낼 나무를 만들어준다.

 

Tip)

  • 나무조각처럼 길쭉한 조각을 만들어줄 때, 원본 물체를 스케일 조절로 줄여준(혹은 늘려준) 다음, 조각을 내주고 다시 한번 스케일 조절로 원상복구를 해주면 길쭉한 조각을 낼 수 있다.

 

이 방법을 사용하면, voronoi fracture의 두번째 인풋으로 나오게 되는 constraint 정보를 사용할 경우, 원본의 constraint가 아닌, 스케일이 조절된 물체의 constraint가 구해지게 된다.

이것은 constraint에 사용될 primitive이다.

여기에도 스케일을 원상복구하는 transform 노드가 필요하다.

constraint 세팅 후, 지난시간에 만들어준 dop network(bending)을 가져온다.

  • 이름은 metal로 되어있는데, wood로 다 바꿔준다.

 

시뮬레이션을 진행해보면 와르르 무너진다.

  • 그 이유는 @name 지정이 잘못되었기 때문이다.

조각의 이름을 assemble 노드에서 'wood_'로 저장되도록 설정했으나, assemble 이전에 voronoi fracture를 만들 때는 piece로 이름이 생성되기 때문이다.

  • voronoi fracture 노드의 Piece Prefix parameter를 wood_로 바꿔주면 된다.

이제는 깨질 수 있도록 결합규칙을 바꿔보도록 하자.

remove connect 항목을 살려준다.

 

나무판자가 두개라면?

  • scatter로 뿌려주는 포인트의 수량이 나무판이 하나일 때보다 두배는 되어야 비슷한 느낌이 난다.

 

나무를 이렇게만 표현하기엔 뭔가 아쉽다.

  • 덩어리감이 부족하다.
  • 뭔가 우드득, 우지끈 하면서 부러지는 느낌이 났으면 좋겠다.

 

작업자가 지정한 덩어리가 있고, 그 부분은 부러지더라도 어느 수준 이상으로 형태를 보존할 수 있도록 해주자.

  • 다 부러지더라도, 작업자의 의도에 맞게 원하는 덩어리감이 표현되어야한다는 말이다.

위 이미지와 같은 가이드를 만들어주고, 이 가이드 안쪽은 또 다른 결합력을 가지고 있으면 될 것이다.

 

guide constraint 적용 전
guide constraint(soft) 적용 후
guide constraint(hard) 적용 후

Hard constraint 는 부들부들 거리는게 좀 별로이긴 하지만, 덩어리감은 확실히 느껴진다.

 

지금까지는 직접 끊어질 부분을 select 해준 것이었고, 이제 진짜 guide에서 정보를 받아서 끊어질 부분을 알아서 만들어주도록 해보자.

 

아이디어는, 레퍼런스 데이터에서 색을 받아와서 검정색인 부분은 덩어리감의 표현에서 제외시키는 그런 아이디어이다.

 

assemble 후, add 노드로 primitive 정보를 날려서 포인트만 남겨준다.

그리고 for each point 블럭에서 의미는 없지만 packing을 해줌으로써 primitve를 만들어준다.

  • packing 전에는 primitive가 없다.
  • primitive를 만들어준 이유는, color를 만들어주고 데이터를 넘겨줄 때 primitive에 넘겨주기 위함이다.

가이드의 개수를 늘려보자.

부러질 것이라 '예상할 수 있는 곳'에서 부러짐이 발생했고, 덩어리감도 유지되고 있다.

덜 부러지도록, remove connect 노드의 limit를 바꿔줄수도 있다.

 

이제 tweak은 의미가 없다.

우리에게 필요한 것은 '아이디어' 이지, 어떻게 tweak을 하는지가 아니다.

 


나무에 대한 정리

  • 조각의 결을 길게 해줬다.
  • 우지끈 부러지는 느낌을 주기 위해 bending이 가능한 설정을 했다.
  • 그럼에도 부러지지 않고 결합되어있는 덩어리감을 만들어주기 위해서 constraint에 추가적인 작업을 진행했다.

 

노드의 나열이 이야기로써 보여야하고, 작업하는 방식 또한 기획과 이야기들의 묶음이 되어야한다.

 


RBD 관련 노드 하나 이야기하고 가자.

 

RBD Material Fracture Node

  • 첫번째 인풋으로 조각낼 Geometry가 들어간다.
  • Material Type에 따라 조각을 내주는 모양이 다르다.

wood
concrete
glass
custom

이 중에서 유리에 대해서 이야기해보자.

어떤 방식으로 조각을 내야 저런 모양이 나올까?

  • 기준을 두고, 회전하면서 깨져야한다.
  • 기준의 수량은 원하는대로 조절이 가능하다.

노이즈가 빠졌다면,

위와 같은 기본 모양이었을 것이다.

 

일단 impact point가 1이었을 때를 기준으로 생각해보자.

면을 하나 떼어서 생각해보는데, 이 위에 임의의 포인트 하나를 뿌려준다.(scatter)

그리고 voronoi fracture를 적용하기 위해서 circle을 만들어준다.

만들어준 circle을 아까 뿌려준 point에 copy to points 노드로 붙여주고, 이 circle을 가지고 voronoi fracture를 만들어주면 아래의 이미지와 같이 만들어지게 된다.

방사형 선이 더 많아지길 원한다면 circle의 division 값을 조절해주면 바꿀 수 있다.

impact point가 더 많아지기 원한다면, scatter에서 뿌려주게 되는 포인트의 수량을 조절해주면 된다.

 

그리고 어떤 규칙으로 저 조각들이 썰어져나갈지 정해준다면, RBD Material Fracture의 glass처럼 표현이 가능할 것이다.

 

노이즈 없이 원하는 기준만큼 쪼개주는 시스템을 만든다.

각각의 조각에서 어느 기준으로 얼만큼 쪼개질지 만들어준다.

각각의 impact point가 만들어내는 조각이 랜덤하게 표현한다면, 제공하는 circle의 division 값이 scatter에서 만들어진 포인트의 개수만큼 달라야한다. 어떤 랜덤한 값을 circle에 계속 제공할 수 있다면, impact point에서 쪼개지는 규칙이 기준점이 달라지더라도 서로 다르게 될 것이다.

 

일반 유리의 파손


이론은 끝! 이제는 실전이다 =_=

 


RBD Material Fracture...

지난번에 어떤 고마운 분께서 넌지시 이야기해주셨던 바로 그 노드!!!

기본을 공부하지 않고 봤다면 멘붕이 바로 왔을 것 같은 노드이다...

사용법을 알게 되면 잘 쓰겠지만, 한 발 더 나아가는데는 기본이 빈약해서 어려움이 많았을 것 같다.

 

지금은... 일단 이 노드를 까서 분석해봐야겠다는 생각이 마구 들고 있다.