Oświetlenie w grach mobilnych dzięki Unity

Światło to jeden z najważniejszych aspektów gry. Może określać nastrój, prowadzić gracza, rozpoznawać zagrożenia lub cele. Światło może wpływać na wygląd gry. Na przykład dobre oświetlenie może pogorszyć słaby model w grze, a złe oświetlenie może pogorszyć jego wygląd.

Ten przewodnik zawiera informacje, które pomogą Ci poprawić oświetlenie w grze mobilnej. To, jak wybierzesz oświetlenie, wpływa na skuteczność gry mobilnej. Ważne jest, by używać efektywnego oświetlenia, aby gra działała płynnie.

Część tego artykułu została przygotowana na podstawie pracy współtworzonej przez Arm Limited.

Opcje potoku renderowania

Starszy potok renderowania w Unity zawiera te ścieżki renderowania:

  • Renderowanie do przodu
  • Odroczone cieniowanie

Renderowanie do przodu

Przy włączonym renderowaniu źródła światła w czasie rzeczywistym są bardzo drogie. Jeśli zmniejszysz liczbę świateł na piksel, możesz zrekompensować ten koszt.

Odroczone cieniowanie

Odroczone cieniowanie wymaga obsługi GPU. Na zgodnym sprzęcie odroczone cieniowanie może powodować wyrenderowanie dużej liczby świateł w czasie rzeczywistym o wysokiej jakości oświetlenia. Odroczone cieniowanie nie działa dobrze na mobilnych GPU, ponieważ mają one mniejszą przepustowość.

Przy tworzeniu tytułu na urządzenia mobilne ważne jest, aby gra działała płynnie na jak największej liczbie urządzeń.

Uniwersalny potok renderowania

W Unity powstał uniwersalny potok renderowania (URP). Zdecydowanie zalecamy korzystanie z URP w grach mobilnych.

Tryby jasne

W zależności od tego, jak światło porusza się lub jest używane w scenie, używane są różne tryby oświetlenia. Typy trybów jasnym mają różne właściwości wydajności. Decydując się na oświetlenie, weź pod uwagę te kwestie:

  • W przypadku oświetlenia statycznego użyj wartości wypiekane. Najlepiej sprawdza się to w przypadku obiektów, które nie zmieniają oświetlenia podczas działania. Światło do pieczenia to proces wstępnego obliczania i przechowywania danych o świetle na mapach tekstur zwanych mapami świateł.
    • Wypalonego oświetlenia nie można zmienić w czasie działania. Światło i cienie na mapie świetlnej są statyczne. Całe oświetlenie zostało wstępnie przetworzone w Unity, dlatego żadne obliczenia oświetlenia w czasie działania nie wpływają na wydajność.
    • Nie można tworzyć dynamicznych cieni przy palonym świetle. Wygląda to dziwnie w przypadku obiektów dynamicznych.
  • Użyj opcji Mieszana w przypadku nieruchomych świateł, których zamierzasz wchodzić w interakcję z ruchomymi obiektami. Na przykład pochodnia, która rzuca światło na gracza i generuje cień, gdy się on porusza.
    • Mieszane oświetlenie tworzy dynamiczne bezpośrednie światło i cienie.
    • Możesz uwzględnić mieszane oświetlenie w obliczeniach mapy świateł w przypadku obiektów statycznych.
    • Możesz zmienić intensywność w czasie działania. Zaktualizowano tylko światło bezpośrednie.
    • Drogo.
  • W przypadku dynamicznych lub ruchomych świateł, takich jak światła rzucane z ziemi i eksplodujące, używaj w czasie rzeczywistym.
    • Dynamiczne właściwości światła i cienia można zmieniać w czasie działania.
    • Światła wyświetlane w czasie rzeczywistym nie są wbudowane w mapy świateł.
    • Bardzo drogo.

Więcej informacji znajdziesz w artykule o potoku Lighting Pipeline Unity.

