이론/네트워크

네트워크 - 스코프

tsyang 2023. 9. 10. 23:46

객체 스코프


멀리 떨어져서 알 필요 없는 플레이어의 정보를 동기화 하는것은 리소스 낭비이다. 따라서 어떤 객체가 특정 클라이언트의 동기화 대상이라면, 해당 객체가 클라이언트의 스코프 내에 있다 혹은 해당 클라이언트와 연관성(relevancy)이 있다라고 표현할 수 있다.

 

스코프를 나눌 때, 얼마나 떨어져 있는지를 기준으로 쓸 수 있다. 그러나 FPS의 줌같은 개념때문에 거리만 가지고 판단하는것은 애매하다. 또 벽 뒤나 등 뒤에 있는 객체들은 거리만 가지고 판단하기 애매한데, 그래서 가시성을 객체 스코프 판정에 활용하기도 한다.

 

.

 

스태틱 존

스코프에 포함되는 잠재적인 객체 수를 줄이는 방법 중 하나로, 월드를 고정된 여러 지역으로 나눌 수 있다. 이렇게 나준 지역을 스태틱 존이라고 한다. 가령 MMORPG같은 경우는 마을이나 전투를 할 수 있는 필드들을 하나의 지역으로 본다.

 

이런 경우 지역과 지역 사이를 넘어갈 때 로딩을 띄워주거나, 심리스로 처리한다면 스코프가 바뀔 때 객체를 페이드인/아웃 처리 해준다. 

 

다만 지역마다 플레이어 분포가 고르지 않은 경우 문제가 생길 수 있는데, MMORPG에서는 이를 조절하기가 쉽지 않다. 마을은 사람이 많고, 그냥 지나가는 길목은 사람이 적을 것이기 때문이다. 필드 보스라도 생긴다면? 이런 문제를 해결하는 방법 중 하나는 인스턴싱(채널 개념)을 이용하는 것이다.

 

 

.

 

뷰 프러스텀

뷰 프러스텀은 플레이어가 바라보는 시야 공간을 스코프 영역으로 사용하는 것이다. 효율적이지만 플레이어가 갑자기 뒤를 돌아본다면 레이턴시 문제가 생긴다. 그래서 뷰 프러스텀에 더하여, 플레이어로부터 일정 거리에 있는 영역을 스코프에 추가할 수 있다. 

 

 

.

 

 

잠재적 가시 집합

잠재적 가시 집합이란 말 그대로 잠재적으로 가시거리에 올 수 있는 영역들의 집합이다. 예를들어 레이싱 게임이라면 트랙을 여러 부분으로 나눈 뒤, 각 트랙마다 가시 집합을 정의하여 스코프에 포함시키는 것이다. 이런 방식은 둠이나 퀘이크와 같이 복도를 누비는 FPS에도 적합할 수 있다. 이런 게임에서는 공간 분할을 사용하여 집합을 정의할 수 있다.

 

 

.

 

 

보이지 않은 영역의 스코프

안 보이는 지역도 스코프에 포함시켜야 하는 경우가 있다. 소리가 들리는 경우가 그러하다. 이런 경우 소리만 따로 스코프를 나눠 관리할 수 있다. 혹은 RPC로 소리만 리플리케이션 할 수도 있다. 

 

 


참고 : 멀티플레이어 게임 프로그래밍, 길벗, [9장]