2015-03-02 7 views
8

Pracuję nad optymalizacją mojej gry na iOS, i mam naprawdę dziwny problem z ustawieniami jakości w Unity3D, które całkowicie mnie zablokowały!Ukryta różnica między jednością Ustawienia jakości 3D?

mam 4 ustawienia jakości konfiguracji w grze poprzez:

Edit -> Project Settings -> Quality 

cztery ustawienia: Proste, dobre, piękne, wspaniałe

Krótka wersja jest taka, że ​​niezależnie od opcji ustawić wewnątrz panel ustawień jakości, Simple zawsze będzie działał lepiej niż dobrze.

Na przykład, jeśli ustawię wartość Prosta i dobra, aby miały identyczne ustawienia dla wszystkich opcji renderowania, ustawienie wszystkiego na minimum (cienie wyłączone, brak antiali, 1/8 tekstury itp.) I przetestować grę na iPadzie, zaczynając od różnych opcji domyślnej jakości:

Simple - ~26FPS 
Good - ~6FPS 

Jeśli zmienię Prosty w użyciu 1/4 tekstury i pozostawić dobry w 1/8 tekstury, to nadal działa prawie tak samo:

Simple - ~24FPS 
Good - ~6FPS 

mogę wyraźnie zobaczyć tekstury są lepsze/bardziej szczegółowe w trybie prostym w 1/4, ale są uruchomione prawie 20FPS szybszy niż tryb dobry, który używa tekstur o rozmiarze 1/8.

Widzę od dołączenia profilera Unity iOS, który podczas pracy w trybie Good CPU ma stałe obciążenie "Overhead", które nie występuje w trybie Simple (z identycznymi ustawieniami jakości). Coś się wyraźnie zmienia, kiedy przechodzę z Prostego na Dobry, ale nie wydaje mi się, że mogę coś zmienić z menu ustawień jakości.

Z czytania unity manual page Mam wrażenie, że różne ustawienia jakości są po prostu symbolami zastępczymi, ponieważ można dodawać/usuwać opcje. Ale z moich eksperymentów wynika, że ​​jest coś, co zmienia się, kiedy zaczynam w prostych Vs Good (lub innych) opcjach.

Próbowałem uruchomić grę w trybie Simple/Good jako domyślną, a także ręcznie przełączając kod (używając C# poprzez QualitySettings.SetQualityLevel) i otrzymuję taką samą wydajność.

Czuję, że brakuje mi czegoś kluczowego, ale nie mogę tego wymyślić.

+1

To jest świetne pytanie! Możesz mieć więcej szczęścia na UnityAnswers. Ta strona jest poświęcona Jedności, więc możesz znaleźć tam bardziej kompetentnych ludzi. – SirBraneDamuj

+0

Dzięki za sugestię - rzeczywiście opublikowałem to na Unity Answers, ale nie otrzymałem odpowiedzi! Miałem nadzieję, że ktoś tutaj w StackOverflow pomoże mi go złamać! – Jokode

Odpowiedz

2

Poziomy jakości mogą powodować różnice w przypadku korzystania z funkcji, które istnieją na poziomie jakości i wymagają dodatkowych obliczeń. Ale gdy nie używasz tych funkcji, nie ma różnicy między poziomami jakości. Jeśli chcesz poprawić Ci fps istnieje kilka wskazówek

  1. Producent tekstury atlasing zmniejszyć pobór wzywa
  2. zwiększą obliczeń w funkcji Update i cache przekształca wykorzystywane przez funkcję Update.
  3. Nie wyszukuj elementy w każdej klatce, w niektórych przypadkach można użyć Singleton
  4. nie niszczą obiekty w każdej klatce. Utwórz pulę obiektów.
  5. Poprawa emisji cząstek i uczynić mniej jak można
  6. Poprawa shaderów. Jeśli używasz mobilnych mobilnych shaderów. Przykładowa zmiana modułu cieniującego na ruchomy/rozproszony.

Oto kilka przydatnych linków Object pooling video tutorial, Singleton pattern Unity3d c#

+0

Dziękuję za sugestie - postaram się przejść przez wszystkie te czynności, ponieważ optymalizuję grę. Obawiam się jednak, że to nie odpowiada na moje pierwotne pytanie, czy istnieje jakaś ukryta różnica między ustawieniami jakości. W moim przypadku wszystkie ustawienia/funkcje są identyczne dla wszystkich ustawień jakości - ale jednak, kiedy przełączam się z najniższego (NAJSZYBSZY) do dowolnego innego poziomu jakości, widzę ogromny spadek wydajności. Byłoby sensowne, gdyby jakiekolwiek inne funkcje były włączone, gdy zmieniałem poziom - ale wszystkie ustawienia są takie same! – Jokode