W miarę możliwości używaj światła statycznego i unikaj dynamicznego oświetlenia

Dynamiczne, czyli w czasie rzeczywistym, oświetlenie jest obliczane i aktualizowane w przypadku każdej klatki. To świetne rozwiązanie, jeśli chcesz poruszać obiekty, wywoływać interaktywność i wywoływać emocje.

Statyczne informacje o świetle są natomiast zapisywane w mapach świateł. Wykorzystanie tekstury mapy Lightmap umożliwia obiektowi uniknięcie kosztownych obliczeń na wierzchołki lub piksele. Koszt renderowania tekstury mapy Lightmap jest zawsze znacznie niższy niż oświetlenie dynamiczne. Zalecamy, aby najpierw wdrożyć pieczone oświetlenie w grze mobilnej.

Wypieki z mapą Lightmap

Wstępne obliczanie efektów światła nazywa się wypiekaniem Lightmap. Efekt światła jest przechowywany w osobnej teksturze nazywanej mapą świateł. Można jej używać do zwiększania wyglądu obiektów. Wypiekanie mapy świateł wystarczy tylko raz na wystąpienie sceny. Jeśli zmienisz geometrię sceny lub parametry wypalonych świateł, trzeba będzie ponownie wypalić mapy świateł. Nie wiąże się to z żadnymi dodatkowymi kosztami wydajności w czasie działania. To najlepsze pierwsze podejście do oświetlenia platformy mobilnej.

Dynamiczne ani poruszające się elementy sceny nie mają wpływu na palone światło. Wypalone oświetlenie nie uwzględnia wypalonego oświetlenia globalnego w przypadku wszystkich elementów statycznych. Oznacza to, że obliczenia mapy świetlnej obejmują światło pośrednie, które odbija się od innych obiektów statycznych, a także pieczone światło, które pada bezpośrednio na obiekt.

Rysunek 1. Profesjonalna konfiguracja oświetlenia użyta w prezentacji technicznej Armies.

Aby upiec lampki, wykonaj te 3 kroki.

Krok 1. Ustaw światło na Mieszane lub Wypiekane

Ustaw Tryb światła na Mieszany lub Wypiekany. W przypadku tytułów na urządzenia mobilne najlepiej jest używać pieczonych świateł, a nie mieszanych. Najtańszy sposób renderowania to najtańszy sposób.

Rysunek 2. Ustawienie Trybu światła w Unity.

Krok 2. Ustaw obiekty jako statyczne

Wszystkie obiekty, na które mają wpływ pieczone światła, ustaw jako Statyczne. Istnieje wiele optymalizacji obiektu oznaczonego jako statyczny, ale zwykle najlepiej jest wybrać Wszystko z listy Statyczny. Gdy obiekt jest oznaczony jako Statyczny, Unity wie, że należy go uwzględnić w lekkim pieczeniu.

Rysunek 3. Przykładowe menu statyczne.

Krok 3. Pieczenie świateł

Możesz wybrać oświetlenie z menu Oświetlenie, które jest dostępne po kliknięciu Okno > Renderowanie > Ustawienia oświetlenia.

Gdy piec oświetlenie, zapisywane dane zależą od sceny, która była aktywna w momencie rozpoczęcia pieczenia. Zostanie wygenerowany folder o tej samej nazwie co utworzona scena. W tym folderze są przechowywane wszystkie komponenty danych dotyczących oświetlenia. Jeśli projekt wczytuje wiele scen jednocześnie, musisz podpalić oświetlenie dla każdej z nich. Jeśli dostosujesz oświetlenie, musisz ponownie wypalić światła.

Rysunek 4. Przykład pieczonych map świetlnych.

Optymalizuj mapy świetlne

Po ustawieniu świateł do wypalenia sprawdź, czy upieczone mapy są zoptymalizowane. Mapy świateł mają różne rozmiary w zależności od ustawień po pieczeniu. Wykorzystanie pamięci na urządzeniach mobilnych powinno być ograniczone, więc monitoruj rozmiar mapy lekkiej.

