Autor Wątek: Unity za wolne -> co będzie lepsze?  (Przeczytany 1793 razy)

Offline PROgram

  • Użytkownik

# Kwiecień 18, 2017, 16:13:42
Może zacznę od tego, że nie jestem ani początkującym, ani zaawansowanym programistą -> nie mam w głowie całej encyklopedii, ale z wglądem do encyklopedii mogę zrobić wszystko czego potrzebuję. Nie chcę być też prowadzony za rączkę przez całą drogę, ale liczę na wskazanie dobrego kierunku. To tak w skrócie :P

Wracając do konkretów to cały czas siedziałem przy Unity i z czystym sumieniem mogę powiedzieć, że ten silnik jest zbyt "ciężki" dla komputera. Teraz szukam jakiejś alternatywy do ukończenia mojego projektu. Chodzi konkretnie o stworzenie czegoś na wzór starych gier z budowaniem miasta (Cezar, Faraon, Zeus, Cesarz) z wielkim obszarem pod zabudowę i setkami (może tysiącem) poruszających się jednostek po ekranie. Zrobiłem prototyp w Unity, ale mój komputer (2008r) wymięka już przy planszy 100x100 (+ścieżki+wyszukiwanie dróg) przy kilku obiektach, a co tu dopiero myśleć o planszy 2kx2k z 1k obiektów. Szukam więc czegoś "lekkiego" z grafiką 2D co nie będzie wymagało i7 i 8GB RAM po ukończeniu :P

Mógłby mi ktoś polecić jakiś (najlepiej darmowy) zamiennik? Jakiś starszy silnik pod 2D, do którego są poradniki/tutoriale lub coś w tym stylu? Jakieś dodatkowe biblioteki do tego? Może lepiej wszystko pisać samemu od zera bo może nie będzie szybciej, ale łatwiej? Wystarczą mi informację co i dlaczego, a resztę doczytam w sieci. Najwięcej czasu spędziłem w C# i C++, ale miałem pewien kontakt z JAVA i podobnymi więc inne języki też mi nie straszne do nauki.

TL;DR:
Szukam czegoś co zastąpi Unity i ukończony projekt uruchomi nawet dziesięcioletni komputer lub starszy. Wymagania do projektu:
- projekt podobny do gry Cezar, Faraon, Zeus, Cesarz
- grafika 2D
- najlepiej C++ lub C#, ale może być cokolwiek
Szukam tylko podpowiedzi -> z czego najlepiej skorzystać i dlaczego to polecacie. Źródła do nauki i materiały to sam sobie poszukam.

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Dab

  • Redaktor
    • blog

# Kwiecień 18, 2017, 17:21:41
Może coś z rodziny Cocos 2D? Sporo gier na tym dowieziono.

Natomiast niezależnie od tego co użyjesz, to radzę od razu pomyśleć o implementacji LOD. I to nie tylko dla grafiki, ale też dla logiki gry. "Naiwne" przeliczanie każdego obiektu niezależnie od tego czy jest widoczny/istotny w pewnym momencie przestanie dawać radę choćby było zaimplementowane w assemblerze.

Offline Joker

  • Użytkownik

  • +2
# Kwiecień 18, 2017, 17:40:10
Mówisz że projekt 2D nie wyrabiał przez Unity? Chyba coś było nie tak, zobacz takiego Cities: Skylines jest to trójwymiarowy city-bulider i działa bardzo dobrze, również oparty o Unity. Może powinieneś zainteresować się optymalizacją istniejącego już kodu a nie koniecznie zmianą silnika?

Offline FrozenShade

  • Użytkownik
    • Skullstone's official site

# Kwiecień 18, 2017, 18:20:46
Cytuj
mój komputer (2008r) wymięka już przy planszy 100x100

A te 100x100 to pokazujesz na raz na ekranie? czy masz tylko jakiś wycinek, który chcesz pokazać?

Pierwsze co mi sie nasuwana myśl to brak frustum cullingu.

Online lethern

  • Użytkownik

# Kwiecień 18, 2017, 19:35:56
gdzie są jakieś wyniki profilera, ja się pytam ;p
najprościej gdybyś zmierzył ile czasu zajmuje logika, albo wyłącz rysowanie planszy i zmierz ile masz "klatek na sekundę"

dalej to profilowanie tego rysowania, co używasz i co zajmuje najwięcej czasu, a można się pozbyć... na przykład, no nie wiem, robisz scalowania obrazków co każdą klatkę zamiast raz i do cache
« Ostatnia zmiana: Kwiecień 18, 2017, 19:40:30 wysłana przez lethern »

Offline Meic

  • Użytkownik

  • +1
