액터 연관성 및 우선권

액터 연관성 및 우선권 관련 정보입니다.

Windows
MacOS
Linux

연관성

거대한 레벨에서 일정 시점에, 플레이어는 그 레벨에 있는 액터의 작은 일부분만 볼 수 있습니다. 레벨에 있는 다른 액터는 대부분 보이지도, 들리지도 않으며, 플레이어에 중대한 영향을 끼치지도 않습니다. 서버가 보이는 것으로 또는 클라이언트에 영향을 끼칠 수 있는 것으로 여기는 액터 세트는, 그 클라이언트에 대해 연관성이 있는 액터 세트라 여깁니다. 언리얼 네트워크 코드의 상당한 대역폭 최적화는, 서버가 클라이언트에게 연관성이 있는 액터 세트에 대해서만 알려주는 것으로 이루어집니다.

언리얼은 플레이어에 대해 연관성이 있는 액터 세트를 결정하는 데 다음 규칙을 (순서대로) 적용합니다. 이 테스트는 AActor::IsNetRelevantFor() 가상 함수에 구현되어 있습니다.

  1. 액터가 bAlwaysRelevant (항상 연관성이 있)거나, Pawn 이거나, 폰이 노이즈나 대미지같은 동작의 Instigator (유발자)인 경우, 연관성이 있습니다.

  2. 액터가 bNetUseOwnerRelevancy (네트 오너 연관성 사용)하고 Owner (오너)가 있는 경우, 오너의 연관성을 사용합니다.

  3. 액터가 bOnlyRelevantToOwner (오너에게만 연관성이 있)고 첫 번째 검사를 통과하지 못한 경우, 연관성이 없습니다.

  4. 액터가 다른 액터의 스켈레톤에 붙어있으면, 그 연관성은 조상의 연관성에 의해 결정됩니다.

  5. 액터가 숨겨져있고 (bHidden == true) 루트 컴포넌트가 충돌하지 않으면 액터는 연관성이 없습니다.

    • 루트 컴포넌트가 없으면, AActor::IsNetRelevantFor() 는 경고를 출력하고 액터에 bAlwaysRelevant=true 설정을 할지 물어봅니다.

  6. AGameNetworkManager (게임 네트워크 매니저)가 거리 기반 연관성을 사용하도록 설정되어 있고, 액터가 네트 컬 디스턴스보다 가깝다면 연관성이 있습니다.

Pawn 및 PlayerController 는 AActor::IsNetRelevantFor() 를 덮어쓰며, 그 결과 연관성에 다양한 조건이 있습니다.

참고로 (클라이언트에 남아있는) bStatic 액터 역시도 리플리케이션 가능합니다.

이러한 규칙은 플레이어에게 정말 영향을 끼칠 수 있는 액터 세트를 제대로 추정해 낼 수 있도록 디자인되어 있습니다. 물론, 완벽하지는 않습니다: 거리 검사는 가끔 커다란 액터에 거짓 음성 판단을 내릴 수 있으며 (물론 몇 가지 경험법칙을 사용하여 보완하고는 있습니다만), 앰비언트 사운드에 대한 사운드 오클루전같은 것은 지원하지 않습니다. 하지만 인터넷과 같은 지연시간 및 패킷 손실 특성이 있는 네트워크 환경에 내재된 오류의 범람으로 인하여 그러한 추정은 어쩔 수 없습니다.

우선순위 부여

언리얼에서는 모든 액터의 우선순위를 부여하는 부하 균형 기법을 사용하여, 각 액터의 게임플레이 중요도에 따라 대역폭을 적절히 분배합니다.

각 액터에는 NetPriority (우선권)이라는 플로트 변수가 있습니다. 수치가 큰 액터일수록 다른 액터에 비해 더욱 많은 대역폭을 받게 됩니다. 우선권이 2.0 인 액터는 1.0 인 것보다 정확히 두 배의 빈도로 업데이트될 것입니다. 우선권 관련해서 중요한 유일한 것은 그 비율인데, 모든 우선권을 높인다고 언리얼의 네트워크 퍼포먼스가 향상되지는 않습니다. 저희 퍼포먼스 튜닝시 할당해 둔 NetPriority 값은 다음과 같습니다:

  • Actor = 1.0

  • Matinee = 2.7

  • Pawn = 3.0

  • PlayerController = 3.0

액터의 현재 우선권은 AActor::GetNetPriority() 가상 함수를 사용해 계산합니다. 업데이트받지 못하는 경우를 피하기 위해 AActor::GetNetPriority() 는 NetPriority 에 액터의 지난 번 리플리케이션 이후 경과시간을 곱합니다. GetNetPriority 함수 역시 액터와 관찰자 사이의 거리와 상대적 위치를 고려합니다.

Select Skin
Light
Dark

새로운 언리얼 엔진 4 문서 사이트에 오신 것을 환영합니다!

문서 사이트에 대한 의견을 모을 수 있는 피드백 시스템을 포함해서 여러가지 새로운 기능을 준비하고 있습니다. 아래 Documentation Feedback 포럼(영문) 또는 언리얼 엔진 네이버 공식 카페(한글) 중 편하신 곳에 의견이나 문제점을 알려 주세요.

새 시스템이 준비되면 알려 드리겠습니다.

네이버 카페
공식 포럼