이제 dop network에 넣어보기도 하고, constraint 세팅을 해줘서 고정도 시켜보자.
- 이번에 할 것은 창문을 제외한 건물의 뼈대 붕괴이다.
일단 건물의 바닥을 0에 맞춰주도록 한다.
dop network에 넣어서 확인을 해보자.
일단 dop network 안에서 잘 작동하는 것은 확인했다.
이제 constraint 세팅을 잡아보자.
일단 작은 규모의 빌딩으로 세팅을 잡아주도록 한다.
기본적으로 건물이 무너지지 않으려면, 바닥과 기둥이 연결되어있어야한다. 하지만 상대적으로 지금 바닥은 커다란 하나의 조각으로 되어있기 때문에 기둥이 바닥을 잡아주도록 세팅해줘야한다.
이 때 활용하게 되는 위치는 기둥의 위 / 아래로 각각 위와 아래의 바닥을 잡아주게 된다.
포인트에 대한 정보, 그리고 기둥에 대한 정보를 각각 grouping 해줘서 밖에서 각각을 떼어서 볼 수 있도록 해 준다.
이제 바닥을 대변해주는 포인트를 만들어야한다.
ray 노드를 활용해서 가장 가까운 floor에 투영되는 포인트를 만들어주고, 포인트를 생성하면서 그 floor의 이름을 가져오도록 한다.
그리고 ray를 통해 얻게 된 포인트와 ray에 던져줬던 포인트를 가지고 connect adjacent piece 노드를 사용하면 primitive를 쉽게 만들어줄 수 있다.
dop network 세팅을 다시 잡아주도록 하자.
부러지지 않는 strength 값을 찾는다면?
- 대략적으로 300만 정도에서 부러지지 않고 버티고 있었다.
이제 collision을 추가해보자.
이제 floor에도 조각을 내보자.
for each primitive를 사용해서 각각의 floor 별로 voronoi fracture를 사용해서 조각을 내게 되는데, 그냥 scatter로 포인트를 뿌려줄 경우, voronoi fracture의 결과가 모든 층이 같게 된다. 그렇기 때문에 metadata의 iteration을 활용해서 scatter의 global seed에 각각의 floor마다 변화를 줘서 다른 조각이 나올 수 있도록 해준다.
항상 중요한 것은 @name 정보이다.
지금의 세팅에서 null59 노드로 나오게 되는 이름정보는 각 층에 해당하는 정보이다.(floor1, floor2 등...)
그리고 voronoi fracture에서도 Pieces에서 이름정보를 추가해줄 수 있으며, assemble 노드에서도 이름에 대한 정보가 추가될 수 있다.
각각의 이름을 사용하는 이유가 좀 다른데, voronoi fracture에서 piece prefix를 잘 사용하고 싶은 이유는 constraint 세팅 때문이다. 그리고 assemble 노드에서 output prefix를 사용하는 이유는 constraint로 나오는 데이터와 이름을 맞춰주기 위해서이다.
지금은 너무 과자처럼 바사삭 부러지는 느낌이 강하다.
구겨지는 세팅을 추가해보자.
구겨지는 세팅을 위해서 constraint에 대해 sop 세팅을 해준다.
이번에는 조각나는 floor의 수량을 올려보자.
scatter의 수량을 늘려주면 된다.
지금 고생해서 세팅하는 구간은 dop network 안쪽보다는 바깥쪽이다.
이제 창문만 달아주면 된다.
원하는 느낌이 나오도록 씹고 뜯고 맛보면서 tweak을 즐겨보자.