How many vertices should a GPU have?

Optimer din grafik: Vertices og ydeevne

09/08/2023

Rating: 4.81 (6185 votes)

I den stadigt udviklende verden af computerspil er grafikken en afgørende faktor for den samlede brugeroplevelse. Fra utroligt detaljerede karaktermodeller til massive, åbne verdener, er det den underliggende teknologi, der driver disse visuelle vidundere, som virkelig fortjener opmærksomhed. Et begreb, der ofte dukker op i diskussioner om grafisk ydeevne, er 'vertices'. Men hvad betyder vertices egentlig, og hvor mange har enhederne brug for? Lad os dykke ned i dette fascinerende emne og afmystificere kompleksiteten bag 3D-grafik.

Do you think about vertices?
Don't think about vertices. Think about draw counts (batches). You should think about how many batches of draw calls you need to make to render a scene. I've been building a VR game for quest2 which can handle about 300 draw calls in a single frame to hit 72 fps.
Indholdsfortegnelse

Hvad er Vertices?

I 3D-grafik er en vertex (flertal: vertices) simpelthen et punkt i rummet. Tænk på det som et hjørne i en polygon. Disse punkter definerer formen og strukturen af ethvert objekt i et virtuelt 3D-miljø. Når disse punkter forbindes med hinanden med linjer, skabes der polygoner, typisk trekanter, som udgør overfladen af 3D-modellerne. Jo flere vertices en model har, desto mere detaljeret og kompleks kan den være. En simpel kube har for eksempel kun 8 vertices, mens en realistisk karaktermodel kan have titusindvis eller endda millioner af vertices for at opnå et højt niveau af detaljer, især i ansigtet.

Vertices på PC vs. Mobile Enheder

