[유나이트 서울 2018 발표자 소개] 박정오 프로그래머는 넥슨에서 근무했었으며, 이후 로드컴플릿으로 이직해 크루세이더 퀘스트 개발에 참여했다. 현재는 5민랩에서 프로그래머로 재직, VR 게임 프로젝트를 개발 중에 있다

현재 시중에 나와있는 대표적인 VR 기기로는 오큘러스 리프트, HTC Vive, PS VR 등이 있다. 이 중 PS VR은 2017년까지 백만 대 이상의 판매량을 기록했으며, PS VR 로드쇼 등 다양한 행사를 통해 유저 및 업계에 어필을 하고 있다.

VR 시장은 아직 다른 플랫폼 시장에 비해서 규모가 작은 만큼, 일부 개발자들은 좀 더 다양한 VR 플랫폼에 자신의 콘텐츠를 내보이고자 한다. 그렇지만 PS VR용으로 콘텐츠를 제작할 때는 난관에 봉착하게 된다. SIE의 독자적인 툴이나 검수 과정을 통과해야만 출시가 가능하기 때문이다. 따라서 그들이 요구하는 기준이 무엇인지, 또 어떤 툴을 사용해야 하는지 사전에 알아야 할 필요가 있다.

5민랩의 박정오 프로그래머는 이번 유나이트 서울 2018 강연에서 자신이 PS VR용 게임을 개발하면서 겪은 일들을 공유했다. 일부 과정은 VR에만 해당하지만, 일부 과정은 VR이 아닌 PS4용 타이틀 전체에 해당하는 것이기 때문에 다양한 분야에서 참고가 되길 바란다고 덧붙였다.


박정오 프로그래머는 우선 PS VR용으로 프로젝트를 만들기 위해서는 사전 준비가 필요하다고 강조했다. 우선 소니와 계약을 체결해야 하고, PS용 개발킷을 구매해야 한다. 구매하는 것만으로 끝나는 것이 아니라 개발자 계정을 발급 받고, 개발자 계정을 사이트에 들어가서 활성화한 다음에 담당자에게 이를 메일로 보내야만 기기 등록 절차가 완료된다.

그 다음에는 빌드를 위해서 SDK를 설치해야 하는데, 현재는 유니티에서 기본적으로 제공해주고 있다. 이를 설치하고 개발킷도 설치하고 나면 기본적인 개발 환경이 조성된다. 다른 빌드처럼 스위치 플랫폼을 누르고, 플랫폼을 바꿔줄 수 있는 것이다.


이런 과정을 거친 뒤에도 유니티로 PS4 게임을 개발할 때 종종 다양한 문제들이 발생한다. 그 중 대표적인 것은 쉐이더를 적용할 때 오류가 발생하는 것이다. 이 부분은 코드의 네이밍 때문에 주로 발생하는데, 유니티에서 제공하는 샘플 코드를 참고해서 수정하고 적용하면 대부분 문제가 해결된다.

또 다른 문제는 디바이스 호환 문제다. 유니티로 게임을 개발할 때, PS4용 듀얼쇼크 컨트롤러를 인식하기 위한 코드를 자신이 별도로 작성하지 않으면 컨트롤러를 인식하지 못하는 일이 발생하기 때문이다. 이 부분 역시도 유니티에서 예시 프로젝트를 활용해서 코드를 제공하고 있으며, 이를 참고해서 코드를 짜는 것이 필요하다.

PS VR용 타이틀을 개발할 때도 이와 비슷한 문제에 봉착한다. PS VR용 디바이스를 인식하게 하기 위해서는 별도의 코드를 짜야 하는데, 이 작업을 자신이 직접 하나하나 다 해야 하기 때문이다. 이 부분 역시도 유니티에서 인지하고 있으며, 예시 프로젝트를 통해서 개발자들이 코드를 참고해서 작성할 수 있도록 했다. 이 과정을 거치게 되면 주변 기기의 호환 문제나, 조작 간에 발생할 수 있는 문제 다수를 해결할 수 있다.


PC 빌드와 PS4용 빌드의 가장 큰 차이점은 세이브 방식이다. PS4의 세이브 방식은 독자적인 방식에다가, 하나의 세이브 파일에 마운트되고 디스마운트되는 방식이기 때문에 세이브 파일을 여러 개로 나누는 것이 불가능하다. 이 부분이 검수 과정에서 많이 지적 받기 때문에 특히 주의할 것을 강조했다. 유니티 플러그인 기준으로는 하나만 적용되고 있으며, 포럼 등에 올라온 예시 프로젝트 중 세이브 예시 프로젝트의 예제를 참고하면 이 부분도 어느 정도 해결할 수 있다.

