Unitatea - optimizarea manuală a performanței grafice

Optimizarea performanței grafice

Buna performanță este esențială pentru multe jocuri. Mai jos sunt sfaturi simple despre hobby-ul de randare viteza în joc.

Care este costul de grafică

Partea grafică a jocului încarcă primele două sisteme informatice: (unitate de procesare grafică) GPU și CPU (unitate centrală de procesare). Prima regulă de orice optimizare: afla unde apare problema. ca strategie de optimizare pentru GPU și CPU are diferențe semnificative (uneori o situație apare atunci când în optimizarea pentru GPU mai mare povară plasată pe CPU și vice-versa).

blocaje comune și de verificare a acestora:

  • Rata de umplere GPU este adesea limitată (rată de completare) sau de lățime de bandă de memorie.
  • Începe jocul cu un ecran de rezoluție mai mică îmbunătățește performanța? Apoi, cel mai probabil veți umple rata GPU limitată.
  • CPU este adesea limitată de numărul de lucruri care trebuie să fie tras, de asemenea, cunoscut sub numele de „trage apeluri“.
  • Verificați pokazatell „trage“ apeluri în redarea Statistică fereastră; în cazul în care este mai mult de câteva mii (pentru PC) sau mai multe sute (pentru dispozitive mobile), poate fi necesar pentru a optimiza numărul de obiecte.
  • GPU se ocupă de prea multe noduri. Care este numărul de noduri este normal este determinată de un set de GPU si vertex shader. Poate fi recomandabil să nu folosiți mai mult de 100 mii mobile și nu mai mult de câteva milioane de euro pentru PC.
  • Procesorul are prea multe noduri pentru a procesa. Acest lucru ar putea fi în ochiuri jupuit, simulare pânză, particule sau alte obiecte de joc și de ochiuri de plasă. Ca mai sus, este, în general, o bună practică de a menține acest număr cât mai scăzut posibil, fără a compromite calitatea jocului. A se vedea secțiunea cu privire la optimizarea CPU de mai jos pentru orientare cu privire la modul de a face acest lucru.
  • Rendering nu creează probleme pentru GPU, sau pentru CPU. Problema poate fi, de exemplu, script-uri sau fizica. Utilizați Profiler pentru a găsi sursa problemei.

optimizarea CPU

Toate acestea utilizarea procesorului „pe obiect“ este consumatoare de resurse, așa că, dacă aveți o mulțime de obiecte vizibile, se poate adăuga în sus. De exemplu, dacă aveți o mie de triunghiuri, este mult mai ușor pe CPU, dacă acestea sunt toate într-o plasă, mai degrabă decât într-o singură plasă pe triunghi (adăugarea de până la 1000 de ochiuri). Costul ambelor scenarii pe GPU este foarte asemănătoare, dar activitatea desfășurată de către CPU pentru a face o mie de obiecte (în loc de unul) este semnificativ mai mare.

Reducerea numărului de obiect vizibil. Pentru a reduce volumul de muncă CPU trebuie să facă:

  • Combină obiecte închide manual sau cu ajutorul unui instrument de dozare apel remiză în unitate.
  • Utilizați mai puține materiale, combina texturi în atlas textura mare.
  • Utilizați mai puține obiecte care urmează să fie prestate de mai multe ori (reflecții, umbre, surse de lumină per pixel, și așa mai departe. N. A se vedea mai jos).

Se combină obiecte, astfel încât fiecare plasă conținut de cel puțin câteva sute de triunghiuri și ispolzovat doar un singur material. Este important să se înțeleagă că unirea a două obiecte folosind materiale diferite, nu va crește performanța. Principalul motiv pentru care cele două ochiuri, folosind materiale diferite, este că acestea ispolzuyutsya diferite texturi. Pentru a optimiza performanța procesorului trebuie să vă asigurați că obiectele pe care le asamblează, utilizați aceeași textură.

Cu toate acestea, atunci când utilizați o mulțime de surse de lumină în pixeli Înainte de redare cale. există situații în care nu are sens să combine obiecte, descrise în detaliu mai jos.

GPU: modele de optimizare geometrie

