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.
Odpowiedzi:
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
źródło