W poniższym przykładzie z wersji demonstracyjnej Armies znajduje się 7 map świetlnych o wymiarach 1024 x 1024 piksele. W podglądzie mapy możesz zobaczyć siatki rozmieszczone na mapie świateł. Wybrane sieci typu mesh są wyróżnione.

Rysunek 5. To jest przykład mapy świateł. Niebieskie sekcje są zaznaczone jako siatki.

W ustawieniach mapowania oświetlenia jest wiele ustawień, w tym rozmiar map, które określają, ile pamięci i miejsca zużywa każda mapa. W sekcjach poniżej opisujemy kilka ważnych ustawień.

Twórcy map świateł

W Unity dostępne są 3 metody wypalania oświetlenia w scenie:

  • Enlighten: funkcja obsługiwana tylko do czasu wprowadzenia obsługi długoterminowej (LTS) w 2020 roku. Nie używaj tej funkcji w nowych projektach.
  • Procesor progresywny: oszczędza dużo czasu, ponieważ stopniowo tworzy proste mapy. Jeśli wybierzesz Nadaj priorytet widokowi, obszary w widoku sceny mają wyższy priorytet. Może to skrócić czas potrzebnego na skonfigurowanie oświetlenia.
  • Progresywne GPU: działa tak samo jak procesor progresywny, ale zamiast niego generuje mapę świateł dla GPU. Na obsługiwanym sprzęcie ta metoda może znacznie skrócić czas pieczenia w porównaniu do używania procesora. Aby można było skonfigurować progresywne GPU, trzeba spełnić dodatkowe wymagania. Więcej informacji o tych wymaganiach znajdziesz na stronie Progresywne mapowanie świateł GPU.

Rysunek 6. W ustawieniach Lightmapper możesz zmienić metodę pieczenia sceny.

Teksele

teksel, czyli piksel tekstury, to pojedynczy piksel na mapie tekstury. Teksas przechowuje na mapie świateł informacje o każdym punkcie świetlnym, który pada na obiekt. Im więcej teksów zużywanych na jednostkę przestrzeni, ma wpływ na jakość oświetlenia, czas przetwarzania pieczenia, koszty miejsca na dysku i koszt VRAM map świetlnych.

Aby zmniejszyć ilość potrzebnych danych mapy świetlnej, w ustawieniach Lightmapping określ liczbę teksów na jednostkę pieczenia.

Rysunek 7. Dostępne ustawienia map świetlnych.

W sekcji Ustawienia Lightmapping parametr Rozdzielczość mapy światłem określa liczbę pikseli używanych w jednostce w mapie świateł. Poniżej znajduje się przykład sześcianu z różnymi ustawieniami rozdzielczości lightbox. Możesz zobaczyć, jak wyższa rozdzielczość szybko zwiększa potrzebne nakłady pracy.

Rysunek 8. Pierwsza kostka ma rozdzielczość lightbox równą 1. Druga kostka ma rozdzielczość Lightmap równą 2. Trzecia kostka ma rozdzielczość Lightmap równą 5.

Aby zobaczyć, jak teksle są rozmieszczone w scenie, w widoku sceny wybierz listę Tryb rysowania, a potem Wypiekana mapa świetlna.

Wypiekane obiekty są zasłonięte nakładką w szachownicę. Wzór w szachownicę pokazuje rozkład teksów podczas pieczenia światła.

W poniższym przykładzie zmniejszenie rozdzielczości lightbox z 15 do 12 w wersji demonstracyjnej Armies zmniejsza liczbę potrzebnych map świetlnych z 7 do 4.

Rysunek 9. Wersja demonstracyjna gry Armies z rozdzielczością Lightmap równą 12.

Użycie tekseli

Chociaż możesz ustawić liczbę teksów na jednostkę w całej scenie, niektóre obiekty nie potrzebują ich tak wielu.

