엔진프로그래밍

외부 애니메이션 씬 파일 뽑아서 엔진에 넣을 때 case 구분

doyyy_0 2025. 11. 4. 15:46

max에서 데이터를 뽑아서 자체 엔진에 넣을 때, 다양한 케이스를 나눠서 읽도록 해야한다. 이미 유니티나 언리얼은 그걸 다 구현해놓았다. 예를들어 어떤 사이트에서 스키닝된 캐릭터와 그에 딸린 몇몇 오브젝트들(스키닝 되지 않음)이 한꺼번에 애니메이션이 구현되는 경우가 있다.

 

그럴 땐, 그냥 스키닝 된 캐릭터와 그에 딸린 지오메트리만 선택해서 따로빼는게 좋겠다. 나머지 스키닝 되지 않은 오브젝트들은 스키닝 되어있지 않지만, bone에 딸려있을 수도 있다. 그걸 다 한꺼번에 빼버리면 너무 작업량이 많아지고, 완전히 익스포트해서 임포트가 잘 진행되었다 하더라도 비효율적인 것 같다. 

가령 스키닝된 캐릭터와 캐릭터의 손목의 자식으로 무기가 하나 딸려있고 그 무기의 나사부분이 계속 돌아가는 씬을 다운받았다고 가정하자. 이걸 엔진에 바로 넣으면 안된다. 일단 max에 넣고, 무기를 bone에서 뺀다. 그리고 bone과 캐릭터를 export한다. 그리고 무기만 따로 export한다. 무기의 나사부분은 애니메이터가 달려있을것이다. 그냥 무기에 달려있는 디폴트라면 무기랑 같이 export한다. 그렇지 않다면 무기만 export하고 나사를 따로 빼서 애니메이션도 제거하고 export한다.

이렇게 export된 나사를 무기의 자식 오브젝트로 넣고 그냥 회전 시키면 된다. 무기는 캐릭터 손목의 월드행렬을 따서 무기 vertex에 곱해준다. 

 

이렇게 외부 파일을 다운로드했다면 그대로 엔진에 넣지않고, 필요한 부분만 3ds max에서 구분해놓고 따로 빼서 사용하면 좋을 것 같다! 예를들어 무기랑 캐릭터가 같이 딸려있다고 해서 같이 export하면 그 무기를 사용하는 다른 캐릭터들 혹은 무기 그 자체의 오브젝트를 따로 렌더링하기에 너무 복잡해지기 때문이다.