# Kwiecień 18, 2017, 20:29:32
Nie chce mi się wierzyć, że problem leży w Unity. Z resztą z tego co piszesz, można wnioskować, iż sam na dobrą sprawę nie potrafisz wskazać newralgicznego punktu (robi się to choćby przy użyciu wspomnianego już profiler'a). Obawiam się, że jeśli nie jesteś w stanie zrobić tego co chcesz w Unity, tak aby działało w porządku, to tym bardziej nie uda Ci się w innym silniku / w zupełnie własnym kodzie. Dlatego radzę najpierw lepiej poznać Unity (w pierwszej kolejności profiler), a potem formować konkluzję że "jest za wolne" dla kilku "sprajtów".

Offline PROgram

  • Użytkownik

# Kwiecień 19, 2017, 04:24:12
Czytanie ze zrozumieniem to jednak rzecz trudna...
Zadałem konkretne pytanie -> dlaczego krowa nie daje mleka.
Odp. bo mleko powinno być trzymane w chłodzie.
Czyli to moja wina, że krowa nie mieści się w lodówce?
Mówisz że projekt 2D nie wyrabiał przez Unity?
Mówię, że Unity nie wyrabia przy projekcie 2D. Skrócę jeszcze raz to co napisałem:
ten silnik jest zbyt "ciężki" dla komputera. Teraz szukam jakiejś alternatywy do ukończenia mojego projektu.
Szukam czegoś "lekkiego" z grafiką 2D
Mógłby mi ktoś polecić jakiś starszy silnik pod 2D
TL;DR:
Szukam czegoś co zastąpi Unity i ukończony projekt uruchomi nawet dziesięcioletni komputer lub starszy.
Jeszcze raz tylko inaczej:
Szukam jakiegoś zamiennika dla Unity, który jest za "ciężki" dla komputera. Zrobiłem w nim prototyp, który po "zbudowaniu" (od teraz określany jako GRA) nie ma żadnych problemów z działaniem. W samym silniku, wspominany już profiler pokazuje spadki z 30 do 16 klatek gdzie GRA wyświetla 140 klatek ze spadkiem do 80. Jeszcze lepiej sytuacja prezentuje się gdy tworzę na raz 5000 kopii jednego obiektu. GRA działa tu płynnie i na 1s zalicza spadek do 30 klatek, a Unity łapie zawiechę na 43 sekundy (według profilera). Już lepiej nie wspominać o samej planszy gdzie GRA nie ma takich problemów na 2000x2000 jak Unity przy 100x100.
TL;DR:
Nie mam problemów z kodem. Mam problem z "ociężałym" Unity i szukam czegoś "lżejszego" pod 2D co przeliczy w 2s to co poprzednik robił w 20s.

Offline Karol

  • Użytkownik

  • +3
# Kwiecień 19, 2017, 09:17:49
Co próbują tutaj ludzie powiedzieć, to to, że zmiana silnika najpewniej nie da takiej magicznej zmiany jakiej oczekujesz, bo przeniesiesz swoje problemy z Unity gdzieś indziej i wrócisz do punktu wyjścia.

Offline laggyluk

  • Użytkownik
    • http://laggyluk.com

  • +1
# Kwiecień 19, 2017, 13:23:49
Na dodatek nie podałeś żadnych konkretów poza tym o ile spada wydajność. Ludzie robią pathfinding na mainthreadzie, collidery 3d na każdym obiekcie a potem mówią że unity to gówno :P Może nie jest demonem wydajności ale zmiana silnika może okazać się stratą czasu który mógłbyś poświęcić na znalezienie i eliminację własnych, nieświadomych błędów.

Offline Joker

  • Użytkownik

  • +1
# Kwiecień 19, 2017, 13:41:16
Widzę że niektórym nie da się pomóc, jako pro tip mogę dodać że nie warto tworzyć na Windowsa bo linux jednak mniej zasobów zżera więc będziesz miał ich trochę więcej do zużycia! Pozdrawiam.

Offline Meic

  • Użytkownik

# Kwiecień 19, 2017, 15:46:54
@PROgram A to "przymulanie" które jest problemem ma miejsce podczas pracy z edytorem (czyli utrudnia tworzenie) czy podczas odpalania gry w edytorze (czyli utrudnia szybką weryfikację działania gry)?

Offline wezu

  • Użytkownik

# Kwiecień 19, 2017, 17:44:02
To może Panda3D? ;D

...a tak na poważniej - czy te 5k obiektów to kopie czy instancje (glDraw***Instanced)? Bo jeśli to kopie, to żaden engine nie pomoże, magistrala cpu-gpu po prostu nie wyrabia, nawet jak każdy obiekt to jeden trójkąt.

Online lethern

  • Użytkownik

# Kwiecień 19, 2017, 18:07:53
To co przedmówcy próbowali przekazać to nie jest nic o krowach ani mleku, tylko
zmienisz z unity na inny silnik - ale coś robisz źle - wzrost z np. 20fps na 30fps
vs zostawisz unity, poprawisz to co źle - wzrost z 20fps na 60fps

Moje osobiste doświadczenie z rysowaniem z pamięci RAM zamiast VRAM podpowiada mi, że możesz mieć z lekka kilkadziesiąt ruszających się małych bitmap na ekranie i mam spadek fps z 800 do 25

Pytanie dodatkowe, czy sample z unity też wolno chodzą na tej docelowej maszynie?

Listy silników 2d są dostępne (typu to czy to), weź silnik sprzed 15 lat i porównaj z unity

PS 80 klatek przy samej logice, bez renderingu? Nawet jak weźmiesz silnik który robi 100fps, całość zejdzie na 45fps, prawda?
« Ostatnia zmiana: Kwiecień 19, 2017, 18:31:09 wysłana przez lethern »

Offline JasonVoorhees

  • Użytkownik
    • The Immortal Life of the Son of Jay

# Kwiecień 19, 2017, 20:44:49
To może Panda3D? ;D
Ah. wspomnienia ;) Co nieco w tym zrobiłem. (Python)

