자료실

Photon Fusion 아키텍처 및 기술 소개
작성자 | admin 2022-05-02  |    조회수 : 618  


안녕하세요.

100인 FPS/TPS 멀티플레이어 슈팅 게임은 어떻게 만들까요?

5 대 5 대 5 멀티플레이어 전투 실시간 게임, 또는 실시간 물리 충돌 타입 의 게임은 어떻게 만들까요?



이 블로그에서 소개하는 Photon Fusion은 최첨단 네트워크 테크놀로지의 흑마술이라고 할 수 있고 개발 팀은 현재 Photon Quantum, Photon Bolt 및 PUN(구Simple) 제품의 주요 개발자이며 Photon Server/Cloud 팀이 공동 개발하고 있습니다. 마법과 같은 특별한 기능은 과거의 경험과 신세대의 사고 로직을 통해 모든 복잡한 네트워크 접속, 전송, 동기 및 기타 기능을 재설계되었습니다. 또한 Unity Game Object 및 확장이 매우 쉬운 아키텍처 설계를 통해 동일한 API 세트를 사용하여 1플레이어, 1vs1, 5vs5, 100플레이어의 실시간 배틀 게임 또는 클라이언트/서버/공유 모드를 개발할 수 있습니다.


즉, 동일한 SDK/API 아키텍처 세트를 사용하여 Single Play/Co-op/1v1/5v5/ 100명과 같은 인스턴트 온라인 게임을 만들 수 있습니다!!


현재 Fusion은 Unity Package 형태로 제공되고 있고 Unity를 주력으로 하는 게임 개발자들이 주요 타겟 그룹이며, 유럽과 미국 개발 커뮤니티 간의 소통도 활발해지고 있습니다! 뒤처지지 않는 기술, 한 번 확인해 보세요!

Photon Fusion 공식 개발 페이지의 다운로드 방법은 아래 링크를 참조 하세요!

Photon Fusion SDK 다운로드



Photon Fusion의 네트워크 토폴로지


다년간의 경험을 통해 개발된 멀티플레이어 게임 네트워크 개발 아키텍처는 여러 가지 주요 네트워크 토폴로지 구조로 나눌 수 있습니다. 예를 들어 Dedicated Server 는 독립적으로 작동하고, Client as Server 는 플레이어가 서버로 될 수 있으며 Listen Server은 LAN 모니터링 서버 등, P2P는 직접 연결 등등 .. Fusion은 다음과 같이 여러 유형에 대응합니다.



Photon Fusion 지원 네트워크 토폴로지



Server 독립 서버:


・Dedicated Server. Unity Headless App, Unity Dedicated Build로 구축할 수 있는 전용 서버로써 가장 안정적이고 빠른 동기화 메커니즘(클라이언트/서버 P2P). 독립적인 운영(Unity headless app)

・IP연결 서버 모드(서버-클라이언트/P2P)*IP제공이 아닌 Photon Cloud가 처리

・Gameye 및 Playfab과 같은 타사 서비스와의 통합 가능



Host 플레이어 서버:


・서버역할 클라이언트인 Listen Server는 플레이어가 자신만의 게임 서버 콘텐츠를 생성할 수 있어 편리하고 개발자가 자체 서버를 구축해야 하는 부담을 덜어줍니다. 내장된 Punch-through를 통해 클라이언트-서버 P2P 초고속 동기화 아키텍쳐를 달성할 수도 있습니다.

・P1(호스트)은 IP로 P2, P3, P4와 직접 연결할 수 있습니다.

・Punch-Through 불가능할 시 Photon Cloud를 통해 중계됩니다.

・P1(Host) < → P2가 같은 Local Lan/Wifi에 있을 때 직접 연결 상태로 볼 수 있는데 이때 전송 지연이 가장 작고 즉석 게임 경험이 원활합니다.


Shared 공유 모드:


・Photon Cloud의 Relay Server 방식을 채택함으로써 개발 비용 부담이 적고, PUN보다 정확한 동기화와 더 많은 사람을 수용할 수 있는 즉시 접속이 가능합니다.

・모든 연결 및 게임 데이터는 Photon Cloud(Relay)를 통해 전송됩니다.

・이때 Photon Cloud는 Server(Tick-Based, Relay Data, Game State Snapshots)로 볼 수 있습니다.

・일부 사용자 정의 기능을 작성하기 위해 서버 플러그인을 제공합니다.



정확한 클럭 상태 복제 시스템 Tick-Based State Transfer


Fusion은 매우 정확한 클럭 메커니즘을 가지고 있고 모든 업데이트 동기의 정확도는 Tick으로 계산할 수 있습니다(예: 1Tick=1/60초, 즉 16.666ms의 동기화 정확도). 또한 히트박스에서도 서브틱(sub-Tick) 클럭의 정밀도를 구현할 수 있습니다!! 이는 AAA 게임에서 빼놓을 수 없는 중요한 디테일입니다.

Fusion 상태와 사용자 입력의 흐름은 별개이며 각각 독자적인 업데이트 전송 타이밍이 있습니다.


Input Authority : 업데이트 과정은 Client → (Input) → Server

Input Auth가 있는 Network Object는 State Auth가 있는 Server로 "입력 데이터"를 보낼 수 있습니다.

