Vad betyder vsync i spel. Grafikinställningar i spel: vad påverkar de? Anslutning av vertikal synk

Vad är vertikal synkronisering i spel? Denna funktion är ansvarig för korrekt visning av spel på vanliga LCD-skärmar med en frekvens på 60 Hz. När den är aktiverad är bildfrekvensen begränsad till 60 Hz och inga avbrott visas på skärmen. Om du inaktiverar det ökar bildfrekvensen, men samtidigt kommer det att finnas en skärmrivningseffekt.

V-sync är ett ganska kontroversiellt ämne i spel.Å ena sidan för visuell komfort spel verkar vara mycket nödvändigt, förutsatt att du har en vanlig LCD-skärm.

Tack vare det dyker inga fel upp på skärmen under spelet, bilden är stabil och har inga luckor. Nackdelen är att bildfrekvensen är begränsad till 60Hz, så mer krävande spelare kan uppleva ingångsfördröjning, det vill säga en liten fördröjning när de rör sig i spelet med musen (kan likställas med artificiell utjämning av musrörelser).

Att inaktivera vertikal synkronisering har också sina för- och nackdelar. Först och främst tillhandahålls en obegränsad FPS-bildhastighet och tar därmed helt bort den nämnda ingångsfördröjningen. Det är praktiskt för spel. Counter-Strike typ där lyhördhet och noggrannhet är viktigt. Rörelse och siktning är mycket tydlig, dynamisk, varje rörelse av musen sker med hög precision. I vissa fall kan vi få fler FPS-hastighet, eftersom V-Sync, beroende på grafikkortet, kan minska hårdvarans prestanda något (skillnaden är cirka 3-5 FPS). Tyvärr är nackdelen att utan vertikal synk får vi en skärmrivningseffekt. När vi vänder eller ändrar rörelse i spelet märker vi att bilden slits i två eller tre horisontella delar.

Aktivera eller inaktivera V-Sync?

Är vertikal synkronisering nödvändig? Allt beror på våra individuella preferenser och vad vi vill få. I multiplayer FPS-spel rekommenderas det att stänga av vertikal synkronisering för att förbättra målnoggrannheten. Skärmrivningseffekten är som regel inte så märkbar, och när vi vänjer oss kommer vi inte ens att märka det.

I sin tur i berättelsespel Du kan säkert aktivera V-Sync. Här är hög noggrannhet inte så viktigt, första fiolen spelas av miljön, visuell komfort, så du bör satsa på bra kvalitet.

Vertikal synkronisering kan vanligtvis slås på eller av i spelets grafikinställningar. Men om vi inte hittar en sådan funktion där, kan du stänga av den manuellt i grafikkortsinställningarna - både för alla och bara för utvalda applikationer.

Vertikal synk på NVIDIA-grafikkort

På GeForce-grafikkort finns funktionen i Nvidias kontrollpanel. Klick Högerklicka musen på skrivbordet i Windows 10 och välj sedan Nvidia Kontrollpanel.

I sidofältet väljer du fliken Kontroller för 3D-inställningar under 3D-inställningar. De tillgängliga inställningarna kommer att visas till höger.

Inställningarna är uppdelade i två flikar - globalt och program. På den första fliken kan du ställa in alternativ för alla spel och till exempel om du ska aktivera eller inaktivera vertikal synkronisering i varje. På den andra fliken kan du ställa in samma parametrar, men individuellt för varje spel separat.

Välj den globala eller programfliken och leta sedan efter alternativet "Vertikal synkronisering" i listan. Det finns ett rullgardinsfält bredvid - vi väljer att tvinga avstängning eller aktivera vertikal synkronisering.

V-Sync på AMD-grafik

När det gäller AMD-grafikkort ser det exakt likadant ut som i Nvidia. Högerklicka på skrivbordet och gå sedan till Panel Catalyst Control Center.

Öppna sedan fliken "Spel" till vänster och välj "Inställningar för 3D-applikationer". Till höger kommer en lista över tillgängliga alternativ att visas som kan tvingas aktiveras från positionen för AMD Radeons grafikinställningar. När vi är på fliken "Systeminställningar" väljer vi för alla.

Om du behöver ställa in parametrarna individuellt för varje spel separat, bör du klicka på knappen "Lägg till" och ange EXE-filen. Det kommer att läggas till i listan som ett nytt bokmärke, och när du byter till det kan du bara ställa in parametrar för detta spel.

När du har valt fliken med den tillagda applikationen eller systemparametrarna (allmänt), hittar du alternativet "Vänta på vertikal uppdatering" i listan. En urvalsruta visas där vi kan tvångsaktivera eller inaktivera detta alternativ.

V-Sync på integrerad Intel HD-grafik

Om du använder ett integrerat Intel HD Graphics-chip finns även en kontrollpanel tillgänglig. Den bör vara tillgänglig genom att högerklicka på skrivbordet eller via tangentkombinationen Ctrl+Alt+F12.

På Intel-panelen, gå till fliken Inställningar Läge - Kontrollpanel - 3D-grafik och sedan till användarinställningarna.

Här hittar vi ett fält med vertikal synkronisering Vertical Sync. Du kan aktivera den med tvång genom att ställa in värdet på "Aktiverad" eller ställa in den på "Programinställningar". Tyvärr finns det ingen tvångsinaktiveringsfunktion i Intel HD-kortalternativen - du kan bara aktivera V-Sync. Eftersom det inte är möjligt att inaktivera vertikal synkronisering i grafikkortet kan detta endast göras i själva spelets inställningar.

Nästan sammanlagt moderna spel i grafikinställningarna kan du se kolumnen "vertikal synkronisering". Och fler och fler spelare har frågor Är denna synkronisering användbar?, dess inverkan och varför den existerar överhuvudtaget, hur man använder den på olika plattformar. Låt oss ta reda på det i den här artikeln.

Om vertikal synkronisering