...a tak na poważniej - czy te 5k obiektów to kopie czy instancje (glDraw***Instanced)? Bo jeśli to kopie, to żaden engine nie pomoże, magistrala cpu-gpu po prostu nie wyrabia, nawet jak każdy obiekt to jeden trójkąt.
W Unity meshe, tekstury i materiały są raczej współdzielone. GameObject ma do nich referencję poprzez odpowiedni skrypt.


@PROgram: czy próbowałeś tekstury terenu nanieść na atlas? - Unity zrobi atlas automatycznie, tylko musisz wszystkim teksturom nadać odpowiedni tag.

Nie wiem jak robisz planszę, ale jeśli jest złożona z GameObject'ów, to plansza 2k X 2k jest nierealna. Trzeba to zrobić mądrzej. Może jest asset w sklepie, który zrobi to za Ciebie ;)

Offline PROgram

  • Użytkownik

# Kwiecień 20, 2017, 03:48:41
A to "przymulanie" które jest problemem ma miejsce podczas pracy z edytorem (czyli utrudnia tworzenie) czy podczas odpalania gry w edytorze (czyli utrudnia szybką weryfikację działania gry)?
Pracy w edytorze płynną bym nie nazwał, ale nie jest tak źle aby nie dało się w nim pracować, a zawiechy i spadki klatek to tylko przy odpalaniu gry w edytorze... i tylko z tego powodu zapytałem o jakiś zamiennik. Myślałem, że znajdę tu kogoś kto używał innych silników i mógłby mi polecić coś starszego co nie będzie miało problemów z płynnością na słabszym sprzęcie. Jedyne odpowiedzi jakie dostaje to "wybierz sobie jakiś silnik" i masz ZŁY KOD. Kod, który jest tylko PROTOTYPEM, jest nieukończony, niewydajny, ma jedynie działać i będzie wielokrotnie modyfikowany.
Pisałem, że Unity wymięka przy wyszukiwaniu dróg na planszy 100x100. Myślałem, że pisząc TYLKO o silniku ludzie się domyślą, że chodzi o odpalenie gry w edytorze...
Pytanie dodatkowe, czy sample z unity też wolno chodzą na tej docelowej maszynie?
https://www.assetstore.unity3d.com/en/#!/content/29825
Sytuacja identyczna do poprzedniego postu -> 60 klatek ze spadkami do 15 (od drugiej planszy gdzie pojawiają się przeciwnicy szukający drogi do gracza) przy wykonywaniu ruchu. Po zbudowaniu stałe 60 i największy spadek jaki odnotowałem to 58.
czy próbowałeś tekstury terenu nanieść na atlas?
Tylko, że na ekranie praktycznie nie ma nic oprócz: 2 Empty (ruchomy i koniec trasy) z 3KB spritem (dla widoczności na ekranie), 1 Empty do tworzenia planszy i 1 Plane odpowiednio rozciągnięty.
Nie wiem jak robisz planszę, ale jeśli jest złożona z GameObject'ów, to plansza 2k X 2k jest nierealna.
Taka plansza jest tak samo realna jak przycisk do papieru 2x2x2 metra no biurku. Oba pomysły są realne, spełnią swoją rolę, ale ich użyteczność to inna bajka :P

Ja naprawdę nie mam problemów z kodem, grafiką i innymi bajerami. Jedyny problem jaki mam to ociężałe działanie Unity podczas wyszukiwania ścieżki. Ostatecznie i tak po planszy 2000x2000 biega sobie z miejsca na miejsce 500 kolorowych kropek co podczas gry i tak będzie trudne do osiągnięcia, a liczba klatek nie spada poniżej 60. Testy w Unity po prostu ograniczę do kompletnego minimum (1-2 jednostki+budynek na planszy 10x10) i problem nie będzie aż tak odczuwalny.

Temat można zamknąć/ukryć/skasować czy co tam moderator będzie chciał bo i tak nie było z niego użytku :P