본문 바로가기
Unity/Photon

Photon Fusion 소개

by Pretty Garbage 2022. 3. 21.

이번에 pun2 realtime을 사용하여 실시간 액션 게임을 만들면서 레이턴시 때문에 벽을 느끼고 대안을 찾다가

 

photon에서 제공하는 photon Fusion을 발견하고 이용해보고자 공부를 시작하게 되었습니다.

 

출시된지 얼마 안된 API같은데 그래서 유니티 최신버전 이상에서 이용가능합니다.  (2020.3 버전이상)

 

데모로 제공하는 탱크나로크나 / 레이싱 게임이 있는데

 

탱크나로크는 어셋스토어에서 받아야 함. 포톤에서 다운받으려면 링크가 깨져있음 (2022년 3월 16일 기준)

 

상당히 참고하기 좋은 데모였고 테스트를 해보면 포톤 리얼타임에서 아 레이턴시 때문에 안되나 싶었는데

 

상당히 빠른 동기화 속도를 보여줍니다.

 

(참고 URL : https://www.youtube.com/watch?v=TDlFWfE-scg) 포톤 공식 유튜브 영상입니다.

 

 

 

포톤 퓨전이라하면 이름에서 알 수 있듯이 무언가를 결합시킨 것으로 보여지는데, 소개글에서는

 

PUN + Volt 의 장점을 결합시킨 API라고 소개되어집니다.

 

 

크게 두가지 특성에 대해서 소개되는데,

 

Delta Snapshot : 이 델타 스냅샷에 경우에는 cpu부하가 매우 낮은 포톤에서 개발한 델타 압축 기술을 사용하여, 소수의 플레이어 또는 오브젝트를 빠르고 정확한 상태 복제를 제공합니다. 위 그림에서 보여지듯이 서버에서 상태에 대한 변화를 감지하면 델타 스냅샷이라는 기술을 통해 압축된 데이터를 각 클라이언트에 쏘아서 최대한 빠른 동기화를 보여줍니다.

 

 

Eventual Consitency : Area of Interest라는 관심 목록을 이용하여 전송하는 데이터의 양을 줄이기 위해 압축하는 방식입니다. 다수의 오브젝트 또는 플레이어의 동기화가 필요하지만 완전 실시간으로 정확한 상태를 복제하지 않아도 되는 카테고리. 제대로 이해하고 있는 것인지는 모르겠지만 관심있는 범위의 항목들만 빠르게 동기화를 하고 나머지는 약간 지연되어져서 동기화 된다는 의미인 것 같은데 잘 이해하고 계신분이 있다면 알려주시면 감사하겠습니다.

 

여튼 이러한 기술을 구현해내서 그 결과

 

포톤에서의 주장은 MLAPI나 MIRROR 에 비해서 상당히 낮은 대역폭 사용량이라던가 CPU 사용량이 줄어든 모습을 소개합니다.

 

영상에서는 3가지 아키텍처가 소개 되는데

 

Server, Host, Shared 즉 자체서버를 붙이느냐 Host-Client방식으로 만드느냐 Shared방식으로 만드냐 인 것 같습니다.

 

우선 

 

Server : 데디케이트 서버, IP연결의 서버 모드(Client - Server / Peer 2 Peer) 데디케이티드 서버 및 설정의 커스터마이징이 가능, 서드 파티 앱 연동 가능(Game eye, Playfab 등)

 

Host : 잘 알고 있는 한명이 방을 생성하고 나머지 유저들이 호스트에 연결 요청해서 작동하는 방식

Punch - Through 실패 시 포톤 클라우드를 통해 Relay하여 State를 동기화 한다고 합니다.

 

(여기서 펀치 쓰루란!

사실 펀치 쓰루라고 검색하니 잘안나오고 홀 펀칭이라는 개념인 것 같은데 (잘못된 지식이라면 알려주시면 감사하겠습니다.) 네트워크 주소 변환(NAT)을 사용하는 라우터 또는 방화벽 뒤에 있는 두 당사자간에 직접 연결을 설정하기 위한 기술인데 이게 왜 필요하냐 p2p기반의 게임이나 통신 방식에서는 클라이언트끼리 직접적인 연결을 맺고 통신을 하여야하는데. 유무선 공유기를 통해서 접속하거나 그러고 있는 환경에서 직접적인 연결이 불가능하기 때문에 생겨난 기술이라고 합니다 ! 여튼 간단히 설명하자면 유무선 공유기에 접속하고 그 하위에 있는 사설 ip에 접근하기 위한 기술이라고 생각하면 편할 것 같습니다.)

 

호스트와 클라이언트가 같은 로컬랜 와이파이에 있을때는 공유기를 거치지않고 직접 연결하는 것 같습니다!

 

Shared : 모든 연결 및 게임데이터는 포톤 클라우드를 통해 전송되어집니다! 이 경우 포톤 클라우드를 서버로 보면 되고

(tick-based, relay data, game state snapshots) 모든 데이터가 포톤 클라우드를 통해 이루어집니다. 또한 서버 플러그인을 제공하고 커스터마이징이 가능합니다.