Innan man går vidare direkt till en förklaring av den vertikala synkroniseringens natur är det nödvändigt att fördjupa sig lite i historien om bildandet av vertikal synkronisering. Jag ska försöka vara så tydlig som möjligt. De första datorskärmarna var en fast bild som betjänades av en enkelbildsavsökningssignal.

När en ny generation skärmar dök upp, uppstod frågan om att ändra upplösningen kraftigt, vilket krävde flera driftsätt, dessa skärmar presenterade en bild med hjälp av signalernas polaritet synkront med vertikalen.

Den VGA-upplösning som krävs mer finjustering svep och fick två signaler horisontellt och vertikalt. I dagens skärmar är det den inbyggda styrenheten som ansvarar för att ställa in skanningen.

Men om styrenheten, enligt drivrutinen, ställer in det antal bilder som krävs, varför behöver du vertikal synkronisering för den inställda upplösningen? Så enkelt är det inte. Ganska ofta finns det situationer när bildhastigheten för att generera ett grafikkort är mycket hög, men övervakar, på grund av deras tekniska begränsningar, kan inte visa detta antal bildrutor korrekt när bildskärmens uppdateringsfrekvens är betydligt lägre än grafikkortets uppdateringsfrekvens. Detta leder till skarpa bildrörelser, artefakter och ränder.

Eftersom de inte har tid att visa ramar från minnesfilen med "trippelbuffring" aktiverad, byter de snabbt ut sig själva och lägger över nästa bildruta. Och här är tekniken för trippelbuffring nästan ineffektiv.

Den vertikala synkroniseringstekniken utformade för att avhjälpa dessa brister..

Hon vänder sig mot monitorn med en omröstning på standardfunktioner uppdatering av frekvens och bildhastighet, vilket förhindrar bildrutor från det sekundära minnet från att flytta till det primära, exakt tills det ögonblick då bilden uppdateras.

Anslutning av vertikal synk

De allra flesta spel har denna funktion i sina grafikinställningar direkt. Men det händer när det inte finns någon sådan kolumn, eller vissa defekter observeras när man arbetar med grafiken i applikationer som inte inkluderar inställningar för sådana parametrar.

I inställningarna för varje grafikkort kan du aktivera vertikal synkroniseringsteknik för alla applikationer eller selektivt.

Hur aktiverar jag för NVidia?

Som de flesta manipulationer med NVidia-kort, görs det via NVidias hanteringskonsol. Där, i 3D-parameterstyrdiagrammet, kommer det att finnas en synkpulsparameter.

Den ska flyttas till på-läget. Men beroende på grafikkortet kommer ordningen att vara annorlunda.

Så på äldre grafikkort finns den vertikala synkroniseringsparametern i kapitlet globala parametrar i samma kontrollbox för 3D-inställningar.

Grafikkort från ATI

För att konfigurera, använd kontrollcentret för ditt grafikkort. Catalyst Control Center kör nämligen .NET Framework 1.1. Om du inte har det, startar inte kontrollcentralen. Men oroa dig inte. I sådana fall finns det ett alternativ till mitten, bara att arbeta med den klassiska kontrollpanelen.

För att komma åt inställningarna, gå till 3D-objektet som finns i menyn till vänster. Det kommer att finnas en Vänta på vertikal uppdatering. Inledningsvis används standard vertikal synkroniseringsteknik i applikationen.

Om du flyttar knappen åt vänster kommer den här funktionen att inaktiveras helt, och om du flyttar den åt höger tvingas den på. Standardalternativet är här det rimligaste, eftersom det gör det möjligt att konfigurera synkronisering direkt genom spelinställningarna.

Summering

Vertikal synkronisering är en funktion som hjälper till att bli av med skarpa rörelser i bilden, i vissa fall låter den dig bli av med artefakter och ränder i bilden. Och detta uppnås genom att dubbelbuffra den mottagna bildhastigheten när bildfrekvensen för bildskärmen och grafikkortet inte matchar.

Idag finns v-sync i de flesta spel. Det fungerar ungefär på samma sätt som trippelbuffring, men kostar mycket mindre resurser, vilket är anledningen till att trippelbuffring i spelinställningar kan ses mindre ofta.

Genom att välja att aktivera eller inaktivera vertikal synkronisering gör användaren ett val mellan kvalitet och prestanda. Genom att slå på den får den en jämnare bild, men färre bilder per sekund.

Stänger han av den får han Mer ramar, men är inte immun mot bildens skärpa och slarvighet. I synnerhet gäller detta intensiva och resurskrävande scener, där avsaknaden av vertikal synk eller trippelbuffring är särskilt märkbar.

Denna mystiska graf i parametrarna för många spel var inte så enkel som den verkade. Och nu förblir valet att använda det eller inte, bara hos dig och dina mål i spelen.

Jag är säker på att många fans datorspel ställs inför rekommendationen att inaktivera den så kallade "vertical synchronization" eller VSync i grafikkortsinställningarna i spel.

I många tester av grafikstyrenhets prestanda betonas det att testet utfördes med VSync inaktiverat.
Vad är det, och varför behövs det, om många "avancerade experter" rekommenderar att den här funktionen inaktiveras?
För att förstå innebörden av vertikal synkronisering måste du göra en kort avvikelse i historien.

De första datorskärmarna körde med fasta upplösningar och fasta uppdateringsfrekvenser.
Med tillkomsten av EGA-monitorer blev det nödvändigt att välja olika upplösningar, som tillhandahölls av två driftlägen, som ställdes in av polariteten hos bildsynkroniseringssignalerna längs vertikalen.

Skärmar som stöder VGA-upplösning och högre kräver finjustering av svepfrekvenserna.
För detta användes redan två signaler, som ansvarar för att synkronisera bilden både horisontellt och vertikalt.
I moderna monitorer är ett speciellt styrchip ansvarigt för att justera skanningen i enlighet med den inställda upplösningen.

Varför sparas alternativet "vertikal synkronisering" i grafikkortets inställningar om monitorn kan justeras automatiskt i enlighet med det läge som är inställt i drivrutinen?
Faktum är att, trots det faktum att grafikkort kan generera ett mycket stort antal bilder per sekund, kan monitorer inte visa det med hög kvalitet, vilket resulterar i att olika artefakter uppträder: band och en "reven" bild.

