Ad Block 한번만 꺼주시면 안될까요..?
게임 개발/유니티 에셋

유니티) 오브젝트를 부서지게 하는 법. (Rayfire)

UniCoti(유니코티) 2024. 6. 8.

게임에서 건물이 무너지거나 하는 연출을 보면, 먼지도 나오고 작은 부스러기도 표현되는 등
굉장히 세밀한 효과를 볼 수 있습니다. 꼭 연출이 아니더라도 총으로 건물을 쏘면 파편이 튀거나
조각이 떨어지며 건물이 부서지는 장면을 간간히 볼 수 있는데요, 이 글에서는 게임 개발자의 로망과 같은
이러한 부서지는 효과를 구현하는 방법에 대해서 소개해보도록 하겠습니다.
 

 

건물이 부서진 사진.

 
이러한 효과를 잘 이해하지 못하셨을 수 있는데, 위의 사진을 보시면 이해가 갈 겁니다.
 
아무튼, 이러한 효과는 위에 나와있는 에셋으로서 표현됩니다. 이걸 개개인이 개발해서 시스템을 만들 수도 있지만,
일단 저 조각 하나하나를 나누는 알고리즘을 짜는 것부터 굉장히 난도가 높으며, 물리효과도 구현해야 하고
총으로 쏘면 부서지는 것처럼 일정한 트리거가 있는 경우에 그 조건과 조건을 판단하기 위한 값도 직접 마련해야 합니다.
따라서 직접 구현하는 건 육체적으로도 심리적으로도 어려울 거라고 생각해 에셋으로 소개합니다.


1. Rayfire의 기능

rayfire

에셋의 이름인 Rayfire는, 원래 3d MAX라는 모델링 프로그램에서 이 기능을 지원했었던 회사였습니다.
게임 개발의 입장으로 보면 원래는 더욱 전문적인 곳에서 같은 기능을 지원했기에 더욱 신뢰가 가기도 하네요.
 
어쨌든, 이 에셋의 기능은 앞서 보셨다시피 메쉬(모델링)를 무작위로 깨트리고, 깨진 파편이 떨어지는 등의
"부서짐" 기능을 지원하는 에셋입니다. 물론 부서지는 것에 그치지 않고 부서지는 조각 개수의 조절,
조각 내외부 색 조절, 먼지 표현, 칼로 자르는 기능 등 굉장히 많습니다. 쓸 수 있는 스크립트만 해도 20개는
되어 보일 정도로 굉장히 많은 기능이지만, 그 기능들이 모두 부서지는 효과를 향하고 있어 저에게는
되게 전문적인 "부서짐" 에셋이라고 느껴졌습니다.
 
처음 이 에셋을 사용할 때는 메쉬를 직접 등록해서 미리 세팅하거나 하는 작업이 필요할 줄 알았는데
그냥 아무 메쉬나 가져와서 컴포넌트만 간단히 붙여주면 실행되는 것도 굉장히 놀라웠습니다. 메쉬를 직접,
바로 이용하는 효과는 개인적으로 처음 봤습니다. 결론적으로 "부서짐" 기능을 지원하는 에셋이고,
"부서짐"에 대해 매우 전문적이며 사용이 편했습니다.


2. 사용법 소개

rayfire은 사용법이 영상으로 되어 있는데, 저는 오히려 이게 더 불편했습니다. pdf 파일로 주면 번역해서 보면 되는데
유튜브로 되어 있으면 자막도 안되어있는 경우 ai가 알아서 텍스트로 변환하고, 한국어로 번역하는데 그 결과가 결코
매끄럽지 않으며 기술명은 영어로 줘야 뭐가 주어인지 유니티에서 확인하는데 다 한국어로 번역되니까 한국인은 솔직히
그 영상으로는 도움이 안 된다고 말하고 싶습니다.
 
그래서 제가 한국인들을 위해 이 글로 가이드라인을 다시 쓰는 거죠. 사용법 자체는 그렇게 어렵지 않습니다.
먼저, [window] -> [package manager]로 이동해서 rayfire을 다운로드 후, import 해줘서 프로젝트로 불러와줍니다.
 

임포트 완료

그러면 이렇게 Rayfire라는 폴더가 하나 생깁니다.
사용법을 소개하기 앞서 모든 기능을 둘러보고 싶은 분들은 데모신을 확인해 보시면 좋습니다.
[Rayfire] -> [Tutorial] -> [Scenes]로 가보시면 데모씬들이 나와있습니다.
 

기둥과 바닥.

아무튼, 쪼개지는 연출을 직접 만들어보는 실습을 해보겠습니다.
기둥이 쓰러지는 걸 연출하기 위해서 간단하게 바닥(Plane)과 기둥(scale-y = 5)을 만들어주었습니다.
 

이제 기둥 오브젝트를 클릭해서 [Add Component]를 클릭하고, "Rayfire rigid"를 넣겠습니다.
그렇게 세팅하고, 한 번 실행해 보겠습니다!
 

