This document is about: FUSION 2
SWITCH TO

성능 및 최적화

관심 관리

BR200은 클라이언트가 관심 있는 네트워크 객체에 대한 데이터만 받을 수 있게 하는 궁극적 일관성 복제 모드를 사용합니다. 이는 성능을 향상시키고 네트워크 트래픽을 줄여줍니다. 자세한 내용은 관심 관리 매뉴얼에서 확인할 수 있습니다.

모든 플레이어는 카메라 방향을 기준으로 원뿔 모양의 영역을 정의하여 앞쪽과 가까운 객체에 대한 정보를 받습니다. 플레이어의 관심을 정의하기 위해 관심 관리 애드온이 사용됩니다.

Player's interest

플레이어는 해당 영역 내의 객체 상태만을 수신하며, 다른 객체는 동기화되지 않습니다.

BR200에는 성능 비용과 네트워크 트래픽을 더욱 줄이기 위한 특별한 컴포넌트도 포함되어 있습니다:

StaticNetworkTransform
정적 객체의 생성 시 위치/회전 동기화를 한 번만 수행합니다. StaticNetworkTransform은 아이템 상자에 사용됩니다. 레벨에 수백 개의 상자가 있을 수 있으며, StaticNetworkTransform을 사용하는 것이 NetworkTransform을 사용하는 것보다 더 최적입니다.

NetworkAreaOfInterestProxy
NetworkAreaOfInterestProxy는 위치나 회전을 동기화할 필요는 없지만 관심 관리 시스템에 의해 필터링 되어야 하는 객체에 사용됩니다. 예를 들어, 소유된 Agent 아래에 있는 무기는 변환을 동기화할 필요는 없지만, 무기의 네트워크 데이터는 플레이어의 관심 영역 내에 있는지 여부에 따라 수신되어야 합니다. AoI 계산을 위한 위치는 지정된 객체에서 가져옵니다. 무기의 경우, 이는 소유 에이전트 위치를 기반으로 합니다. 이 기능은 네트워크 트래픽 오버헤드가 없습니다.

위의 기능들이 네트워크 트래픽에 큰 영향을 미치지만, 추가적인 개선 여지는 여전히 존재합니다:

  • 💡 레벨 디자인을 기반으로 한 더 나은 관심 영역 원뿔 제한
  • 💡 사전 계산된 가시성 영역

관심 관리에 대한 추가 정보는 관심 관리 매뉴얼관심 관리 애드온에서 찾을 수 있습니다.

벤치마크

헤드리스 전용 서버 인스턴스에서 안정적인 60Hz 시뮬레이션을 위한 권장 최대 플레이어 수:

구성 (하드웨어 + 빌드 유형) 플레이어 수
Mac Mini M1 2020, Mac 서버 (Silicon) 200
Core i9-10900K, Windows 서버 200
Unity Game Server Hosting Bare Metal (Intel® Xeon® E-2288G @ 3.70GHz), Linux 서버 200
Unity Game Server Hosting Virtual Machine (GCP N2 - Intel® Xeon® @ 2.80GHz), Linux 서버 60 - 80
Unity Game Server Hosting Bare Metal (Intel® Xeon® E-2288G @ 3.70GHz) 성능
시간에 따른 Unity Game Server Hosting Bare Metal (Intel® Xeon® E-2288G @ 3.70GHz) 성능, 밀리초 단위의 DeltaTime
Unity Game Server Hosting Virtual Machine (GCP N2 - Intel® Xeon® @ 2.80GHz)
시간에 따른 Unity Game Server Hosting Virtual Machine (GCP N2 - Intel® Xeon® @ 2.80GHz) 성능, 밀리초 단위의 DeltaTime

실제 성능과 플레이어 수는 게임 모드에 크게 의존합니다. 모든 플레이어가 항상 활동적인 데쓰매치는 제거된 플레이어가 부담이 적은 Battle Royale보다 항상 더 요구 사항이 높습니다. 또한 레벨 디자인(맵 크기, 플레이어 밀도) 및 게임 플레이 디자인(플레이어가 계속 이동/조준/발사하도록 강제하는 것은 200명의 캠퍼와 다르게 영향을 미칩니다)에 의해 영향을 받습니다. 위의 숫자는 최악의 시나리오를 나타냅니다 - 스폰 후 첫 번째 1 분 - 모든 플레이어가 적극적으로 이동, 조준 및 발사하는 경우입니다.

Unity Game Server Hosting 가상 머신에 대한 주의 사항:
성능에 영향을 미치는 또 다른 요소는 현재 할당된 하드웨어의 사양입니다. 하나의 경기(게임 서버 인스턴스)는 60명의 플레이어를 간신히 처리할 수 있지만, 다른 하나는 아무 문제 없이 100명의 플레이어를 처리할 수 있습니다. 이는 다른 하드웨어 사양에 기인합니다. 더 높은 플레이어 수와 더 나은 안정성을 위해서는 베어 메탈 서버에서 실행하는 것이 권장됩니다.

프로파일링

일반적인 프로파일링 도구 외에도 이 샘플은 릴리스 모드에서 게임을 오프라인 분석할 수 있는 도구를 제공합니다. 게임이 -recordSession 매개변수로 실행되면 엔진 델타 시간과 플레이어 수가 매 프레임마다 기록되어 CSV 형식의 파일에 저장됩니다. 그런 다음 이 파일은 제공된 Python 스크립트( Assets/Extras.zip에서 사용 가능)에 의해 처리되어 그래프가 포함된 HTML 파일을 생성합니다.

파일은 Application.persistentDataPath 경로 또는 -dataPath XXX 명령에서 지정된 경로에 생성됩니다.

프로파일링 통계

위 이미지는 파란색 선으로 나타낸 증가하는 플레이어 수(최대 200명)와 대부분의 시간 동안 안정적인 엔진 델타 시간(16ms 이상의 몇 가지 피크가 있음)을 보여줍니다. DeltaTimePlayerCount 외에도 사용자 정의 StatsRecorder 인스턴스로 추적할 속성 세트를 만들 수 있습니다.

풀링

슈터 프로젝트에서는 많은 양의 객체 생성이 예상됩니다(발사체, 총구 효과, 충격, 히트 효과 등). 새로운 객체를 인스턴스화하는 것은 비용이 많이 들기 때문에 BR200에서는 모든 것이 풀링 됩니다.

풀링에는 두 가지 유형이 있습니다:

  • **NetworkObjectPool**은 NetworkObjects를 풀링 하는 데 사용됩니다. NetworkObjectPoolINetworkObjectProvider 인터페이스를 구현하며 Networking 스크립트의 NetworkRunner.StartGame 함수에 전달됩니다. 자세한 내용은 Fusion 매뉴얼의 네트워크 객체 제공자 섹션을 참조하세요.

  • **ObjectCache**는 비네트워크 객체(예: 충격 효과)에 사용되는 일반적인 GameObject 풀입니다. 지정된 지연 후 객체를 반환하는 기능이 있습니다. ObjectCacheSceneContext를 통해 코드의 다른 부분에서 접근할 수 있습니다.

Back to top