För att undvika detta tillhandahåller grafikkort ett läge för preliminär förfrågning av monitorn om dess vertikala skanning, med vilken antalet bilder per sekund synkroniseras - den välbekanta fps.
Med andra ord, med en vertikal frekvens på 85 Hz kommer antalet bilder per sekund i något spel inte att överstiga åttiofem.

Den vertikala uppdateringsfrekvensen för en bildskärm hänvisar till antalet gånger en skärm med en bild uppdateras per sekund.
I fallet med en katodstrålerörsskärm, oavsett hur många bilder per sekund som grafikacceleratorn tillåter att "pressa" ur spelet, kan uppdateringsfrekvensen inte fysiskt vara högre än den inställda.

I LCD-skärmar finns det ingen fysisk uppdatering av hela skärmen: här kan enskilda pixlar lysa eller inte.
Men själva tekniken för dataöverföring genom videogränssnittet ger att ramar överförs till monitorn från grafikkortet med en viss hastighet.
Därför, med en viss grad av konvention, är konceptet "svep" tillämpligt på LCD-skärmen.

Var kommer bildartefakter ifrån?
I alla spel förändras antalet genererade bilder per sekund ständigt, beroende på bildens komplexitet.
Eftersom monitorns uppdateringsfrekvens är konstant leder avsynkroniseringen mellan fps som sänds av grafikkortet och monitorns uppdateringsfrekvens till bildförvrängning, som verkar vara uppdelad i flera godtyckliga band: en del av dem hinner uppdateras, medan den andra gör inte.

Till exempel fungerar en bildskärm med en uppdateringshastighet på 75 Hz, och ett grafikkort i ett spel genererar hundra bilder per sekund.
Med andra ord är grafikacceleratorn ungefär en tredjedel snabbare än bildskärmens uppdateringssystem.
Under uppdateringen av en skärm genererar kortet 1 bildruta och en tredjedel av nästa - som ett resultat ritas två tredjedelar av den aktuella ramen på displayen och dess tredje ersätts av den tredje ramen i nästa.

Under nästa uppdatering lyckas kortet generera två tredjedelar av ramen och två tredjedelar av nästa, och så vidare.
På monitorn, i varannan av tre skanningscykler, observerar vi en tredjedel av bilden från en annan ram - bilden förlorar sin jämnhet och "rycker".
Denna defekt är särskilt märkbar i dynamiska scener eller till exempel när din karaktär i spelet ser sig omkring.

Det skulle dock vara fundamentalt fel att anta att om grafikkortet förbjöds att generera mer än 75 bilder per sekund, så skulle allt vara i sin ordning med visningen av bilden på skärmen med en vertikal frekvens på 75 Hz.
Faktum är att i fallet med den vanliga, så kallade "dubbelbuffringen", kommer ramarna på monitorn från den primära rambufferten (främre bufferten), och själva renderingen utförs i den sekundära bufferten (bakre bufferten). .

När den sekundära bufferten fylls upp kommer ramarna in i den primära, men eftersom kopieringsoperationen mellan buffertarna tar en viss tid, kommer bildryckningar fortfarande inte att undvikas om monitorskanningen uppdateras i detta ögonblick.

Vertikal synkronisering löser bara dessa problem: monitorn avfrågas för uppdateringsfrekvens och kopiering av ramar från den sekundära bufferten till den primära är förbjuden tills bilden har uppdaterats.
Denna teknik fungerar utmärkt när bildhastigheten per sekund överstiger den vertikala frekvensen.
Men vad händer om bildfrekvensen sjunker under uppdateringsfrekvensen?
Till exempel, i vissa scener sjunker vår fps från 100 till 50.

I det här fallet händer följande.
Bilden på monitorn uppdateras, den första bilden kopieras till den primära bufferten och två tredjedelar av den andra "renderas" i den sekundära bufferten, följt av ytterligare en uppdatering av bilden på skärmen.
Vid denna tidpunkt avslutar grafikkortet behandlingen av den andra bildrutan, som den fortfarande inte kan skicka till den primära bufferten, och nästa uppdatering av bilden sker med samma bildruta som fortfarande är lagrad i den primära bufferten.

Sedan upprepas allt detta, och som ett resultat har vi en situation där bildhastigheten per sekund på skärmen är två gånger lägre än skanningsfrekvensen och en tredjedel lägre än den potentiella renderingshastigheten: grafikkortet "hänger inte med" ” med monitorn, och sedan, tvärtom, måste du vänta tills displayen återtar bilden som är lagrad i den primära bufferten, och tills det finns utrymme i den sekundära bufferten för att beräkna en ny bildruta.

Det visar sig att i fallet med vertikal synkronisering och dubbelbuffring kan vi få en högkvalitativ bild endast om antalet bilder per sekund är lika med en av en diskret sekvens av värden beräknat som förhållandet mellan skanningsfrekvensen till något positivt heltal.
Till exempel, med en uppdateringsfrekvens på 60 Hz, bör antalet bilder per sekund vara 60 eller 30 eller 15 eller 12 eller 10, etc.

Om kortets potentiella kapacitet tillåter dig att generera mindre än 60 och mer än 30 bilder per sekund, kommer den faktiska renderingshastigheten att sjunka till 30 fps.

Översätter... Översätt kinesiska (förenklad) kinesiska (traditionell) engelska franska tyska italienska portugisiska ryska spanska turkiska

Tyvärr kan vi inte översätta denna information just nu - försök igen senare.

Lär dig hur du använder en enkel algoritm för att synkronisera bilden med skärmens uppdateringsfrekvens och förbättra kvaliteten på videouppspelning.

Introduktion

Vår vision om ett "digitalt hem" blir gradvis verklighet. På senare år har fler och fler enheter för det "digitala hemmet" funnits kommersiellt tillgängliga. Utbudet av elektronik som erbjuds är mycket stort - från multimedia set-top-boxar som stöder musik- och videosändningar till fullskaliga underhållningssystem i ett konventionellt PC-fodral.

