SSAO ( în engleză screen space ambiental occlusion - obstrucția luminii ambientale în spațiul ecranului ) este o tehnică (metodă) software în grafica tridimensională pe computer , care este o imitație aproximativă a iluminării globale și este o versiune modificată și îmbunătățită a tehnicii de ocluzie ambientală . . Algoritmul SSAO funcționează în timp real și simulează iluminarea indirectă difuză și întunecarea corespunzătoare într-un spațiu virtual 3D.
SSAO a fost dezvoltat de departamentul de cercetare și dezvoltare al companiei germane Crytek în timp ce dezvolta componentele grafice ale motorului de joc CryEngine 2 . [1] Crysis , primul joc CryEngine 2 dezvoltat de Crytek și lansat în toamna anului 2007, a fost primul care a folosit SSAO. Mai târziu, acest algoritm și modificările sale au fost folosite în multe motoare de joc, inclusiv Leadwerks Engine , Dagor Engine , Unreal Engine , Unity , X-Ray , Glacier 2 și altele.
Algoritmul SSAO rulează pe procesorul grafic al plăcii video și este implementat ca un pixel shader care analizează tamponul de adâncime ( Z-buffer ) al scenei, care este stocat în textură .
Când rulează algoritmul de ocluzie ambientală, pixel shader eșantionează valoarea adâncimii pentru fiecare pixel de pe ecran în jurul pixelului curent și încearcă să calculeze numărul de ocluzii din fiecare dintre punctele selectate. În cea mai simplă implementare, factorul de ocluzie depinde doar de diferența de adâncime dintre punctul selectat și punctul curent. Fără soluții și algoritmi avansati suplimentari, această soluție frontală ar necesita aproximativ 200 de citiri de texturi per pixel pentru o calitate vizuală bună. Acest număr nu este acceptabil pentru redarea în timp real pe GPU-urile moderne.
Algoritmul SSAO își propune să simplifice complexitatea de calcul a algoritmului de ocluzie ambientală și să îl facă potrivit pentru funcționarea în timp real pe GPU-uri. Cu toate acestea, calitatea imaginii rezultate în SSAO este mai proastă decât în ocluzia ambientală originală, deoarece SSAO utilizează tehnici de randare de aproximare (aproximare).
Pentru a crea o ocluzie ambientală a spațiului ecranului, trebuie să aveți două texturi de scenă:
Apoi se iau Harta de poziție și Harta normală a fiecărui texel de pe ecran și se procesează texelii învecinați. În raport cu pozițiile texelilor vecini cu cel în curs de procesare, i se atribuie un anumit nivel de „umbrire”.
Pentru rezultate de înaltă calitate, cu mult mai puține citiri ale texturii decât ocluzia ambientală, SSAO utilizează eșantionarea împreună cu un nucleu rotit aleatoriu. Orientarea nucleului se repetă la fiecare N pixeli ai ecranului pentru a avea doar distorsiuni de frecvență înaltă în imaginea finală. La final, această distorsiune de înaltă frecvență este eliminată de numărul NxN de treceri post-procesor, estompând imaginea ( English Blur ). Aceasta ia în considerare adâncimea neregulilor, folosind metode precum compararea normalelor și adâncimii adiacente. Această soluție permite ca numărul de mostre de adâncime per pixel să fie redus la aproximativ 16 sau mai puțin, oferind în același timp un rezultat de înaltă calitate și permițând ca SSAO să fie utilizat în aplicații în timp real, cum ar fi jocurile pe computer.
În comparație cu alți algoritmi de model de ocluzie ambientală, SSAO are următoarele avantaje:
Pe lângă avantajele algoritmului SSAO, există și dezavantaje: