Какво е пинг и за какво се яде

Какво е пинг и за какво се яде?

Реших да играя Counter-Strike: Source, за да се види и разбере действието на играта и, ако е възможно, за парчета, които би било хубаво да се знае, когато играете Counter-Strike: Source гледам. И това е довело до факта, че аз ги намери. Някои от тях трудно, някои лесно, някои интересни, но най-скучния =).
    Описани са следните три ситуации, които ще обясня.
  1. Можете да получите иззад стена / ъгъл на полето и след това бързо се върна. Вие не виждате врага, но вие получавате щети.
  2. Бягаш зад ъгъла на врага засадени пълен клип и да умре в него. След това, отворете конзолата и да видим какво го удари само два пъти, въпреки факта, че тя е била освободена пълен клип от близко разстояние.
  3. Можете стреля на врага, да - може да се види, че тялото му наоколо и има кръв, но в крайна сметка се удари не са били регистрирани, а врагът няма да получи никаква вреда.
Прекарах около седмица за тестове, за да се разбере защо са там такива ситуации и дали те са грешки на Valve. Следните изводи и наблюдения, за които съм се за седмичния тест на играта, ще се опитам да се чете, колкото е възможно достъпен начин за обикновения читател.

Така че, за да започнем с няколко дефиниции:
Latency (пинг) - Ping - периодът от време, за който пакета изпратен от компютъра си отива сървър (и обратно) на. В милисекунди
Сървър - Сървър - Собствен сървър в Интернет, който се намира на всеки компютър.
Client Client - игра на вашия компютър. Клиентът се свързва със сървъра. На сървъра могат да се определят броя на възможните свързани клиенти.
Shot траектория - траекторията на един изстрел - линия между края на дулото на оръжието си, и на мястото, където отиде си куршум.
Hitbox - хит кутия - модел играчи в Counter-Strike: Source са разделени на така наречените hitboxes (hitboxes), които блокират различни части на модела. В един модел, има много hitbox. Ако снимате хит поле, след което стойността на здравето и Player bronyai намалява.

CS: Source - Основите
В абсолютно всяка мрежова 3D шутър, основният проблем, който е решен на първо място, е Ping. Всеки играч трябва да видя това, което виждат, а съперниците му. Претенденти трябва да се движат плавно, без тласъци и закъснения - защото в действителност играта се актуализира периодично, както и времето между изпращането и получаването на пакета понякога може да бъде много дълъг празнина.

Част от информацията
Вашата позиция на картата на вашия екран за теб е на сървъра и вие също върху други екрани клиенти никога няма да бъдат същите. Това се дължи на забавянето, което се дължи на факта, че компютърът ви изпраща пакета към сървъра с информация за местоположението ви, сървърът симулира, тъй като това са рамката на играта, актуализации на информация за вас, и след това да изпратите информация за вас на други клиенти, и те получават и актуализация има информация за вас, като у дома си. Този проблем във връзка с факта, че имате на екрана, всичко изглежда гладка, е неприятна картина.

Какво е пинг и за какво се яде
Такъв модел понякога се вижда в играта, което често води до объркване играчи.

Ситуация 1 "Slide Show на hitbox":

"Можете да получите иззад стена / ъгъл на полето и след това бързо се върна. Вие не виждате врага, но можете да получите на щетите. "

обяснение:
За да се обясни причината за това поведение на играта, трябва да се вземе предвид всичко, което се случва на вашия компютър, на сървърния компютър и на компютрите на другите играчи.
    Нещата, които трябва да знаете, преди да отидете на
  • Действително щети (или местоположението на hitbox ако е така по-ясно) се изчисляват на сървъра страна. Но от страна на клиента се проследяват и позицията на hitbox, но само за визуализация (например искри от куршумите, когато popodanii броня, кръвни пръски от тялото и така нататък.), Но ще говорим повече, когато стигнем до третата ситуация.
  • В идеалния случай, обмен на пакети настъпва в рамките на 30 милисекунди. Това е времето, за което на сървъра може да се актуализира информацията за вас, а вие - на сървъра. Но на практика, тази цифра е много пъти по-, според пинг.
  • прекарано от клиента и сървъра за обработка на информацията, получена Времето е толкова малка, че дори няма смисъл да се вземе предвид.
Проблемът в тази ситуация се наблюдава в случаите, когато е налице така наречената "забавяне корекция (лаг)", който е включен в източник на двигателя. За да разберем напълно защо това е необходимо, за началото, ще видим какво ще се случи с играта, ако няма корекция изостава.