Hemmediacenter håller på att bli ett standardobjekt på prislistor för datorbutiker, vilket gör att du kan titta på och spela in TV-program, lagra och spela upp digitala bilder och musik och så vidare. Dessutom erbjuder vissa leverantörer speciella kit med vilka användaren kan förvandla sin dator till ett hemmediacenter.

Tyvärr stöder sådana mediacenter inte alltid videouppspelning av hög kvalitet. Otillräcklig videokvalitet orsakas vanligtvis av faktorer som felaktig buffring och rendering av strömmande innehåll, brist på deinterlacing-algoritmer vid bearbetning av interlaced video och felaktig synkronisering av video-ljudströmmar. De flesta av dessa problem är väl studerade och har lösningar som tillräckligt beaktas av tillverkarna. Det finns dock ett annat, mindre känt och mindre uppenbart problem som kan leda till mindre, men ändå märkbar förvrängning när man tittar på videor. Vår artikel ger en detaljerad beskrivning av detta problem och överväger ett av sätten att lösa det.

Med den växande försäljningen av hemmediacenter tittar fler och fler konsumenter på TV på PC. När detta segment, som för närvarande efterfrågas av amatörentusiaster, expanderar, kommer efterfrågan på högkvalitativ video också att öka.

Det finns ett antal metoder för att förbättra kvaliteten på videouppspelning på en dator, och många tillverkare av videoprogramvara har framgångsrikt använt dem. Samtidigt, ibland det faktum att programvara för videouppspelning måste ta hänsyn till och säkerställa att videon är synkroniserad med skärmens uppdateringsfrekvens. Faktum är att TV-apparater initialt tillhandahålls för synkronisering med videosignalen som kommer från sändningsstudion. Till skillnad från TV-apparater uppdaterar datorskärmar skärmen med en fast hastighet, som ställs in av grafikadaptern och har ingenting att göra med videosignalen. Denna betydande skillnad kan orsaka många problem om du vill säkerställa att videon är korrekt synkroniserad med datorskärmen. Nedan ska vi försöka detaljerad beskrivning detta problem och föreslå en lösning. Men innan dess vill vi introducera läsaren för några grundläggande begrepp som kommer att diskuteras i artikeln.

Visa uppdateringscykel

Uppdateringshastigheten för PC-skärmen (skärmens uppdateringsfrekvens) synkroniseras med frekvensen för grafikadaptern (videokortet). Tänk på det vanligaste exemplet - när grafikkortet och bildskärmen stöder en frekvens på 60Hz. Denna kombination är möjlig på grund av att monitorn är synkroniserad med 60Hz-signalen som kommer från grafikkortet. Faktum är att bildskärmen upprätthåller synkronisering även i fall av liten avvikelse i grafikadapterns utfrekvens (till exempel 60,06 Hz istället för standard 60 Hz).

Under uppdateringscykeln ritas skärmbilden om från visningsbufferten (grafikadapteradresserbart minne). Varje horisontell linje på displayen uppdateras sekventiellt i enlighet med de nya data som finns i videominnesbufferten. uppdaterad i det här ögonblicket tidslinje kallas en skanningslinje. När det gäller en 60 Hz grafikadapter sker uppdateringsprocessen 60 gånger per sekund, så bilden på PC-skärmen uppdateras också 60 gånger per sekund.

Figur 1 - Bildskärmsuppdatering

Bild riva artefakter

Var medveten om det potentiella problemet med olikformig uppdatering av grafikbuffert. Om innehållet i videominnesbufferten har ändrats vid en tidpunkt då bilden på monitorn ännu inte har ritats helt (uppdateringscykeln har inte slutförts), kommer bara den del av den nya bilden som följer efter skanningslinjen att visas på skärmen (se bild. Ris. 2). Denna bildartefakt, som visar den gamla bilden överst på skärmen och den nya bilden längst ner, kallas rivning. Faktum är att denna term är mycket beskrivande, eftersom den resulterande bilden ser ut som om den är "sliten" på mitten.

Figur 2 - Artefakter av bildens "gap".

Team Flip

Ett sätt att förhindra "tårar" är att se till att uppdatering av innehållet i videominnet sker efter det hur skärmens uppdateringscykel är klar och före det när nästa cykel startar. Med andra ord måste uppdateringen ske under omvänd svep. Denna metod kräver dock motsvarande ändringar i programvaran, som måste beräkna ordningen för bildändringen med tillräcklig noggrannhet.

Av denna anledning har en buffertväxlingssynkroniseringsalgoritm (Flip) föreslagits. Flip-kommandot är mycket enkelt till sin natur - det tillåter programmet att uppdatera bilden när som helst under skärmuppdateringscykeln, men dess resultat överförs faktiskt inte till videominnet förrän den aktuella cykeln är klar. Uppdateringen av bilden på monitorn sker således vid intervallet efter utförandet av Flip-kommandot. Med buffertsynkroniseringsmetoden elimineras "rivning" av bilden eftersom Flip-kommandot säkerställer att en helt ny bild är klar för varje uppdateringscykel (se nedan). Ris. 3). Men i nästa avsnitt kommer vi att visa att användningen av Flip-kommandot enbart inte garanterar att alla problem kommer att lösas.

Figur 3 - Vänd kommandosekvens

Potentiella problem

Att använda en synkroniseringsalgoritm har stora fördelar och hjälper till att eliminera rivningsartefakter, men ett betydande problem kvarstår.

När du använder kommandot Vänd ändras villkoren för mjukvaruåtergivningen för videon. För att köra Flip måste programvaran justera uppdateringsintervallet för rambuffert (bildhastighet) enligt en viss bildhastighet. Den enda klockfrekvensen med vilken ramar kan synkroniseras är skärmens uppdateringsfrekvens (eller multipel). Med andra ord kan en ny bildruta endast visas i början av uppdateringscykeln - i själva verket är bildruteintervallen bundna till skärmens uppdateringsfrekvens.

Figur 4 - Bildhastighet och visningsfrekvens missmatchar

Detta faktum innebär att om bildskärmens uppdateringshastighet inte är densamma som bildrutehastigheten för innehållet som spelas upp, eller inte är en multipel av det, kan innehållet på skärmen inte reproduceras helt. På Ris. fyra ett specialfall av detta problem visas. I det här scenariot är innehållets bildrutehastighet långsammare än skärmens uppdateringsfrekvens. På grund av fasförskjutningen mellan dessa två frekvenser kommer Flip-kommandointervallen för två bildrutor så småningom att sträcka sig ut för en fullständig uppdateringscykel (observera timingen för bildrutorna 3 och 4). Som ett resultat kommer bildruta 3 att visas nästan dubbelt så länge som krävs. Därför bör du sträva efter att matcha bildfrekvensen och uppdateringsfrekvensen för skärmen, även om detta inte alltid är möjligt.

Den aktuella situationen förvärras bara om skillnaden mellan bildfrekvensen och uppdateringsfrekvensen för skärmen är liten. När bildrutetiderna ligger nära uppdateringscykelintervallen, kan även små felaktigheter i beräkningen av mjukvarutimern göra att flera på varandra följande Vänd-kommandon avviker i förhållande till början av uppdateringen. Detta betyder att vissa Flip-kommandon kommer att köras för tidigt och vissa för sent, vilket resulterar i "dubbletter" och "släppta" ramar. Detta fall illustreras i Ris. 5– timern fungerar inte korrekt (med oregelbundna intervaller), som ett resultat av detta visas inte bildrutorna 2 och 4, och bildrutorna 3 och 5 visas två gånger.

Figur 5 - Resultatet av att använda Flip-on-timerfel

Detta fenomen kan uppstå även när bildrutehastigheten för innehållet och skärmens uppdateringsfrekvens är desamma. Uppenbarligen är det inte tillräckligt att använda en timer och Flip-kommandot för att säkerställa högkvalitativ videouppspelning. Som förklaras i nästa avsnitt, för att Vänd-kommandona ska köras korrekt, måste programvaran upprätthålla smart synkronisering med visningsuppdateringscykler.

Timing Flip-kommandon

Som nämnts ovan låter användningen av Flip-kommandot dig ta hänsyn till skärmuppdateringscykler när du renderar videoramar. Varje nysänd ram visas endast under en fullständig uppdateringscykel. Sålunda, när man använder Flip-kommandot, måste programvaran exakt beräkna inte bara när varje bildruta ska visas, utan också bestämma den specifika uppdateringscykeln för att optimalt synkronisera utmatningen av ramar.

Det är bäst att anropa Flip-kommandot i början av uppdateringscykeln, precis innan början av motsvarande ramuppdateringsintervall (se exempel på Ris. 3). Detta ger den högsta sannolikheten för att verkligen utföra kommandot före början av motsvarande uppdateringscykel och säkerställer att ramen matas ut vid rätt tidpunkt. Observera att i de fall där videons bildrutehastighet och bildskärmens uppdateringsfrekvens inte stämmer överens, är Flips optimering av bildruteuppdateringscykeln inte tillräcklig för att ge acceptabel videokvalitet. Det finns några sätt att rama in eller ändra innehållsramar som löser dessa problem, men de ligger utanför omfattningen av denna publikation.

Några Operativsystem tillhandahålla programmeringsgränssnitt genom vilka applikationer kan hållas synkroniserade med skärmens uppdateringscykel. I synnerhet inkluderar Microsoft DirectX 9.0-miljön flera procedurer som kan vara mycket användbara i vårt fall. Därefter kommer vi att titta på DirectX-standardprocedurerna som exemplariska metoder för att lösa det undersökta problemet. Läsare kan använda dessa exempel för att utforska de föreslagna metoderna och hitta liknande lösningar på andra operativsystem.

WaitForVerticalBlank()är en standardprocedur i DirectDraw-biblioteket (inom IDirectDraw-gränssnittet) som blockerar tråden från att komma åt gränssnittet tills nästa uppdateringscykel börjar. Denna procedur kan användas för synkronisering, men den bör göras en gång eller med ett betydande intervall eftersom det är tidskrävande att komma åt. Den här proceduren är dock användbar när du utför den initiala synkroniseringen med en uppdateringscykel.

GetScanLine()är en standardprocedur som kan användas för att få information om vilken skanningslinje som för närvarande uppdateras på displayen. Om det totala antalet rader och den aktuella avsökningslinjen är kända, är det inte svårt att bestämma tillståndet för displayens uppdateringscykel. Till exempel, om det totala antalet visningsrader är 1024 och proceduren GetScanLine() returnerar 100, den aktuella uppdateringscykeln är för närvarande 100 till 1024, vilket är cirka 10 procent klar. Ansökan GetScanLine() tillåter applikationen att övervaka tillståndet för uppdateringsslingan och, baserat på den, bestämma vilken cykel som ska binda nästa renderade ram till, och ställa in en timer för den önskade buffertväxlingstiden. Följande är ett exempel på en algoritm:

Bild 6

Tiden för bildbyte väljs inte bara utifrån beräkningen av nya bildramar, utan även med hänsyn till skärmens uppdateringsfrekvens. Eftersom ramar endast visas på skärmen när displayen uppdateras, är det nödvändigt att se till att varje bildruta "träffar" rätt uppdateringscykel. Därför bör bildinramning exakt matcha skärmens uppdateringsfrekvens. I det här fallet kommer varje ram att ritas på displayen vid rätt tidpunkt.

Alternativ lösning för inspelat innehåll

De frågor vi diskuterar gäller alla scenarier för videouppspelning, både när det gäller livesändningar och vid uppspelning av inspelad video. Men i det senare fallet kan du ta till en alternativ lösning. Om skillnaden mellan innehållsbildfrekvensen och skärmens uppdateringsfrekvens är liten, kan du justera videobildfrekvensen (och justera ljudströmmen på samma sätt) för att matcha skärmens uppdateringsfrekvens utan att kompromissa med kvaliteten på innehållet. Som ett exempel, låt oss ta en TV-signal med standardupplösning på 59,94 bilder per sekund (Bob deinterlaced) på en bildskärm vid 60 Hz. Genom att accelerera video- och ljuduppspelningen upp till 60 bilder per sekund kan du säkerställa att bildfrekvensen matchar skärmens uppdateringsintervall och samtidigt blir det inga bildartefakter.