Unity pozwala kontrolować liczbę teksów używanych przez każdy obiekt. W sekcji Inspektor > Mechanizm renderowania siatki dla obiektu wartość parametru Scale In Lightmap określa liczbę teksów używanych przez obiekt w mapie świateł.

W poniższym przykładzie kostka po lewej stronie ma 5 teksów z informacjami na jednostkę pieczenia. W polu po prawej stronie wartość opcji Scale In Lightmap jest ustawiona na 0,5. To ustawienie skaluje teksle światła do 2,5, co wymaga mniej miejsca na mapie światła niż pole po lewej stronie.

Rysunek 10. Dwie sześciany o różnej rozdzielczości mapy świetlnej.

Rysunek 11. Możesz zmienić ustawienie Skaluj w Lightmap, aby obiekt miał mniej plików tekstowych.

Staraj się unikać wydatków na te polecenia:

  • powierzchnie i obiekty, których gracz nie widzi; Zapobiega to marnowaniu pamięci w mapach lightbox, gdy brakuje informacji, których nie ma na ekranie.
  • Powierzchnie, na których występują niewielkie zmiany oświetlenia. Chodzi np. o obiekty znajdujące się w cieniu lub dotknięte przez pojedyncze źródło światła.
  • Małe lub cienkie obiekty. Ilość oświetlenia, które uzyskują te elementy, nie wpłyną na ostateczne wyrenderowanie sceny.

Jak najwięcej fałszywych oświetlenia

Aby zmniejszyć wymagania dotyczące przetwarzania, możesz sfałszować niektóre elementy. Może to sprawić, że treści będą wyglądały na jasne, ale w rzeczywistości będą korzystać z bardziej wydajnych metod.

Fałszywe cienie

Cienie w czasie rzeczywistym są drogie. Są one generowane za pomocą techniki nazywanej mapowaniem cienia. Koszt renderowania geometrii sceny na mapie cienia jest proporcjonalny do liczby wierzchołków narysowanych z włączonymi cieniami. Zalecamy ograniczenie liczby elementów geometrycznych, które rzucają cienie, oraz liczby świateł rzucających cienie w czasie rzeczywistym.

Możesz stosować fałszywe cienie na obiekty dynamiczne bez oświetlenia dynamicznego. Utrzymuje to niskie koszty renderowania i może przynieść efekt podobny do dynamicznych cieni. Oto kilka sposobów na wdrożenie fałszywych cieni:

  • Użyj siatki 3D, np. płaszczyzny lub czworokąta, umieszczonej pod postacią i nałóż na nią rozmytą teksturę.
  • Możesz napisać własny niestandardowy program do cieniowania, aby uzyskać bardziej zaawansowane cienie blobów.

Poniższy przykład pokazuje wynik w przypadku użycia siatki 3D jako cienia:

Rysunek 12. Wdrożenie cieni w prezentacji technicznej Armies.

Maluj informacje o świetle bezpośrednio na teksturach

Jeśli malujesz część odcienia jako tekstury, zmniejszysz wymagania obliczeniowe związane z dodatkowym oświetleniem. Dzięki temu zaoszczędzisz pamięć podczas pieczenia oświetlenia sceny, ponieważ wymaga to mniejszej ilości danych mapy świateł.

Sondy świetlne

Gdy używasz obiektów dynamicznych w wypalonym oświetleniu, mapy świetlne nie będą miały na nie wpływu. Dzięki temu mogą poczuć się, jakby nie byli częścią sceny.

Możesz rozwiązać ten problem za pomocą sond świetlnych. Sondy świetlne mają podobne zalety do map świetlnych. Przechowują one dane, które można z wyprzedzeniem obliczyć i zapisać do użycia w czasie działania. Dzięki temu duża część kosztów obliczeniowych jest przenoszona na edycję czasu.

