Kakel rendering
Kaklad rendering är processen att dela upp en datorgrafikbild med ett vanligt rutnät i optiskt utrymme och rendera varje sektion av rutnätet, eller brickan , separat. Fördelen med denna design är att mängden minne och bandbredd minskar jämfört med renderingssystem för omedelbart läge som ritar hela ramen på en gång. Detta har gjort kakelrenderingssystem särskilt vanligt för handhållna enheter med låg effekt . Kaklad rendering är ibland känd som en "sortera mitten"-arkitektur, eftersom den utför sorteringen av geometrin i mitten av grafikpipelinen istället för nära slutet.
Grundläggande koncept
Att skapa en 3D-bild för visning består av en serie steg. Först laddas objekten som ska visas in i minnet från enskilda modeller . Systemet tillämpar sedan matematiska funktioner för att omvandla modellerna till ett gemensamt koordinatsystem, världsbilden . Från denna världsbild skapas en serie polygoner (vanligtvis trianglar) som approximerar de ursprungliga modellerna sett från en viss synvinkel, kameran . Därefter producerar ett kompositsystem en bild genom att rendera trianglarna och applicera texturer på utsidan. Texturer är små bilder som målas på trianglarna för att skapa realism. Den resulterande bilden kombineras sedan med olika specialeffekter och flyttas till en bildrutebuffert , vilken videohårdvara sedan skannar för att producera den visade bilden. Denna grundläggande konceptuella layout är känd som displaypipeline .
Vart och ett av dessa steg ökar mängden minne som behövs för att hålla den resulterande bilden. När den når slutet av pipelinen är bilderna så stora att typiska grafikkortsdesigner ofta använder specialiserat höghastighetsminne och en mycket snabb datorbuss för att tillhandahålla den erforderliga bandbredden för att flytta bilden in och ut ur de olika sub- komponenter i rörledningen. Den här typen av stöd är möjligt på dedikerade grafikkort, men när energi- och storleksbudgetar blir mer begränsade, blir det dyrt att tillhandahålla tillräckligt med bandbredd i designtermer.
Kakelrenderare tar itu med detta problem genom att dela upp bilden i sektioner som kallas brickor och rendera var och en separat. Detta minskar mängden minne som behövs under de mellanliggande stegen och mängden data som flyttas vid varje given tidpunkt. För att göra detta sorterar systemet trianglarna som utgör geometrin efter plats, vilket gör det möjligt att snabbt hitta vilka trianglar som överlappar brickgränserna. Den laddar sedan bara dessa trianglar i renderingspipelinen, utför de olika renderingsoperationerna i GPU:n och skickar resultatet till rambufferten . Mycket små brickor kan användas, 16×16 och 32×32 pixlar är populära brickstorlekar, vilket gör mängden minne och bandbredd som krävs i de interna stegen också liten. Och eftersom varje bricka är oberoende lämpar den sig naturligtvis för enkel parallellisering.
I en typisk kakelrenderare måste geometrin först omvandlas till skärmutrymme och tilldelas skärmutrymmesplattor. Detta kräver en del lagring för listorna med geometri för varje bricka. I tidiga kakelsystem utfördes detta av CPU , men all modern hårdvara innehåller hårdvara för att påskynda detta steg. Listan över geometri kan också sorteras fram och bak, vilket gör att GPU:n kan använda borttagning av dold yta för att undvika att bearbeta pixlar som är gömda bakom andra, vilket sparar minnesbandbredd för onödiga textursökningar.
Det finns två huvudsakliga nackdelar med det kaklade tillvägagångssättet. En är att vissa trianglar kan ritas flera gånger om de överlappar flera brickor. Detta innebär att den totala renderingstiden skulle vara högre än ett renderingssystem i omedelbart läge. Det finns också möjliga problem när brickorna måste sys ihop för att göra en komplett bild, men detta problem löstes för länge sedan [ citat behövs ] . Svårare att lösa är att vissa bildtekniker tillämpas på ramen som helhet, och dessa är svåra att implementera i en kaklad rendering där tanken är att inte behöva arbeta med hela ramen. Dessa avvägningar är välkända och av mindre betydelse för system där fördelarna är användbara; renderingssystem med kakel finns ofta i handhållna datorer.
Kaklad rendering ska inte förväxlas med sida vid sida/icke-linjär rambuffert -adressering, som gör att intilliggande pixlar också ligger intill i minnet. Dessa adresseringsscheman används av en mängd olika arkitekturer, inte bara renderare med kakel.
Tidigt arbete
Mycket av det tidiga arbetet med kakelrendering gjordes som en del av Pixel Planes 5-arkitekturen (1989).
Pixel Planes 5-projektet validerade den sida vid sida och uppfann många av de tekniker som nu betraktas som standard för kakelrenderare. Det är det verk som citeras mest av andra tidningar inom området.
Den sida vid sida var också känd tidigt i historien om mjukvarurendering. Implementeringar av Reyes-rendering delar ofta upp bilden i "kakelhinkar".
Kommersiella produkter – Desktop och konsol
Tidigt i utvecklingen av skrivbords-GPU:er utvecklade flera företag kaklade arkitekturer. Med tiden ersattes dessa till stor del av GPU:er i omedelbart läge med snabba anpassade externa minnessystem.
Viktiga exempel på detta är:
- PowerVR- renderingsarkitektur (1996): Rasterizern bestod av en 32×32-bricka i vilken polygoner rastrerades över bilden över flera pixlar parallellt . På tidiga PC- versioner utfördes plattsättning i bildskärmsdrivrutinen som kördes på CPU:n . I tillämpningen av Dreamcast- konsolen utfördes plattsättning av en hårdvara. Detta underlättade fördröjd rendering – endast de synliga pixlarna strukturmappades , vilket sparade skuggberäkningar och texturbandbredd .
- Microsoft Talisman (1996)
- Dreamcast (drivs av PowerVR-chipset) (1998)
- Gigapixel GP-1 (1999)
- Intel Larrabee GPU (2009) (avbruten)
- PS Vita (drivs av PowerVR-chipset) (2011)
- Nvidia GPU:er baserade på Maxwell-arkitekturen och senare arkitekturer (2014)
- AMD GPU: er baserade på Vega (GCN5) arkitektur och senare arkitekturer (2017)
- Intel Gen11 GPU och senare arkitekturer (2019)
Exempel på icke-kaklade arkitekturer som använder stora buffertar på chipet är:
- Xbox 360 (2005): grafikprocessorn innehåller ett inbyggt 10 MB eDRAM ; detta räcker inte för att hålla rastret för en hel 1280×720-bild med 4× multisample kantutjämning , så en plattsättningslösning överlagras när du kör i HD-upplösningar och 4× MSAA är aktiverat.
- Xbox One (2013): grafikprocessorn innehåller en inbäddad 32 MB eSRAM , som kan användas för att hålla hela eller delar av en bild. Det är inte en kaklad arkitektur, men är tillräckligt flexibel för att mjukvaruutvecklare kan emulera sida vid sida. [ misslyckad verifiering ]
Kommersiella produkter – inbäddade
På grund av den relativt låga externa minnesbandbredden och den blygsamma mängden on-chip-minne som krävs, är kakelrendering en populär teknik för inbyggda GPU:er. Aktuella exempel inkluderar:
Kakelbaserad omedelbart lägesrendering (TBIM):
- ARM Mali [ vilken? ] serie.
- Qualcomm Adreno (serie 300 och nyare kan också dynamiskt växla till omedelbar/direkt lägesrendering via FlexRender).
Kakelbaserad uppskjuten rendering (TBDR):
- Arm Mali [ vilken? ] serie.
- Imagination Technologies PowerVR 5/6/7-serien.
- Broadcom VideoCore IV -serien.
- Apple silikon GPU:er.
Vivante producerar mobila GPU:er som har tätt kopplat rambuffertminne (liknande Xbox 360 GPU som beskrivs ovan). Även om detta kan användas för att rendera delar av skärmen, betyder den stora storleken på de renderade regionerna att de vanligtvis inte beskrivs som att de använder en kakelbaserad arkitektur.
Se även
- Tessellation (datorgrafik)
- Texturatlas
- Scanline-rendering
- Kakelbaserat videospel
- Web Map Tile Service