많은 NPC 장면에서 PC 부하가 일어나는 과정
Qavira
오픈 월드 롤플레잉 게임이나 대규모 전쟁 시뮬레이션을 즐기다 보면 평화로운 시골길에서는 매끄럽던 화면이 도심 광장에 진입하자마자 끊기는 현상을 쉽게 마주합니다. 화면을 가득 채운 군중 캐릭터를 비추는 순간 프레임 레이트가 급격히 떨어지며 쿨러 팬이 거칠게 돌아가기 시작합니다. 대다수 이용자는 이러한 증상을 마주했을 때 단순히 그래픽 카드의 성능 부족을 먼저 의심하곤 합니다.
실제 하드웨어 내부에서 벌어지는 일은 화면 해상도나 화려한 텍스처 처리보다 훨씬 복잡한 구조를 지닙니다. 수많은 캐릭터가 제각각 움직이는 장면은 중앙 처리 장치와 그래픽 처리 장치가 쉴 틈 없이 데이터를 주고받아야 하는 고난도 작업 환경입니다. 화면 속 인물 하나하나가 컴퓨터 자원을 어떻게 잠식해 나가는지 그 연산 형성 과정을 짚어볼 필요가 있습니다.
중앙 처리 장치가 감당하는 논리 연산
화면에 캐릭터가 모습을 드러내기 전, 시스템은 각 캐릭터의 상태를 내부적으로 먼저 계산해야 합니다. 화면에 서 있는 논플레이어 캐릭터는 단순한 그림이 아니라 독자적인 상태값을 지닌 소프트웨어 객체로 작동합니다. 캐릭터의 현재 위치, 주변 환경과의 거리, 플레이어의 행동에 대한 반응 규칙이 매 프레임마다 끊임없이 갱신됩니다.
이 과정에서 가장 무거운 짐을 짊어지는 부품은 바로 프로세서입니다. 수십 명에서 수백 명에 이르는 인공지능이 동시에 장애물을 피하고 최적의 이동 동선을 계산하는 네비게이션 메시 탐색 연산이 주기적으로 일어납니다. 여기에 군중이 들고 있는 무기나 옷자락의 충돌을 판정하는 물리 계산까지 겹치면 연산량은 기하급수적으로 불어납니다.
단일 스레드 처리 능력이 떨어지는 구형 프로세서에서는 이러한 논리 연산이 제때 끝나지 않아 다음 그래픽 프레임을 준비하지 못하는 병목 현상이 발생합니다. 그래픽 카드가 아무리 빠르더라도 중앙 처리 장치가 인물들의 좌표와 상태를 넘겨주지 못하면 모니터에는 이전 프레임이 지연되어 표시될 수밖에 없습니다.
스켈레탈 애니메이션과 뼈대 변형의 부담
인물이 살아있는 것처럼 자연스럽게 걷거나 대화하려면 모델링 내부에 심어둔 가상의 뼈대를 움직여야 합니다. 3차원 공간에서 캐릭터 표면을 이루는 무수한 정점들은 연결된 뼈의 회전과 이동 값에 종속되어 실시간으로 위치를 재조정받습니다.
단 한 명의 정밀한 캐릭터 모델에도 수십 개에서 백여 개가 넘는 가상 뼈 구조가 적용됩니다. 광장에 모인 군중이 저마다 다른 동작을 취하는 순간, 컴퓨터는 수만 개에 달하는 뼈대 행렬 데이터를 매 순간 행렬 곱셈을 통해 풀어내야 합니다. 이 작업은 스키닝이라 불리며, 구현 방식에 따라 프로세서나 그래픽 칩셋의 연산 유닛을 극도로 소모합니다.
개발사들은 부하를 낮추고자 카메라에서 멀리 떨어진 인물의 애니메이션 갱신 주기를 초당 몇 회 수준으로 강제로 낮추는 기법을 씁니다. 원거리 캐릭터가 뚝뚝 끊기듯 움직이는 모습이 포착되는 까닭도 바로 이러한 연산 한계를 방어하기 위한 궁여지책입니다.
화면 표현을 지시하는 드로우 콜의 누적
인공지능과 애니메이션 계산이 마무리되면 프로세서는 그래픽 카드에게 구체적인 렌더링 작업을 지시합니다. 하드웨어 간의 통신 규약에서 이를 드로우 콜이라고 부르며, 화면에 물체를 하나 그릴 때마다 명령 신호가 오갑니다.
군중이 등장하는 장면에서 자원이 소모되는 핵심 영역들은 아래와 같이 압축할 수 있습니다.
- 캐릭터마다 제각각 적용된 의상, 장신구, 머리카락 메쉬 구분
- 빛 반사와 재질감을 표현하기 위해 할당된 다중 셰이더와 텍스처 호출
- 움직이는 인체 관절에 반응하여 생성되는 실시간 동적 그림자 맵 생성
- 원거리와 근거리 모델 간의 폴리곤 밀도를 실시간 조절하는 세부 수준 전환
- 장애물 뒤에 가려진 객체를 그리기 대상에서 제외하는 오클루전 컬링 판정
- 인물 주변의 공기감과 반사광을 계산하는 후처리 조명 파이프라인 간섭
인물 수가 늘어날수록 그래픽 드라이버 계층을 거치는 호출 횟수가 폭증합니다. 명령 횟수가 일정 한도를 넘어서면 프로세서의 자원이 전송 명령을 작성하는 데만 전부 쓰여 그래픽 하드웨어의 처리 능력이 미처 발휘되지 못하는 기이한 현상이 빚어집니다.
비디오 메모리와 대역폭의 한계 시험
마지막으로 직면하는 장벽은 데이터의 이동 통로입니다. 다채로운 도시 분위기를 내기 위해 개발진은 다양한 외형 텍스처와 장비 모델을 메모리에 상주시켜야 합니다. 똑같이 생긴 복제 인간이 거리를 채우는 사태를 막으려면 인물마다 고해상도 텍스처 세트가 독립적으로 적재되어야 합니다.
비디오 메모리 공간이 넉넉하지 못하면 컴퓨터는 주기억장치에서 그래픽 메모리로 텍스처 데이터를 쉴 새 없이 실어 나릅니다. 이 과정에서 버스 대역폭이 포화 상태에 도달하면 화면 전환 시 심각한 순간 끊김이 발생하거나 인물의 질감이 찰흙처럼 뭉개진 채로 뒤늦게 로딩되는 현상이 벌어집니다.
시스템의 한계를 극복하기 위해 최신 게임들은 군중의 인스턴싱 기법과 메시 셰이더 기술을 적극 도입하고 있습니다. 동일한 뼈대와 기하 구조를 한 묶음으로 묶어 명령 횟수를 획기적으로 줄이는 기술적 타협이 이루어질 때 비로소 거대한 가상 세계가 프레임 저하 없이 안정적인 호흡을 유지하게 됩니다.
코멘트
박민수
게임 엔진 분석가
이지은
하드웨어 테크 에디터
정성훈
성능 최적화 연구원