Skocz do zawartości
mosqua

HZN1 - Zombie World - Początek (engine nwo3029)

Rekomendowane odpowiedzi

Witam społeczność developerów !

Chciał bym zasięgnąć opinii nt. gry którą tworzę, planuję wejść z tytułem na urządzenia mobilne ale jest pewien szkopuł, który niestety mnie zablokował... Szukałem w necie info nt. wydajności JavaScriptu w Androidzie - z oficjalnych info padło na PhoneGap'a (miał być wydajny) po przepisaniu części startowej udało się "wytestować" i maksymalny FPS to 3-6 klatek. Jest to co najmniej dziwne bo po odpaleniu w przeglądarce na Androidzie (Chrome) mam 16-20FPS. Puki co nie testuję na Apple'ach  bo używam w wersji ALPHA *.webm i finalnie media będą w 2 formatach a webm blokuje proces ładowania ;/. 

Gra pisana w JS/PHP/MYSQL we własnym(autorskim) frameworku/api/engine

Animacja odbywa się na CANVASie 3200x1600 co prawda dużym ale to minimum dla wygody gry (niektóre pociski itp. elementy mechaniki wymagają tak dużej mapy) (cały czas balansuję na pograniczu wydajności) w jednej klatce liczonych jest około 2k obiektów i z 5k rysowanych - wiadomo na pc fps 22-30 - ale kluczowym jest dla mnie utrzymanie przynajmniej 20 na mobile!!!

Czy znacie coś szybszego od PhoneGap co lepiej poradzi sobie z renderowaniem CANVASów (3 layers). 

Lub macie doświadczenie z krojeniem takiego dużego obszaru animacji - co prawda zastosowałem blokowanie rysowania poza "boundem" ekranu ale za wiele to nie dało na mobile.

 

Edit:

Zapomniałem dodać linke ;P

http://www.nwo3029.pl ALPHA!!!

Edytowane przez mosqua

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Dezaktywuj obiekty znajdujące się poza kamerą. Skok wydajności gwarantowany. Na PC 20-30fps na taką grę to jest śmiesznie mało.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
Dnia 1.04.2017 o 15:01, Danieo napisał:

Dezaktywuj obiekty znajdujące się poza kamerą. Skok wydajności gwarantowany. Na PC 20-30fps na taką grę to jest śmiesznie mało.

średni FPS jaki chcę by był utrzymany to właśnie 24 == zastosowałem coś ala modulator więc oscylacja jest miedzy 20-30 max osiągam 76(ale to akurat zależne jest od pc) więc modulator zmienia milsec/motion i spadają klatki do 24 co jest celowe - ale tak jak wspomniałem - przy modulacji up< na mobile w produkcyjnym np. PhoneGap'ie leży nawet podkręcanie odświeżania tzn wszystko się tnie...  ;)

Dnia 1.04.2017 o 11:45, Zaku napisał:

Najszybszym rozwiązaniem będzie porzucenie js jeśli chodzi o gry mobilne.

rozważam jako ostateczny scenariusz, przy powodzeniu tytułu... w końcu "CANVAS" jest praktycznie wszędzie... przejście na inny język nie było by problemem... Tylko że gra ma być stricte browserowa w samym założeniu...

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
Dnia 1.04.2017 o 02:37, mosqua napisał:

w jednej klatce liczonych jest około 2k obiektów i z 5k rysowanych

5k obiektów na ekranie małego telefonu?

 

Dnia 1.04.2017 o 02:37, mosqua napisał:

Animacja odbywa się na CANVASie 3200x1600

A jaka jest rozdzielczość ekranu?

 

Wyświetlanie czegokolwiek w grach to jedna wielka optymalizacja. Tu nie można sobie pozwolić na wykonywanie zbędnych czynności i stratę czasu procka - każda zbędna operacja jest dużo bardziej widoczna na urządzeniach mobilnych niż na PC. W grach 3D podstawową optymalizacją jest tzw frustum culling - polega to na wykrywaniu obiektów, które znajdują się poza polem widzenia kamery i nie renderowanie ich. Nie widzę problemu w zaimplementowaniu czegoś takiego u ciebie, nawet obliczenia masz dużo prostsze, bo to 2D.

Po co taki duży canvas? Czy u ciebie położenie obiektu w grze, jego x,y to jeden do jednego położenie na canvasie? A czy nie można po prostu podczas rysowania obiektu brać jego x,y, wykonywać transformację do przestrzeni ekranu (brzmi groźnie ale to zwykłe odejmowanie) i następnie rysować na wyliczonych współrzędnych?

 

8 godzin temu, mosqua napisał:

średni FPS jaki chcę by był utrzymany to właśnie 24

A trzymaj sobie taki fps jaki ci się podoba, ale nie z powodów wydajnościowych - powinieneś mieć jak największy zapas mocy, procek powinien być jak najmniej obciążony - przełoży ci się to na zużycie baterii w telefonie.

 

HZN1 - skądś znam tytuł. Serio? nie stać cię na nic oryginalnego?

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
7 godzin temu, FrozenShade napisał:

5k obiektów na ekranie małego telefonu?

 

A jaka jest rozdzielczość ekranu?

 

Wyświetlanie czegokolwiek w grach to jedna wielka optymalizacja. Tu nie można sobie pozwolić na wykonywanie zbędnych czynności i stratę czasu procka - każda zbędna operacja jest dużo bardziej widoczna na urządzeniach mobilnych niż na PC. W grach 3D podstawową optymalizacją jest tzw frustum culling - polega to na wykrywaniu obiektów, które znajdują się poza polem widzenia kamery i nie renderowanie ich. Nie widzę problemu w zaimplementowaniu czegoś takiego u ciebie, nawet obliczenia masz dużo prostsze, bo to 2D.

Po co taki duży canvas? Czy u ciebie położenie obiektu w grze, jego x,y to jeden do jednego położenie na canvasie? A czy nie można po prostu podczas rysowania obiektu brać jego x,y, wykonywać transformację do przestrzeni ekranu (brzmi groźnie ale to zwykłe odejmowanie) i następnie rysować na wyliczonych współrzędnych?

 

A trzymaj sobie taki fps jaki ci się podoba, ale nie z powodów wydajnościowych - powinieneś mieć jak największy zapas mocy, procek powinien być jak najmniej obciążony - przełoży ci się to na zużycie baterii w telefonie.

 

HZN1 - skądś znam tytuł. Serio? nie stać cię na nic oryginalnego?

Optymalizacja vel. bound display (tak to nazywam zostało mi z okresu pracy z GiS) jest = rysuje tylko to co w obszarze widoku - co nie zmienia faktu że liczone jest nadal wszystko - boty poruszają się w widoku izometrycznym po całej mapie - kalkulacja pozycji przypomina nieco 3D / ale Z jest preparowane tylko przy obiektach które zajmują przynajmniej 2 till'sy, jest też teksturowanie i tu niestety canvas 2D kwiczy...

Wszystkie tablice które są kluczowe liczę od tyłu, pomogło ale niewiele...

Puki co kończę wersje alpha i prawdopodobnie przepiszę rysowanie na canvas rozmiaru ekranu (coś ala overflow:auto / ale w canvasie) - bo to chyba jedyny sensowny pomysł.

HZN1 == Nazwa wirusa... Zombie... Czytelne...  Age Zeed And One ?!

Puki co na mobile -  powstanie coś ala Pip-Boy / Comander (jak w BF) - do sterowania zasobami w osadzie, kiedy ty "zwiedzasz" świat... produkcja, obrona itp... Myślę że na starcie zaoszczędzi mi to przynajmniej trochę budżetu na reklamę...

Ps. Zombie nie są oryginalne - ale przynajmniej przewidywalne ;)

 

Edytowane przez mosqua
złota myśl...

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

O to mi chodzi:

Dnia 1.04.2017 o 02:37, mosqua napisał:

5k rysowanych

Czemu jest ich tak dużo?

 

16 godzin temu, mosqua napisał:

co nie zmienia faktu że liczone jest nadal wszystko

Trzeba wszystko liczyć co klatkę? A może każdemu obiektowi dać parametr 'NextCalcTime', na starcie wszystkim rozlosować wartości z przedziału 0-500 (wartości z sufitu) i NextCalcTime ustalić jako Now + wylosowana wartość. Potem w każdym przebiegu pętli sprawdzać, czy Now > NextCalcTime, i jeśli tak to wykonać obliczenia i zwiększyć NextCalcTime o jakąś stałą. W ten sposób z każdej klatki odpadnie ci ogromny procent obliczeń.

 

16 godzin temu, mosqua napisał:

jest też teksturowanie i tu niestety canvas 2D kwiczy

Czy jakieś wstępne przygotowanie obiektu wchodzi w grę? A może wszystko robić na spritach?

 

16 godzin temu, mosqua napisał:

HZN1 == Nazwa wirusa... Zombie

Taaak, ja wiem, ale gdzieś już to było, podobieństwo uderzające.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
17 godzin temu, FrozenShade napisał:

Czemu jest ich tak dużo?

Otoczenie np. roślinność, skały, itemy, boty - max 5k czyli zapełnienie mapy do połowy...

17 godzin temu, FrozenShade napisał:

Czy jakieś wstępne przygotowanie obiektu wchodzi w grę? A może wszystko robić na spritach?

Zrobiłem już generator oparty o rysowanie mapy / generowany przed rozpoczęciem odtwarzania na canvasie, (sprite'y) są używane do narysowania płaskiej mapy potem, kroje mapę jak teksturę pseudo 3d i tu już problem wydajności rozwiązany.

prewka_tiller.jpg.bd24dd7ccadb1ac6af4f89c977a599b3.jpg

 

17 godzin temu, FrozenShade napisał:

Trzeba wszystko liczyć co klatkę? A może każdemu obiektowi dać parametr 'NextCalcTime', na starcie wszystkim rozlosować wartości z przedziału 0-500 (wartości z sufitu) i NextCalcTime ustalić jako Now + wylosowana wartość. Potem w każdym przebiegu pętli sprawdzać, czy Now > NextCalcTime, i jeśli tak to wykonać obliczenia i zwiększyć NextCalcTime o jakąś stałą. W ten sposób z każdej klatki odpadnie ci ogromny procent obliczeń.

Myślę że to jest kluczowe... postanowiłem prześledzić procesy i przebudować na grupy aktywności - znalazłem w necie info nt. PigeonHole bo sortowanie odgrywa tu znaczącą rolę - myślę aby zastosować coś pomiędzy tą metodą do aktywacji procesów w zbliżeniu do punktu PgH a ustawieniem globalnego ticka dla gupy/typu obiektów na wykonanie obliczeń jw. Puki co działam ale widzę już znaczną poprawę...

Btw. w Chrome praktycznie nie mam problemów z wydajnością na PC ale FireFox lubi interwałem zwolnić co 5-6 sek... 

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się


  • Przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników, przeglądających tę stronę.

×