부자연스러웠던 전환

얼마 전에, 내부 개발 상황을 공유드리기 위해 첫 번째 개발자 노트를 작성했었습니다. 현재 PvE 시스템(지금은 보스 전투 중심으로 작업 중)은 거의 마무리 단계에 와 있지만, 여전히 부족한 부분이 하나 있었습니다.

NPC에서 보스 전투로 넘어가는 전환이 굉장히 어색하게 느껴졌습니다. 이 부분은 2025년 크리스마스 이벤트에서 실험적으로 보스를 처음 선보였을 때부터 이미 느끼고 있던 문제였습니다.

바로 컷신입니다.

프랭클린과 트레버

저를 포함한 대부분의 플레이어들은 컷신을 스킵하는 편이라고 생각하지만, 그렇다고 컷신이 아예 없는 것도 굉장히 어색하게 느껴졌습니다. 오히려 컷신을 스킵하는 행위라도 있었으면 할 정도로, 보스 전투가 아무런 전환 없이 바로 시작되는 흐름은 개발 내내 무시하려 해도 쉽게 뇌리에서 지워지지 않았습니다.

처음에는 간단하게 개발자 명령어로 좌표를 따서, 보스를 향해 1~2초 정도 카메라를 비추는 방식으로 처리하려고 했습니다.

하지만 이 방식은 오히려 컷신이 없는 것보다 더 어색하게 느껴졌습니다. 그 과정에서, 현실적인 범위 내에서 LAC에서의 컷신이 어떤 느낌이어야 하는지는 분명히 머릿속에 그려지기 시작했습니다. AAA 게임 수준은 아니더라도, 자연스럽게 보스 전투로 이어지기 위한 핵심 요소라는 생각이 들었습니다. 특히 대부분의 보스 전투가 별도의 인스턴스로 이동하는 구조이기 때문에 더더욱 필요했습니다.

그러나 문제가 있었습니다.

이걸 만들고 재생할 수 있는 도구가 없었습니다.

컷신은 굉장히 목적성이 강한 영역이어서, GTA의 기존 컷신을 재사용하는 것은 불가능했습니다. 락스타 에디터가 존재하긴 하지만, 커스텀 에셋에서는 여전히 불안정했고, 무엇보다 '행동'을 기록하는 것이 아니라 '영상'을 녹화하는 방식이어서 적합하지 않았습니다.

락스타 공식 홈페이지

그래서 컷신을 구현하기 위해서는, 결국 컷신 스튜디오를 직접 만드는 수밖에 없었습니다.


컷신 스튜디오를 만들게 된 이유

처음에는 비교적 순조롭게 진행됐습니다. 카메라 트랙을 만드는 과정이 재미있었고, 보간(interpolation) 연결을 추가하고, 다음 프레임으로 보간을 끊는 작업을 하면서 움직임이 만들어지는 과정을 보는 게 즐거웠습니다. GUI 작업도 재미있는 편이었고, 여러 요소들이 하나로 연결되면서 점점 형태를 갖춰가는 느낌이 좋았습니다.

시작한지 얼마안됐을 때

팀원들도 각자 상황에 맞게 컷신을 만들 수 있도록 최대한 직관적으로 만드는 것을 목표로 했습니다.

카메라 트랙을 만들면서, 결과물을 만들어내는 데 있어서는 큰 제약이 없을 것 같다는 생각이 들었습니다.

하지만 이 생각은 오래가지 않았습니다.


마주하게 된 FiveM의 한계

애니메이션 자체는 잘 동작했습니다. 매 틱마다 상태를 강제로 적용하는 방식으로 normalized time(일종의 특정 프레임 상태)을 유지할 수 있었고, 이를 통해 키프레임 기반으로 원하는 제어를 할 수 있었습니다.

현재 키프레임의 재생 상태에 따라 제대로 보여짐

하지만 파티클 트랙과 오디오 트랙을 다루기 시작하면서, 제대로 된 툴 체인이 없다는 한계가 명확하게 드러났습니다.

오디오를 특정 시점부터 재생하는 방법이 없었고, 런타임에서 사운드의 길이를 가져오는 방법도 존재하지 않았습니다.

오디오를 자르거나, 정확한 타이밍으로 미리보기 하거나, 특정 시점부터 다시 재생하는 것이 사실상 불가능했습니다. 즉, 장면에 맞게 여러 오디오를 재활용하는 것이 어렵다는 의미였습니다.

내가 원했던 오디오 트랙 예시

