Renderowanie w przód jest procesem obliczania wartości promieniowania dla fragmentu powierzchni bezpośrednio z geometrii wejściowej i informacji o oświetleniu. Odroczone renderowanie dzieli ten proces na dwa etapy: najpierw tworzy bufor przestrzeni ekranowej zawierający właściwości materiału (bufor geometrii lub bufor G) zbudowany przez rasteryzację geometrii wejściowej, a drugi tworzy wartość promienia dla każdego piksela przez połączenie G- bufor z informacjami o oświetleniu.
Odroczone renderowanie jest często przedstawiane jako optymalizacja renderowania do przodu. Jednym z wyjaśnień jest to, że oświetlenie jest dość drogie, a jeśli masz jakiś overdraw, to oświetlasz piksele, które nigdy nie będą widoczne na ekranie, podczas gdy jeśli przechowujesz właściwości materiału w buforze G, a następnie światło, to oświetlasz tylko piksel, który będzie faktycznie pojawiają się na ekranie. Czy jest to faktycznie zaleta odroczenia, biorąc pod uwagę, że można również wykonać wstępne przejście do głębokości, a następnie wykonać przejście do renderowania do przodu z testem głębokości ustawionym na D3D11_COMPARISON_EQUAL
lub GL_EQUAL
równoważnym?
Odroczone renderowanie ma również potencjał lepszego planowania na GPU. Rozdzielenie jednego dużego frontu osnowy / fali na falę o mniejszej geometrii, a następnie mniejsze fronty świetlne później poprawia zajętość (więcej frontu fal w locie jednocześnie). Ale kończy się to również na znacznie większym wykorzystaniu przepustowości (zapisywanie dużej liczby kanałów do bufora G, a następnie odczytywanie ich z powrotem podczas oświetlenia). Oczywiście szczegóły tutaj zależą w dużej mierze od twojego procesora graficznego, ale jakie są ogólne zasady?
Czy istnieją inne praktyczne rozważania dotyczące wydajności przy podejmowaniu decyzji o renderowaniu do przodu i odroczonym? (Załóżmy, że w razie potrzeby możemy użyć wariantów każdej techniki: tzn. Możemy również porównać kafelki do przodu z kafelkami odroczonymi).
źródło