Sammanfattning

Denna publikation ägnas åt bildsynkroniseringsmetoder, i synnerhet förhindrande av bildrivningsartefakter med hjälp av Flip-kommandot. Artikeln tar också upp fall där Flip-kommandot orsakar problem som orsakas av tät synkronisering med visningsuppdateringscykler. Korrekt ramtid och användning av Flip-kommandon kan göra att bildtider och intervaller skiljer sig från vad programvaran förväntar sig. Uppsatsen drar slutsatsen att det korrekta sättet att använda Vänd-kommandona är att kombinera Vänd-synkronisering med skärmens uppdateringsfrekvens och optimera bildberäkningscykeln med tanke på dess efterföljande utdata. Således kan Flip-intervallen justeras i programvaran. Bästa kvalitet video uppnås när bildfrekvensen för innehållet matchar skärmens uppdateringsfrekvens. Men i praktiken är detta inte alltid möjligt. Algoritmerna som beskrivs i den här artikeln hjälper till att reducera bildartefakter till ett minimum.

Moderna spel använder mer och mer grafiska effekter och tekniker som förbättrar bilden. Samtidigt bryr sig utvecklare oftast inte om att förklara exakt vad de gör. När inte den mest produktiva datorn är tillgänglig måste en del av funktionerna offras. Låt oss försöka överväga vad de vanligaste grafikalternativen betyder för att bättre förstå hur man frigör PC-resurser med minimala konsekvenser för grafik.

Anisotropisk filtrering

När någon textur visas på skärmen som inte är i sin ursprungliga storlek, är det nödvändigt att infoga ytterligare pixlar i den eller, omvänt, ta bort de extra. Detta görs med hjälp av en teknik som kallas filtrering.

Bilinjär filtrering är den enklaste algoritmen och kräver mindre datorkraft, men den ger också det sämsta resultatet. Trilinear ger klarhet men genererar fortfarande artefakter. Anisotropisk filtrering anses vara den mest avancerade metoden som eliminerar märkbara förvrängningar på föremål som är starkt lutande i förhållande till kameran. Till skillnad från de två tidigare metoderna bekämpar den framgångsrikt aliaseffekten (när vissa delar av texturen är suddigare än andra och gränsen mellan dem blir tydligt synlig). När du använder bilinjär eller trilinjär filtrering, när avståndet ökar, blir texturen mer och mer suddig, medan anisotrop filtrering inte har denna nackdel.

Med tanke på mängden data som bearbetas (och det kan finnas många högupplösta 32-bitars texturer i en scen), är anisotropisk filtrering särskilt krävande för minnesbandbredd. Du kan minska trafiken främst på grund av texturkomprimering, som nu används överallt. Tidigare, när det praktiserades mer sällan, och videominnets bandbredd var mycket lägre, minskade anisotrop filtrering avsevärt antalet bildrutor. På moderna grafikkort har det nästan ingen effekt på fps.

Anisotropisk filtrering har bara en inställning - filterfaktor (2x, 4x, 8x, 16x). Ju högre den är, desto tydligare och mer naturlig ser texturerna ut. Vanligtvis, med ett högt värde, är små artefakter endast synliga på de yttersta pixlarna av lutande texturer. Värden på 4x och 8x är vanligtvis tillräckligt för att bli av med lejonparten av visuell distorsion. Intressant nog, när man går från 8x till 16x, blir prestandaträffen ganska liten, även i teorin, eftersom endast ett litet antal tidigare ofiltrerade pixlar behöver ytterligare bearbetning.

Shaders

Shaders är små program som kan utföra vissa manipulationer på en 3D-scen, som att ändra belysning, applicera texturer, lägga till efterbearbetning och andra effekter.

Shaders är indelade i tre typer: vertex (Vertex Shader) arbetar med koordinater, geometrisk (Geometry Shader) kan bearbeta inte bara enskilda hörn utan också hela geometriska figurer, som består av maximalt 6 hörn, pixel (Pixel Shader) arbetar med enskilda pixlar och deras parametrar.

Shaders används främst för att skapa nya effekter. Utan dem är uppsättningen av operationer som utvecklare kan använda i spel mycket begränsad. Med andra ord, tillägget av shaders gjorde det möjligt att få nya effekter som inte ingick i grafikkortet som standard.

Shaders arbetar väldigt produktivt parallellt, varför moderna grafikadaptrar har så många stream-processorer, som även kallas shaders. Till exempel, i GeForce GTX 580 finns det så många som 512 av dem.

Parallaxkartläggning

Parallaxmapping är en modifierad version av den välkända bumpmapping-tekniken som används för att embossa texturer. Parallaxmappning skapar inte 3D-objekt i ordets vanliga bemärkelse. Till exempel kommer ett golv eller en vägg i en spelscen att se grov ut samtidigt som den förblir helt platt. Lättnadseffekten här uppnås endast genom manipulationer med texturer.

Originalobjektet behöver inte vara platt. Metoden fungerar för olika spelobjekt dess användning är dock endast önskvärd i de fall då ythöjden ändras smidigt. Skarpa droppar bearbetas felaktigt och artefakter visas på objektet.

Parallaxmappning sparar avsevärt datorresurser för en dator, eftersom när man använder analoga objekt med en så detaljerad 3D-struktur, skulle prestandan hos videoadaptrar inte räcka till för att rendera scener i realtid.

Effekten appliceras oftast på stenbeläggningar, väggar, tegel och kakel.

Anti-aliasing

