개발 기록 목록

언리얼로 이사 가자~!


안녕하세요. '브라운소스'입니다.

저는 지금 마비노기 엔진 교체 작업을 하고 있는데요. 

밀레시안 여러분들께 제가 한 작업 중에서 '배경 모델링 포팅'에 관해 이야기 해 드리고 싶어 이렇게 글을 썼습니다.

엔진 교체 과정이 궁금하신 분들께 이 글이 조금이나마 도움이 되었으면 좋겠습니다.


평소와 다를 바 없이 따뜻한 커피와 함께 비몽사몽한 아침을 시작하고 있던 저는 정신 번쩍 들었습니다.

마비노기가 언리얼로 이사 갈 때 플레이오네에 있는 에린의 건물들과 물건들을 모두 가져가야 하는데

그 일을 제가 맡게 되었기 때문입니다.

20년에 가까운 세월 동안 마비노기는 플레이오네에 깊숙이 뿌리를 내렸습니다.

그렇기에 그 이사 작업이 어린 나무를 이식하듯 쉽지는 않을 것이 뻔했습니다.

번쩍 든 정신과 반대로 눈앞은 캄캄해졌습니다.


물론 최종적으로 언리얼 엔진에서 보게 되는 대부분의 건물과 물건들은 이쁘고 때깔 좋게 새로 지어질 예정입니다.

하지만 그 작업을 위해서는 밑그림이 필요합니다.

수 많은 밑그림을 모두 새로 만드는 것은 그 자체 만으로도 큰 비용이기 때문에 

보다 적은 비용으로 플레이오네에 있는 에린을 그대로 옮겨서 밑그림으로 삼을 방법을 찾아야 했습니다.


<플레이오네 월드 제작 프로그램에서 본 타라의 수많은 건물들>



마비노기를 그대로 옮기는 작업을 계획할 때 가장 먼저 걱정되었던 점은

'플레이오네 전용 월드 데이터 파일과 모델링 파일을 언리얼 엔진에서 바로 사용할 수 있을까?'였습니다.

그리고 슬프지만 당연하게도 '플레이오네 전용'이기 때문에 그것은 불가능했습니다.

이런 상황에서 세 가지 아이디어가 떠올랐습니다.


첫 번째 아이디어는 '언리얼 엔진 코드를 수정하여 플레이오네 전용 파일을 읽게 한다'였습니다.

그런데 이렇게 엔진 코드를 수정하면 엔진 버전을 올릴 때마다

수정한 코드와 업데이트 된 코드가 충돌할 가능성이 있습니다.

그러면 계속해서 충돌한 코드를 수정 해주어야만 합니다.

그리고 다른 아이디어에 비해 작업 비용도 크기 때문에

밑그림을 만들기 위한 방법으로는 최선이 아니라 생각했습니다.


두 번째 아이디어는 '언리얼 엔진이 읽을 수 있게 플레이오네 전용 파일을 수정한다'였습니다.

하지만 이 방법에도 문제가 있었습니다.

마비노기에서 오브젝트를 만들 때 모델링 작업은 상용 프로그램으로 합니다.

그 후에 플레이오네 엔진이 읽을 수 있도록 저희가 자체 개발한 프로그램을 사용하여 변환을 해줍니다.

불필요한 데이터는 지우고 필요한 데이터 중 일부는 최적화를 위해 미리 계산해 두는 것이죠.

그런데 이 때 지워지는 데이터 중에 언리얼 엔진에서는 필요한 값들이 있었습니다.

제거된 것을 제외하고 남은 데이터로도 3D 모델을 구성할 수는 있지만 

원본과 눈에 띄게 차이가 나서 이 방법도 최선은 아니었습니다.


<언리얼 엔진이 읽을 수 있도록 파일을 수정했지만 Smoothing Group 값이 없어 각져 보이는 여신상>



세 번째 아이디어는 ‘전용 파일로 변환하기 전의 원본 모델링 데이터를 언리얼로 옮긴다’였습니다.

언리얼 엔진은 상용 3D 모델링 프로그램으로 만든 파일을 쉽고 간단하게 읽을 수 있습니다.

그러므로 변환 전의 원본만 잘 있다면

플레이오네에서와 흡사한 형태로 언리얼에 올릴 수 있을 것 같았습니다.

처음 원본 데이터를 언리얼에 올려보는 시도는 성공적이었습니다.

상용 3D 모델링 프로그램에서 원본 데이터를 언리얼 엔진이 읽을 수 있는 파일로 출력하였고

이를 언리얼에서 불러와 보니 상상했던 것보다 훨씬 좋은 모습이었습니다.


그런데 이 방법도 완벽하지는 않았습니다.

플레이오네의 흔적이 아직 남아있었기 때문입니다.

마비노기 오브젝트의 3D 모델을 작업할 때 오브젝트의 형태를 구성하는 것 이외에도

게임 안에서 상호작용을 위한 데이터도 함께 추가합니다.

하지만 이 데이터는 밑그림에서는 필요가 없었습니다.

오히려 이 데이터로 인해 밑그림의 형태가 달라 보이기도 했죠.

그래서 이 불필요하고 밑그림에 방해가 되는 데이터를 지울 방법을 찾아야 했습니다.


<언리얼 엔진에서 충돌 박스와 피벗 메시가 그대로 보이는 던바튼 광장 가로등>



아이디어를 구체화하면서 '자동화'에 대해서도 함께 고민하고 있었습니다.

원본 모델링 데이터를 언리얼로 옮기려면 해당 파일을 3D 모델링 프로그램에서 읽은 후

언리얼 엔진이 읽을 수 있는 파일로 출력해야 합니다.

문제는 이 과정이 짧고 단순하더라도 파일의 수가 너무너무 많기 때문에

모든 파일을 사람이 하나씩 하기에는 시간이 너무 오래 걸린다는 점입니다.

물리적인 시간을 고려한다면 자동화는 반드시 필요했습니다.


마비노기에서 사용하고 있는 3D 모델링 프로그램에는 자동화를 지원하는 스크립트 언어가 있습니다.

사용자가 모델링 프로그램으로 하고 싶은 작업이나 행동을 미리 스크립트로 작성해 두면

버튼 클릭 한 번으로 그 일을 계속해서 반복하게 할 수 있죠.

이 스크립트를 사용하여 일일이 파일마다 해야 했던 출력 작업을

프로그램이 알아서 하도록 자동화하는 동시에

앞서서 고민하고 있던 밑그림의 불필요한 데이터도 함께 지워지게 했습니다.


그리고 원본 모델링 데이터의 텍스처도 언리얼 엔진에서 읽을 수 있게 픽셀 포맷을 변환해 줘야 하는데

이 처리도 스크립트에서 함께 하도록 프로그래밍 했습니다.


<언리얼 엔진으로 옮겨 본 티르 코네일 은행>



'드디어 문제를 모두 해결했나?' 싶었지만... 아니었습니다.

마비노기의 어마어마하게 많은 오브젝트 개수가 다시 발목을 잡았습니다.

옮겨온 3D 모델을 밑그림으로 쓰기 위해서는 언리얼로 만들어진 에린에 배치해 봐야 합니다.

그런데 플레이오네 전용 월드 데이터 파일은 언리얼 엔진이 읽을 수가 없습니다.

그래서 플레이오네에서의 위치, 방향, 크기를 일일이 하나씩 확인 해야만 했죠.

이 작업은 오브젝트 종류 별로 하나씩만 하면 되는 

앞선 작업보다 개수도 훨씬 많고 손도 더 많이 갔습니다.

그리고 언리얼 엔진으로 처리해야 했기 때문에 3D 모델링 프로그램의 스크립트도 쓸 수 없었습니다.


고민을 하던 중, 한 가지 아이디어를 생각했습니다.

'전용 월드 데이터 파일에서 오브젝트의 종류, 위치, 방향, 크기 데이터를 뽑아낼 수 있다면

그것을 언리얼에서 배치할 때 사용할 수 있지 않을까?'.

플레이오네의 에린 월드를 구성할 때는 마비노기에서 자체 개발한 월드 제작 프로그램을 사용합니다.

상용 프로그램으로 만든 3D 모델 데이터를 이 월드 제작 프로그램으로 불러와 배치하는 식이죠.

그 후에 배치 상태를 최종적으로 월드 데이터 파일로 만듭니다.

자체 개발한 프로그램은 저에게 익숙했고 데이터 파일 내부는

전에 '두 번째 아이디어'를 구체화하는 과정에서 이미 확인했습니다.

그래서 배치에 필요한 데이터들을 월드 데이터 파일에서 뽑도록 프로그램을 수정할 수 있었습니다.


이제 뽑아낸 데이터를 언리얼 엔진이 읽어 자동으로 3D 모델을 배치하게 하는 일만 남았습니다.

이 문제는 엔진에 기능을 추가하여 해결했습니다.

자동 배치 기능은 언리얼 엔진에 이미 있는 기능 만으로 구현 했기 때문에

엔진 수정보다 상대적으로 비용도 적었고 코드 충돌 위험성도 낮았습니다.


<밑그림으로 쓰기 위해 언리얼 엔진으로 옮겨 본 던바튼>



이러한 과정들을 거쳐 저의 '밑그림 제작 자동화' 작업은 일단락 되었습니다.

지금은 배경 모델러 분들이 밑그림을 바탕으로 새로운 에린을 열심히 만들고 계시죠.

고퀄리티로 재탄생 하고 있는 에린을 보고 있으니 눈이 정화가 되네요.

비록 제 작업으로 완성품이 만들어지는 것은 아니지만

에린이 재탄생하는 과정에 조금이나마 도움을 드리고 있어서 큰 기쁨과 뿌듯함을 느낍니다.


마비노기가 언리얼로 모두 이사 가려면 앞으로 할 일이 많습니다.

기술적으로 해결해야 할 문제들도 많고요.

쉽지 않은 길이겠지만 새로운 마비노기에 밀레시안 여러분들을 초대하는 그날을 위해서

저희는 꾸준히 그리고 부지런히 나아가고 있겠습니다.

감사합니다.

저는 이제 커피가 없으면 하루를 시작할 수 없는 몸이 되어 버렸습니다.
커피 향을 맡으며 언리얼로 옮겨진 에린을 상상하니 너무 좋네요. 음~ 긋!

링크 복사