This document is about: FUSION 2
SWITCH TO

아키텍처

이 섹션에서는 관심 관리 추가 기능에서 사용할 수 있는 주요 컴포넌트에 대해 설명합니다.

관심 관리 컴포넌트 간의 관계

위의 다이어그램은 높은 수준의 관점에서 컴포넌트와 그 사용 사이의 관계를 보여줍니다.

관심 도형

  • 대상 플레이어의 관심에 대한 평가 시 추가되고 관심 셀로 변환될 관심 영역/볼륨을 정의합니다(아래 참조).
  • 도형은 관심 제공자 및 플레이어 관심 뷰와 연결됩니다.
  • 세 가지 기본 도형을 사용할 수 있습니다:
    • InterestShpere
    • InterestBox
    • InterestCone
  • 사용자 정의 형상은 InterestShape 클래스에서 상속하여 구현할 수 있습니다.
관심 도형

관심 공급자

  • 세계의 특정 객체와 관련된 관심을 제공합니다. 일반적으로 해당 객체 주변의 영역입니다.
  • 기본 InterestProvider는 다음을 구현합니다:
    • 'InterestShape 참조 목록
    • 기본적으로 필터링 규칙은 없으며 평가 시 모든 플레이어에 대해 관심이 처리됩니다.
  • 사용자 지정 공급자는 InterestProvider 클래스에서 파생되어 bool IsPlayerInterested() 메소드를 재정의하여 구현됩니다.
  • 글로벌 프로바이더(IsGlobal 토글 가능)는 자동으로 GlobalInterestManager에 등록되어 모든 플레이어에 대해 평가됩니다.
  • 제공자 네스팅은 Child Providers를 연결하여 지원합니다.

다음 이미지는 사용자 지정 InterestByDistance 공급자로, 플레이어가 개체로부터 300m(VisibilityDistance 속성) 이내에 있을 경우 연결된 InterestBox 모양의 관심을 추가하는 것입니다:

사용자 지정 관심 공급자

다음 이미지는 거리 및 시야각에 따라 플레이어에게 관심을 제공하는 씬 객체의 다른 예를 보여줍니다:

관심 공급자 예제
  1. PlayerInterestManagerPlayerInterestViewAgent 객체에 있으며 플레이어 관점에서 기본 관심을 제공합니다. 즉, 콘 뷰입니다.
  2. Tower 객체에는 필터링 규칙을 구현하는 InterestProvider에서 파생된 컴포넌트가 있습니다.
  3. 하나의 타워는 특정 각도와 거리 내에서 플레이어의 시야에 있습니다 => 해당 타워의 관심 영역(타워의 관심 영역 - 해당 타워에 의해 정의됨)이 플레이어의 관심 영역에 추가되고 해당 영역의 모든 객체가 복제됩니다.
  4. 플레이어의 시야 밖에 있는 다른 타워는 포함되지 않으며 해당 영역의 객체는 복제되지 않습니다.

플레이어 관심 뷰

  • 플레이어를 위해 예약된 특수 유형의 관심 공급자(InterestProvider 클래스에서 파생됨) - 입력 권한이 유효해야 합니다.
  • 플레이어의 현재 위치와 뷰/카메라를 제공합니다. 이러한 정보는 어떤 플레이어가 관심 있는 InterestProvider를 필터링하는 데 필수적입니다.
  • 플레이어당 동시에 생성되는 조회 수가 더 많을 수 있지만 PlayerInterestManager.InterestView에 등록된 한 개만 활성화할 수 있습니다.
  • 이 컴포넌트는 일반적으로 플레이어 캐릭터 프리팹에 추가되며 카메라 절두체와 일치하는 콘과 같은 기본 뷰를 나타냅니다.
  • GlobalInterestManager에 자동으로 등록되어 필터링이 가능합니다.

다음 이미지는 플레이어 프리팹에서 카메라 절두체를 가리고 화면 중앙(원뿔 멀리)으로 가시성을 높이는 근원뿔(관심 모양)에 대한 참조와 함께 PlayerInterestView를 보여줍니다:

플레이어 관심 뷰

다음 그림은 PlayerInterestView의 사용법에 대한 설명입니다:

플레이어 관심 뷰
  1. 첫 번째 경우, 플레이어 관심 매니저플레이어 관심 뷰 왼쪽을 가리킵니다. 플레이어는 해당 뷰에서 정의된 관심을 사용합니다.
  2. 두 번째 경우, 플레이어 관심 매니저는 활성 관심 뷰(PlayerInterestManager.InterestView 속성)를 오른쪽으로 전환하고 해당 뷰의 관심을 사용하기 시작했습니다.
  3. 따라서 관심 관리 관점에서 관중 또는 여러 캐릭터 간 전환(한 번에 하나씩 활성화됨)과 같은 기능을 구현하기가 매우 쉽습니다.