Före tillkomsten av DirectX 8 gjordes kantutjämning i spel med SuperSampling Anti-Aliasing (SSAA), även känd som Full-Scene Anti-Aliasing (FSAA). Dess användning ledde till en betydande minskning av prestanda, så med lanseringen av DX8 övergavs den omedelbart och ersattes med Multisample Anti-Aliasing (MSAA). Trots att denna metod gav sämre resultat var den mycket mer produktiv än sin föregångare. Sedan dess har mer avancerade algoritmer dykt upp, som CSAA.

Med tanke på att grafikkortens prestanda har ökat markant under de senaste åren har både AMD och NVIDIA återfört stöd för SSAA-teknik till sina acceleratorer. Det kommer dock inte att vara möjligt att använda det ens nu i moderna spel, eftersom antalet ramar/s kommer att vara mycket lågt. SSAA kommer endast att vara effektiv i projekt från tidigare år, eller i nuvarande, men med blygsamma inställningar för andra grafiska parametrar. AMD har implementerat SSAA-stöd endast för DX9-spel, men i NVIDIA fungerar SSAA även i DX10- och DX11-lägen.

Principen för utjämning är mycket enkel. Innan ramen visas på skärmen beräknas viss information inte i ursprunglig upplösning, utan ökad och en multipel av två. Sedan reduceras resultatet till önskad storlek, och då blir "stegen" längs föremålets kanter mindre märkbar. Ju högre originalbilden och utjämningsfaktorn (2x, 4x, 8x, 16x, 32x), desto färre steg blir det på modellerna. MSAA, till skillnad från FSAA, jämnar bara ut kanterna på objekt, vilket avsevärt sparar grafikkortresurser, men denna teknik kan lämna artefakter inuti polygoner.

Tidigare har Anti-Aliasing alltid minskat fps avsevärt i spel, men nu påverkar det antalet bildrutor något, och ibland inte alls.

tessellation

Med tessellation i en datormodell ökas antalet polygoner med ett godtyckligt antal gånger. För att göra detta är varje polygon uppdelad i flera nya, som är belägna ungefär likadana som den ursprungliga ytan. Denna metod gör det enkelt att öka detaljerna i enkla 3D-objekt. I det här fallet kommer dock belastningen på datorn också att öka, och i vissa fall kan även små artefakter inte uteslutas.

Vid första anblicken kan tessellation förväxlas med Parallaxmapping. Även om dessa är helt olika effekter, eftersom tessellation faktiskt ändrar den geometriska formen på objektet, och inte bara simulerar relief. Dessutom kan den användas för nästan alla objekt, medan användningen av Parallax-mappning är mycket begränsad.

Tessellation-tekniken har varit känd på film sedan 80-talet, men den har först nyligen fått stöd i spel, mer exakt efter att grafikacceleratorer äntligen nått den erforderliga prestandanivån vid vilken den kan framföras i realtid.

För att spelet ska kunna använda tessellation krävs ett grafikkort som stöder DirectX 11.

Vertikal synk

V-Sync är synkroniseringen av spelramar med monitorns vertikala uppdateringsfrekvens. Dess kärna ligger i det faktum att en helt beräknad spelram visas på skärmen i det ögonblick bilden uppdateras på den. Det är viktigt att nästa bildruta (om den redan är klar) också visas senast och tidigast förrän utgången från den föregående slutar och nästa börjar.

Om bildskärmens uppdateringsfrekvens är 60 Hz och grafikkortet lyckas rendera en 3D-scen med minst samma antal bildrutor, kommer varje bildskärmsuppdatering att visa en ny bildruta. Med andra ord, med ett intervall på 16,66 ms kommer användaren att se en komplett uppdatering av spelscenen på skärmen.

Det bör förstås att när vertikal synkronisering är aktiverad kan fps i spelet inte överstiga monitorns vertikala uppdateringsfrekvens. Om antalet ramar är lägre än detta värde (i vårt fall mindre än 60 Hz), är det för att undvika prestandaförluster nödvändigt att aktivera trippelbuffring, där ramar beräknas i förväg och lagras i tre separata buffertar , vilket gör att de kan skickas till skärmen oftare.

Huvuduppgiften med vertikal synkronisering är att eliminera effekten av en förskjuten ram som uppstår när den nedre delen av displayen är fylld med en ram, och den övre delen redan är fylld med en annan, förskjuten i förhållande till den föregående.

efterbehandling

Detta är det allmänna namnet på alla effekter som appliceras på en redan färdig bildruta av en helt renderad 3D-scen (med andra ord på en tvådimensionell bild) för att förbättra kvaliteten på den slutliga bilden. Efterbehandling använder pixelshaders och används i de fall där ytterligare effekter kräver fullständig information om hela scenen. Isolerat till enskilda 3D-objekt kan sådana tekniker inte tillämpas utan att artefakter uppträder i ramen.

Högt dynamiskt omfång (HDR)

En effekt som ofta används i spelscener med kontrasterande belysning. Om ett område på skärmen är mycket ljust och ett annat är mycket mörkt, förloras mycket av detaljerna i varje område och det ser monotont ut. HDR lägger till fler graderingar till ramen och låter dig detaljera scenen. För att använda den måste du vanligtvis arbeta med ett bredare utbud av nyanser än vad standard 24-bitars precision kan ge. Förberäkningar sker med ökad noggrannhet (64 eller 96 bitar), och först i slutskedet justeras bilden till 24 bitar.

HDR används ofta för att implementera effekten av att anpassa synen när hjälten i spel lämnar en mörk tunnel på en väl upplyst yta.

Blomma

Bloom används ofta i samband med HDR, och den har också en ganska nära släkting - Glow, varför dessa tre tekniker ofta blandas ihop.

Bloom simulerar effekten som kan ses när du tar mycket ljusa scener med konventionella kameror. I den resulterande bilden verkar det intensiva ljuset ta upp mer volym än det borde, och "klättrar" upp på föremål trots att det är bakom dem. När du använder Bloom kan ytterligare artefakter i form av färgade linjer dyka upp på kanterna på objekt.

Film korn

