.[ ČeskéHry.cz ].
Photon networking
Jdi na stránku 1, 2, 3, 4  Další
 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> 3D API / 3D Enginy
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
RS



Založen: 21. 02. 2012
Příspěvky: 551

PříspěvekZaslal: 5. duben 2015, 11:16:12    Předmět: Photon networking Odpovědět s citátem

Zdravim vsetkych,

chcel by som sa opytat ci ma niekto skusenosti s optimalizovanim PUN pre online hru v unity. Mam nasledujuci problem:
Kazdy hrac ma na svojej jednotke jeden photon view cez ktory synchronizujem poziciu a rotaciu hraca. Je nejaka moznost ako znizit messages na server? Lebo pozeram statistiku a pri 8 hracoch je to len na pohyb skoro 400 messages a na room je limit 500 podla exit games stranky. Pride mi to brutalne vela, kedze mi potom skoro nic neostane na RPC. Nejaky napad?

Dik
_________________
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
McMagic



Založen: 06. 08. 2012
Příspěvky: 615

PříspěvekZaslal: 5. duben 2015, 13:17:41    Předmět: Odpovědět s citátem

Jak máš nastavený ten photonView na postavě?

Já když spustím 1000 photonView tak jsem na 85ms/s - ale těch 1000 je na masterClientovi (který je ovládá) - tak jako tak se ale musí replikovat dalším online hráčům. A těch 1000 replikuje pohyb + RPC všem co jsou online.

Ale také se snažím najít řešení jak to ještě snížit.
_________________


http://www.mcmagic-productions.com/
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
RS



Založen: 21. 02. 2012
Příspěvky: 551

PříspěvekZaslal: 5. duben 2015, 14:05:02    Předmět: Odpovědět s citátem

reliable delta compressed. A cez script riesim vyhladenie pohybu lerpom.
_________________
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
McMagic



Založen: 06. 08. 2012
Příspěvky: 615

PříspěvekZaslal: 5. duben 2015, 15:06:00    Předmět: Odpovědět s citátem

A nastaveno máš pouze position and rotation?

To je divné - já teď zkusil spustit 4 hráče + 1 master server + 8 dalsich jako creatury na masteru.

TJ - 5 hracu + 8 view na masteru a vse posila RPC.

A ukazuje me to 12-15 msg/s
_________________


http://www.mcmagic-productions.com/
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Radis



Založen: 29. 03. 2014
Příspěvky: 235

PříspěvekZaslal: 5. duben 2015, 15:18:22    Předmět: Odpovědět s citátem

Tak predevsim pouzivej mod "Unreliable On Change" a pohraj si s nastavenim sendRate a sendRateOnSerialize. Nastav je co nejniz. Pak taky optimalizuj velikost dat, co posilas. Pokud treba vis, ze tvuj level ma rozmery napriklad 100x100 metru, tak je uplne zbytecne posilat pro kazdou souradnici 32bitovy float... To same s rotaci. Hodnoty kvantuj na nejaky rozumny pocet bitu.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
RS



Založen: 21. 02. 2012
Příspěvky: 551

PříspěvekZaslal: 6. duben 2015, 08:20:38    Předmět: Odpovědět s citátem

Diky je tam nejaka realna uspora ked budem posielat miesto float len int?
_________________
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
McMagic



Založen: 06. 08. 2012
Příspěvky: 615

PříspěvekZaslal: 6. duben 2015, 09:41:45    Předmět: Odpovědět s citátem

"Unreliable On Change" se nehodí na vše - záleží jak s tím dál pracuješ atd.
Pro MMO je to nepoužitelné a je nutné "Reliable delta compressed".
Ale to je potřeba vyzkoušet a namyslet projekt od projektu.

Ale tady se bavíme o tom, že ti to dává 400msg/s jen pro pohyb/rotace při 8 lidech online ne? (nebo se pletu).
Když vzpomínám na max lidí co jsem měl kdy online v testech což bylo 15-20, tak jsem se nikdy nedostal na takové čísla a to posílám spoustu RPC - ale posílám taky jen enum jako string převážně a ty pak zpracuji.

cca 10 hráčů co posílá pozice a RPC = 10-15msg/s
1000 creatur(co pracovali naráz v jednu dobu) řešených jako photonObject a vlastním PhotonView (ale přes mastera) mě dělalo 85msg/s - také pozice a RPC.


Nebo pouze zavolám pomocí RPC funkci bez dat - která všem řekne že si mají šáhnout na DB server pro nové údaje (a ty údaje tedy neposílám pomocí RPC). Já se snažil celou dobu photon využít pouze na pohyb a ostatní věci řešit jinak, vůbec je přes photon neposílat (max jen echo že došlo někde ke změně) - takže veškerou zátěž předávám pak na DB server.

Ale při pohybu je to hodně divné - nemáš tam něco zacyklované? Opravdu se ti to děje pouze při pohybu?

Ve scriptu co řeší online replikaci příjem a odeslání pohybu - pracuješ skutečně jen s position a rotation ?