박정오 프로그래머는 이 부분은 PS VR뿐만 아니라, PS4용 타이틀을 개발할 때 공통적으로 겪는 문제라고 설명했다. 그런 만큼 예시 프로젝트나, 인터넷에 올라와 있는 예제 코드를 참고해서 코드를 짜거나 수정하면 어느 정도 해결할 수 있는 부분들이기도 하다. 그렇지만 PS VR용 타이틀은 여기에서 VR 컨설테이션이라는 과정을 거쳐야만 한다. 이 과정을 통과하지 못하면, 정식 빌드를 아예 제출할 수 없다. 즉 출시 자체가 불가능한 것이다.


VR 컨설테이션 과정에서는 버그 등을 잡거나, 글자가 이상하다거나 하는 부분을 체크하지는 않는다. VR 컨설테이션에서 가장 중요하게 보는 부분은 그래픽이 깨지거나, VR 게임 개발 중에 흔히 발생할 수 있는 해상도 오류 등을 체크하는 것이다. 박정오 프로그래머는 자신이 컨설테이션 과정에서 지적받은 경험을 예로 들었다. 또한 SIE에서는 검수 중 문제가 발생했을 때 단순히 불합격 통보만 주는 것이 아니라, 문제 현상이 나오는 부분을 하나하나 스크린샷으로 찍고 버그 원인을 리포트로 작성해서 보내주기 때문에 컨설테이션 자체를 두려워할 필요는 없다고 덧붙였다.

VR 컨설테이션 과정에서 가장 많이 지적하는 부분은 홀 오브 미러 현상과 리프로젝션 엣지 현상이 발생하는 부분들이다. 홀 오브 미러 현상은 마치 만화경 속 모습처럼, 오브젝트가 다반사되면서 형체가 이상하게 뜨는 현상이다. 리프로젝션 엣지는 물체나 화면의 끄트머리가 정상적으로 출력되지 않는 현상을 일컫는다.


이러한 현상이 일어나는 원인으로 박정오 프로그래머는 두 가지 경우를 구분했다. 이 두 현상이 게임 내내 일어난다면, 카메라에 걸어둔 함수에 문제가 있을 가능성이 높다. 따라서 함수 코드를 다시 분석하고, 수정해서 적용할 필요가 있다. 그렇지 않고 특정 부분에서만 홀 오브 미러 현상이나 리프로젝션 엣지 현상이 발생하면 프레임 드랍을 의심할 필요가 있다. 프레임이 급격히 저하되면 일부 화면을 제대로 처리하지 않고 씬을 불러오는 경우가 발생하는데, 그렇게 되면 렌더링이 꼬이면서 그래픽이 깨지는 현상이 발생하기 때문이다.

SIE에서는 어두운 부분이 까맣게 번져보이는 블랙 스미어 현상도 버그로 취급한다. 따라서 이 부분도 체크해서 수정할 필요가 있는데. 가장 쉬운 방법은 카메라 설정에 들어가서 수치를 조금 밝게 설정해주는 방식이다. 이렇게 하면 쉽게 해결할 수 있지만, 전체적인 색감이 변할 수 있다는 단점도 있다. 그래서 배경이 어두운 씬만 체크해서 카메라 세팅을 변경하는 방법을 취하기도 한다.

PS VR용으로 프로젝트를 제작할 때, 많은 사람들이 경고창과 VR 화면이 뜨는 순서를 뒤바꿔서 제출하는 경우가 많다. 일반적으로 PS VR에서는 경고창이 먼저 뜨고, 경고창에 동의한 뒤에야 VR 화면으로 넘어가는 구조로 되어있다. 그렇지만 시중에 뜨는 PS VR 예제 프로젝트에서는 VR 화면을 우선 띄운 다음에야 경고창을 보여주는 방식으로 되어있다. SIE에서는 후자를 오류라고 인식해서 리포트를 보내기 때문에, 순서에도 유의해서 프로젝트를 작성할 필요가 있다고 박정오 프로그래머는 강조했다.


또한 컨트롤러와 HMD의 위치 및 각도 인식 과정에서도 PS VR은 독자적인 방식을 채택하고 있다. 일반적으로 VR에서는 옵션 키나 특정 키를 강하게 누르면, 자신의 위치에 맞춰서 화면이 조정되는 기능을 지원한다. 이를 리센터라고 하는데, 보통은 각도와 위치를 둘 다 유저의 위치에 맞춰서 초기화를 하지만 PS VR의 경우는 약간 다르다. 거리만 초기화시키는 방식을 취하기 때문이다. 따라서 리센트를 구현할 때 유니티에서 기본적으로 지원해주는 것이 아니라, PS4용으로 독자적인 리센터 함수를 짜는 과정을 거쳐야 한다.