0 милисекунди (сцена 1)
Играч 1: рязко от ъгъла, 2 вижда на играча, който е неподвижен.
Сървър: Нищо не се случва (все още не е постигнато пакет)
Играч 2: Тя трябва да бъде, и никой не гледа

30 милисекунди (Етап 2)
Играч 1: Връща се в приюта.
Сървър: приеме пакет с информация от сцената 1, че играч 1 излезе иззад скривалището си и изпраща тази информация на играч 2.
Играч 2: Нищо не се случва (не забравяйте пакета е 30 милисекунди като играчът към сървъра и обратно?).

60 милисекунди (Етап 3)
Играч 1: на вашия компютър, той се скри в приют.
Сървър: Вземете пакет от Сценарий 3 до информацията, че играч 1 е отново зад капак (така че синхронизирани данни на сървъра и играч 1)
Играч 2: Взима пакета със ситуацията вижда играч 1 го стреля, но, разбира се стреля в празно пространство, тъй като играчът вече като преди 60 милисекунди се появи отново в своя подслон.

Нека разгледаме, за по-голяма яснота, визуална схема

Какво е пинг и за какво се яде
Е, оказва се, в резултат на следната картина: Сървърът получава информация за Играч 2 изстрела от играч 1, а играч 1 е в съвсем различно място, следователно, щетите от изстрелите не са преброени. Всъщност не е справедливо да се играчът 2, тъй като това е нещо, което просто вижда в този момент играч 1.

И това е съвсем разумно възниква въпросът: как да се реши този проблем? Източник на двигателя прави следното. А именно, програмата изчислява траекторията на удара Player 2 и я носи, като че ли той стреля по истински играч 1, независимо от това, когато последният е сега.
Сървърът изчислява идеални за трансфер на стойност изстрела темповете на увеличение на базата на пинг на всички играчи.

Какво е пинг и за какво се яде
На снимката: червен hitbox ни показва, където клиентът е, когато се стреля по него. Blue показва също, когато клиентът се намира на сървъра, когато (сървър) е бил информиран от моите снимки. Обърнете внимание на червено едно парче куба в червено hitbox. Това е мястото, където бил застрелян ми в моя клиент. Синята същото куб в синьо hitbox - това е мястото на моята ситуация удари греда, но се регулира за моя пинг. Но това е възможно, че траекторията на изстрела на мониторите на други играчи е останала стара. Объркващо!

А сега да разгледаме кулисите с "корекция пинг"
0 милисекунди (сцена 1)
Играч 1: рязко от ъгъла, 2 вижда на играча, който е неподвижен.
Сървър: Нищо не се случва (пакет все още не е постигнато)
Играч 2: Тя трябва да бъде, и никой не гледа

30 милисекунди (Етап 2)
Играч 1: да се върнете в приюта
Сървър: приеме пакет с информация, на сцената 1, играч 1 на открито, но никой не знае за това.
Играч 2: Тя трябва да бъде, и никой не гледа

60 милисекунди (Етап 3)
Играч 1: скрит
Сървър: приеме пакет с информация за етап 2 (т.е. сървъра е синхронизирано с клиента 1: и тук и там един играч седи в приюта)
Играч 2: 2 Player приеме пакет с информация за Етап 1 вижда играч 1 стреля по него. Но при получаване на информация за изстрелите, сървърът се прави корекция по отношение на пинг и Player 2 отнема здравето на играча 1, който най-вече това време, както казахме, е в нелегалност. 1 недоумение Player.

Сега ситуацията е по-справедлив, въпреки факта, че играч 1 вече се е укривал, Играч 2, виждайки ударът му, като по този начин сървърът е броят на първите щети. Единственият проблем е, че първият играч се повреди, след като е наведе, която вече е в приюта и това е вероятно, че ще напиша нещо познато на всички от "как стигнах тези трупи!" =). По този начин, "корекция изостава", е, че играч 2 е възможно да доведе до увреждане на играч 1, не се обръща внимание на забавянето в същото време, докато се движи играч 1 и че докато не го забелязах Player 2. Не е лош старт.

Друго предимство на корекцията за закъснение е, че сега не е нужно да се поддържа от поглед целта да се кача на него, и когато двама играчи се срещат лице в лице, а след това играчът с най-ниската пинг не получава никакви привилегии.

Вижте тези снимки на екрани (получен чрез sv_showimpacts 1). Те показват разликата между позициите на играчите на сървъра (в синьо hitbox) и клиента (в червено), и траекторията на топката, която е показана на червени и сини кубчета. Обърнете внимание - сървъра коригира траекторията на изстрела по отношение на врага.

