Iluminare și umbrire amânate , randarea amânată ( în engleză deferred shading ) este o tehnică (metodă) software în grafica computerizată tridimensională care se ocupă de iluminarea și umbrirea unei scene vizuale. Ca rezultat al funcționării algoritmului de iluminare și umbrire amânată, procesul de calcul este împărțit în părți mai mici, care sunt scrise în memoria tampon intermediară și apoi combinate. Principala diferență între iluminarea amânată și umbrirea și metodele standard de iluminare este că aceste metode scriu imediat rezultatul shader -ului în framebuffer-ul de culoare. Implementările în hardware-ul modern de procesare grafică tind să folosească mai multe ținte de randare (MRT ) pentru a evita transformările redundante ale nodurilor . De obicei, odată ce au fost construite toate bufferele necesare, acestea sunt apoi citite (de obicei ca o textură de intrare) dintr-un algoritm de umbrire (cum ar fi o ecuație de iluminare) și combinate pentru a crea rezultatul. În acest caz, complexitatea de calcul și lățimea de bandă a memoriei necesare pentru a reda scena sunt reduse la porțiuni vizibile, reducând astfel complexitatea scenei iluminate.
Beneficiul principal al redării amânate este compatibilitatea cu testarea Z-tampon „grosieră” și „timpurie” , alte beneficii nu au fost încă explorate în mod adecvat. Aceste beneficii pot include gestionarea mai ușoară a resurselor complexe de iluminat, ușurința în gestionarea altor resurse complexe de umbrire și simplificarea conductei de redare a software-ului.
Unul dintre dezavantajele cheie ale tehnicii de randare amânată este incapacitatea de a gestiona transparența în cadrul algoritmului, deși această problemă este comună și pentru Z-buffering; calea de ieșire din această problemă este amânarea și sortarea redării părților transparente ale scenei [1] . O altă soluție este utilizarea shader-urilor de calcul Direct3D 11/OpenGL 4.3 pentru a implementa algoritmul de transparență independent de ordine.
Un alt dezavantaj destul de important al redării amânate este incompatibilitatea acestuia cu anti- aliasing . Deoarece etapa de iluminare este separată de etapa de geometrie, anti-aliasingul hardware nu duce la rezultate corecte. Deși prima trecere utilizată la redarea proprietăților de bază (procesare difuză, hărți de înălțime) poate folosi anti-aliasing, anti-aliasing-ul nu este aplicabil la iluminarea completă. Una dintre tehnicile tipice pentru a depăși această limitare este metoda de detectare a marginilor ( en:edge detection ) a imaginii finale și apoi aplicarea neclarității marginilor (bordurilor) [2] . Cu toate acestea, acest dezavantaj a fost relevant pentru Direct3D 9. În versiunile ulterioare, a devenit posibil să se citească și să scrie mostre individuale de texturi MSAA (ținte de randare - în Direct3D 10, tampon de adâncime - în Direct3D 10.1) Acest lucru a permis dezvoltatorilor să-și implementeze proprii algoritmi MSAA pentru iluminare amânată. Exemple de jocuri cu iluminare amânată și suport MSAA sunt Battlefield 3, Crysis 3, Grand Theft Auto V.
Tehnica de randare amânată este folosită din ce în ce mai mult în jocurile pe calculator, deoarece permite un număr nelimitat de lumini și reduce complexitatea instrucțiunilor de shader necesare. În special, „Advanced Technology Group”, o echipă de specialiști de la Sony Computer Entertainment , a cercetat acest domeniu și îi ajută pe dezvoltatori să integreze această tehnologie în motoarele grafice . PhyreEngine , un motor grafic gratuit dezvoltat de Sony Computer Entertainment, are suport pentru iluminare și umbrire amânate. Exemple de jocuri care utilizează randarea amânată și acceptate de Sony Computer Entertainment sunt Killzone 2 de Guerrilla Games , LittleBigPlanet de Media Molecule și inFamous de Sucker Punch Productions . Jocuri cu randare amânată la care Sony nu a contribuit pentru a include seria STALKER de GSC Game World , Dead Space de Electronic Arts [3] și Tabula Rasa de NCSoft [4] . Tehnologia de iluminare și umbrire amânată este utilizată în motorul de joc CryEngine 3 al Crytek .
Ideea de iluminare și umbrire amânată a fost introdusă inițial de Michael Deering ( en: Michael Deering ) și colegii săi [5] într-o lucrare intitulată „The triangle processor and normal vector shader: a VLSI system for high performance graphics”, publicată. în 1988 [6 ] . Deși cuvântul „întârziat” nu este folosit nicăieri în lucrare, conceptul prezentat acolo și-a găsit abia recent aplicare practică în aplicații precum jocurile pe calculator [7] .