이밖에도 게임 도중 디바이스 종료시 발생하는 문제도 체크해야 한다. VR 헤드셋을 껐을 때 예제에서는 디바이스 종료로 인식하고 첫 씬으로 보내도록 되어있는데, 이것도 SIE에서는 오류라고 인식하기 때문에 수정할 필요가 있다.

VR 컨설테이션 과정을 통과했다면, FQA라는 과정을 통과해야 한다. 실제 출시를 위해서 통과해야 하는 검수 과정인 FQA에서는 PS 네트워크에서 해당 프로젝트가 잘 작동하는지, 하드웨어에서 잘 구동되는지를 기본적으로 체크한다. 뿐만 아니라 문장, 언어, 이미지 등 세부적인 부분까지도 다 체크하기 때문에 많은 개발자들이 어려움을 겪는 과정이라고 덧붙였다.

박정오 프로그래머가 겪은 지적 사항으로는 트로피 문제가 있었다. SIE에서는 유료 패키지형 PS4용 게임에는 무조건 트로피를 포함하도록 규정을 정해두고 있다. 이 사실을 몰랐던 박정오 프로그래머는 개발하던 게임에서 트로피를 안 넣었는데, FQA 과정에서 지적을 받고 트로피 디자이너와 기획자를 섭외해서 추가해야만 했다. 일부에서는 이를 사소하게 여기고 구현을 안 한 상태에서 제출하기도 하는데, 트로피가 추가되지 않으면 SIE에서는 FQA 과정을 통과시켜주지 않기 때문에 이 부분을 꼭 짚고 넘어가야 한다고 강조했다.

▲ "트로피 그까짓 것"이라고 추가하지 않았다가 통과가 안 될 수도 있다

PS4의 트로피를 유니티로 만들기 위해서는 NP툴킷2를 활용해야 한다. 예제와 플러그인, 소스가 NP툴킷2에 있기 때문에 구현 자체는 어렵지 않으며, C++에 대한 지식이 있다면 플러그인을 수정하는 것도 가능하다.

트로피 문제 외에도 PS4 FQA 과정에서 자주 지적받는 사항으로는 국가별 OX버튼 문제가 있다. 우리나라에서는 O가 확인, X가 취소라고 한다면 북미권에서는 X가 확인, O가 뒤로 가기 버튼으로 사용되는 등 국가별로 버튼의 활용이 차이가 있기 때문이다.

이 문제는 단순히 키 맵핑을 건드리는 것만으로 해결되지 않는다고 박정오 프로그래머는 설명했다. 예를 들어 튜토리얼 단계에서 화면 하단 등에 버튼에 대한 설명이 나오기도 한다. 이때 화면에 뜨는 텍스트나 이미지도 변경된 키 세팅에 맞춰서 뜰 수 있도록 해줘야 하기 때문이다. 이런 부분을 미리 고려해서 분기를 미리 짜두고, 국가별 세팅에 따라서 반영될 수 있도록 코드를 짜는 과정이 필요하다.


개발자들이 종종 좌시하는 것 중에 하나는 컨트롤러의 명칭 문제다. SIE에서는 컨트롤러의 각 파트별로 명칭을 지정해두고 있으며, 약어도 지정해주고 있다. 이를 네이밍 컨벤션스에 기록하고 개발자들에게 배포하고 있는데, 네이밍 컨벤션스에 맞지 않게 컨트롤러 키를 지칭하면 SIE에서는 필수 수정사항으로 기록하고 돌려보내게 된다.

주로 이 문제는 번역을 맡겼을 때 많이 발생한다. 번역을 맡은 곳에서 종종 콘텐츠 번역에 집중한 나머지 컨트롤러 명칭 부분에 신경을 안 쓰고 네이밍 컨벤션스에 맞지 않게 번역하는 경우가 많기 때문이다. 박정오 프로그래머도 현재 이 이슈 때문에 자신이 개발한 게임이 출시가 늦어지고 있는 만큼, 다른 개발자들도 이 문제 때문에 출시가 늦어지지 않기를 바란다고 당부하기도 했다. 특히나 중국어 같은 경우에는, 컨트롤러 키를 지정할 때 사용되는 간체와 번체의 한자가 다른 것도 주의할 필요가 있다.


