유니티 스마트재난관리시스템 디지털 트윈 프로젝트(1) -Blender Cell Fracture 기능 R&D

2024. 3. 8. 11:19Unity

728x90
반응형

재난관리시스템에 교량에 대한 시뮬레이션을 진행할 예정이다.

교량 모델을 만들거나 가져와서 지진이 발생하는 가상 상황을 구현할 것이다.

 

 

여기서 교량이 부서지거나 무너질 때 모델이 조각나는 효과를 줄 예정이다.

 

 


 

 

https://youtu.be/ogWQs_7DU0Y

 

 

Blender의 Addon에 해당 효과를 줄 수 있는 기능이 있다.

[Edit] - [Preferences] - [Add-ons]에서 "Cell Fracture"를 검색하고 체크한다.

 

 

큐브와 바닥 Plane을 설정하고, [Object] - [Quick Effects] - [Cell Fracture] 메뉴를 눌러 기능 창을 연다.

 

 

 

 

큐브 위의 표면에 부수고 싶은 모양대로 그린다. [Surface] 설정하고 큐브 위에 그린다.

 

 

아래와 같이 설정한 후 OK 버튼을 눌러 나눈다.

 

 

잘 나눠졌다!

 

 


 

 

나눠진 파편 오브젝트에 물리 적용

나눠진 파편 하나를 잡고 [Physics] 메뉴로 들어가서 [Rigid Body]를 추가한다.

파편이 미끄러져 내려오는 것을 방지하기 위해서는 [Friction] 값을 0.7~0.8로 설정한다. 마찰력 증가.

 

 

전체 파편에 적용하기 위해 만들어진 Collection에서 [마우스 오른쪽 클릭] - [Select Objects]

 

 

이미 선택된 객체로부터 값을 가져올 것이기 때문에 [Object] - [Rigid Body] - [Copy from Active]를 선택한다.

 

 

바닥 Plane도 [Physics]에 Rigid Body를 추가하고 [Type]을 [Passive]로 바꾼다. [Friction] 값은 0.7 정도로 설정.

 

 

플레이를 하면 나눠진 대로 부서지는 것을 볼 수 있다.

 

 


 

 

여기서 수정해야 할 점은 모든 조각들은 같은 질량을 가지고 있다는 것이다.

부피에 따른 무게를 부여할 것이다.

 

 

모든 파트를 다시 Select Objects 한다.

 

 

[Object] - [Rigid Body] - [Calculate Mass]를 선택하면, 많은 옵션들이 나오고 그 중 Brick(Pressed)를 선택한다.

 

 

작은 파편은 8kg에서 큰 파편은 200kg이 넘게까지 설정되어 있다.

 

 

작고 가벼운 파편들이 더 빨리 떨어지며 더 현실적으로 보이게 되었다.

 

 


 

 

사실 다리가 무너지는 기술을 구현하기 위해서는 위의 기능까지만 살펴보면 되지만 일단 영상은 그 이후를 더 다루고 있기 때문에 따라가 보도록 한다.

 

 

조각을 하나 잡고 Physics 기능 맨 아래에 [Deactivation]을 켜고 [Start Deactivated]도 켠다. 이 기능을 켜면 중력의 영향을 받지 않고 애니메이션의 영향을 받게 된다.

 

 

모두 동일하게 적용하기 위해 [Object] - [Rigid Body] - [Copy from Active] 한 후

 

 

질량 값도 동일 해져서 다시 계산해야 하므로 [Calculate Mass]를 눌러 Brick(Pressed)를 동일하게 적용한다.

 

이 상태로는 실행을 해도 무너지는 모습이 보이지 않는다.

 

 

UV Sphere를 하나 만들어서 모서리 부분에 날아와 부딪히도록 배치한다.

 

 

공의 Location에 오른쪽 마우스를 클릭하여 [Insert Keyframes]로 키프레임 생성.

 

 

20 프레임 뒤에 이미 큐브를 통과한 위치에 키프레임 생성.

 

 

Sphere에도 Rigid Body를 적용한 후 [Animated] 체크를 꼭 한다. 이미 우리가 키프레임을 만들어놨는데 Animated 체크를 하지 않으면 바닥에 떨어지기 때문이다.

 

 

이제 실행하면 구가 큐브에 부딪히며 파편이 튀게 된다. 하지만 아직 이것도 정교하진 않은데, 프레임과 프레임 사이의 간격 때문에 작은 파편은 통과하는 현상이 일어날 수 있기 때문이다.

 

 

씬 세팅에서, [Substeps Per Frame]과 [Solver Iterations]를 올리면 조금 해결되는 듯 보인다. 하지만 구의 애니메이션이 키프레임 단위이기 때문에 딱히 큰 효과는 없다고 한다. 많이 올리니까 너무 느려진다.

 

 

결국 구를 키프레임 단위의 애니메이션이 아닌, 큐브에 부딪히기 직전에 Animated를 풀어서 실제로 부딪히는 방식으로 변경해야 한다. 구가 큐브에 부딪히기 두 프레임 전에 [Animated] 위에 마우스 오른쪽을 눌러 [Insert Keyframe]을 누른다.

 

 

한 프레임 진행 시켜서 구가 큐브에 부딪히기 직전 프레임에서 [Animated] 기능을 끄고 다시 [Insert Keyframe]을 한다.

 

 

실행하면, 아직 구가 1kg밖에 안되기 때문에 큐브를 관통할 순 없고 부딪히고 바로 떨어진다.

 

 

구의 질량을 1000kg를 늘리면, 구가 큐브를 밀고 나가며 더 부서지는 효과가 보이게 되었다.

 

 


 

 

이제 이 기능을 잘 이용해서 유니티에서 Rigid Body를 이용해 중력의 영향을 받도록 연구해보아야 한다.

728x90
반응형