액터 리플리케이션 빈도 설정
액터 리플리케이션의 빈도(Frequency)
액터 리플리케이션의 빈도 : 클라이언트와 서버 간에 진행되는 통신 빈도
NetUpdateFrequency : 1초당 몇 번 리플리케이션을 시도할지 지정한 최대치 값을 의미한다. 기본 값은 100이고
이것은 서버는 최대 1/100초 간격으로 리플리케이션을 시도한단 것을 의미한다.
이때 최대치 값이라는 말처럼 네트워크 빈도는 최대치일 뿐 이를 보장하지 않는다. 즉 서버의 성능에 따라 빈도수가 낮을 수 있다. 이때 서버의 성능 때문에 네트워크 빈도수가 낮아질 경우, 서버의 성능으로 복제된다.
따라서 클라이언트로써 그래픽 처리를 해야 하는 리슨 서버보다
그래픽 기능이 없는 데디케이티드 서버가 더 좋은 서버 성능을 발휘한다.
네트워크 데이터 줄이기
규칙적으로 움직이는 액터(계속 회전하는 분수대 등)의 네트워크 통신 데이터를 줄이는 방법
NetUpdateFrequency 속성 값을 1로 설정하고 데이터 공백을 클라이언트에서 보간하기
> 이전에 복제된 데이터에 기반해 현재 틱에서 회전 값을 예측
> 클라이언트에서 예측된 값을 보간해 회전
적응형 네트워크 업데이트(Adaptive Network Update)
유의미한 업데이트가 없으면 빈도를 줄여서 부하를 줄이는 기법
MinNetUpdateFrequency : 리플리케이션 빈도의 최소치 설정
적응형 네트워크 업데이트는 최소 값과 최대 값 사이에서 현재 액터에 맞는 최적의 전송 타이밍을 설정함.
이를 사용하기 위해서는 설정에서 직접 활성화시켜줘야 함
> DefaultEngine.ini 에서 net .UseAdaptiveNetUpdateFrequency = 1로 설정
액터 리플리케이션 연관성 설정
연관성(Relevancy) : 서버의 관점에서 현재 액터가 클라이언트의 커넥션에 관련된 액터인지 확인하는 작업
서버가 대형 레벨에 존재하는 모든 액터 정보를 클라이언트에게 보내는 것은 불필요하며 네트워크 대역폭을 낭비하는 행위다.
때문에 클라이언트와 연관 있는 액터만 체계적으로 모아 네트워크 대역폭을 최소화하는 방법이라 할 수 있다.
연관성에 관련된 다양한 속성
연관성 판별을 위한 특별한 액터를 정의해 보면
뷰어(Viewer) : 클라이언트의 커넥션을 담당하는 플레이어 컨트롤러를 가리킴
뷰 타깃 (View Target) : 플레이어 컨트롤러가 빙의한 폰
가해자 (Instigator) : 대미지 프레임워크에서 사용하는 속성. 나에게 대미지를 가한 액터
소유자 (Owner) : 액터를 소유하는 액터. 최상단의 소유 액터를 의미한다. 뷰 타깃이 소유한 무기, 액세서리도 함께 보여줘야 하기 때문에 오너를 통해 연관성이 설정된다.
연관성의 점검
서버에서는 틱마다 모든 커넥션과 액터에 대해 연관성을 점검한다.
클라이언트의 뷰어와 관련 있고 뷰어와의 일정 거리 내에 있는 액터를 파악하고 해당 액터 묶음의 정보를 클라이언트에게 전송한다.
액터 속성에 따른 연관성 판정을 위한 속성
AlwaysRelevant : 뷰와 무관하게 항상 커넥션에 대해 연관성을 가짐. (게임 스테이트와 플레이어 스테이트가 이에 해당)
NetUseOwnerRelevancy : 자신의 연관성은 오너의 연관성으로 판정함.
OnlyRelevantToOwner : 오너에 대해서만 연관성을 가짐.
Net Cull Distance : 뷰어와의 거리에 따라 연관성 여부를 결정함.
연관성을 판단하기 위해 언리얼에서 가상함수 IsNetRelevantFor 함수를 제공한다
'언리얼 > 이득우 네트워크 멀티플레이' 카테고리의 다른 글
[이득우 네트워크 멀티플레이] 08. RPC 기초 (0) | 2024.08.21 |
---|---|
[이득우 네트워크 멀티플레이] 07. 우선권과 액터 리플리케이션 로우레벨 플로우 (0) | 2024.08.20 |
[이득우 네트워크 멀티플레이] 05. 액터 리플리케이션 기초 (0) | 2024.08.16 |
[이득우 네트워크 멀티플레이] 04. 액터의 역할 커넥션 핸드셰이킹 (0) | 2024.08.15 |
[이득우 네트워크 멀티플레이] 03. 커넥션과 오너십 (0) | 2024.08.11 |