PS VR용으로 타이틀을 제작할 때 또 주의해야 할 부분으로는 프라이머리, 세컨더리 방식임을 유념해야 한다는 점이었다. 오큘러스 리프트용 컨트롤러의 경우 컨트롤러가 왼손용과 오른손용이 구분이 되어있지만, PS VR 컨트롤러는 좌우 대칭형이기 때문에 구분이 어렵다. PS VR에서는 이를 프라이머리와 세컨더리 방식으로 구분하는데, 이는 로그인하는 순서에 따라서 결정하는 것이다. 즉 어느 것이 왼손인지, 오른손인지 컨트롤러 자체에서 구분하는 기능이 없다는 의미이다. 게임에서 왼손, 오른손을 따로 활용하기 위해서는 유저가 컨트롤러 세팅을 하는 과정을 거치는 등 다른 VR 기기용 타이틀과는 다른 방법을 요구하게 된다.

박정오 프로그래머는 최적화를 또 다른 난관으로 꼽았다. PS4의 그래픽카드가 VR을 구동하는 PC와 비교했을 때 비교적 낮은 사양의 그래픽카드를 사용하는 만큼, 최적화를 거치지 않으면 매끄럽게 돌아가지 않는 경우가 많기 때문이다. PS4 프로의 경우 최적화를 거치지 않아도 될 정도로 높은 성능을 보이고 있지만, PS4 프로용으로만 출시하는 것은 불가능하기 때문에 PS4 프로용 타이틀을 만들었다고 하더라도 최적화 과정은 반드시 거칠 수밖에 없다.


강연을 마무리하기에 앞서 박정오 프로그래머는 개발 전에 준비할 사항을 다시 한 번 되짚었다. PS4용으로 타이틀을 개발하기 위해서는 데브넷 아이디를 만들고, 서류를 작성해서 보낸 뒤에 타이틀 아이디를 SIE로부터 받아야 한다. 글로벌 아이디를 만들기 위해서는 서류를 만들어서 제출하는 등 번거로운 과정을 거칠 수밖에 없다. 이때 팁으로 회사 대표의 이메일이나, 대표의 신상을 미리 알고 있는 것이 좋다고 조언했다. SIE에서 이 부분을 자주 물어보기 때문이다.

PS4용 타이틀을 개발할 때 가장 번거로운 부분은, 개발용 툴을 받고 아이디를 인증하기 위한 사이트가 한 곳이 아니라 여러 곳에 나뉘어있다는 점이다. 데브넷은 포럼에 있지만, SDK을 다운로드 받는 곳은 다른 곳에 있다. 실제로 출시하기 위해서는 FQA 웹에 들어가서 검수를 받지만, 빌드를 업로드하기 위해서는 데브넷에 있는 사이트로 가야 하는 등 구조가 엉켜있기 때문이다. 뿐만 아니라 사이트 기본 언어는 일본어고, 종종 렉이 걸리는 등 부수적인 문제도 있다.

또한 작동하는 것을 눈으로 보기 위한 과정이 길다는 점도 문제점이기도 하다. 특히나 트로피가 정상적으로 나오는가 보기 위해서는 PS 네트워크 환경을 확인해야 하는데, 이 과정에서 직접 PS에 빌드를 다운로드해서 체크하는 과정을 거쳐야 하기 때문이다. 플러그인 수정 때도 로그가 난해하게 찍히기 때문에 확인이 어렵다는 점도 단점으로 손꼽힌다.

다만 PS4용으로 타이틀을 개발할 때는, C++에 대한 지식 없이도 포팅이 가능하다는 이점이 있다. 또한 SIE에서 질문에 대해서 피드백을 빨리 주는 편이고, FQA와 컨설테이션 과정에서 버그를 철저하게 찾아주기 때문에 버그를 찾는데 코스트를 적게 들여도 된다는 점도 장점이다.


박정오 프로그래머는 콘솔, 특히나 PS4용으로 타이틀을 만드는 것은 국내 프로그래머로서 상당히 모험적인 시도였다고 회상했다. 기존의 프로그래밍과는 다른 부분도 있었고, SIE에서 요구하는 기준이 일반적인 기준과 다른 점도 있었기 때문이다. 다만 SIE에서는 그런 부분에 대해서 서포트를 하기 위해 창구를 열어놓고 있는 만큼, 이 부분을 잘 활용하면 PS4용으로도 빌드를 만들 수 있을 것이라고 조언하면서 발표를 마쳤다