Oświetlenie w świecie Minecraftian

10

Minecraft to gra, która w dużej mierze opiera się na mapie wysokości i wykorzystuje tę mapę heigtmap do zalania świata światłem. Z mojego zrozumienia, najwyższym punktem na mapie wysokości jest koniec obszaru wpływającego na światło słoneczne. Wszystko powyżej, co jest oświetlone światłem słonecznym, wszystko poniżej, na co wpływa tylko światło w pobliżu w promieniu 8 bloków.

Jeśli więc masz pływającą wyspę na szczycie swojego świata, wszystko pod nią będzie widziane zasadniczo jako jaskinia. Kiedy dwa światła wpływają na ten sam punkt, światło jaśniejsze wygrywa (nie jest to pewne).

Tak czy inaczej, istnieje kilka problemów z modelem oświetlenia Minecrafta: po pierwsze, jeśli twój świat nie ma mapy wysokości, trudniej jest ustalić, co dokładnie ma emitować światło słoneczne, a co nie. Prostym sposobem byłoby założenie, że świat jest (w moim przypadku) pływającą skałą, a następnie przemierzanie każdej osi z obu kierunków i ustalenie, gdzie skała się zaczyna i kończy. Ale to nie eliminuje całkowicie problemu, ponieważ wgniecenia w skale nie powinny znajdować się w ciemności.

Sam Minecraft będzie buforował informacje świetlne w swoich częściach wraz z informacjami o materiale bloku. Zatem tylko w przypadku modyfikacji świata oświetlenie musi zostać zaktualizowane. Niestety proces ten jest wciąż dość powolny w przypadku aktualizacji, a przy szybkich zmianach oświetlenia widać opóźnienie oświetlenia. Jest to szczególnie ważne, jeśli zmienia się wiele bloków (TNT, zachód itp.) I nie używasz najszybszego komputera (lub Java na Macu).

Z mojego wciąż ograniczonego rozumienia oświetlenia grafiki 3D świat taki jak Minecraft nie powinien być największym problemem. Jak poradziłbyś sobie z tym problemem?

Myślę, że podstawowe wymagania dotyczące oświetlenia w świecie wokseli byłyby

  1. aktualizuj wystarczająco szybko, aby mogło się to zdarzyć w jednej ramce. Można zrobić oświetlenie w urządzeniu graficznym i pobrać zmienione informacje o świetle do głównej pamięci RAM.
  2. informacje o świetle muszą być szybko dostępne dla głównej logiki gry, więc nie w całości oparte na urządzeniu graficznym: rozumowanie: światło wpływa na wzrost trawy, spawnowanie potworów itp.
  3. lekkie aktualizacje musiałyby być lokalne dla fragmentu lub mieć inne ograniczenia, aby nie trzeba było ponownie rozpalać całego świata, który może być bardzo duży.

Główną ideą byłoby szybkie aktualizowanie światła, niekoniecznie piękniejsze. W celu ogólnej poprawy wydajności renderowania światła można z łatwością dodać SSAO oprócz tego, co powinno dać o wiele ładniejszy świat.

Armin Ronacher
źródło

Odpowiedzi:

7

Oświetlenie w Minecrafcie jest obliczane asynchronicznie i wypalane w geometrii. Nie odbywa się to w czasie rzeczywistym.

Każdy woksel przechowuje oświetlenie dla tego woksela, prawdopodobnie jako pojedynczy bajt (lub 2, wycięcie wykorzystuje podejście warstwowe, aby umożliwić cykle dzienne i nocne). Istnieje tylko 16 poziomów światła. Aby rozjaśnić świat, Minecraft wykonuje 2 przejścia. Jeden dla światła słonecznego, a drugi dla rozprzestrzeniania lub zalewania światła jaskiniami i tym podobne. Oświetlenie jest zlokalizowane, ponieważ każde źródło światła może rozprzestrzeniać swoje światło maksymalnie w odległości 16 bloków. Woda i lawa działają prawie w ten sam sposób.

Więcej informacji jest dostępnych na jego blogu: http://notch.tumblr.com/post/434902871/per-request-this-is-how-the-new-lighting-will-work

zfedoran
źródło
Wiem. Myślę, że napisałem to powyżej (minus jasność 4-bitowa rozdzielczość).
Armin Ronacher
1

Czy nie można użyć renderowania GPU do tekstury i podwójnego buforowania wyników, aby zawsze mieć dostępne informacje o oświetleniu do odczytu każdej klatki?

To, jak uporządkujesz te dane dotyczące oświetlenia, zależy wyłącznie od ciebie, ale nie rozumiem, dlaczego nie powinna to być pierwsza opcja badania, jeśli wszystko, co chcesz zrobić, to poprawić szybkość algorytmu oświetlenia…?


źródło
Dokładnie to, o czym myślałem. Prawie wszystkie procesory graficzne, w przeciwieństwie do większości procesorów, są zaprojektowane do tego rodzaju masywnych równoległych ćwiczeń obliczeniowych.
Grant Peters,
1

Ludzie renderujący w czasie rzeczywistym wydają się mieć romans z Minecraft. Był komentarz dotyczący tego, jak jeszcze nie zorientowali się w oświetleniu .. ale możesz chcieć być na bieżąco z dalszymi zmianami / linkami.

http://www.realtimerendering.com/blog/?s=minecraft

Oolong Addict
źródło