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.

codymanix
źródło
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

akaltar
źródło