본문 바로가기

Houdini/Houdini1_Rigidbody

RIGID BODY_18 재질표현 + 어려움🔥🔥🔥 - Ep18_Part 05. 캐릭터로 박살내보자

 


지난 시간의 핵심

Tweak의 기준을 잡기 위해서 어떻게 물체의 딱딱한 정도를 정하느냐?

 

오늘의 쟁점

기둥 / 벽의 @strength 와 충돌을 발생시키는 캐릭터의 fake collision의 속도에 의한 충격량의 벨런스 싸움

 


brute 캐릭터를 가지고 충돌조건을 예쁘게 만들어주자.

 

fake collision을 만들어줄 것인데, brute의 도끼가 생각보다 많이 가늘어서 vdb to sphere를 사용해서 sphere를 채우는게 쉽지 않다. 일단 표면에 scatter로 점을 뿌려주는 것으로 시작해보도록 하자.

 

뿌려진 포인트들에는 각각 @id를 부여해준다.

그리고, 각각의 포인트에 대해 속도를 부여해줘야한다.

  • 속도가 필요한 이유는, 포인트들에서 현재 프레임에 생성된 sphere가 한 프레임동안 다음 프레임의 포인트들의 위치로 날아가야하기 때문이다.

trail로 궤적을 만들고, add를 사용해서 선으로 만들어준다.

그 중 하나의 선을 가지고 먼저 이야기를 진행한다.

현재 프레임에 위의 선에 의해 만들어지는 sphere들은 총 11개(0~10번)이다.

각각의 sphere들은 각자의 point number보다 1이 작은 point number를 가지는 포인트를 향해 날아가게 된다.

  • ex) 10번 포인트에서 만들어진 sphere는 9번 포인트 위치로 날아가고, 9번 포인트 위치에서 만들어진 sphere는 8번 포인트 위치로 날아가게 된다.

위의 이미지의 상황에서, 상대적으로 힘이 강해야 하는 쪽은 가장 앞쪽인 0번 포인트 쪽이다.

 

각각의 포인트에서 다음 포인트로의 방향을 알아야하고, 각각의 포인트가 전체 선에서 어느 위치에 있는지 0~1로 나타낸 비율을 알아야 한다.

  • 가장 앞쪽(0번 포인트)을 1, 가장 뒤쪽(10번 포인트)을 0으로 고려한다.
  • resample 노드를 사용해서 curveu(위치 비율), tangentu(선이 흐르고 있는 진행 방향)을 구할 수 있다.

length, segments 는 이번에는 사용하지 않는다.

curveu를 보면, 0번 포인트가 0을, 10번 포인트가 1의 값을 가지고 있다. 이것은 이 선의 위치에 해당하는 비율로 curveu가 0이라는 의미는 맨 처음을 의미한다.

현재는 위에서 언급한것처럼 0번 포인트가 1의 값을 가지고 10번 포인트가 0의 값을 가지기를 원하기 때문에, 수정해줄 필요가 있다.

  • tangentu와 curveu는 이름을 바꿔줘도 상관없다.

tangentu(dir)에 대해서는 방향이 반대이기 때문에 방향전환을 위해서 -1을 곱해준다.

짧은 선에서도 11개의 점이 생성되고, 긴 선에서도 11개의 점이 생성되면서 서로 간격이 다르게 나타나게 되는데, 이것을 고치고 싶다면, resample 노드에서 length로 나눠주면 된다.

length 적용결과.

length를 적용하는 방식을 추천하는 이유

  • 움직임이 작을 때는, sphere의 개수가 상대적으로 더 적다. 이 말은 곧 충격량이 작다는 것을 의미한다.

이제 dop network 세팅을 잡아야한다.

그 전에 지금까지 해보지 않았던 고민을 해봐야한다.

지난 시간까지 작업한 부숴지는 벽과 기둥, 그리고 지금 작업중인 brute는 현재 다른 geometry에서 작업이 진행되고 있었다. 그렇기 때문에 어느 쪽에서 시뮬레이션을 진행하는 것이 좋을지 결정을 내려줘야한다.

 

조각에 대한 정보와 constraint를 brute 작업중인 geometry로 가져와서 작업을 진행할 수도 있고, fake point의 정보를 부숴지는 벽 데이터가 존재하는 geometry로 가져와서 작업을 진행할 수도 있다.

 

(선생님은 공평하게!!! 새로운 geometry를 만들어서 둘 다 가져와서 작업을 진행하셨다.)

 

새로운 Geometry에 필요한 데이터들을 object merge로 불러온다.

tweak을 진행할 때 계속 다른 geometry로 넘어가서 고치고 다시 돌아오고 하는 수고로움과 귀찮음을 피하기 위해, tweak을 할 때 조절되는 대표적인 정보들만 따로 parameter로 만들어서 새로운 geometry 안에 컨트롤 노드를 만들어주고 조절해주면 많이 편하다.

 

기본적인 세팅이 끝나면, 이후부터는 tweak의 영역이다.

 

적당히 부숴지는 기준을 찾았다면(fake collision의 vel mult 값(충격량)과 strength의 밸런스) area_ramp parameter를 조절해서 기둥이 부숴지는 단단함을 조절해줄 수 있다.

 

trail의 길이에 따라서도 힘의 여운이 길게 남게 되면서 기둥이 부숴지는 형태가 달라지게 된다.

 

 

noise가 적용된 형태의 기둥을 부숴보자.

 

strength가 상당히 높은 값이 되어야 noise 미적용 기둥과 비슷한 형태로 부숴지는 것을 확인할 수 있다.

이것은 충돌조건의 차이 때문에 그러하다.

 

왼쪽 : 노이즈 미적용 / 오른쪽 : 노이즈 적용

노이즈가 적용되지 않은 기둥은 충돌조건이 만들어질 때 각 조각과 비슷한 모양으로 충돌조건이 만들어지고 결합관계가 만들어진다.

하지만, 노이즈가 적용된 기둥은 파편의 모양에 대해 convex hull이 생성될 때, 위 이미지와 같이 충돌조건이 겹치는 구간이 발생할 수 있다.

이런 겹치는 구간 때문에 시뮬레이션 시 두 조각은 서로 반발력이 발생하고, 그렇기 때문에 더 큰 힘(strength)으로 결합시켜놔야 노이즈가 적용되지 않은 기둥과 비슷한 부숴짐을 보인다.

 

그래서 작업자는 안정성을 위해 노이즈가 적용되지 않은 기둥을 사용할지, 디테일한 묘사를 위해 노이즈가 적용된 기둥을 사용할지 정할 수 있어야한다.

  • 이 부분은 작업에 따라 달라진다. 디테일한 묘사가 필요하다면 그것을 위해 노이즈가 적용된 기둥으로 작업을 진행할 것이고, 멀리 있어서 디테일한 부분이 크게 묘사되지 않아도 좋다면, 좀 더 안정적인 노이즈 미적용 기둥으로 작업을 진행하도록 하면 된다.(정답은 없다)

 


 

이번에는 멀리서 기둥을 부수는 brute를 묘사해보자.

 

방법은 도끼의 맨 밑바닥 포인트와 꼭대기 포인트를 이어준 선에 scatter로 점을 뿌려서 그 점을 sphere가 생성되는 포인트로 활용하는 것이다.

 

두 점을 이어준 선은 임의의 값을 곱해줘서 길이를 조절할 수 있도록 해준다.

 

그리고 carve를 이용해서 brute가 휘두르는 반경의 멀리 있는 부분은 타격을 좀 더 늦게 받도록 조절해준다.

(그렇게 조절해줘서 위의 이미지처럼 곡선형태가 나오게 되었다.)

 

trail 노드에서 trail increment 값이 높아질수록 더 넓게 퍼지게 되고, 도끼를 휘두르는 모션을 보다 늦게 따라오는 효과를 가져온다.

trail increment 0.25
trail increment 0.3
trail increment 0.35


이제는 끊임없는 tweak의 시간...

 

더 좋은 결과물을 만들어낼 수 있도록 시간을 들여야한다.

 

나에게 가장 부족한 시간 ㅠ

 

시간은 절대적으로 내 편이 아니다...

 

보다 영리하게, 한번을 하더라도 정신 바짝 차리고, 작업을 하자!!!

 

실제 현상들을 많이 관찰하고 분석하자.