TIL

Fusion2 Leg Compensation Null 오류

앙박 2025. 4. 10. 22:16

 LegCompensation을 사용하는데 Null이 뜬다. 초기화를 잘못 해줬다? 클라이언트는 Null이 맞다? 여러 가지 해결책이 있었는데 전부 듣지 않았다. 우습게도 NetworkProjectConfig에서 Lag Compenmstation Enable 옵션을 꺼서 발생하는 문제였다.

 

 아래는 개념입니다.

 

- 출처: Fusion2 매뉴얼

 

 지연 보상은 빠른 속도의 멀티플레이어 게임에서 근본적인 문제를 해결합니다. 즉, 클라이언트를 완전히 신뢰할 수 없는 상황에서도 클라이언트에게 '보이는 대로' (What You See Is What You Get) 경험을 제공하는 것입니다.

 

 문제는 네트워크상의 어느 머신도 게임의 정확히 동일한 틱에 있지 않다는 점입니다. 한 클라이언트가 보는 것과 그에 기반해 행동하는 것은 오직 자신의 관점에서만 100% 정확합니다. 대표적인 예로, 먼 거리의 대상을 정확하게 맞추는 샷 감지를 들 수 있습니다.

지연 보상을 통해 서버는 각 클라이언트의 관점에서 잠시 동안 세계를 바라보고, 그들이 실제로 불가능해 보이는 샷을 할 수 있는 위치에 있었는지 판단할 수 있습니다. 불행하게도, 이 과정은 대상이 플레이어의 예상과 달리 이미 안전하게 벽 뒤로 숨어있다고 느껴지더라도 맞게 될 수 있음을 의미합니다. 그러나 이러한 현상은 눈에 띄게 될 가능성이 훨씬 적습니다.

 

 Fusion은 히트박스가 이전에 어디에 위치했는지의 기록을 보관하며, 각 클라이언트의 시점이 현재 서버 상태에 비해 얼마나 뒤처져 있는지 알고 있습니다. 이 기록을 사용하여 Fusion은 과거의 레이캐스트를 통해 지연을 보상할 수 있습니다.

 

 초고정밀을 위해, Fusion은 지연 보상을 한 단계 더 진행합니다. AAA 게임의 프레임률은 보통 네트워크 틱률보다 높기 때문에, 플레이어가 화면에서 실제로 보는 것은 개별 틱이 아니라 두 틱 사이의 보간 결과입니다. Fusion은 지연 보상이 적용된 레이캐스트가 두 틱 사이에서 정확히 어느 정도 진행되었는지 알고 있으며, 이를 사용하여 서브 틱(sub-tick) 레이캐스트 정확도를 달성할 수 있습니다.