Există două reguli de bază pentru optimizarea geometriei unui model:

  • Nu folosiți triunghiuri mai mult decât este necesar
  • Încercați să păstrați numărul de cusături pe UV-hartă și numărul de muchii dure (vârfuri dublat) mai mici posibil

În timp ce numărul de elemente geometrice în modelul afectează în primul rând pe GPU, unele funcții Unitatea implică modelul de procesare și de pe CPU, de exemplu, mesh jupuire.

Cel mai rapid de iluminat - este una care nu se calculează. Utilizați harta iradianță pentru coacere în loc de calcul de iluminat statică de iluminat în fiecare fotografie. Procesul de creare a hărților de lumină este consumatoare decât pur și simplu introducerea sursei de lumină în scenă timp, dar:

  • În prezent, este mult mai rapid (de 2-3 ori în comparație cu sursele de lumină 2 pixeli)
  • Se pare mai bine, pentru că se poate coace iluminare la nivel mondial, cu o calitate mai mare

În multe cazuri, puteți înlocui plasarea sursă de lumină shader setări corecte și de conținut. De exemplu, în loc de a plasa sursa de lumină direct în fața aparatului de fotografiat pentru a obține efectul de „lumini model de margini“ (iluminare RIM), mai ușor pentru a adăuga calcularea acestui efect direct în shader.

Iluminarea în redarea înainte

Iluminarea în redarea înainte

iluminat dinamic Pixel se va adăuga costul de redare fiecare pixel și poate duce la apariția unor obiecte prestate în mai multe treceri. În dispozitive de consum redus de energie, cum ar fi dispozitive mobile sau PC-uri ieftine, pentru a evita folosirea mai mult de un pixel al sursei de lumină. luminoase fiecare obiect separat, și încercați să utilizați harta iradianță. iluminat dinamic Vertex pot adăuga costurile pentru cazurile de transformarea varfurilor. Încercați să evitați situațiile în care mai multe lumini iluminează un obiect.

Dacă utilizați de iluminat pixeli, atunci kazhdly ochiurilor de plasă vor fi redate ca de multe ori ca sursă de lumină pixeli se aprinde. Dacă combina două dintre ochiurile sunt departe unul de altul, aceasta va crește dimensiunea ochiului de plasă. Toate sursa de lumina pixel luminoase fiecare parte a ochiurilor unite va acoperi ochiurilor de plasă este acum, astfel încât numărul de treceri de randare necesare pentru această plasă va crește. De obicei, numărul de treceri ale sumei combinate egală cu pasajele cu ochiuri ce constituie porțiuni ale acestora, în care nici un câștig din combinarea. Din acest motiv, nu este necesar să se combine ochiurile care sunt suficient de departe unul de altul pentru a fi iluminate în diferite surse de lumină pixeli.

În procesul de vizualizare a Unității găsește toate luminile din jurul ochiului de plasă și calculează importanța lor pentru a ochiurilor de plasă. În Setări setare de calitate, puteți specifica cât de multe lumini în cele din urmă pot fi utilizate pentru iluminatul fiecare plasă. Pentru fiecare sursă de lumină de prioritate se calculează pe baza distanței de la plasa, iar luminozitatea sursei de lumină. De asemenea, are o valoare în parametrul Render componentei Light Mode, care poate lua două valori: Important sau neimportantă. Sursele de lumină sunt marcate ca nu este important de a avea o prioritate mai mică.

De exemplu, ia în considerare un joc în cazul în care jucătorul controlează un vehicul în mișcare în întuneric, cu farurile incluse. Cel mai probabil, farurile vor fi cea mai importantă sursă de lumină în joc și opțiunea Render Mode este setat pentru ei la o valoare importantă. Luminile din spate vor fi mai puțin importante, fără a provoca un impact semnificativ asupra imaginii finale, astfel încât pentru ei Render Mode poate fi setat la neimportantă. economisind astfel resursele hardware.

iluminat pixel de optimizare care economisește resursele și CPU și GPU: CPU face mai puține apeluri remiză, iar GPU se ocupă vârfurile mai mici și mai puține rasterizes pixeli pentru fiecare obiect suplimentar.

GPU: compresia texturilor și mipmaps

