▲ 오토데스크 홍상범 차장

[인벤게임컨퍼런스(IGC) 발표자 소개] 넥슨과 NC 소프트, 대원 미디어 등에서 온라인과 애니메이션의 제작에 참여한 홍상범 차장은 현재 오토데스크 코리아 3ds Max 및 기술 스페셜 리스트로 재직 중이다.

다양한 게임 개발 툴은 약간의 비용, 혹은 무료로 쉽게 구할 수 있다. 서적, 혹은 온라인 커뮤니티를 통하면 고급 활용 스킬도 손쉽게 배울 수 있다. 순수하게 개발만 따진다면 그 어느 때보다 쉽게 게임 개발에 뛰어들 수 있는 시대다.

하지만 1인 개발을 꿈꾸는 신입 개발자. 그것도 프로그래밍에 지식이 없는 그래픽 아티스트라면 큰 차이를 못 느낄 법도 하다. 오토데스크의 홍상범 차장은 3ds Max, 언리얼엔진4의 노드 기반 비주얼 프로그래밍을 방법을 공유했다. 이를 통해 아티스트들이 어려운 프로그래밍 언어로부터 벗어나 쉽고 빠르게 작업물을 내놓을 수 있길 바란다며 연단에 섰다.


■ 강연주제: 아티스트를 위한 Visual Scripting
Max Creation Graph(MCG)in 3dsMax ,Blueprint in Unreal4


기존에 사용하는 Maxscript와 Python은 프로그래머 친화적인 방식을 사용한다. 사용자가 직접 코딩을 하는 식이다. 물론 업계에서 많이 사용하고 있고 배움의 접근성도 높아 친숙할지는 모른다. 하지만 프로그래밍 부분에서 약점을 보이는 아티스트들이 이용하기에는 어려운 부분이 많다.

3ds Max의 ‘Max Creation Graph(MCG)’는 노드 기반으로 이루어진 새로운 비주얼 프로그래밍으로 노드들을 꺼내 연결하는 방식으로 작업하게 된다. 간단한 교육만으로 복잡한 작업을 쉽게 처리할 수 있도록 도와주며 기본적인 프로그래밍 지식이 있다면 더욱 다양하게 사용할 수 있다. MCG는 3ds Max 2016버전에 도입되어 적극적으로 활용하는 사람이 많지는 않지만 2018 버전에 다양한 기능이 추가되어 활용 방안은 넓은 편이다.

MCG의 또 다른 장점은 결과물을 얻는 속도가 기존 스크립트보다 빨라 코딩 기반의 숙련도에 따라 기존 프로그래머들의 속도만큼 빠르게 작업물을 얻을 수 있다.

▲ 스크립트 형식의 Maxscript와 Python

▲ MCG는 노드 기반으로 눈으로 직접 확인하며 작업할 수 있다.

해외에서는 MCG의 다양한 활용 방법이 논의되고 있다. 구글이나 유튜브 등을 이용하면 상세한 사용법 안내 및 무료로 이용할 수 있는 MCG도 다운받을 수 있다. 강연에 소개하는 MCG 샘플 패키지를 설치하면 훨씬 더 쉽게 활용해볼 수 있는데 서두에 언급한대로 3ds Max 2018 이상에 맞는 것들로 설명되어 있으므로 해당 버전 이상의 제품 설치가 필요하다.

1. 샘플 패키지 다운
https://area.autodesk.com/tutorials/mcg-whats-new-2018--sample-pack

2. 아래 경로에서 3dsMax.ini 파일 오픈
C:\Users\유저 이름(ex:Hong)\AppData\Local\Autodesk\3dsMax\맥스 버전(Ex:2019 – 64bit)\ENU

3. ini파일에 아래 경로를 추가하고 파일 저장
[MCG Tools Directories]
samples=C:\Users\유저이름(ex:hong)\Autodesk\맥스 버전(ex:3ds Max 2019)\Max Creation Graph\src
[MCG Compound Directories]
samples=C:\Users\ 유저이름(ex:hong)\ \Autodesk\ 맥스 버전(ex:3ds Max 2019)\Max Creation Graph\src


4. 미리 받은 파일 압출을 풀고 \src 폴더 내용을 설정한 \src 경로에 복사한다.

5. 미리 받은 파일 압출을 풀고 \packages 폴더 내용을 설정한 \Max Creation Graph 경로에 복사한다.

이렇게 설치한 샘플 MCG로 다양한 기능을 실험해볼 수 있다. 특히 간단하면서도 활용도가 높은 기능이 컴파운드다. 노드 기반 비주얼 스크립트의 경우 편하게 이용할 수 있지만 내용이 많아지면 제작자 스스로 어떤 노드를 제작했고 어떻게 배열했는지 기억하지 못할 수준으로 쌓이기도 한다. 컴파운드는 복잡한 노드들을 하나로 통합하는 기능이다.

컴파운드는 프로그래밍 함수와 유사하며 Scene에 있는 노드를 가져오거나 월드 공간의 위치를 가져올 수 있고 밸류 값을 가져와 더하고 분할, 혹은 매트릭스로 변환한 후 반환하는 것도 가능하다. 만든 컴파운드 출력이 제대로 성공하면 컴파운드 노드를 드래그해 사용할 수 있다.

▲컴파운드 기능을 이용해 간략해진 노드.

홍상범 차장은 현재 개인적으로 개발하는 1인 게임의 예를 들어 MCG 기능하나를 설명했다. 그가 개발하는 게임은 고전 느낌이 나는 픽셀 콘셉트의 게임이다. 큰 욕심에 하이엔드 게임을 개발하고자 하지 않고 성취할 수 있는 수준의 게임 개발이 목표이기에 정한 설정이다. 그런데 3D 오브젝트를 어떻게 하면 픽셀로 변화시킬 수 있을까? 오브젝트 하나하나에 리소스를 적용해 블록 형태로 적용하려면 오래 걸리겠지만 MCG를 이용하면 간단하게 3D를 픽셀화할 수 있다.

이 역시 오브젝트에 미리 만들어 둔 노드를 로드하기만 하면 쉽게 변환된다.

픽셀 모델링이 무너지는 형태도 MCG를 통해 구현했다. 오브젝트가 픽셀 단위로 흩어져있어 부서지는 모션을 만들기 위해 오브젝트 단위로 디태치해야하는데 이를 하나하나 적용하려면 많은 과정이 필요하고 시간도 많이 소모된다. 엘레멘트로만 선택할 수 있던 한 개의 오브젝트를 MCG를 이용하면 한 번에 디태치할 수 있다.

이런 과정은 익숙하다면 Maxscripts나 Python을 이용해 편하게 작업할 수 있지만, 굳이 MCG를 이용한 이유는 빠른 작업 속도다. 또한, 스켈레탈 메시를 생성해 처리할 수 있지만, 스태틱 메시로 가져와 언리얼 안에서 움직이는 것처럼 구현할 수 있다. 스켈레탈 메시보다 스태틱 메시가 훨씬 가볍고 최적화에 용이하기 때문이다.

프레임마다 베이크를 시킨 후 오브젝트를 어태치 시키는 소스가 필요하다. 이 작업 역시 자동으로 진행할 수 있다. 여기서 핵심이 되는 커맨드는 MCG로 제작했다. MCG는 Maxscripts와 연동해 작업할 수 있는데 MCG를 제작한 후 Output MAXScript Function 노드를 연결하면 자동으로 Maxscripts에서 사용할 수 있는 함수를 만들어 준다. 이 함수를 Maxscripts에 추가한 후 똑같은 이름을 찾으면 함수를 제작한 것처럼 이용할 수 있다.


MCG를 이용하면 Maxscripts 안을 깔끔하게 정리할 수도 있고 계산량이 많은 것들도 Function을 이용해 빠르게 작업할 수 있다. 이렇게 리소스를 만든 다음 언리얼엔진4의 Blueprint로 넘어가 다음 작업을 이어갈 수 있다.

