Czy obiekty gry leżące poza widokiem kamery zużywają zasoby komputerowe / mobilne w Unity?

11

W jedności załóżmy, że w mojej scenie mam pewne obiekty gry, które nie są widoczne dla kamery, a więc nie są renderowane podczas działania gry.

Czy te obiekty gry będą zużywać zasoby komputerowe / mobilne podczas gry?

Gdzie mogę znaleźć szczegółowe informacje na temat takich zastosowań?

Gissipi_453
źródło

Odpowiedzi:

13

To, czego chcesz, to profiler pamięci, który ma Unity. Tutaj: http://docs.unity3d.com/Manual/ProfilerMemory.html

Ale twoje założenie jest w większości słuszne, jeśli obiekt GameObject nie jest widoczny dla kamery, nie jest rysowany i zużywa mniej zasobów, ale nadal musi zużywać trochę. GameObject nadal istnieje w pamięci, włączając w to wszystkie tekstury, skrypty modeli itp. Nadal pochłania czas pracy procesora za pomocą metod Update i FixedUpdate (i różnych innych opisanych tutaj ).

Ale zwykle głównym spowolnieniem jest rysunek, niewielka ilość czasu procesora jest wykorzystywana do ustalenia, że ​​obiekt znajduje się poza fragmentem kamery (granicami), ale nie wykonuje się rysowania.

Reuben Crimp
źródło
5

Myślę, że powinieneś także wiedzieć o Frustrum Culling lub usuwaniu ukrytych powierzchni: http://en.wikipedia.org/wiki/Hidden_surface_determination

Jest to ważny element optymalizacji gry, ponieważ nawet jeśli twoje obiekty nie znajdują się w frustrum w danej ramce (tj. Widoczne), niektóre wezwania do rysowania (shadery) są dla nich nadal uruchamiane, co zmniejsza wydajność.

Claudiu Apostol
źródło
2
@ Gissipi_453, podczas badań w tym kierunku, badają również drzewa czworokątne i ośmioralne (sortowanie danych przestrzennych)
Jon
3

Krótka odpowiedź brzmi „tak”; wszystko, co jest gotowe do użycia w grze, zajmuje pamięć.

Inną rzeczą do rozważenia jest koszt liczby klatek na sekundę:

5 obiektów z 5 oddzielnymi teksturami, narysowanych osobno, wymaga zmiany stanu pomiędzy nimi. Możesz zaoszczędzić trochę pamięci, rozładowując nieużywane tekstury.

Po załadowaniu wszystkich oddzielnych tekstur do pojedynczej tekstury atlasu, ślad pamięci zostaje ustalony i nie można już rozładowywać pojedynczej tekstury. Po utworzeniu wystarczy tylko raz powiązać atlas, aby narysować wszystkie obiekty.

Innym przykładem jest prosty bufor wierzchołków i indeksów. Jeśli wiele punktów często przełącza się między widocznymi a nie, szybciej pozostawić „przestarzałe” punkty w buforze wierzchołków i przesłać tylko nowy bufor indeksu.

Jest wiele razy, gdy wyższy koszt pamięci z góry jest lepszy niż wiele zmian stanu.

Jeśli obrócisz kamerę, na pewno nie zniszczysz tych obiektów, chyba że wiesz, że kamera nie obróci się ponownie, aby sprawdzić ten obiekt. ”- Katu

Korzystając z przewijania bocznego jako przykładu, jeśli możesz poruszać się tylko w prawo (mapa przewija się tylko w lewo), każdy obiekt, który przewija się z lewej strony ekranu, może zostać trwale rozładowany, ponieważ nigdy więcej go nie użyjesz. Ponadto zawartość obiektów może być ładowana na żądanie tuż przed przewinięciem obiektu do widoku z prawej strony.

Jon
źródło
1

Wiele odpowiedzi dotyczy głównie graficznego aspektu twojego pytania.

Faktem jest, że zajmą one różne zasoby, a ich koszt w porównaniu z rysowaniem obiektu nie jest ustalony. Nie jest tak rzadkie, jak sugerują niektóre odpowiedzi, że twoje komponenty wykonują droższe operacje niż rysowanie, ale możesz zminimalizować, ile zasobów używają. Pamiętaj również, że GameObject zajmuje niewielką ilość pamięci, podobnie jak jego komponenty. Komponenty mogą również wykonywać czynności, które zajmują sporo pamięci.

