Szybkie oświetlenie z wieloma światłami


10

Jak mogę wdrożyć szybkie oświetlenie z wieloma światłami?

Nie chcę ograniczać gracza, może on umieścić na poziomie nieograniczoną liczbę i ewentualnie nakładające się (punktowe) światła.

Problem polega na tym, że shadery zawierające dynamiczne pętle, które byłyby konieczne do obliczenia oświetlenia, są zwykle bardzo wolne.

Pomyślałem, że jeśli w czasie kompilacji byłoby możliwe skompilowanie modułu cieniującego n razy, gdzie n jest liczbą świateł. Jeśli liczba n jest znana w czasie kompilacji, pętle można rozwinąć automatycznie. Czy można wygenerować n wersji tego samego modułu cieniującego z inną liczbą świateł?

W czasie wykonywania mogłem wtedy zdecydować, którego modułu cieniującego użyć dla której części poziomu.


Jeśli światła są dodawane dynamicznie przez gracza, to w jaki sposób moduł cieniujący „w czasie kompilacji” może być poprawną odpowiedzią?
— Seth Battin

Jak napisałem, kompilator może generować shadery dla świateł 1,2,3, .. iw czasie wykonywania mogłem zdecydować, który z nich użyć dla której części poziomu
— codymanix

shadery czasu kompilacji muszą wiedzieć, gdzie zostaną umieszczone światła, jakakolwiek ich dynamika zrujnuje
— maniak zapadkowy

tylko liczba świateł powinna być dynamiczna. pozycje zostaną podane jako parametr.
— codymanix

1
Wygląda na to, że masz odpowiedź. Znasz maksymalną liczbę świateł i zakres możliwych pozycji.
— ashes999

Odpowiedzi:


8

Uważam, że to, czego szukasz, nazywa się odroczonym renderowaniem. Jest to technika renderowania, która bardzo dobrze skaluje się z dużą ilością światła, tak dobrze, że może być stosowana do dynamicznego pośredniego oświetlenia. To oznacza tysiące świateł na ekranie.

Jest to w zasadzie technika, w której najpierw renderujesz wszystkie dane geometrii (pozycja, normalna, głębokość) w pośrednim buforze pikseli (zwanym Buforem G.). Następnie w drugim przejściu renderujesz lekki kształt wraz z jego parametrami. Moduł cieniujący drugiego przejścia pobiera informacje z bufora G, stosuje obliczenia światła, a następnie łączy je z końcowym obrazem.

Szczegóły dotyczące implementacji można znaleźć tutaj

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.