Der er en markant forskel på, hvordan PC'er og mobile enheder håndterer vertices. Generelt har PC'er, især dem med dedikerede grafikkort (GPU'er), langt større kapacitet til at behandle et stort antal vertices. Mens en mobil enhed som en iPhone måske kan håndtere omkring 500.000 til 1 million vertices i en scene for at opretholde en god ydeevne, kan en moderne PC håndtere flere millioner, ofte op til 3 millioner vertices per frame, afhængigt af GPU'ens kraft og kompleksiteten af vertex shaders.

Forskelle i håndtering:

ParameterPCMobil Enhed (f.eks. iPhone)
Generelt Vertex AntalMillioner (op til 3M+ per frame)Hundredtusinder til 1M+ per scene
Ydeevne FokusGPU-begrænsninger (fillrate, hukommelsesbåndbredde), CPU-batchingCPU og GPU begrænsninger, batterilevetid, hukommelse
KompleksitetKan håndtere meget komplekse modeller og effekterKræver optimering for at undgå overbelastning

For eksempel, når man taler om spil som Genshin Impact, som er kendt for sin imponerende grafik på mobile platforme, kan en gennemsnitlig spilscene indeholde et betydeligt antal vertices. Det præcise tal varierer meget afhængigt af, om det er en karakter, en bygning eller et landskabselement, men det er ikke ualmindeligt, at disse scener indeholder flere hundrede tusinde vertices, optimeret til at køre flydende på et bredt udvalg af mobile enheder.

Optimering af Grafik for Bedre Ydeevne

God ydeevne er kritisk for succes i mange spil. Her er nogle enkle retningslinjer til at maksimere hastigheden på din rendering:

Identificer Grafiske Flaskehalse

De grafiske dele af dit spil kan primært påvirke to systemer i computeren: GPU'en og CPU'en. Den første regel for enhver optimering er at finde, hvor performance-problemet ligger. Strategierne for optimering af GPU vs. CPU er ret forskellige og kan endda være modsatrettede. For eksempel er det almindeligt at lade GPU'en gøre mere arbejde, mens man optimerer til CPU, og omvendt.

How many vertices should a PC have?
Generally speaking, aim for no more than 100,000 vertices on mobile. A PC manages well even with several million vertices, but it is still good practice to keep this number as low as possible through optimization. The CPU has too many vertices to process.

Almindelige Flaskehalse og Hvordan Man Tjekker Dem:

  • GPU: Ofte begrænset af fillrate (hvor hurtigt GPU'en kan fylde pixels på skærmen) eller hukommelsesbåndbredde. Hvis et spil kører hurtigere ved en lavere skærmopløsning, kan du være begrænset af GPU'ens fillrate eller hukommelsesbåndbredde.
  • CPU: Ofte begrænset af antallet af batches, der skal renderes. Batching refererer til, hvor mange separate objekter, der skal sendes til GPU'en for at blive tegnet. Jo flere batches, desto højere er omkostningen for CPU'en. Du kan tjekke dette i rendering-statistikkerne i din spilmotor.

CPU Optimering

For at rendere objekter på skærmen skal CPU'en udføre en masse processeringsarbejde: beregne hvilke lyskilder der påvirker et objekt, opsætte shaders og shader-parametre, og sende tegningskommandoer til grafikdriveren. Alt dette 'per objekt' CPU-forbrug er ressourcekrævende. Hvis du har mange synlige objekter, kan det hurtigt løbe op. For eksempel er det meget lettere for CPU'en, hvis tusindvis af trekanter er samlet i én mesh i stedet for at være separate meshes (hvilket resulterer i 1000 separate objekter). Omkostningen for GPU'en er meget lig hinanden i begge scenarier, men arbejdet udført af CPU'en for at rendere 1000 objekter (i stedet for ét) er betydeligt højere.

Sådan Reducerer Du CPU-belastningen:

  • Kombiner Objekter: Saml nærliggende objekter, enten manuelt eller ved hjælp af din spilmotors 'draw call batching'.
  • Reducer Materialer: Brug færre materialer i dine objekter ved at samle separate teksturer i en større 'texture atlas'.
  • Minimer Gentagne Renderinger: Brug færre elementer, der får objekter til at blive renderet flere gange, såsom refleksioner, skygger og 'per-pixel' lys.
  • Mesh Optimering: Kombiner objekter, så hver mesh har mindst flere hundrede trekanter og kun bruger ét materiale for hele meshen. Bemærk, at kombination af to objekter, der ikke deler et materiale, ikke giver nogen performance-gevinst. Den mest almindelige årsag til at kræve flere materialer er, at to meshes ikke deler de samme teksturer; for at optimere CPU-ydeevnen skal du sikre dig, at objekter, du kombinerer, deler de samme teksturer.

GPU Optimering: Modelgeometri

Der er to grundlæggende regler for optimering af en models geometri:

  • Brug ikke flere trekanter end nødvendigt.
  • Forsøg at holde antallet af UV-mapping-sømme og hårde kanter (fordoblede vertices) så lavt som muligt.

Det er vigtigt at bemærke, at det faktiske antal vertices, som grafikhardwaren skal behandle, normalt ikke er det samme som det antal, der rapporteres af et 3D-modelleringsprogram. Modelleringsprogrammer viser typisk antallet af distinkte hjørner (geometrisk vertex-antal). For et grafikkort skal nogle geometriske vertices dog opdeles i to eller flere logiske vertices til rendering. En vertex skal opdeles, hvis den har flere normaler, UV-koordinater eller vertex-farver. Følgelig er vertex-antallet i din spilmotor ofte højere end det antal, der gives af 3D-applikationen.

Lys-performance

Den hurtigste løsning er altid at skabe lys, der ikke kræver beregning. Brug 'Lightmapping' til at 'bage' statisk belysning én gang i stedet for at beregne den hver frame. Denne proces giver ikke kun hurtigere rendering (2-3 gange hurtigere for 'per-pixel' lys), men ser også bedre ud, da man kan bage global illumination og lade lysmapperen udglatte resultaterne.

Lys i Forward Rendering

'Per-pixel' dynamisk belysning tilføjer betydeligt rendering-arbejde til hver berørt pixel og kan føre til, at objekter renderes i flere omgange. Undgå at have mere end ét 'pixel light' der belyser et enkelt objekt på mindre kraftfulde enheder. Brug i stedet lightmaps til at oplyse statiske objekter. 'Per-vertex' dynamisk belysning kan tilføje betydeligt arbejde til vertex-transformationer, så undgå situationer, hvor flere lyskilder belyser et enkelt objekt.

How many vertices should a GPU have?

Undgå at kombinere meshes, der er så langt fra hinanden, at de påvirkes af forskellige sæt af 'pixel lights'. Når du bruger 'pixel lighting', skal hver mesh renderes så mange gange, som der er 'pixel lights', der belyser den. Hvis du kombinerer to meshes, der er langt fra hinanden, øger det den effektive størrelse af det kombinerede objekt. Alle 'pixel lights', der belyser en del af dette kombinerede objekt, tages i betragtning under renderingen, så antallet af rendering-passer, der skal laves, kan øges.

Render Mode: Hvert lys har en 'Render Mode' indstilling, der kan sættes til 'Important' eller 'Not Important'. Lys markeret som 'Not Important' har en lavere rendering-overhead. For eksempel, i et bilspil med forlygter, bør forlygterne være 'Important', mens baglygter eller fjerntliggende gadelygter kan være 'Not Important' for at spare på rendering-kapaciteten.

GPU: Teksturkomprimering og Mipmaps

Brug komprimerede teksturer for at reducere størrelsen. Dette kan resultere i hurtigere indlæsningstider, et mindre hukommelsesfodaftryk og dramatisk øget rendering-ydeevne, da komprimerede teksturer kun bruger en brøkdel af den hukommelsesbåndbredde, der kræves for ukomprimerede teksturer.

Tekstur Mipmaps

Aktivér altid 'Generate mipmaps' for teksturer, der bruges i en 3D-scene. En mipmap-tekstur gør det muligt for GPU'en at bruge en lavere opløsningstekstur til mindre trekanter. Dette er især nyttigt, når objekter er længere væk fra kameraet, og reducerer mængden af teksturdata, der skal overføres.

How many vertices does a game character have?
The number of vertices per character varies greatly in video games, even within the same game. It depends on the hardware target and the complexity of the character model.

Level Of Detail (LOD) og Culling

Culling af objekter betyder at gøre dem usynlige. Dette er en effektiv måde at reducere både CPU- og GPU-belastningen på. Ved at gøre små objekter usynlige på længere afstande, mens store bygninger stadig er synlige, kan man opnå en bedre balance mellem visuel kvalitet og ydeevne.

Metoder til Culling:

  • Brug Level Of Detail (LOD) systemet, som viser simplere modeller, når objekter er længere væk.
  • Manuelt indstil culling-afstande per lag på kameraet.
  • Placer små objekter i et separat lag og opsæt per-lag culling-afstande.

Realtime Skygger

Realtime skygger er visuelt tiltalende, men de kan have en stor indvirkning på ydeevnen, både for CPU'en (ekstra draw calls) og GPU'en (ekstra beregninger). Overvej at bruge 'baked lighting' eller forenklede skyggeløsninger, hvor det er muligt.

Tips til Skrivning af Høj-Ydeevne Shaders

Forskellige platforme har vidt forskellige ydeevneegenskaber. En high-end PC GPU kan håndtere langt mere grafik og shaders end en low-end mobil GPU. Det anbefales kraftigt at optimere shaders manuelt for at reducere beregninger og teksturlæsninger for at opnå god ydeevne på low-end enheder.

Retningslinjer for Mobile og Low-End PC Grafikkort:

  • Undgå Komplekse Matematiske Operationer: Funktioner som pow, exp, log, cos, sin, tan er ressourcekrævende. Overvej at bruge lookup-teksturer som alternativ, hvis det er relevant.
  • Brug Indbyggede Funktioner: Undgå at skrive egne operationer (som normalize, dot). Unity's indbyggede muligheder sikrer, at driveren kan generere bedre kode. Bemærk, at 'Alpha Test' (discard) ofte gør fragment shaders langsommere.
  • Floating Point Præcision: Præcisionen af flydende komma-variable (float vs. half vs. fixed) er vigtig for god ydeevne på mobile GPU'er.

Simpel Tjekliste for en Hurtigere Spiloplevelse

  • Hold vertex-antallet under 200K og 3M per frame for PC (afhængigt af mål-GPU'en).
  • Brug shaders fra 'Mobile' eller 'Unlit' kategorierne, hvis muligt.
  • Hold antallet af forskellige materialer per scene lavt og del så mange materialer som muligt mellem objekter.
  • Sæt 'Static'-egenskaben på objekter, der ikke bevæger sig, for at muliggøre interne optimeringer som 'static batching'.
  • Hav kun én (fortrinsvis retningsbestemt) 'pixel light', der påvirker din geometri, i stedet for flere.
  • Brug 'baked lighting' i stedet for dynamisk belysning.
  • Brug komprimerede teksturformater og 16-bit teksturer over 32-bit teksturer.
  • Undgå at bruge 'fog' hvor muligt.
  • Brug 'Occlusion Culling' til at reducere mængden af synlig geometri og draw-calls i komplekse scener.
  • Brug skyboxes til at 'fake' fjerne geometri.
  • Brug 'pixel shaders' eller tekstur-kombinatorer til at blande flere teksturer i stedet for en multi-pass tilgang.
  • Minimer brugen af komplekse matematiske operationer i pixel shaders.
  • Brug færre teksturer per fragment.

Ved at forstå og implementere disse optimeringsteknikker kan du sikre en markant forbedret grafisk ydeevne på tværs af enheder, hvilket resulterer i en mere flydende og engagerende spiloplevelse for dine spillere.

Hvis du vil læse andre artikler, der ligner Optimer din grafik: Vertices og ydeevne, kan du besøge kategorien Teknologi.

Go up