Utilizarea texturilor comprimate, reduce dimensiunea texturii (ca rezultat se încarcă mai repede și ia mai puțină memorie), și poate crește în mod semnificativ productivitatea. Texturilor comprimate, utilizați o mică parte din lățime de bandă de memorie, în comparație cu 32 de biți RGBA-texturi.

Utilizarea mipmap pentru texturi

De regulă, Genereaza Maps MIP opțiunea de import este activată pentru texturile folosite în 3D-scenă. În acest caz, comprimarea texturii ajută la limitarea cantității de date de textură transportate în unitatea de procesare vizuală în timpul de redare. Mimpapy permit GPU să utilizeze texturi rezoluție mai mică pentru triunghiuri mici.

Există o excepție de la această regulă: atunci când un texel (textura pixeli) corespunde unui pixel de ecran care se găsește în elementele de interfață de utilizator și 2D-jocuri.

LOD și stratificarea distanța de referință pentru sulling

Sacrificarea obiectelor implică a face obiecte invizibile. Aceasta este o modalitate eficientă de a reduce atât CPU și GPU sarcina.

În unele jocuri, este recomandabil să se taie obiecte mici, mai agresive decât mari, în scopul de a reduce diferența dintre sarcina pe CPU și GPU. De exemplu, pietre mici și iarba poate fi tăiată la o distanță mai mică decât clădiri mari.

Există o serie de modalități prin care puteți realiza acest lucru:

Setați manual pe straturi distantele pe camera de ucidere

Acest lucru poate fi realizat folosind nivelul sistemului de detaliu sau distanța de reglare manuală pentru decuparea camerei straturi. Puteți pune obiecte mici într-un strat separat, și să-l întreb tunderea la distanță, folosind Camera.layerCullDistances de proprietate.

umbre în timp real

umbre în timp real arata bine, dar ele pot reduce considerabil performanța, adăugând în același timp solicită tragerea la sorți suplimentare pentru CPU și GPU pentru procesare suplimentară. Detaliile sunt prezentate în pagina de Umbre.

GPU: Sfaturi pentru a scrie shader de înaltă performanță

platforme diferite au capacități foarte diferite de performanță; un PC GPU high-end pot ocupa mult mai mult din punct de vedere grafic și shader decât un GPU mobil low-end. Același lucru este valabil chiar și pe o singură platformă; o unitate de procesare rapidă este de zeci de ori mai rapid decât un GPU integrat lent.

Rețineți că performanța GPU pe dispozitive mobile și PC-uri entry-level este probabil să fie mult mai mic decât pe PC-ul, pe care îl utilizați pentru a se dezvolta. De obicei, shadere la optimizate manual pentru a reduce cantitatea de calcule și citește textura pentru obținerea de productivitate ridicată. De exemplu, unele construite în shader Unity au un echivalent „mobile“, care sunt mult mai rapid din cauza unor limitări și simplificări.

Următoarele sunt recomandări care sunt importante pentru GPU pe dispozitive mobile și nivel scăzut PC:

operație matematică complexă

funcții matematice transcendente (cum ar fi poc. Exp. Log. Cos. Sin. Tan) sunt destul de intensive în resurse, astfel încât să evite utilizarea lor acolo unde este posibil. Luați în considerare utilizarea texturilor de căutare ca o alternativă la calcule matematice complexe, dacă este cazul.

Evitați să scrieți propriile operații (cum ar fi normaliza. Dot. Inversesqrt). opțiuni încorporate în unitate asigură că șoferul poate genera un cod mult mai bine. Amintiți-vă că operațiunea Alpha Test (decartare) face ca de multe ori Shader dvs. fragment mai lent.

operațiunile cu virgulă mobilă

În timp ce precizia (float vs jumătate vs fix) de variabile în virgulă mobilă este în mare parte ignorate pe GPU-urile desktop, este destul de important pentru a obține o performanță bună pe GPU-uri mobile. A se vedea Tipuri de date și Shader pagina de precizie pentru detalii.

Detalii privind performanța shader pot fi găsite pe pagina Shader de performanță.

Lista pași pentru a crește performanța jocului

Exemplu - crearea unui plan-panou

solicită deodorizare tragere (Desenați apel deodorizare)