게임 속 사격 중에 이동 속도가 느려지는 사유

캐릭터의 이동 속도에 영향을 주는 상태를 4종류만 넣어도 조합마다 값을 따로 정하는 방식은 36개의 숫자가 필요했고 배율을 곱하는 방식은 10개면 족했습니다.

자세/사격 상태/장비 무게/부상 여부 이 4가지 상태가 겹쳐도 이동 속도가 항상 일관되게 감소하는 이유는 바로 이 10개짜리 배율 구조, 이른바 상태 기반 이동 배율 덕분이라고 할 수 있는데요. 아래에서 이에 대해 자세히 알아보도록 하겠습니다.

따로 정하면 36개 곱하면 10개

이동 속도를 결정하는 상태는 하나가 아닙니다. 서 있는지 앉아 있는지 전력 질주 중인지에 따라 기본 속도가 제각각이고 조준 중인지 대기 중인지 사격 중인지에 따라 또 달라지며 부상이나 장비 무게까지 얹히면 조합은 순식간에 불어나게 됩니다.

상태별 조합마다 속도 값을 하나하나 채워 넣는 방식으로 이 숫자들을 계산해보았습니다. 상태가 1종류일 때는 3개, 2종류가 되자 9개, 3종류에서 18개 4종류에서는 36개까지 늘어났습니다. 한편, 상태마다 배율 하나씩만 정하고 그 배율들을 곱해서 최종 속도를 구하는 방식으로 같은 것을 계산하면 3개, 6개, 8개, 10개로 완만하게 증가했습니다.

왜 이렇게 차이가 날까?

이 격차는 두 방식의 구조 자체가 다르기 때문에 생기는데요. 조합마다 값을 입력하는 방식은 상태 종류가 늘어날 때마다 기존 조합 전체에 새 상태의 경우의 수를 곱해야 하니 값의 개수가 곱셈으로 폭증합니다.

반대로 배율을 곱하는 방식은 상태 종류가 늘어나도 그 상태에 배율 하나만 추가하면 되니 덧셈으로 증가합니다. 게임 프로그래밍 이론을 정리한 책 “Game Programming Patterns”에서 로버트 니스트롬은 이 현상을 상태 머신의 분리로 풀이합니다.

캐릭터의 행동 종류가 n가지, 소지품 종류가 m가지일 때 “하나의 상태 머신에 다 담으려면 n x m개의 상태가 필요합니다. 하지만 두 개의 머신으로 나누면 n + m개면 충분하다.”는 말입니다. 이동 속도의 배율 구조도 결국 여러 상태를 하나의 커다란 조합표 대신 독립된 배율들로 쪼갠 것이어서 곱셈이 아니라 덧셈으로 늘어납니다.

겹치면 값이 어긋난다

값의 개수 차이만큼이나 중요한 문제가 일관성인데요. 조합마다 속도 값을 사람이 직접 채워 넣는다고 가정하고 “사격 중에는 속도를 정확히 절반으로 줄인다.”는 의도로 자세별 표를 손으로 채워봤습니다. 그런데 자세마다 따로 입력하다 보니 실제 사격 중 속도 비율이 서기 47.4%, 앉기 50.5%, 전력질주 48.7%로 미묘하게 들쭉날쭉했습니다.

작은 오차인 것 같지만 캐릭터마다 패치마다 이 표를 새로 손볼 때 이런 오차가 계속 반복해서 쌓일 수 있다는 의미입니다. 배율을 곱하는 방식으로 같은 걸 계산하면 자세가 무엇이든 사격 배율 0.5하나만 곱해지기 때문에 세 자세 모두 정확히 50.0%가 나왔습니다.

그래프로 그려보니

이 두 곡선을 나란히 그려보면 격차가 시각적으로도 뚜렷하게 벌어집니다. 상태 종류를 가로축에 필요한 값의 개수를 세로축에 로그 스케일로 두고 그렸는데 조합형 곡선은 4종류 지점에서 가파르게 꺾여 올라가는 반면 배율형 곡선은 훨씬 완만한 기울기로 이어졌습니다. 아래가 해당 그래프입니다.

독립적인 이동 상태 종류가 늘어날수록 조합형과 배율형 방식에 필요한 값의 개수를 로그 스케일로 비교한 꺾은선 그래프

배율도 너무 곱하면 문제다

다만 배율을 곱하는 구조에도 약점이 없는 것은 아닙니다. 앉은 자세(0.6배) 사격 중(0.5배)이면서 부상까지 입었다면(0.7배로 가정) 세 배율을 그대로 곱한 결과는 기본 속도의 21%까지 떨어지게 됩니다.

배율 하나하나는 각자 합리적인 값이어도 여러 개가 동시에 겹치면 캐릭터가 거의 멈춘 것처럼 보일 수 있다는 말입니다. 이런 이유로 실제 게임에서는 최종 속도에 하한선을 정해두거나 겹친 배율 중 가장 낮은 값 한두 개만 적용하는 별도 규칙을 함께 적용하는 경우가 많습니다.

곱셈 하나가 전부를 정리했다

결국 해당 문제의 핵심은 상태를 몇 개 다루느냐가 아니라 그 상태들을 어떤 구조로 조합하느냐에 있었습니다. 조합마다 값을 채우는 방법은 상태가 늘어날 때마다 값도 사람의 실수도 함께 늘어나지만 배율 하나씩만 곱하는 구조는 상태가 아무리 늘어나도 늘어나는 속도가 완만하고 결과도 항상 정확합니다.

결론적으로 이동 속도뿐만 아니라 여러 조건이 동시에 겹치는 다른 게임 시스템에서도 조합표 대신 독립된 배율이나 계수로 쪼갤 수 있는지부터 따져보는 게 값의 개수와 오차를 함께 줄이는 지름길이라고 할 수 있습니다.

댓글 남기기