플레이어 관심 관리자

  • 특정 플레이어에 대한 관심 평가를 주도하는 주 컴포넌트 -입력 권한이 유효해야 합니다.
  • 플레이어 한 명당 PlayerInterestManager 인스턴스가 항상 하나씩만 존재합니다.
  • 활성 PlayerInterestView를 참조합니다.
  • GlobalInterestManager에 자동으로 등록되어 필터링이 가능합니다.
  • 인스펙터 및 씬 보기(기즈모)에서 런타임 정보를 제공합니다.
  • 이 컴포넌트는 일반적으로 PlayerInterestView와 동일한 객체에 있습니다.
  • 더 고급의 경우 이 컴포넌트를 캐릭터 객체와는 다른 특수 플레이어 객체에 추가할 수 있습니다. 캐릭터 객체에 상주하는 PlayerInterestView는 실행 시 코드로부터 동적으로 등록됩니다.
플레이어 관심 관리자

전역 관심 관리자

  • NetworkRunner에 있는 전역 관리자(싱글톤)입니다.
  • 참조를 저장하고 플레이어 관심 관리자, 플레이어 관심 뷰 및 전역 관심 제공자에 대한 접근을 제공합니다.
전역 관심 관리자

관심 호출

플레이어의 관심은 일반적인 기하학적 모양의 조합에 의해 만들어집니다. 하지만 Fusion의 관심 시스템은 내부적으로 관심 셀의 3D 그리드와 함께 작동합니다.
관심 모양을 셀로 변환하면 부작용이 발생합니다. 클라이언트에 복제되는 실제 영역은 항상 모양으로 정의된 영역보다 큽니다.

원뿔 모양(1인칭 시점을 나타내는)과 결과 관심 셀로 덮인 영역을 비교해 보겠습니다:

셀 크기 = 32m, 총 관심 셀 = 28
셀 크기 = 32m, 총 관심 셀 = 28

클라이언트에게 복제되는 영역(녹색 상자)이 원뿔로 설계된 영역보다 훨씬 크다는 것을 알 수 있습니다.
Fusion의 관심 시스템의 셀 크기를 낮추면 이러한 차이를 줄일 수 있습니다.

셀 크기 = 16m, 관심 셀 = 80
셀 크기 = 16m, 총 관심 셀 = 80

첫 번째 경우(셀 크기 = 32m) 동기화된 볼륨은 917 504 m3와 같습니다. 두 번째 경우(셀 크기 = 16m) 동기화된 볼륨은 327 680 m3와 같으며 이는 65% 적으며 네트워크 트래픽에 일부 영향을 줄 수 있습니다. 반면 CPU는 더 많은 셀을 처리해야 합니다.

성능

일반적으로 어떤 설정과 모양을 사용해야 하는지 구분하기 어렵습니다. 이는 각 게임에 맞게 특별히 미세 조정되어야 최상의 결과를 얻을 수 있습니다.

다음과 같은 요소가 작용합니다:

  • CPU 예산.
  • 전체 맵 크기.
  • 네트워크 객체의 밀도.
  • 환경 설계 - 플레이어의 시야를 차단하는 객체.
  • 글로벌 관심 제공자 수.
  • 플레이어 카운트.
  • ...

셀 크기를 낮추면 설계된 모양이 더 잘 반영되고 일반적으로 네트워크 트래픽이 줄어듭니다(플레이어의 시야 밖에 있는 객체가 덜 복제됨). 하지만 CPU 전력이 더 많이 필요합니다.
관심 관리는 다음 사항을 최적화할 수 있는 방법을 제공합니다:

  • 관심 모양에 대해 평가된 관심 셀은 모양 속성이 정적(위치, 반경, ...)인 경우 자동으로 캐시되고 재사용됩니다. 필요에 따라 전체 평가가 실행됩니다.
  • 플레이어 관심 관리자는 bool CanUpdatePlayerInterest()를 재정의하여 관심 평가를 지원합니다. 이를 통해 플레이어가 X 만큼 움직이거나 Y 만큼 회전할 때까지 평가를 연기하거나 짝수/홀수 틱 사이에서 다른 서브시스템과 분할 실행할 수 있습니다.
  • 씬 설계가 완료되면 가시성이 잘 정의된 특정 영역을 최적화하기 위해 후처리할 수 있습니다. 하지만 이 과정은 더 많은 노력이 필요합니다.
Back to top