현재 준비된 자동차의 부품은 상당히 많다. 또한 사이즈도 다양해서 어떤 부품은 매우 크고, 또 어떤 부품은 매우 작다.
그래서 사이즈 분류가 자동으로 되는 시스템이 필요하다.
- 사이즈가 큰 부품들은 voronoi fracture로 쪼개는 과정이 들어가고,
- 사이즈가 작은 부품들은 쪼개는 과정 없이 바로 proxy 데이터로 변환하게 할 예정이다.
- 면적을 통해 사이즈를 유추해내면 된다.
물체의 부러짐과 찌그러짐을 묘사하기 위해 결국은 조각을 내야한다.
하지만, 어떠한 요인으로 인해 voronoi fracture가 예쁘게 적용되지 않는 경우가 존재한다.
- 어떠한 요인 : 물체가 완벽하게 닫힌 물체인가, 아니면 물체의 어딘가가 열려있는 물체인가.
voronoi fracture는 기본적으로 닫힌 물체에 대해서 이상적인 결과를 도출해준다.
- 어딘가가 뚫려있는(열려있는) 물체에는 올바르게 작동하지 않는다.
- 이상적인 결과를 위해서는, 열린 물체를 완벽히 닫힌 물체로 변환해주는 작업이 필요하다.
- poly extrude로 얇게 두께감을 주고 닫힌 물체로 만들면 된다.
poly extrude 노드를 사용할 때, distance 값이 양수일 경우, 원본의 부피보다 커지게 된다. 그렇기 때문에 distance 값을 음수로 입력해서 안쪽으로 면이 들어가도록 해준다.
- output back을 활성화하면 면이 뒤집혀있는 것을 확인할 수 있다. reverse 노드로 면을 뒤집어준다.
이제는, 현재 가지고 있는 자동차의 부품들이 어느 것이 닫힌 부품이고, 어느 것이 열린 부품인지 판별해주는 시스템을 만들어야한다.
- 열린 부품인지, 닫힌 부품인지 houdini가 스스로 판단할 수 있어야한다.
- 닫힌 부품이라면, 바로 voronoi fracture를 적용해주고,
- 열린 부품이라면, 두께감을 먼저 주고 voronoi fracture를 적용하면 된다.
- 어떻게 하면 houdini가 스스로 열린 / 닫힌 부품인지 판단해줄 수 있을까?
- group 노드를 사용하면 된다.
- Unshared Edges를 활성화해주면, 면이 열려있어서 공유하지 않는 edge를 가진 부분이 선택된다.
- 이것을 활용해서 데이터를 판별한 뒤, group 안에 아무런 데이터가 없어 0인 경우에는 voronoi fracture를 바로 적용하고, group 안에 선택된 면이 존재할 경우, extrude로 두께를 주고 voronoi fracture를 적용한다.
- group 노드를 사용하면 된다.
우리는 한조각 한조각 따로 작업하는 것이 아니고, 여러조각을 동시에 판별하고 작업을 진행할 것이다.
for each connected piece 블럭을 사용해준다.
지금의 상황은 primitive가 연결된 물체들에 대해 열린 물체인지 닫힌 물체인지에 대한 분석이 끝난 것이다.
분석한 데이터를 받아서 group 안에 데이터가 몇개가 있는지 판별하기 위해서는 nprimitivesgroup 노드를 사용해야한다.
- group 중에서 몇개의 정보를 가지고 있는지를 세어주는 function
지금까지 작업한 내용은 일단 subnet으로 묶어준다.
추가적으로 voronoi fracture의 결과로 얻게 되는 조각들은 packing되어야 dop network에 사용될 수 있을 것이고, 각각 고유한 @name을 가지면 좋을 것 같다.
proxy도 만들어주면 좋을듯 싶고, 연결된 물체에 대해 작업하는 것이기 때문에 constraint에 필요한 primitive도 만들어지면 좋을것 같다.
metadata를 사용하여 각 물체의 번호에 해당하는 숫자를 itoa function을 사용해서 string으로 붙여서 고유한 이름을 만들어줬다.
이어서 열른 물체에 대해 조각을 만들어주면서 각 조각들을 dop network에 활용할 수 있도록 assemble 노드로 packing해주고, 고유한 이름을 만들어주기 위해서 앞에서 만들었던 @parts_detail을 활용해서 조각별로 이름을 붙여준다.
이제 proxy를 만들어주도록 한다.
- 각 조각에 대해 unpack 해주고, convex hull 로 proxy 데이터를 만들어준 뒤, 다시 packing해준다. 이 때 이름 정보들이 날아가기 때문에, unpack 전의 단계에서 @name, @parts, @parts_detail 정보를 가져와서 attribute copy 노드로 넣어주면 된다.
constraint 도 만들어줄 것인데, voronoi fracture의 두번째 아웃풋을 가지고 만들 것이다.
- 확인해볼 것이 있다면, voronoi fracture의 0번 위치와 assemble 노드 이후의 0번 위치가 같은지 확인해줘야한다.
위치가 살짝 달라진 것을 볼 수 있다.
- voronoi fracture 이후에 assemble 노드가 적용되면서 위치가 살짝 달라진 것인데, 결은 같다. 그리고 packing 때문에 위치는 살짝 바뀌었지만, 각각의 조각이 쌓여있는 '순서'는 같다는 것을 알 수 있다.
- 그렇기 때문에, @name 정보를 받아오는데 아무런 무리가 없다.
이후에는 frac, proxy, constraint 정보를 나눠서 볼 수 있도록 group을 만들어주고 merge로 묶어주면 된다.
닫힌 물체에 대해서는 poly extrude와 reverse 노드 적용만 다를 뿐이기 때문에, 그 부분만 지워주면 된다.
일단 여기까지의 내용을 subnet으로 묶어준다.
현재는 균일한 사이즈를 가지는 물체들을 기준으로 작업을 진행하였으나, 자동차의 경우는 부품에 따라 사이즈가 천차만별이다. 심지어는 어떠한 부품들은 사이즈가 너무 작아서 voronoi로 쪼개주는 과정 없이 바로 proxy 데이터로 치환하는 것이 더 도움이 될 수도 있다.
또한 현재까지 작업한 내용은 scatter로 뿌려주는 포인트의 개수가 정해져있다. 그래서 사이즈가 큰 부품은 상대적으로 크게 조각나게 되고, 사이즈가 작은 부품은 상대적으로 작고 너무 많이 조각나게 될 것이다.
먼저 부품의 사이즈에 따라 voronoi 적용 여부를 나눠줄 수 있도록 세팅한다.
- measure의 결과로 얻는 area 정보를 토대로 나뉠 수 있도록 group expression을 사용한다.
area가 limit보다 작은 조각들은 voronoi fracture 작업을 제외하고 바로 @name 정리 및 proxy 데이터 생성작업을 진행하도록 해준다.
이번에는 부품의 사이즈에 따라서 scatter로 뿌려지는 포인트의 개수가 가변적일수 있도록 세팅하자.
- scatter parameter의 force total count가 아닌, density scale로 포인트를 뿌려주게 되면 부품의 사이즈에 따라서 뿌려지게 되는 포인트의 개수가 달라지면서 voronoi fracture로 쪼개줄 경우, 크기가 비슷한 조각들로 쪼개줄 수 있게 된다.
위의 두 이미지를 비교해봐도 아래쪽 결과가 조각들의 크기가 비슷한 것을 확인할 수 있다.
이번에 만들어준 시스템이 결코 만능은 아니다.
현재 작업중인 이번 케이스에서는 도움이 될지 모르나, 다른 작업에서는 큰 역할을 하지 못할수도 있다.
즉, 작업 상황에 따라 필요한 시스템을 이제는 뚝딱뚝딱 만들어서 사용할 수 있어야한다는 말이다.
강의를 벗어나서 스스로의 작업을 진행할 때는, 지금까지 만들었던 시스템 안에서 해결을 보겠다 가 아니고, 지금 나에게 필요한 것은 무엇인지, 원하는 결과는 무엇인지에 대한 것들을 고민하면서 시스템을 직접 구축하고 해결을 하면서 작업을 진행해야 한다.
아... 굴러라 나의 돌머리야...
구르고 굴러서 깨지고 깨져서 아이디어를 만들어내란말이다...ㅠ
'Houdini > Houdini1_Rigidbody' 카테고리의 다른 글
RIGID BODY_19 COMPLEX 자동차 충돌 - Ep19_Part 05. 바디와 트렁크 쌓기 (0) | 2023.05.16 |
---|---|
RIGID BODY_19 COMPLEX 자동차 충돌 - Ep19_Part 04. 하체세팅 + 찌그러짐 세팅 (0) | 2023.05.15 |
RIGID BODY_19 COMPLEX 자동차 충돌 - Ep19_Part 02. 휠 & 서스펜션 (0) | 2023.05.11 |
RIGID BODY_19 COMPLEX 자동차 충돌 - Ep19_Part 01. 자료 분석 및 메터리얼 세팅 (1) | 2023.05.10 |
RIGID BODY_18 재질표현 + 어려움🔥🔥🔥 - Ep18_Part 10.나무와 유리 (이론 끝 휴.. ) (1) | 2023.05.09 |