• 주제 : 프라시아 전기에 멋진 탈것 만들기 - 멋지게 타고, 멋지게 달리고, 멋지게 내리자
  • 강연자 : 이연석 Yeonseok Yi | 넥슨코리아 / Nexon Korea
  • 발표분야 : 프로그래밍
  • 권장 대상 : 게임 프로그래머, 클라이언트 프로그래머, UE4 프로그래머
  • 난이도 : 기본적인 사전지식 필요


  • [강연 주제] 프라시아 전기는 PC, mobile에서 즐길 수 있는 공성전의 대중화를 목표로 하는 MMORPG입니다. 프라시아 전기의 세계는 순간 이동이 제한된, 위치와 거리가 중요한 의미를 갖는 곳입니다. 그래서 빠른 이동을 도와주는 탈것이 중요합니다. 게다가 다양한 모습을 가진 탈것들로 내 개성을 표현할 수도 있습니다. 이렇게 중요한 탈것이기 때문에 멋지게 만들고 싶었습니다. 멋진 탈것을 만들기 위해 노력하면서, 고민하고 알게 된 것들을 공유하려고 합니다.

    넥슨코리아 이연석 개발자는 2022 NDC를 통해 넥슨의 신작 '프라시아 전기'의 프로그래밍 강연을 진행했다. 그는 현재 넥슨코리아에서 클라이언트 프로그래머로 프라시아 전기를 만들고 있는 핵심 개발자 중 한 사람이다. 그는 프라시아 전기 속 탈것을 모든 클라이언트에서 멋지게 잘 보여주기 위한 고민이 있었다며, 캐릭터의 상태를 통해 탈것을 동기화하고, 멋진 연출을 보여주기 위해서 선택한 방법을 소개했다. 이외에도 자연스러운 움직임을 위해 곡선 이동을 추가한 과정과 자동 이동을 멋지게 꾸며줄 길잡이에 관한 내용도 함께 전했다.




    ■ '프라시아 전기'의 순간 이동이 없는 세상 속 탈것이 갖는 의미


    강연은 '프라시아 전기'에 대한 간단한 소개로 시작됐다. '프라시아 전기'는 PC와 모바일 플랫폼에서 즐길 수 있는 '공성전의 대중화'를 목표로 하는 MMORPG 신작이다. 프라시아 전기의 캐릭터들은 칸 점유 없이 자유로운 방향으로 이동할 수 있으며, 내비게이션 메시를 이용한 직선 이동이 기본이 된다. 특이한 점은 순간 이동이 제한된, 위치와 거리가 아주 중요한 의미를 갖는 세계가 등장한다는 점이다. 순간 이동이 없으므로, 먼 거리를 이동해야 하는 상황에서는 자동 이동이 큰 비중을 차지하게 된다.

    프라시아 전기의 이러한 세계 설정에 맞춰 게임 속에는 다양한 모습을 가진 탈것들이 등장한다. 탈것은 캐릭터의 빠른 이동을 돕는 것은 물론, 여러 아이템으로 꾸며 내 캐릭터와 함께 개성을 표현할 수도 있다. 이연석 개발자는 이렇게 중요한 탈것이기 때문에 더 멋지게 만들고 싶었다며, 이를 위해 본격적인 개발에 앞서 네 가지 목표를 먼저 설정했다고 소개했다.


    첫 번째는 '애니메이션 중심의 생동감 넘치는 탈것 만들기'다. 비주얼 이펙트 사용을 자제하고, 애니메이션 중심으로 표현하면 자극적이지 않고, 담백하게 보일 수 있다고 판단한 것이다.

    두 번째는 '현실적으로 만들기'다. 제자리에서 갑자기 탈것을 탄 상태로 바뀌는 것이 아닌, 그 과정이 설명될 수 있도록 현실적으로 과정을 담는 것을 뜻한다. 이러한 과정을 넣다 보면 필연적으로 플레이어의 조작 권한을 뺏는 시간이 생기게 되는데, 이 부분이 '답답하지 않게' 만드는 것도 중요했다.

    마지막으로 탈것을 타고 장거리를 이동하다 보면 자칫 지루해지기 쉬우므로, 이 지루함을 조금이나마 덜어낼 수 있도록 보는 플레이 방식에 적합한 생동감 있는 표현을 넣고자 했다. 정리하자면 '애니메이션 중심의 현실적이고 생동감 있는 탈것'만들기를 목표로 삼았다고 할 수 있다.

    이연석 개발자는 초기 목표를 설정한 후에도 서버 개체 없이도 모두가 같은 경험을 공유할 수 있도록 '서버에는 없는 탈것 개체', '모든 클라이언트에 동기화', '기반 이동 체계를 그대로' 하는 등 여러 고민을 담아야 했고, 결국 초기에 설정한 목표들이 반영된 결과물을 만들어낼 수 있었다고 설명했다.

    그는 약 14초 길이의 '프라시아 전기' 인게임 속 탈것 영상을 공개한 뒤, 강연을 지켜보는 모두에게 영상 속 탈것이 멋지게 보였기를 바란다며, 이러한 탈것을 만든 과정의 이야기를 살펴보겠다고 전했다.




    ■ 프라시아 전기 속 탈것 '멋지게 타기'와 '멋지게 내리기'


    처음으로 살펴본 것은 '멋지게 타기'다. 프라시아 전기에서 캐릭터가 달리고 있을 때는 멈추지 않고 계속 달리면서 탈것에 탈 수 있게 했다. 캐릭터가 달리는 동안 멀리서 탈것이 달려오고, 가까이 오면 탈것에 올라타는 식이다.

    프라시아 전기에서는 탈것 개체 없이 캐릭터의 탈것 상태만을 가지고 동기화하는 방법이 사용됐기 때문에, 총 7개로 나뉘는 '탈것 상태'를 먼저 알아야 한다. 탈것 상태는 일반, 부르기, 랑데부, 오르는 중, 오르기 완료, 내리는 중, 내리기 완료까지 일곱 가지로 구분되며, '멋지게 타기'에서는 이 중에서 다섯 개의 탈것 상태가 사용된다.

    첫 번째 순서는 탈것에 타지 않은 기본 상태인 '일반'에서 시작된다. 이후 '부르기' 상태에서 캐릭터가 탈것을 부르는 연출을 하고, 이후 '랑데부' 상태가 되면서 탈것이 생기고, 캐릭터와 탈것이 올라탈 수 있을 정도로 가깝게 만난다. 이후 '오르는 중', '오르기 완료' 상태를 거쳐 타기 과정이 모두 마무리되는 식이다. 일련의 상태 변화는 서버와 클라이언트의 통신 과정을 보면 그 전환 흐름을 파악하기가 더 수월하다.

    ▲ 프라시아 전기에서 사용되는 일곱 가지 탈것 상태 구분

    ▲ '타기' 상태의 서버와 클라이언트의 통신 과정

    캐릭터가 탈것에 올라탄 상태를 만들기 위해서는 캐릭터 액터를 탈것 액터에 부착하는 방식이 사용됐다. 오르기가 시작되는 시점에 캐릭터와 탈것은 방향도 위치도 다른 상태인데, 일단 두 액터를 붙인 후 오르기 애니메이션을 재생하고, 일정 시간 동안 위치, 방향의 차이가 0이 되게끔 했다. 그는 이러한 방식 탓에 캐릭터 액터의 위치와 메시의 위치가 달라지는 상황이 발생하기도 했지만, 카메라 연출을 더해 내 캐릭터가 계속 화면 가운데에 안정적으로 보일 수 있게 할 수 있었다고 설명했다.

    일반적으로는 이정도로 타기를 연출할 수 있으나, '프라시아 전기'의 몇 가지 예외 상황을 함께 고려해야만 했다. 첫 번째는 게임이 '모바일'로 구동될 수 있다는 점이다. 모바일 플랫폼에서 플레이하다가 통신 끊김이 발생하면 서버와 클라이언트가 주고 받는 메시지를 놓치기 쉬운데, 이를 보완하기 위해 캐릭터의 탈것 상태는 임의의 상태에서 임의의 상태로 전환이 가능하도록 했다. 두 번째 예외 상황은 길이 너무 좁거나 꼬불꼬불해서 타기 연출 진행이 어려운 상황이 발생했을 경우다. 이런 경우에 대비하여 프라시아 전기에서는 제자리에서도 바로 탈것에 탄 상태가 될 수 있도록 했다.


    탈것에 멋지게 탔다면, 멋지게 내릴 차례다. 내릴 때는 일곱 가지 탈것 상태 중 네 가지 상태가 사용된다. 처음엔 '오르기 완료' 상태에서 시작하고, 클라이언트에 내리기 요청을 보낸 뒤 문제가 없다면 서버는 순서에 맞게 '내리는 중', '내리기 완료', '일반' 상태 메시지를 보내게 된다. 타기 과정처럼 특별히 처리해야할 것이 없어서 서버에서 주는 것들을 받아 그대로 진행시키는 식이다.

    이연석 개발자는 내리기와 타기는 기본적으로 같은 과정을 거치지만, 내리기에서는 멋지게 보이기보다 이후 플레이를 빠르게 할 수 있게끔 최소한의 연출과 빠른 반응성을 더해 가볍게 만드는 것에 집중했다고 설명했다. 이때도 자연스러움을 더하기 위해 현재 보고 있는 방향으로 탈것이 달려가며 자연스럽게 사라지게 하는 연출이 적용됐다.

    이정도로도 충분히 납득이 가고 자연스러운 연출이 가능했지만, 이연석 개발자는 '멋있게 내리기'를 완전히 포기할 수 없었다며, 내리기 스킬을 추가하게 됐다고 설명했다. 여기서 내리기 스킬은 탈것에 탄 상태에서 스킬을 쓰면서 내리는 것을 말한다. 이를 통해 프라시아 전기에서는 탈것을 타고 달리다가 내릴 때도 끊김 없이 전투를 이어갈 수 있게 됐다.

    ▲ 자연스럽고 간결한 내리기 연출을 완성한 뒤,

    ▲ '멋'을 더하기 위해 '내리기 스킬' 기술을 추가하게 된 셈이다



    ■ 프라시아 전기 속 '멋지게 달리기'

    강연의 마지막 순서로 '멋지게 달리기'에 대한 소개가 이어졌다. 해당 차례에서는 게임 내에 적용된 곡선 이동과 자동 이동 길잡이 시스템에 대해 들어볼 수 있었다.

    프라시아 전기에서의 캐릭터 이동은 기본적으로 '직선'으로 이뤄진다. 먼 거리를 갈 때는 목적지에 가까운 곳까지 큰길을 통해 이동하는 길찾기 방식이 적용되어 있는데, 이러면 큰길들의 분기점을 지날 때마다 급격하게 방향을 꺾는 경우가 많이 발생하게 된다. 걸을 때는 크게 신경이 쓰이지 않을지라도, 탈것을 타고 빠르게 지나갈 때는 문제가 더 잘 보일 수 밖에 없다. 이때 해결책이 되어주는 것이 바로 곡선 이동이다.


    위에서 말한 '큰길의 분기점'은 여러 큰길이 만나는 지점으로 위치와 반경을 갖는 원 형태의 공간으로 이루어졌다. 이 위치를 기준으로 반경 내의 모든 영역은 네비게이션 메시가 잘 깔린 안전한 공간이라고 할 수 있다. 이런 특징들을 이용, 분기점을 지날 때는 곡선 형태의 이동이 이루어지게끔 한 것이다.

    분기점을 지나는 곡선에는 '베지어 곡선'이 활용됐다. 이연석 개발자는 분기점의 진입점과 진출점은 정해져 있으므로, 조절점 하나만 더하면 바로 2차 베지어 곡선이 만들어지게 된다며, 가장 단순한 방법이면서 쉬운 방향과 길이 계산이 가능했다고 설명했다. 이렇게 만들어진 곡선은 서버와 클라이언트 양쪽에 적용하기도, 의사소통을 하기에도 수월하다.


    하지만 늘 그렇듯 여기서도 문제가 생긴다. 분기점을 지나는 경로는 다양하게 만들어질 수 있으므로, 예시로 본 것처럼 정직하게 중심을 향해 들어오고, 중심으로부터 나가지 않을 수 있기 때문이다. 이외에도 베지어 곡선이 균일하지 않다는 문제도 있었다. 이연석 개발자는 이러한 문제를 해결하기 위해 시간이 아니라 이동 거리를 가지고 곡선 위의 점을 찾도록 하거나 뉴턴 랩슨 방법을 활용하는 등 여러 해결책을 강구했고, 처음에 상상 속에 그렸던 곡선 이동을 구현할 수 있게 됐다고 소개했다.


    ▲ 조사 과정에서 언리얼 엔진의 'Spline Component' 기능으로 동일한 곡선을 구현할 수 있다는 것도 알게 됐다고

    '멋지게 달리기'가 가능하게끔 만들어주는 마지막 기능은 '자동 이동 길잡이'에 있다. 자동 이동 길잡이는 맵에 하얀빛으로 표시되어 캐릭터의 이동 경로를 미리 보여주는 기능이다. 이 기능은 게임 세계의 개체가 아닌 플레이어에게만 보이는 요소이므로, 정확한 경로를 표현하기보다 '보기 좋은' 기능이 될 필요가 있었다. 이때 활용된 것이 언리얼 엔진의 'Spline Component'다. 이연석 개발자는 곡선이 만들어지며 실제 경로에서 조금씩 벗어나게 되는데, 이것이 오히려 역동적으로 예쁘게 표현되었다며, 액터를 하나 만들어 예쁜 리본 파티클을 달아주는 식으로 손쉽게 구현할 수 있었다고 설명했다.

    이연석 개발자는 끝으로 강연을 시작할 때 소개했던 14초 길이의 인게임 영상을 다시 소개하며, 처음 영상을 봤을 때와는 다르게 프라시아 전기 속 기능 하나하나의 내부 동작 방식이 보이는 상태가 되셨으면 좋겠다고 당부하며 자신의 발표를 마무리했다.

    ▲ 곡선 이동을 구현할 때 사용한 기능으로 손쉽게 제작한 '자동 이동 길잡이' 기능

    ▲ 이렇게 프라시아 전기의 멋지게 타고, 달리고, 내리는 기능이 만들어질 수 있었다