Światło w świecie voxeli: prawdziwe światła czy flood fill?
Gracz stawia lampę świecącą w swojej bazie. Co dzieje się technicznie? To niewinne pytanie wywołało u nas fundamentalną decyzję – a odpowiedź to ładny przykład tego, że „nowocześniejsze” rozwiązanie nie zawsze jest lepsze.
Opcja A: prawdziwe światła Unity. Każdy świecący blok staje się punktowym źródłem światła, silnik wszystko liczy. Wygląda świetnie – ale się nie skaluje. W świecie voxelowym w zasięgu wzroku mogą być setki świecących bloków; światła punktowe w czasie rzeczywistym w takiej ilości zmuszają do pocenia się każdy GPU, tym bardziej w wersji przeglądarkowej.
Opcja B: światło flood fill. Klasyka gatunku: światło to wartość liczbowa na blok, która rozchodzi się od źródła i maleje z każdym krokiem. Mega tanie, dowolna liczba źródeł – ale wynik wygląda płasko, bo światło nie ma kierunku. Ściana obok lampy jest tak samo jasna jak powierzchnia pod nią.
Nasz wybór: flood fill z kierunkiem. Zostaliśmy przy podejściu flood fill, ale nauczyliśmy je informacji o kierunku: światło wie, z której strony nadchodzi, i powierzchnie są odpowiednio inaczej oświetlane. Wynik jest wypiekany w siatce chunka podczas meshowania – w czasie działania praktycznie nic nie kosztuje, a wygląda wyraźnie bardziej przestrzennie niż klasyczne światło blokowe.
Lekcję z tego niesiemy od tamtej pory wszędzie: najpierw zapytaj, jaki naprawdę jest problem gatunku (tu: bardzo wiele źródeł, statyczna geometria), potem wybierz technologię. Prawdziwe światła rozwiązywały problem, którego nie mieliśmy – i stworzyłyby taki, którego nie umiemy rozwiązać.
Komentarze