Korn är en artefakt som förekommer i analog TV med dålig signal, på gamla magnetiska videokassetter eller fotografier (särskilt digitala bilder tagna i svagt ljus). Spelare kopplar ofta bort denna effekt, eftersom det förstör bilden till viss del och inte förbättrar den. För att förstå detta kan man springa masseffekt i vart och ett av lägena. I vissa "skräckfilmer" till exempel Silent Hill, bruset på skärmen, tvärtom, lägger till atmosfär.

Rörelseoskärpa

Rörelseoskärpa - effekten av att bilden blir suddig när du flyttar kameran snabbt. Den kan med framgång användas när scenen ska ges mer dynamik och snabbhet, därför är den särskilt efterfrågad i racingspel. I shooters uppfattas användningen av oskärpa inte alltid entydigt. Korrekt tillämpning av Motion Blur kan lägga till filmisk kvalitet till det som händer på skärmen.

Effekten hjälper också till att dölja om det behövs. låg frekvensändra ramar och lägg till smidighet i spelet.

SSAO

Ambient occlusion är en teknik som används för att lägga till fotorealism till en scen genom att skapa mer trovärdig belysning av objekten i den, vilket tar hänsyn till närvaron av andra objekt i närheten med sina egna egenskaper för absorption och reflektion av ljus.

Screen Space Ambient Occlusion är en modifierad version av Ambient Occlusion och simulerar även indirekt belysning och skuggning. Uppkomsten av SSAO berodde på det faktum att på nuvarande nivå av GPU-prestanda kunde Ambient Occlusion inte användas för att rendera scener i realtid. För ökad prestanda i SSAO måste du betala med lägre kvalitet, men även det räcker för att förbättra bildens realism.

SSAO fungerar enligt ett förenklat schema, men det har många fördelar: metoden beror inte på scenens komplexitet, använder inte Bagge, kan fungera i dynamiska scener, kräver ingen förbearbetning av ramen och laddar bara grafikkortet utan att förbruka CPU-resurser.

Cel skuggning

Spel med effekten av Cel shading har gjorts sedan 2000, och först och främst dök de upp på konsoler. På PC blev denna teknik riktigt populär bara ett par år efter släppet av den sensationella shooter XIII. Med Cel-skuggning är varje ram nästan som en handritad teckning eller ett fragment från en barntecknad film.

Serier skapas i en liknande stil, så tekniken används ofta i spel relaterade till dem. Av de senaste kända utgåvorna kan vi namnge Borderlands shooter, där Cel shading är synlig för blotta ögat.

Teknikens funktioner är användningen av en begränsad uppsättning färger, såväl som frånvaron av jämna gradienter. Namnet på effekten kommer från ordet Cel (Celluloid), det vill säga ett genomskinligt material (film) som animerade filmer ritas på.

Skärpedjup

Skärpedjup är avståndet mellan den närmaste och bortre kanten av rymden, inom vilket alla objekt kommer att vara i fokus, medan resten av scenen kommer att vara suddig.

Till viss del kan skärpedjup observeras helt enkelt genom att fokusera på ett föremål som är nära framför ögonen. Allt bakom kommer att suddas ut. Motsatsen är också sant: om du fokuserar på avlägsna föremål kommer allt framför dem att visa sig vara flummigt.

Du kan se effekten av skärpedjup i hypertrofierad form på vissa fotografier. Det är denna grad av oskärpa som ofta försöker simuleras i 3D-scener.

I spel som använder skärpedjup har spelaren vanligtvis en starkare känsla av närvaro. När han till exempel tittar någonstans genom gräset eller buskarna ser han bara små fragment av scenen i fokus, vilket skapar en illusion av närvaro.

Prestandapåverkan

För att ta reda på hur införandet av vissa alternativ påverkar prestanda, använde vi Heaven DX11 Benchmark 2.5 spelbenchmark. Alla tester utfördes på ett Intel Core2 Duo e6300, GeForce GTX460-system på 1280x800 pixlar (förutom vertikal synk, där upplösningen var 1680x1050).

Som redan nämnts har anisotropisk filtrering nästan ingen effekt på antalet ramar. Skillnaden mellan inaktiverad anisotropi och 16x är bara 2 bildrutor, så vi rekommenderar att du alltid ställer in den till max.

Kantutjämning i Heaven Benchmark sänkte fps mer än vi förväntade oss, särskilt i det svåraste 8x-läget. Ändå, eftersom 2x är tillräckligt för en märkbar förbättring i bilden, rekommenderar vi dig att välja detta alternativ om det är obekvämt att spela på högre.

Tessellation, till skillnad från de tidigare parametrarna, kan få ett godtyckligt värde i varje enskilt spel. I Heaven Benchmark försämras bilden avsevärt utan den, och på maxnivån blir den tvärtom lite orealistisk. Därför bör mellanliggande värden ställas in - måttlig eller normal.

Mer än en hög upplösning så att fps inte begränsas av skärmens vertikala uppdateringshastighet. Som väntat låg antalet bildrutor under nästan hela testet med synkroniseringen påslagen helt klart runt 20 eller 30 bildrutor/s. Detta beror på det faktum att de visas samtidigt med skärmuppdateringen, och med en uppdateringshastighet på 60 Hz, kan detta inte göras med varje puls, utan endast med varannan (60/2 = 30 fps) eller tredje ( 60/3 = 20 fps). När V-Sync inaktiverades ökade antalet bildrutor, men karakteristiska artefakter dök upp på skärmen. Trippelbuffring hade ingen positiv effekt på scenens jämnhet. Kanske beror detta på det faktum att det i grafikkortets drivrutinsinställningar inte finns något alternativ för att tvinga avstängning av buffring, och den normala avaktiveringen ignoreras av riktmärket, och den använder fortfarande denna funktion.

Om Heaven Benchmark var ett spel, så vid maximala inställningar (1280×800; AA - 8x; AF - 16x; Tessellation Extreme) skulle det vara obekvämt att spela det, eftersom 24 bildrutor uppenbarligen inte räcker för detta. Med minimal kvalitetsförlust (1280×800; AA - 2x; AF - 16x, Tessellation Normal) kan mer acceptabla 45 fps uppnås.