Zaczynam od GLSL i zaimplementowałem proste odroczone cieniowanie, które generuje bufor G z pozycjami, wartościami normalnymi i albedo.
Napisałem również prosty punktowy moduł cieniujący.
Teraz rysuję kulę dla światła punktowego i wyjście trafia do bufora oświetlenia.
Problem polega na tym, jak połączyć wyniki bufora oświetlenia podczas rysowania wielu świateł?
Np. Kiedy rysuję drugie światło do bufora światła za pomocą punktowego modułu cieniującego, jak dodać pierwsze światło do drugiego światła w buforze oświetlenia. Mam na myśli, że nie możesz czytać i zapisywać w tym samym buforze wyjściowym?
opengl
shaders
glsl
deferred-rendering
JBeurer
źródło
źródło
W przypadku mojego odroczonego mechanizmu renderującego agreguję wszystkie światła w jeden cel renderowania światła, korzystając z informacji z bufora g, a następnie próbkuję ten cel renderowania pod kątem intensywności światła podczas tworzenia końcowego obrazu backbuffera.
Zasadniczo przeglądam całą geometrię gry, przechodząc przez przepustkę geometrii, aby zbudować bufory G. Stamtąd podaję bufory g do mojego modułu cieniowania światła. Każde światło przebiega przez przełęcz za pomocą quada pełnoekranowego. W ten sposób mój moduł cieniujący pikseli może obliczyć natężenie światła dla wszystkich widocznych powierzchni z bufora g, a następnie dodać je do celu renderowania światła. Po prostu dodajesz intensywność światła dla każdego światła do bufora światła, ale upewnij się, że natężenie zostało ograniczone od 0 do 1.
Wszystko, co musisz zrobić, aby obsługiwać różne rodzaje świateł (punktowe, punktowe, równoległe), to uczynić światło bardziej odpornym, ewentualnie wykorzystując stały bufor do określenia, które procedury oświetleniowe należy wykonać.
źródło
Prawdopodobnie jest lepsza odpowiedź niż ta, ale wiem, że jeśli w swoim module cieniującym powtórzysz kod potrzebny do zrobienia drugiego światła, możesz następnie przetworzyć dwa światła na jednym obiekcie zamiast jednego. Wymaga to zrzucenia dużej ilości kodu dla drugiego światła i szwów trochę zbędnych, ale wiem, że to działa. Wierzę jednak, że jak ktoś ma nadzieję, że będzie dla ciebie wskazany, może być bardziej eleganckie rozwiązanie.
źródło