실행

당연히도, 이 상태에서는 변화가 없습니다.
대신 Rayfire Rigid 컴포넌트에 새로운 버튼이 생겼을 겁니다.
 
 

UI의 변화

위에 보면 Demolish라는 버튼이 새로 생긴 걸 알 수 있습니다.

일부가 쪼개짐.

이걸 눌러보세요! 그러면 위의 사진처럼 기둥이 쪼개지게 됩니다.
사실 다 금은 가있는데 딱히 충격이 없어서 나름대로 모양을 유지하고 있는 상태입니다.
회전을 시키거나 하면 다 쓰러지게 됩니다.
 

미리 회전시킨 모습.

이렇게 분해를 할 수 있고요, 물론 코드로도 Demolish를 누를 수 있기에 if문으로 트리거를 활용하면
특정 상황에서 기둥을 모두 쪼개지도록 표현할 수 있습니다!

하지만 이 기둥이 처음부터 물리효과를 받지 않는 걸 볼 수 있는데요, 미리 회전시켜 보면 쓰러지지 않습니다.
이 현상을 해결하려면 "처음부터" 물리 효과를 받게 하는 옵션을 켜면 됩니다.
InitializationBy method에서 At Start로 바꿔주시면 됩니다.
 
이렇게 되면 처음부터 물리효과를 받지만 Demolish를 눌러야 분해되는 효과를 가집니다.
외부의 충격에 따라서 부서지게 하고 싶다면 어떡할까요?
 

세팅 변경

외부의 충격에 따라서 부서진다는 말은 곧 실시간으로 충격을 감지한다는 말과 같습니다.
따라서 "Runtime"이라는 옵션이 켜져야 가능하게 되는데요, 한번 켜고 실행해 봅시다.
 

쓰러트려서 충격을 줌.

처음에는 똑같고, 이렇게 충격을 주면 갈라지게 됩니다!
충격을 쓰러트리는 거 말고, 위에서 공이 내려오게 해 보면 어떨까요?
 

공이 충격을 줌.

이렇게 위에서만 쳤음에도 모든 조각들이 분해되면서 분해가 되는 모습을 보여줍니다.
이건 조각의 개수가 많아서 티가 안 나는데, 조각을 늘려보면 더욱 티가 납니다.
 

Mesh Demolition -> Amount 조절

분해되는 조각의 개수를 달리 하고 싶다면 Amount를 조절하면 되는데, Runtime이 아니거나
앞에서 했던 세팅과 다를 경우에 이 옵션이 나타나지 않을 가능성이 있습니다. 주의하시길 바랍니다.
아무튼 이렇게 설정하고 다시 실행해 봅시다.
 

위에서 쳤는데 아래부터 부서짐.

분명히 위에서 쳤는데 demolish를 누른 것 마냥 다 부서져서 현실감이 없죠?
마지막으로, 이런 경우에 충격 지점까지 고려해서 부서지도록 해보겠습니다.
 
충격 지점을 고려한다... 는 말을 어떻게 다른 시각으로 볼 수 있을까요?
위에서 치면 위쪽만 부서지고, 옆을 치면 옆쪽만 부서지는 효과를 말이죠.
우리는"쪽"이라는 말에 집중해야 합니다. 타격을 받은 지점 "주변"을 부신다는 말이죠.
그리고 이 에셋에서는 "주변"을 clusterize라는 말로 표현했습니다. 클러스터의 뜻은 덩어리입니다.
덩어리를 나눠서, 타격받은 지점의 주변만 부서지게 처리하겠다는 말입니다.
 

맨 위 옵션 활성화

(Advanced에 있습니다) 이걸 켜면, 아래의 옵션들도 추가됩니다. 이 옵션들을 통해서
더욱 자세한 조각들을 구현할 수 있죠. 조각의 최대, 최소 크기, 비율, 영역등도 조절 가능합니다.
아무튼, 이제 다시 실행해 보겠습니다.
 

위쪽만 부서짐.

이렇게 위쪽만 타격했으니 충분한 힘이 있지 않는 한 위쪽만 부서지는 효과를 볼 수 있습니다.
물론 공의 무게를 1000으로 하면 기둥 모두를 부술 수도 있긴 하지만요.
 
여기까지 Rayfire에 대한 한국인 전용 사용법입니다.
비록 한 가지 컴포넌트만 사용했고, 모든 옵션을 설명하지 않았지만,
옵션마다의 설명은 공식문서에도 있으며, 가장 중요하고 주체적인 컴포넌트를 설명했기에
에셋에서 바라던 기능은 이 글에서 거의 다 설명했다고 생각합니다.
공을 총알로 바꾸기만 하면 실제 게임과 똑같은 효과가 되니까요.


3. 평가

가장 먼저, 이 에셋은 혁신적입니다. 이 에셋을 꽤 오래 지켜봐 왔는데요, 할인이 있을 때마다 구매가 순위권이었고,
회사의 전문성도 3d max로 시작했기에 유니티 내에서 정도는 검증되어 있으며, 예전에 리뷰했던 액체 표현 에셋
Zibra Liquid는 액체 표현은 잘 되었지만 최적화가 부족하다고 느낀 반면 이 에셋은 실제 게임에서 써도 되겠다고
생각될 만큼 컴퓨터가 힘들어하거나 부하가 걸리거나 한 적이 한 번도 없습니다.
 
https://alpaca-code.tistory.com/219 (Zibra Liquid 글)

유니티에서 액체(물)를 표현(구현)하는 방법. - Zibra Liquid -

유니티를 조금 다뤄본 사람이라면, "액체"를 표현하고 싶다는 갈망이 있었을 것입니다. 저를 포함해서 많은 사람들이 생각해 본 주제라고 생각하는데, 결론적으로 말하자면, "셰이더"라는 개념

alpaca-code.tistory.com

 
또한 이 모든 과정 동안 원래 목적인 "부서짐"에 대해서 매우 전문적이고 세밀하고 많은 기능이 있음을 확인했고
사용법 또한 전문성에 비해서 꽤 간단한 걸 알았습니다. 물론 한국인이 다루기에는 자료가 거의 없어서 힘들긴 합니다.
하지만 기초적인 사용법은 저의 이 글로 인해서 해소되었을 거라 생각하기에 조금 작아진 단점 같네요.
 
하지만 이 에셋도 단점은 있는데요, 먼저, 꽤 비싼 가격입니다. 할인했을 때나 95$지, 원래 가격은 190$입니다.
190$면 25만 원을 조금 상회하는 금액인데 절대 개인이 그냥 사기엔 부담되는 가격이죠. (회사는 그냥 사도 될 듯)
그래도 저는 이 에셋을 쓰면서 "비싼 건 다르긴 하는구나..."를 느꼈습니다. 로망과도 같던 부서짐 효과를 부하도 없이
처리하면서 매우 전문적임과 동시에 개개인이 세팅을 할 수 있도록 자유도를 주었으며 방법도 꽤 쉬웠기 때문이죠.
 
또 다른 단점으로는 데모씬이 많은데 그중 몇 개는 아무것도 모르는 상태에서 해보기 어렵다는 것과,
한국에서 문서가 전무하다는 것쯤이 있겠네요. 기초는 이 글로 해결된다고 해도 이 이후로 더욱 어려운 기술을 써본다면
솔직히 데모씬 보고 해야 하는 게 현실입니다. 한국에는 3d max 자료는 조금 있지만 유니티 자료는 거의 없습니다.
 
그래도 종합적으로는, 추천합니다. 돈을 냈다는 가정 하에는 제가 느껴본 최고의 에셋이었습니다.
정말 잘 만들었으며 부서짐 기능의 끝판왕이라고 생각될 정도로 무궁무진한 부서짐 기능을 그려볼 수 있습니다.
이 글에서 소개는 안 했지만 칼로 베는 기능도 있고, 정말 이걸 어떻게 만들었을지 생각조차 안 되는 기능들이 많습니다.
구매를 고민하고 계시다면 에셋 자체의 부정적인 요소는 가격뿐이라고 말하고 싶네요. (자료 자체는 영어로 있음)


이렇게 오늘은 부서짐 효과를 다루는 Rayfire에 대해서 이야기해 보았습니다.
오랜만에 비싼 에셋을 다루어 봤는데 역시 비싼 에셋은 설명이 영상으로 되어 있어 오히려 힘들었네요.
그래도 제가 이 에셋을 산 한국인들을 구했을 테니 만족합니다. 많은 도움이 되었으면 좋겠고,
앞으로 프로젝트 진행할 때 물리적인 효과가 있다면 꼭 넣고 싶은 에셋입니다.
 
시각적으로도 굉장히 좋을 거고 사람들이 감탄할 것 같은 에셋입니다.
개인적으로 굉장히 만족하고 있고 이 글을 보시는 여러분들께도 추천합니다.


이상으로 도움이 되었길 바라며,
 
끝.
 
+)
이 글은 제가 실제로 사용해 본 제품에 대한 솔직한 이야기입니다. 링크를 통해 구매하시는 경우, 저에게는 소정의 커미션이 지급됩니다. 하지만, 이로 인해 저의 평가가 편향되지 않았음을 명확히 말씀드리고 싶습니다. 애초에 에셋도 스스로 선정하여 의뢰 후 가져오는 방식입니다. 한번 지원받으면 저도 계속해서 쓸 수 있기에 기능이 안좋아 보이는 에셋은 받아오지도 않습니다. 이 글의 목적은 전적으로 여러분들의 고민을 돕는 것이며 "광고"로만 보지 않아 주셨으면 합니다. 감사합니다.

댓글

💲 추천 글