결국 선택지는 다음과 같았습니다:

  • 오디오 파일 전체를 그대로 재생하거나

  • 외부에서 새로운 오디오 파일을 따로 만들거나

  • 해당 구간에서는 오디오를 사용하지 않거나

반복 파티클 예시

파티클도 비슷한 문제가 있었지만, 상대적으로 영향은 덜했습니다.

대부분의 파티클은 반복(loop)되거나 매우 짧게 유지되기 때문에, 이 부분은 어느 정도 타협이 가능했습니다. 정지 상태나 스크럽 상태에서는 파티클이 정상적으로 보이지 않는 것을 감수하고, 실제 재생 중에만 자연스럽게 보이도록 하는 방식입니다.

이 문제들이 시스템 전체를 막아버리는 수준은 아니었지만, 꽤 불편한 제약들이었습니다. 그 외에도 여러 문제들이 있었지만, 일부는 과감하게 포기하고 필요한 부분만 가져가기로 판단했습니다.


필요한 것과 아닌 것의 구분

오디오, 배우, 카메라 트랙의 기본 기능을 만들고 나니, 필요한 것들이 훨씬 더 많다는 것을 느끼게 되었습니다. 파티클 트랙 외에도 필요한 요소들이 정말 많았습니다.

  • 환경 트랙 (시간, 날씨 등)

  • 프롭 트랙

  • 차량 트랙

  • 조명 트랙

  • 그 외 다양한 요소들

위에 나열한 기능들도 바로 만들고 싶은 유혹은 있었지만, 지금 시점에서는 꼭 필요하다고 느껴지지 않았습니다. 그래서 일단은 현재 존재하는 기능들만으로 컷신을 만들어보기 시작했습니다.


툴 없이 진행한 씬 구성

컷신을 만들어보며, 반드시 필요했던 것은 분위기를 잡기 위한 간단한 오브젝트나 파티클 배치 기능이었습니다. 특히 보스 전투 연출에서는 더더욱 중요했습니다.

하지만 이 부분은 별도의 툴을 만들지 않았습니다.

이유는 몇 가지가 있었습니다.

가장 큰 이유는, 컷신에서 사용하는 “장면”이나 “스테이지”가 보스 전투에서도 그대로 사용될 가능성이 높았기 때문입니다. 이걸 제대로 하려면, 별도의 씬 에디터를 만들고, 그 데이터를 컷신 스튜디오로 가져오는 구조를 만들어야 했습니다.

이건 작업 범위가 크게 확장되는 방향이었습니다.

그리고 제 개발 철학 중 하나는, 대체 수단이 있을 경우에는 툴을 만들지 않는 것입니다.

툴 자체가 목적이 되어서는 안 되고, 정말 필요한 경우에만 만들어야 합니다.

그래서 씬 배치에 대해서는 별도의 툴을 만들지 않고, 좌표를 직접 수집해서 데이터를 수동으로 구성하는 방식을 선택했습니다.

수동으로 구축하는 데이터 예시

아래는 컷신 스튜디오에서 컷신을 재생하는 예시입니다.

파티클 및 환경 데이터가 없음

그리고 아래는 실제 게임플레이에서 스테이지 데이터를 함께 불러와 재생하는 예시입니다.

스테이지 파티클 및 컷신 파티클이 보임

현재 상태와 앞으로의 방향

현재 시점에서의 목표는 완벽한 툴을 만드는 것이 아니었습니다.

앞으로 추가될 보스 전투에 실제로 사용할 수 있는, 실용적인 수준의 결과물을 만드는 것이었고, 다른 개발 작업을 지연시키지 않는 선에서 진행하는 것이 중요했습니다.

현재 컷신 시스템은 아직 초기 단계입니다. 부족한 부분도 많고, 앞으로 개선하거나 확장할 요소들도 많이 남아 있습니다. 하지만 지금 당장 필요한 역할은 충분히 수행할 수 있는 상태입니다. 이전보다 훨씬 자연스럽고 의도된 전환을 만들어낼 수 있게 되었습니다.

무엇보다 중요한 것은, 이제 기반이 생겼다는 점입니다.

매번 컷신을 개별적으로 구현하는 방식이 아니라, 재사용하고 확장할 수 있는 시스템으로 발전시킬 수 있는 기반이 마련되었습니다.

앞으로는 보스 전투뿐만 아니라, 퀘스트나 일부 미니게임 등 다양한 영역에서도 상황에 맞게 컷신을 조금씩 활용해나갈 계획입니다.

이번 개발 로그는 최대한 짧게 구성해봤습니다.

다음에 또 다시 찾아 뵙겠습니다.