Despre lerp și caracteristicile sale - util - director articole - clan rgzone

Despre lerp și caracteristicile sale

După cum știți, după actualizarea de vară, codul de rețea DoD: S a fost modificat. Au apărut câteva variabile noi, iar unele vechi au fost eliminate. Sensul lor va fi discutat.
Un mic program educațional

Client-server - codul de rețea al jocului creat pe baza schimbului de pachete între server și client. În aceste pachete, informații despre starea actuală a jocului (locația obiectelor etc.)
cl_updaterate este numărul de pachete pe care un client le primește de la server în fiecare secundă.
Interpolare - obținerea valorilor intermediare de orice valoare, prin medierea valorilor extreme. Interpolarea servește la îmbunătățirea imaginii, deoarece pachetele provenite de pe server nu sunt suficiente pentru ca imaginea să arate netedă.
Setările implicite pentru client sunt: ​​cl_updaterate 20; cl_interp_ratio 2; cl_interp 0,1.
Cum funcționează

cl_updaterate 20 înseamnă că clientul va primi pachete de la server de 20 de ori pe secundă, diferența dintre pachete este de 50 ms. Pentru a preveni întârzierea pierderii de pachete posibile, interpolarea ar trebui să aibă loc într-un interval de timp de 2 * 50 = 100 ms. Pentru a asigura o astfel de interpolare, trebuie să setați parametrul cl_interp la 0,1. Un factor de doi înseamnă că vrem să interpolam două zone între cele trei pachete care provin de pe server: "._ ._.". Dacă vrem să inițializăm o singură regiune "._", trebuie să schimbăm parametrul corespunzător. Acest parametru este variabila cl_interp_ratio. Aceasta poate lua valorile 2, 1, 0. Deoarece nu este greu de ghicit, dacă această variabilă este zero, interpolarea pe client va fi absentă. În general, formula pentru decalajul este: lerp = cl_interp. dar nu poate fi mai mică decât cl_interp_ratio / cl_updaterate. Deci, aici ajungem la însăși definiția:

lerp - intervalul de timp în care pachetele primite de client vor fi interpolate.

De fapt, valoarea lerp determină proporția dintre pachetele provenite de la server și pachetele generate de client. Cu cât valoarea este lerp, pachetele mai mici vor fi „inventat“ pe partea de client, cu atât mai mult că veți vedea se va potrivi cu ceea ce se întâmplă pe server. Cu cât valoarea lerp-ului este mai mare, cu atât mai mare proporția din imagine va fi interpretată prin interpolare.

După teorie, să mergem mai departe la practică. De la bun început, se pare că lerp ideal trebuie sa fie 0. deoarece la această valoare lerp nici o interpolare, iar clientul vede același lucru ca și văzând server. Nu puteți să vă permiteți lerp = 0 din două motive.

1) Canalul dvs. de Internet lasă mult de dorit.
Să presupunem că sunt suficient de norocos să dețină un modem sau în orașul în timp ce în bandă largă la prețuri accesibile doar favorite sau vecin in dormitor noaptea toarna un torent de ambalaj proaspat de filme germane. Aceasta înseamnă că vă puteți permite doar setări modeste de rețea. Cel mai probabil cei care sunt în mod implicit, și poate afacerea dvs. este chiar mai rău. Când cl_updaterate 20. Chiar dacă toate pachetele ajung în siguranță de la server la client, veți vedea 20 de cadre pe secundă (nu contează ce computerul dvs.). Ochiul uman percepe această imagine ca fiind neclară. Dacă, Doamne ferește, pierderea (sufla) este, atunci pur și simplu nu se poate juca, așa cum veți vedea slideshow-ul.

2) Setările serverului nu permit părții client să stabilească valorile necesare ale unor variabile.
Principala problemă aici este cu siguranță cl_interp_ratio. în acest moment, configurația serverului european nu vă permite să jucați cu această variabilă egală cu zero. În momentul de față nu cunosc niciun public cu astfel de setări. Doar câteva servere HF pot dezactiva interpolarea. Acum, adăugați sv_client_min_interp_ratio 0 (aceasta echipa este responsabila pentru cl_inerp_ratio valorii minime. Care poate avea un client în timp ce pe server) în evrokonfige, probabil, o chestiune de timp, și am pologayu, așteptați nu este lung. Dar rămâne faptul că valoarea variabilei de server implicită este 1, ceea ce înseamnă că clientul nu poate face lerp mai putin de 10 ms.

1) Scrieți în consola cl_updaterate și rețineți valoarea acestei variabile
2) Scrieți în consola cl_interp_ratio 1
3) Împărțiți 1 cu valoarea cl_updaterate
4) Scrieți în consolă cl_interp și alocați-i ceea ce ați primit în pasul 3

De exemplu:
Joc cu cl_updaterate 66. asta înseamnă că în 3 puncte voi primi 0.0152. prin urmare, am nevoie pentru a scrie cl_interp 0.0152. Acest lucru îmi va da lerp = 15. Ceea ce este destul de bun. Deoarece interpolarea unor astfel de intervale de timp nu adaugă prea multă inexactitate acțiunilor dvs.
Dacă scrieți valoarea cl_interp mai mică decât cl_interp_ratio / cl_updaterate. atunci lerp net_graph va fi afișat în portocaliu. Dacă lerp este vopsit în galben. atunci valoarea lerp este mai mare decât intervalul de timp dintre pachetele trimise pe acest server. În ambele cazuri, lerp (și, prin urmare, cl_interp) ar trebui să fie mărită până când devine albă. Dacă încercați să jucați cu un lerp non-WHITE. atunci faceți o parte din fotografiile dvs. pentru a rămâne în spațiul client-server.

Realizați valoarea minimă a lerp. lăsându-l alb pe fiecare server pe care jucați. Acest lucru vă va permite să minimalizați toate problemele asociate conexiunii dvs. la Internet.

În final, observ că există un mit, ca și cum lerp ar trebui să fie egal cu ping-ul. Ping este timpul pentru care pachetul vine de la server la client și nu are nimic de-a face cu interpolarea. Este inutil să încercați să găsiți conexiuni în acești doi termeni. Pentru orice ping, păstrați lerp minim și alb.

Pentru a nu transpira cu matematica, puteți lega chei de genul:

alias lerpa + "incrementvar cl_interp 0.01 0.09 +0.0001" // cl_interp +0.0001
alias lerpa- "incrementvar cl_interp 0.01 0.09 -0.0001" // cl_interp -0.0001
alias lerpb + "incrementvar cl_interp 0.01 0.09 +0.001" // cl_interp +0.001
alias lerpb- "incrementvar cl_interp 0,01 0,09 -0,001" // cl_interp -0,001
alias lerpc + "incrementvar cl_interp 0.01 0.09 +0.01" // cl_interp +0.01
alias lerpc- "incrementvar cl_interp 0,01 0,09 -0,01" // cl_interp +0,01

lega "INS" "lerpa +"
lega "DEL" "lerpa-"
lega "HOME" "lerpb +"
lega "END" "lerpb-"
lega "PGUP" "lerpc +"
lega "PGDN" "lerpc-"