Najprostszym sposobem na zminimalizowanie działania komponentów poza ekranem jest system oparty na wywołaniach zwrotnych OnBecameVisible i OnBecameInvisible .

void OnBecameVisible()
{
    myComplexComponent.enabled = true;
}
void OnBecameInvisble()
{
    myComplexComponent.enabled = false;
}

Oczywiście ma to bardzo ograniczoną przydatność, ponieważ jest wiele razy, kiedy chcesz, aby obiekt poza ekranem wpływał na grę. Możesz jednak rozwinąć wzór tego rodzaju, aby uzyskać drobnoziarnisty system, który może zminimalizować efekt twoich najdroższych obliczeń. Nawet coś tak prostego, jak obniżenie jakości ścieżki podążającej za skryptem, gdy obiekt znajduje się poza ekranem, może na dłuższą metę przynieść duże oszczędności.

Selali Adobor
źródło
1

Zajmuje pamięć, aby utrzymać ją przy życiu i zaktualizować jej pozycję i inne właściwości.

Ale nie zużywa zasobów graficznych komputera / telefonu, ponieważ nie jest widoczny.

Tak, zużywa zasoby pamięci, ale nie zasoby graficzne, jak widoczny Obiekt Gry.

Yohann V.
źródło
Wielkie dzięki. To była bardzo bezpośrednia odpowiedź, której szukałem.
Gissipi_453
0

Wszystko, co znajduje się w programie, zużywa zasoby; Nie sądzisz, że programy działają po prostu na nadziejach i marzeniach?

Pytanie powinno brzmieć, ile zasobów zużywa obiekt gry, i wydaje mi się, że jest to dość solidna odpowiedź: http://answers.unity3d.com/questions/280455/how-much-memory-a-gameobject- consume.html

Krótko mówiąc, same zużywają znikome zasoby. Ale dlaczego miałbyś chcieć, aby mnóstwo przedmiotów w grze po prostu siedziało w grze i nic nie robiło? Na koniec dnia to, co faktycznie robisz, aby te obiekty gry „działały”, jest przyczyną wszelkiego rodzaju kosztów ogólnych - i ile zasobów wymaga to bardzo indywidualnie dla każdego przypadku.

zwróć prawdę
źródło
Dziękuję Ci bardzo. Czy powinienem więc niszczyć obiekty, które znikają z pola widzenia kamery podczas gry?
Gissipi_453
1
Myślę, że ta odpowiedź tak naprawdę nie próbuje odpowiedzieć na twoje pytanie, a zatem jest po prostu błędna. Jeśli obrócisz kamerę, na pewno nie zniszczysz tych obiektów, chyba że wiesz, że kamera nie obróci się ponownie, aby sprawdzić ten obiekt. Istnieją światy gry, a ruch AI, światła wpływają na środowisko, nawet jeśli ich nie widzisz.
Katu
@Katu, to także punkt. Dzięki. Jeśli obiekt nie musi być w ogóle renderowany, nie powinienem go niszczyć.
Gissipi_453
@Katu Odpowiedziałem na pytanie: „Czy te obiekty gry (obiekty w mojej scenie, które nie są widoczne dla kamery) będą zużywać zasoby komputera / telefonu komórkowego podczas gry?” Odpowiedź brzmi: „Tak. Wszystko, co znajduje się w programie, zużywa zasoby”. Następnie wyjaśniłem wpływ pustych obiektów gry na scenę i koszty zasobów.
zwróć true
2
@ Gissipi_453 Aby odpowiedzieć na twoje pytanie, zależy to w pełni od tego, co faktycznie robią obiekty w scenie, jak często są one tworzone / usuwane oraz od innych czynników. Wiedza, kiedy należy zoptymalizować, jest umiejętnością samą w sobie, ale podstawową zasadą jest nie przejmowanie się nią, dopóki nie będzie się o co martwić. Koszt dodatkowych obiektów w grze jest prawie niczym, więc nie martw się. W niektórych przypadkach, jeśli często dodajesz / usuwasz obiekty, pula obiektów może uratować życie, aw innych przypadkach możesz wykonać inne sztuczki. Wszystko zależy od tego, czy istnieje i na czym dokładnie polega problem.
zwróć true