Poslat int namísto float - záleží jak moc velký rozdíl je pro tebe mezi hodnotou 1 a 2. Pro mne je v pozici třeba hodně velký.
_________________


http://www.mcmagic-productions.com/
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Radis



Založen: 29. 03. 2014
Příspěvky: 235

PříspěvekZaslal: 6. duben 2015, 13:54:57    Předmět: Odpovědět s citátem

RS: No pokud by tvoje optimalizace spocivala v tom, ze posles misto jednoho floatu jeden int, tak tam realna uspora skutecne nebude... Smile

Myslel jsem to takto. Kdyz mas treba level 100x100 metru a staci ti vedet pozice hracu s presnosti na 10 cm, tak na kazdou souradnici potrebujes jen 10 bitu. Kdyz pouzijes short (16b), tak ti to staci na reprezentaci 6.5 km po 10 cm. Jestli ve sve hre nepotrebujes y-ovou souradnici, tak usetris dalsich 32 bitu... Na rotaci taky urcite nepotrebujes cely rozsah floatu.

Jinak messages per room se pocitaji jako pocet zprav co tvoje aplikace posle + pocet zprav, ktere se poslou klientum. Napr. pro 8 hracu pri 8 zpravach za sekundu by to bylo 512 msg/s...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
RS



Založen: 21. 02. 2012
Příspěvky: 551

PříspěvekZaslal: 6. duben 2015, 19:29:04    Předmět: Odpovědět s citátem

jj presne no ja som to teraz spravil ze pozicia ide cez 3x int a rotacia ide iba Y pre tank aj pre hlaven tiez ako int cize nejaka uspora tam je ked nejde 1x vector3 + 2x quaternion
_________________
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Radis



Založen: 29. 03. 2014
Příspěvky: 235

PříspěvekZaslal: 6. duben 2015, 20:12:21    Předmět: Odpovědět s citátem

Aha. Mozna by te jeste mohlo zajimat, kolik dat touhle optimalizaci usetris: Debug.Log(3 * sizeof(int) - 3 * sizeof(float)).
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
RS



Založen: 21. 02. 2012
Příspěvky: 551

PříspěvekZaslal: 7. duben 2015, 06:29:53    Předmět: Odpovědět s citátem

Ak som to pochopil spravne tak int aj float maju rovnaku velkost? Preco som si myslel ze int musi mat mensiu velkost? Tak v com to potom posielat co by bolo este uspornejsie?
_________________
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
RS



Založen: 21. 02. 2012
Příspěvky: 551

PříspěvekZaslal: 7. duben 2015, 06:45:14    Předmět: Odpovědět s citátem

V kazdom pripade tam uspora je aspon to ze neposielam uz 1x pos vector3 a 2 quaterniony (11 hodnot ale len 5 ako som spominal hore)
_________________
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
RS



Založen: 21. 02. 2012
Příspěvky: 551

PříspěvekZaslal: 7. duben 2015, 06:48:22    Předmět: Odpovědět s citátem

V kazdom pripade som sa dostal uz na celkom prijemne cisla vratane strelby a pohybu vsetkych 8 hracov + pohybu hlavne to dava okolo 300 messages co je uz fajn. Ono ked mate zapnutych 8 klientov ale nevykonavate so vsetkymi naraz cinnost tak tie cisla moc vypoved nemaju a su nizke. Preto som mal na toto napisany test, kde sa vsetky tanky hybali, otacali a pouzivali hlaven a strielali. Az vtedy som videl ako to vyzera pod fakt velkou zatazou a dalo mi to realny obraz o tom ako to bude vyzerat v realnom provoze. Dokonca si myslim ze v reali ani nebude takato velka zataz ako v teste
_________________
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
RS



Založen: 21. 02. 2012
Příspěvky: 551

PříspěvekZaslal: 7. duben 2015, 08:12:04    Předmět: Odpovědět s citátem

Este ma napadlo a co tak short? To by mohlo stacit nie a ma miesto 4 len 2 bajty?
_________________
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Radis



Založen: 29. 03. 2014
Příspěvky: 235

PříspěvekZaslal: 7. duben 2015, 08:42:25    Předmět: Odpovědět s citátem

Jo. Pro "prevod" floatu na short a zpatky pouzij neco takoveho:

kód:

static ushort Quantize(float value, float min, float max)
{
     return (ushort)(ushort.MaxValue * (value - min) / (max - min));
}

static float Dequantize(ushort quantizedValue, float min, float max)
{
     return (quantizedValue / (float)ushort.MaxValue) * (max - min) + min;
}

Min a max je ti urcuje rozsah hodnot.
Treba kdyz mas rozsah souradnic -100 az 100 metru, tak bys to pouzil takto:

var qx = Quantize(x, -100, 100);

a na druhe strane pak:

var x = Dequantize(qx, -100, 100);

(Ty metody jsem psal z hlavy, ale snad to bude fungovat Smile)
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> 3D API / 3D Enginy Časy uváděny v GMT + 1 hodina
Jdi na stránku 1, 2, 3, 4  Další
Strana 1 z 4

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna