게임 개발 엔진 고도(Godot)에서 수많은 캐릭터나 객체(에이전트)를 동시에 움직일 때 발생하는 성능 저하 문제를 해결하는 혁신적인 최적화 기법이 공개되었습니다. 기존에는 각 에이전트가 매 프레임마다 개별적으로 경로를 탐색(pathfinding)하여 프레임이 급격히 떨어지는 현상이 발생했지만, 새로운 접근 방식은 이 문제를 해결하고 1만 개에 달하는 에이전트도 쾌적하게 움직일 수 있음을 입증했습니다.
이 최적화의 핵심은 '공유된 방향 필드(shared direction field)'를 사용하는 것입니다. 기존 방식은 500개 에이전트가 매 프레임마다 AStarGrid2D.get_id_path() 함수를 호출하여 경로를 계산했고, 이로 인해 중앙값 프레임 시간이 670밀리초(ms)에 달하며 심지어 5.7초까지 치솟는 경우도 있었습니다. 이는 16.6ms(60 FPS) 예산을 훨씬 초과하는 수치입니다. 반면, 새로운 방식은 에이전트들이 목표 지점을 향해 나아갈 '방향 필드'를 시스템이 한 번만 구축하고, 모든 에이전트가 이를 읽어 움직이도록 합니다. 이 방법으로 500개 에이전트의 중앙값 프레임 시간이 2ms로 대폭 줄어들었으며, 16.6ms 예산을 초과하는 프레임은 전혀 발생하지 않았습니다. 이는 약 330배의 성능 향상에 해당합니다.
이 기술은 단순히 더 빠른 경로 탐색 알고리즘을 사용하거나 영리한 이동 트릭을 쓴 것이 아닙니다. 작업의 형태를 바꾼 것으로, 수많은 에이전트가 거의 동일한 문제를 매 프레임마다 반복해서 푸는 대신, 시스템이 공유된 이동 데이터를 한 번만 만들고 에이전트들이 이를 활용하도록 한 것입니다. 이 '플로우 필드(flow field)'와 유사한 접근 방식은 고도 엔진에 내장된 기능은 아니지만, 개발자가 직접 구현할 수 있는 기술입니다. 목표가 변경될 경우, 방향 필드는 여러 프레임에 걸쳐 정해진 작업 예산 내에서 점진적으로 재구축되며, 그동안 에이전트들은 이전의 완성된 필드를 계속 사용함으로써 프레임 저하 없이 부드러운 움직임을 유지할 수 있습니다. 이처럼 비용을 가장 뜨거운 프레임에서 분산시켜 예측 가능하게 만드는 것이 핵심입니다.
이러한 최적화 기법은 특히 대규모 군중 시뮬레이션, 전략 게임, 또는 수많은 NPC(Non-Player Character)가 등장하는 게임에서 매우 유용할 것입니다. 개발자들은 더 이상 수많은 에이전트의 경로 탐색으로 인한 성능 문제를 걱정하지 않고, 더욱 복잡하고 생동감 넘치는 게임 월드를 구현할 수 있게 됩니다. 또한, 이 기술은 오래된 하드웨어에서도 쾌적한 성능을 제공하여 더 넓은 사용자층에게 접근성을 높일 수 있다는 장점도 있습니다.