Какво е пинг и за какво се яде
Какво е пинг и за какво се яде

2 Ситуацията е "Що за глупости! Аз го пусна целия клип ":

"Ти тече зад ъгъла на врага засадени пълен клип и да умре в него. След това, отворете конзолата и да видим какво го удари само два пъти, въпреки факта, че тя е била освободена пълен клип от близко разстояние. "

обяснение:
настъпва (подобно на първия пример) заради забавянето между нещата, които се случват на сървъра и на компютъра Тази ситуация.

Основното нещо е да се разбере, че нещата, които се случват на сървъра да се появят по-рано, отколкото имате на компютъра си - вашия клиент. За да се улесни разбирането на ситуацията, при условие, че и двата клиентите изостават (пинг) едни и същи, така че не се притеснява и да изчисляват корекцията между двете машини.

Така че, когато играч 1 идва в корнер, а след това както на клиента (а играчът 1 и 2 Player) са наясно с това, няма забавяне, както синхронизира информация. Позволява и двете започнете да снимате. Сега, заради закъснението (има обмен на информация за изстрелите) всеки да види друг клиент стрелба изисква 60 милисекунди (помнят първата ситуация, както и да изпращат щети. Това означава, че по времето, докато децата споделят тази информация, можете да стреля купчината боеприпаси. и ако опонентът ви е започнал да стреля по една малка част от секундата, преди да (или дори по-рано, но той трябва да ви, да речем, в главата), а най-вероятно са мъртви, но вашият клиент не знае все още за това защото тя не взема 60 милисекунди между времето, което виждате на врага както добре! В резултат на това, сървърът просто игнорира всички ваши снимки, освободени, докато, докато не убият, и да убие вас. И вие имате илюзията, че сте уволнен целия клип, преди да е убил.

3 Положението на "Single удар!":

"Трябва да се стреля на врага, да - може да се види, че тялото му наоколо и има кръв, но в крайна сметка се удари не са били регистрирани, а врагът няма да получи никаква вреда."

Сега нека разгледаме как сървъра превежда изстрел ни към нов път, като се вземат корекциите в профила. Както е известно, сървърът се справя не само всички обекти на картата, позицията на моделите, но и анимиране на моделите (бягане, ходене, и така нататък.). Когато снимате, ударът се излъчва на сървъра, тествани за степента на увреждане, без значение в каква позиция е модела. Поради забавяне в модела на сървъра и от модела на клиент рядко са в едни и същи позиции. Например, анимация много рядко в една рамка, се оказва, че всеки поза в същото време е малко по-различно точки. Най-движещ анимация се управлява и ругатня. Swing главата, ръцете и краката - всичко в движение. Оказва се, че ако снимате в рамото, вашата снимка се предава към сървъра, когато моделът, който беше уволнен Може вече да е в различна позиция, например, главата се обърна в обратна посока, кракът се мести и така нататък.

Обърнете внимание на снимката и вижте и се уверете, че моделът на сървъра и на клиента и, обаче, в различни пози.

Какво е пинг и за какво се яде
Имайте предвид, че разликата между позициите на краката на сървъра и клиента значително висок (сървър - син hitbox клиент - червено). Shot, която е направила играч с червена буква "А", той не е регистриран в сървъра, така че как е същия крак е на друго място. Но играчът е уверен, че той е бил на врага.

И тук е типичен пример, при влизане в сървъра не е регистриран - снимам в края на раница (което естествено има различна позиция както на сървъра и на моя монитор) и синьото поле беше на стената зад себе си, защото сървърът не регистрирал раната.

Какво е пинг и за какво се яде
Но това не е бъг, но е необходимо, лесно изпълнени път, който е трябвало да се използва за увеличаване на производителността. За да се покажат всички снимки на конкретен модел, с всички негови разпоредби за всяка конкретна част от времето, сървърът ще трябва да гледат и да се изброят всички модели на забавяне за всеки играч в сървъра.

На 16 локален сървър ще получи следното:
16h15 = 240 позиции на моделите, които трябва да бъдат обработени, за да се изчисли и тест за получаване, че всички модели са в области, засегнати или не, както и да се регистрират и да отреже хитове и пропуска (в най-лошия).

По този начин, тази задача е просто невъзможно да се изчисли.

Но не забравяйте, че има и обратната ситуация (липсваш на вашия компютър, но сървърът ви удари брои), така че стрелбата е равен.