Blueprint는 MCG와 비슷하게 비 프로그래머가 간단하게 프로토 타입이나 비주얼 노드를 짤 수 있는 프로그래밍 방식이다. 형태 역시 노드 기반이다. Blueprint를 사용할 때는 액터를 사용하는 것을 권장한다. 물론 MCG에서 사용할 수 있다. 액터는 여러 가지에 적용할 수 있는데 이번에는 스태틱 메시에 적용했으며 본 강연에서는 6면체 블럭을 사용했다. 액터를 만들어 한 작업은 자동으로 움직이는 장애물 제작이다.

프로그래머가 아니면 C++같은 프로그래밍 언어를 사용하기 어려워 움직이는 장애물을 만들기 어렵지만, Blueprint를 활용해 장애물을 움직이게 했다. 옵션을 통해 속도나 방향 등을 제어할 수 있고 기능을 추가하면 더욱 다양한 이벤트를 설정할 수 있게 된다.

▲ 오브젝트의 변경을 적용하는 것도 가능

자동으로 움직이는 장애물은 Event에서 변수를 적용해야한다. 강연에서는 프레임이 흐르면서 Compareint 노드로 입력되는 변수를 Compare With 값과 비교했다. 값은 2로 설정했고 크거나/작거나/같거나 3가지를 비교하는데 이는 x/y/z 방향을 설정하게 된다.

장애물의 속도 제어는 크게 3가지 설정으로 이루어지는데 Get Time Seconds에서 현재 게임 시간을 초 단위로 받아온 후 Z Speed를 통해 속도를 제어 할 수 있는 변수 값을 받아온다. Float*Float(Multiply)를 통해 입력되는 값 2개를 곱해준 후 출력하게 된다.

장애물 범위 역시 시간에 따라 1과 -1 사이 값을 출력하는 Cos(Radians)와 범위를 제어하는 Z Size, 그리고 Float*Float(Multiply)를 이용한다.

밟은 장애물이 무너지는 효과도 Blueprint를 통해 소스로 제작할 수 있다. 우선 3ds Max에서 Combine Meshes를 체크해 모든 메시를 하나로 결합한다. 이후 Use Full Precision UV’s를 활성화할지 선택해야 하는데 기본적으로 스태틱 메시는 메모리를 절약하기 위해 그냥 사용하면 된다. 정확한 계산이 필요하거나 움직임이 예쁘게 이루어지지 않는다고 생각할 때 옵션을 활성화하면 되는데 옵션을 끄면 메시 UV를 16비트로, 켜면 32비트로 정보값을 가져온다. 이번에 만든 애니메이션은 총 61프레임이었는데 이를 입력해 정확하게 작업이 됐는지 확인해주면 된다.

▲ 3ds Max에서 소스를 가져와 활용할 수 있다

이처럼 스태틱 메시만으로 오브젝트를 움직이는 것처럼 보이게 할 수 있는데 인터렉티브한 반응이 없는 경우 3ds Max와 Blueprint를 이용하면 애니메이션으로 간단하게 구현할 수 있고 최적화 부분에서도 이득을 볼 수 있다. 다만 이 같은 방식은 짧은 움직임일 때만 사용하는 것이 좋다. 움직임이 길면 모든 프레임에 메시를 생성해줘야 하는데 버텍스가 일정 수치 이상으로 넘어가면 과부하가 걸리기 때문이다. 대신 일정 수치 이하의 버텍스 내에서는 크게 신경 쓰지 않아도 된다.

그렇기에 스켈레탈 메시를 사용하지 않아 가볍게 돌릴 수 있다고 안심하지 말고 프레임이 많은 경우에도 사용하겠다는 생각은 하지 않는 것이 좋다. 짧은 모션, 혹은 부서지거나 튀어 나가는 등의 모션에 적용한다고 생각하고 작업에 임하도록 하자.