안녕하세요.
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 공식 개발 페이지의 다운로드 방법은 아래 링크를 참조 하세요!
https://doc.photonengine.com/ko-kr/fusion/current/getting-started/sdk-download
Fhoton 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을 보여드리도록 하겠습니다.
Fusion 에는 사용하기 편리한 Built-In Prefab/Prototype 네트워크 오브젝트 프리미티브가 내장되어 있어 개발 중 일부 기능을 테스트하거나 이해하기 위한 간단한 시나리오를 빠르게 생성할 수 있습니다.
이전에 저희는 유튜브에서 Fusion 기능에 대해 해설한 동영상을 발표한 적이 있습니다. 혹시 아직 못 보신 분들은 잠시 보시면 그 구조를 더 잘 아실 수 있을 것입니다. 링크는 다음과 같습니다.
다음과 같습니다.
Photon 대만에서 설명한 Photon Fusion 기능
댓글
댓글 0개
댓글을 남기려면 로그인하세요.