Uppskjuten belysning och skuggning

Deferred lighting and shading , deferred rendering ( engelska  deferred shading ) är en mjukvaruteknik (metod) inom tredimensionell datorgrafik som hanterar ljussättning och skuggning av en visuell scen. Som ett resultat av driften av den uppskjutna belysnings- och skuggningsalgoritmen delas beräkningsprocessen upp i mindre delar, som skrivs till det mellanliggande buffertminnet och kombineras sedan. Den största skillnaden mellan uppskjuten belysning och skuggning och standardbelysningsmetoder är att dessa metoder omedelbart skriver resultatet av skuggningen till färgrambufferten. Implementeringar i modern grafikbearbetningshårdvara tenderar att använda multipla render-mål (MRT ) för att undvika redundanta vertextransformationer .  Vanligtvis, när alla nödvändiga buffertar har byggts, läses de sedan (vanligtvis som en indatatextur) från en skuggalgoritm (som en ljusekvation) och kombineras för att skapa resultatet. I detta fall reduceras beräkningskomplexiteten och minnesbandbredden som krävs för att återge scenen till synliga delar, vilket reducerar komplexiteten hos den upplysta scenen.

Den främsta fördelen med uppskjuten rendering är kompatibilitet med "grov" och "tidig" Z-bufferttestning , andra fördelar har ännu inte undersökts tillräckligt. Dessa fördelar kan inkludera enklare hantering av komplexa ljusresurser, enkel hantering av andra komplexa shader-resurser och förenkling av mjukvarurenderingspipeline.

En av de viktigaste nackdelarna med den uppskjutna renderingstekniken är oförmågan att hantera transparens inom algoritmen, även om detta problem också är vanligt för Z-buffring; vägen ut ur detta problem är att fördröja och sortera renderingen av de transparenta delarna av scenen [1] . En annan lösning är att använda Direct3D 11/OpenGL 4.3 beräkningsskuggningar för att implementera Order-oberoende transparensalgoritm.

En annan ganska viktig nackdel med uppskjuten rendering är dess inkompatibilitet med kantutjämning . Eftersom belysningssteget är skilt från geometristeget leder inte hårdvarukantutjämning till korrekta resultat. Även om det första passet som används vid rendering av basegenskaper (diffus bearbetning, höjdkarta) kan använda kantutjämning, är kantutjämning inte tillämpligt på full belysning. En av de typiska teknikerna för att övervinna denna begränsning är metoden för kantdetektering ( en:edge detection ) av den slutliga bilden och sedan applicera oskärpa på kanterna (kanter) [2] . Denna nackdel var dock relevant för Direct3D 9. I senare versioner blev det möjligt att läsa och skriva individuella prover av MSAA-texturer (rendera mål - i Direct3D 10, djupbuffertar - i Direct3D 10.1) Detta gjorde det möjligt för utvecklare att implementera sina egna MSAA-algoritmer för uppskjuten belysning. Exempel på spel med uppskjuten belysning och MSAA-stöd är Battlefield 3, Crysis 3, Grand Theft Auto V.

Tekniken för uppskjuten rendering används i allt större utsträckning i datorspel, eftersom den tillåter ett obegränsat antal ljus och minskar komplexiteten i de nödvändiga shader-instruktionerna. I synnerhet "Advanced Technology Group", ett team av specialister från Sony Computer Entertainment , har forskat på detta område och hjälper utvecklare att integrera denna teknik i grafikmotorer . PhyreEngine , en gratis grafikmotor utvecklad av Sony Computer Entertainment, har stöd för uppskjuten belysning och skuggning. Exempel på spel som använder uppskjuten rendering och stöds av Sony Computer Entertainment är Killzone 2 av Guerrilla Games , LittleBigPlanet av Media Molecule och inFamous av Sucker Punch Productions . Uppskjutna spel som Sony inte har bidragit med till inkluderar STALKER- serien av GSC Game World , Dead Space av Electronic Arts [3] och Tabula Rasa av NCSoft [4] . Teknik för uppskjuten belysning och skuggning används i Cryteks CryEngine 3 -spelmotor .

Historik

Idén med uppskjuten belysning och skuggning introducerades ursprungligen av Michael Deering ( sv: Michael Deering ) och hans kollegor [5] i en artikel med titeln "The triangle processor and normal vector shader: a VLSI system for high performance graphics", publicerad 1988 [6] . Även om ordet "försenad" inte används någonstans i tidningen, har konceptet som presenteras där först nyligen funnit praktisk tillämpning i applikationer som datorspel [7] .

Anteckningar

  1. NVIDIA SDK 9.51 - Utvalda kodexempel . NVIDIA (17 januari 2007). Hämtad 28 mars 2007. Arkiverad från originalet 29 mars 2012.
  2. Handledning för uppskjuten skuggning (länk inte tillgänglig) . Påvliga katolska universitetet i Rio de Janeiro. Hämtad 14 februari 2008. Arkiverad från originalet 29 mars 2012. 
  3. Dead Space av Electronic Arts . NVIDIA. Hämtad 14 februari 2008. Arkiverad från originalet 29 mars 2012.
  4. Uppskjuten skuggning i Tabula Rasa (nedlänk) . NVIDIA. Hämtad 14 februari 2008. Arkiverad från originalet 29 mars 2012. 
  5. Deering, Michael; Stephanie Winner, Bic Schediwy, Chris Duffy, Neil Hunt. Triangelprocessorn och normal vektorskuggning: ett VLSI-system för högpresterande grafik  //  ACM SIGGRAPH Computer Graphics: journal. — ACM Tryck. — Vol. 22 , nr. 4 . - S. 21-30 .
  6. Uppskjuten skuggning (PDF). NVIDIA. Hämtad 28 mars 2007. Arkiverad från originalet 29 mars 2012.
  7. Klint, Josh. Uppskjuten rendering i Leadwerks Engine . — Leadwerks.

Länkar