
데브캣 게임 아키텍쳐팀 정찬우는 6월 16일 넥슨 개발자 컨퍼런스에서 '<마비노기 모바일>의 카메라 시스템 설계도 - 독자적인 컴포넌트 시스템 위에서 다시 구현하는 3D 게임 카메라 시스템 설계'를 주제로 마비노기 모바일의 카메라 시스템 개발에 대해 발표했다.
마비노기 모바일 개발진은 유니티 엔진에서 기본 제공하는 '시네머신'을 사용하는 대신 카메라 시스템을 자체 구현하는 방향을 선택했다. 프로젝트가 유니티 표준 컴포넌트가 아닌 자체 C# 컴포넌트 시스템을 기반으로 구동되며, 개발 과정에서 요구되는 카메라 디렉션의 디테일과 조건 판단의 구체성이 매우 높았기 때문이다.
자체 컴포넌트 시스템은 코드 생성기를 통해 프레임 내 업데이트 순서를 강제하므로, 시네머신을 적용할 경우 복잡한 브릿지 레이어가 추가되어 타이밍 관리가 어려워진다는 계산이 있었다. 다만 타임라인 기반의 공정이 유용한 컷신 제작에는 시네머신을 적극 활용하고 있다.
자체 구현된 3D 게임 카메라 시스템은 일반적인 카메라 아키텍처 구조를 따른다. 최종 출력값인 포지션과 로테이션을 직접 다루지 않고, 타겟 좌표, 각도, 거리 등으로 분해한 '카메라 릭 프로퍼티' 스트럭처를 정의해 사용한다. 시스템의 최소 기능 단위인 모디파이어는 내부 상태를 가지지 않는 스테틱 메서드로 구현되어 입력받은 프로퍼티를 변경해 반환하며, 회전 입력 처리나 지형 충돌 검사 등 다양한 비헤이비어에서 재활용된다.
비헤이비어 클래스는 게임 내부 상태와 액터 맥락을 관리하며 상황에 맞는 프로퍼티를 반환한다. 캐릭터를 추적하는 팔로우 카메라, 전투 카메라 등이 이에 해당한다. 최상위의 카메라 컴포넌트는 디렉터 역할을 수행하며 게임 상태에 따라 적절한 비헤이비어의 출력을 선택하거나 블렌딩하고, 스프링 댐프 곡선을 통한 스무딩 처리를 거쳐 유니티 카메라 오브젝트에 최종 트랜스폼을 적용한다.
개발 과정에서는 이터레이션 시간을 단축하기 위해 실시간 환경 변수 확인이 가능한 커스텀 인스펙터 에디터를 구축했다. 이 에디터는 기획서의 디렉션 문장과 유사한 설명식 UI로 구성되어 기획자와 개발자 간의 의도 오차를 줄였으며, 실시간 적용을 위해 카메라 설정값을 캐싱하지 않고 직전에 읽도록 규칙을 세웠다.
카메라 컴포넌트 최종 단계에서는 트랜스폼 기반의 포스트 이펙트가 적용된다. 사인 그래프 샘플링을 보정해 프레임 레이트와 무관하게 일정한 타격감을 주는 카메라 쉐이크, 유니티 타임라인 플레이어블과 연동되어 거리와 FOV를 조작하는 타임라인 이펙트가 포함된다. 또한 투영 행렬의 중심축을 평행 이동시키는 오프셋 프로젝션 기술을 도입하여, 화면 UI나 가상 키보드가 활성화될 때 월드 좌표 이동 없이 카메라 가림 현상을 해결했다.
발표자는 카메라 로직 디버깅의 어려움을 지적하며 시각화의 중요성을 강조했다. 수치적 에러보다 감각적인 어색함이 주를 이루는 카메라 문제 특성상 기즈모와 그래프를 통한 시각화가 비용 대비 효율이 높다는 설명이다. 이와 함께 계산 단순화를 위해 월드 및 뷰 스페이스 중심으로 로직을 처리할 것과, 유니티와 C# 시스템 뉴메릭스 라이브러리 간의 행렬 메저 및 핸디드니스 차이로 발생하는 렌더링 오류를 변환 유틸리티로 해결한 경험을 전달했다.
마지막으로 가독성과 유지보수를 위해 코드 작성 시 단문자 변수 사용을 금지하고, 로직의 의도를 담은 주석을 반드시 작성하며, 수식을 한 줄에 몰아쓰지 않고 세로로 풀어 쓰거나 메서드로 분리하는 내부 리뷰 기준을 제시하며 발표를 마쳤다.




[성수안 기자 nakir@chosun.com] [gamechosun.co.kr]
ⓒ기사의 저작권은 게임조선에 있습니다. 허락없이 무단으로 기사 내용 전제 및 다운로드 링크배포를 금지합니다.