State Authority : 업데이트 과정은 Server → (State) →Client

State Auth가 있는Server는 "status data"를 전송하여 모든 클라이언트의 Network Object를 업데이트 할 수 있습니다.

State ( t-1 ) + Input ( new ) → Simulation → State ( t )

각 클라이언트 및 서버의 업데이트 계산법은 유사합니다. 예를 들어 이전 상태와 새로운 플레이어 입력 제어 데이터를 시뮬레이션하여(물리적 업데이트, 데이터 계산), 새로운 상태가 생성됩니다.



Photon Fusion Tick 기반 상태 전송 시스템



Fusion 업데이트 프로세스 # SERVER SIDE #


(1) 서버는 "고정 업데이트 사이클 틱"으로 이동하여 시뮬레이션(물리적)을 실행합니다.

(2) 클라이언트로부터의 입력과 거기에 대응하는 처리(사용할지 무시할지 확인)를 받습니다. 이는 클라이언트에서 보낸 입력 틱이 오래되거나 서버에서 해당 틱이 이미 존재할 수 있기 때문입니다. 예를 들어 클라이언트 입력이 틱105에 할당되어 있지만 서버는 이미 틱106을 실행하기 때문에 이 입력은 무시할 수 있습니다.

(Fusion은 클라이언트 입력을 큐에 넣지만 이러한 데이터는 서버가 실행되기 전에 수신해야 합니다. 다른 델타 스냅샷이 있기 때문에 늦게 온 데이터나 현재 틱을 신경쓸 필요는 없습니다).

(3) 서버는 처리 및 대응하는 틱 상태를 각 클라이언트에 원활하고 균등하게 송신합니다.


Fusion 업데이트 프로세스 #CLIENTSIDE #


(4) Client의 Tick은 서버 전에 이동합니다. 이는 이른바 Client측의 진행(예측)입니다. 약 RTT/2전의 tick으로써 자동으로 계산이 됩니다. Client의 input이 서버로 전송되는 시간을 충분히 확보하고 유효로 간주하기 위해서 입니다.

(5) 클라이언트가 서버의 Tick-State를 수신한 후 데이터 정렬(memory copy)하여 처리하고 Client는 다음 몇 개의 ticks로 이동하여 로컬 상태를 재시뮬레이션하여 업데이트합니다. 재시뮬레이션과 동시에 이전 tick의 input도 함께 재시뮬레이션을 합니다.

(위는 데이터 관련, 아래는 비주얼 관련)

(6) 시각적으로 "보간"은 화면에서 틱 틱 상태 사이를 부드럽게 이동하는 데 사용됩니다. 데이터 수준 중단점을 피할 수 있습니다.

예: 30Hz Tick Rate 대 60Hz Render Rate(fps) , 사용 Tick ​​데이터를 사용하여 보조 화면 음영 렌더링 사이의 수치 계산을 보간하여 애니메이션 화면이나 그림이 더 부드러워지도록 합니다.


Photon Fusion의 상태 전송 알고리즘


Delta Snapshots


  • 100명 미만의 플레이어에게 적합(최대 100명의 플레이어)
  • 네트워크 오브젝트는 최대 1000개의 NetworkObject를 가질 수 있음
  • 변경된 데이터는 자동 업데이트 및 자동 압축 전송. 또한 자동 메모리 복사(MemCopy)
  • 60Hz 이상의 동작 등 높은 Tick 속도(Tick rates)가 필요하며 빠르고 정확한 상태 복제 시나리오를 제공



Photon Fusion의 델타 스냅샷



Eventual Consistency 최종 일관성


  • 동기시켜야 할 네트워크 오브젝트나 플레이어 수가 많은 케이스에 적합 (예 : 300명의 플레이어)
  • 고정 서버가 없는 상황
  • 모든 Network Object의 부하를 자동으로 균형시키기 위한 새로운 메커니즘.

호스트 마이그레이션 마스터를 통해 마이그레이션하는 메커니즘이 필요하지 않으므로 일시 중지 현상을 피할 수 있음.



Photon Fusion 의 최종 일관성(Eventual Consistency)



수많은 내부 이론과 알고리즘을 이야기하다보면 머리가 복잡해 질 수가 있습니다.

물리적 충돌 동작의 느낌을 보여주기 위해 저희가 몇 가지 작은 테스트를 하였고 여러분들께 Fusion을 보여드리도록 하겠습니다.

신체 행동, 동시 측정(1)


Fusion 에는 사용하기 편리한 Built-In Prefab/Prototype 네트워크 오브젝트 프리미티브가 내장되어 있어 개발 중 일부 기능을 테스트하거나 이해하기 위한 간단한 시나리오를 빠르게 생성할 수 있습니다.

물리 행동, 동기 측정(2)


이전에 저희는 유튜브에서 Fusion 기능에 대해 해설한 동영상을 발표한 적이 있습니다. 혹시 아직 못 보신 분들은 잠시 보시면 그 구조를 더 잘 아실 수 있을 것입니다. 링크는 다음과 같습니다.

Photon 대만에서 설명한 Photon Fusion 기능



출처 : Hu씨의 Photon 블로그 이야기 (대만)