Mapa świetlna koduje światło otrzymane w teksele na potrzeby powierzchni, a sonda świetlna przechowuje światło, które przechodzi przez pustą przestrzeń. Dane te mogą służyć do rozświetlania poruszających się obiektów. Sondy świetlne pomagają wizualnie łączyć dynamiczne obiekty z obiektami zmapowanymi na światło w całej scenie.

Sondy świetlne najlepiej sprawdzają się przy oświetlaniu obiektów poruszających się w scenie. Sondy wykorzystują pieczone światła, dzięki którym poruszające się obiekty mają takie samo światło jak scena. Oświetlanie dynamicznych obiektów za pomocą sond świetlnych jest tańsze niż diody działające w czasie rzeczywistym.

Więcej informacji znajdziesz na stronach Oświetlenie statyczne z użyciem sond świetlnych i sondy świetlne.

Rysunek 13. Sondy świetlne umieszczane na pokazach technicznych Armies,

Ustawienia mechanizmu renderowania sieci typu mesh

Niezależnie od rodzaju światła, z którego korzysta scena, musisz zadbać o odpowiednie ustawienia mechanizmu renderowania sieci.

Wyłącz wszystko, czego nie używasz. Ustawienia takie jak Przesyłaj cienie zwiększają koszty renderowania sceny, nawet jeśli obiekt nie jest oświetlony. Poniższy przykład ustawień mechanizmu renderowania siatki dotyczy postaci przedstawionej na Rysunku 13. Postać korzysta z danych pochodzących z sondy świetlnej, a nie z sond refleksyjnych.

Ustawienie mieszanych sond dla sond świetlnych łączy informacje o świetle z najbliższych sond świetlnych z postaciami. W miarę jak postać porusza się po scenie, zmieniają się sondy świetlne wpływające na nią. Funkcja przesyłania cieni jest wyłączona, ponieważ renderowanie korzysta z metody blob. Wyłączona jest również opcja Odbieraj cienie, ponieważ scena jest wypalona i nie ma cieni w czasie rzeczywistym.

Rysunek 14. mesh Renderer (mechanizm renderowania siatki) dla renderowania Rysunku 13.

Rodzaje oświetlenia i światła w czasie rzeczywistym

Zalecamy obchodzenie się z oświetleniem za pomocą wypiekanego oświetlenia, sond świetlnych oraz technik fałszywego oświetlenia, np. malowanych tekstur oświetleniowych lub efektów materiałowych typu cieniowanie. Jeśli jednak potrzebujesz oświetlenia w czasie rzeczywistym, musisz wziąć pod uwagę jego rodzaj.

Każdy rodzaj oświetlenia ma inny koszt potrzebny do obliczenia oświetlenia. Poniższa lista zawiera szczegółowe informacje o poszczególnych typach lamp:

  • Kierunkowa:ta lampa ma jednolity kierunek i nie pada. Światło kierunkowe to najtańsze światło w czasie rzeczywistym. Często do każdej sceny potrzebne jest jedno światło kierunkowe. W przypadku renderowania do przodu to sugerowana ścieżka renderowania w przypadku urządzeń mobilnych. Jeśli w scenie nie ma światła kierunkowego, Unity będzie uwzględniać domyślne światło kierunkowe.
  • Punktowy: światła punktowe unoszą obiekty na zewnątrz stożka i nie świecą ich. Dzięki temu żarówki punktowe są tańsze pod względem obliczeniowym niż światła punktowe. Aby uzyskać najlepszą wydajność, pilnuj, by stożek był jak najkrótszy i trafiaj tylko w zamierzone obiekty.
  • Punkt: rzuca światło we wszystkich kierunkach. Światło z każdego kierunku jest pomocne, ale bardzo kosztowne. Oświetlenie punktowe jest drogie w szerokim regionie. Dodatkowo najdroższym elementem oświetlenia może być obliczenie cieni. Jeśli padniesz światło we wszystkich kierunkach, będzie więcej cieni i więcej obliczeń.