wydajność i oświetlenie - dyskusje
[ten ticket ma wyłącznie charakter informacyjno-dyskusyjny]
najpierw kontekst:
na r920 po odpaleniu new-game i wpisaniu w konsoli 'load-map data/maps/level3.xml entry' i wyjsciu z konsoli mam:
Sama aplikacje z tego co widze to mam skompilowana w trybie -O0, czyli bez optymalizacji. Aczkolwiek SMFL byl kompilowany w trybie -O2 (czyli ze standardowo-releasowo optymalizacjami).
Bumpa to moze i chcialbym u siebie zobaczyc, ale:
1) sam tego sobie nie zrobie, bo nie mam czasu i ochoty :(
2) jakies shadery chyba potrzebuje, co nie? a to chyba bedzie pewien problem osiagnac na tym zlomie (riva tnt2 :) )
A ten tego:
"Zdarzały się jednak przypadki że na laptopach FPS był już bliski granicy ataku epilepsji."
a co to byly za laptopy? mamy jeszcze do nich dostep? bo stawialbym hipoteze, ze mialy problem z driverami/akceleracja OpenGL i tez przepisanie renderingu na czysty OGL nic by im nie poprawilo. Te hipoteze mamy mozliwosc obalic/potwierdzic jakos?
najpierw kontekst:
cixot
07:20 PM
@Liosan, a wlasciwie po co nam #338 ? do czego to bedzie sluzyc?
DamorK @cixot, wydaje mi się, że #338 to co by szybciej działało :)
11:30 PM
Liosan np dlatego, ze ja nie jestem w stanie grac na debug :) a nie mowie tu o laptopie
11:35 PM
a jesli chcemy dodac jeszcze jakies inne bajery graficzne, typu oswietlenie (w jakiejkolwiek formie), to FPS jeszcze bardziej spadnie
Sep 06 03:00 AM
cixot smiem watpic - z tego co slysze to ludziom demko dziala z ponadakceptowalna iloscia fps'ow (nie kojarze, zeby ktos narzekal). Czy sie myle? Jesli sie nie myle, to szybkosci dzialania nie ma sensu poprawiac.
Inna sprawa, ze sobie odpalacie na debug, w ktore (ide o zaklad, nie znam sie tak mocno) msvc wpycha pelno assertow runtime'owych i tez nie widze mozliwosci, aby przepisanie renderingu na czysty OpenGL cos Wam pomoglo (no bo jak? co by przyspieszylo?)
03:05 AM
skad wiecie, ze to rendrering Wam tyle fpsow zjada w trybie debug? zapuszczaliscie jakis profiler czy cos?
03:10 AM
wobec tego jedyny cel jaki widze w #338 to zrealizowanie oswietelenia (dynamicznego?) - czy sie myle?
10:50 AM
DamorK Nie no debugiem się nie ma co przejmować, wiadomo, że debug sux. Zdarzały się jednak przypadki że na laptopach FPS był już bliski granicy ataku epilepsji. Bump-mapping nawet z jednym światłem trochę framerate'u zeżre wobec tego trzeba albo zrobić opcje wyłączenia tegoż efektu i olać albo poszukać wydajności gdzie indziej. Takie jest moje zdanie. Można natomiast zamienić kolejność i najpierw zrobić bumpa a potem zobaczyć na ile trzeba przyspieszyć.
A ja kiedyś tam zrobiłem sobie profiler jak duże mapy wolno działały i po usprawnieniu kolizji kolejnym kandydatem do optymalizacji był właśnie rendering. Pewnie niewiele się zmieniło od tego czasu
10:55 AM
Toxic, a jaki FPS masz na swoim toxicosprzęcie na dużych mapach?
Nie chciałbyś bumpa zobaczyć u siebie? :)
na r920 po odpaleniu new-game i wpisaniu w konsoli 'load-map data/maps/level3.xml entry' i wyjsciu z konsoli mam:
- ~16 fpsow na 640x480 okienku przy jednoczesnym przegladaniu assembli
- ~26 fpsow na 640x480 fullscreenie
Sama aplikacje z tego co widze to mam skompilowana w trybie -O0, czyli bez optymalizacji. Aczkolwiek SMFL byl kompilowany w trybie -O2 (czyli ze standardowo-releasowo optymalizacjami).
Bumpa to moze i chcialbym u siebie zobaczyc, ale:
1) sam tego sobie nie zrobie, bo nie mam czasu i ochoty :(
2) jakies shadery chyba potrzebuje, co nie? a to chyba bedzie pewien problem osiagnac na tym zlomie (riva tnt2 :) )
A ten tego:
"Zdarzały się jednak przypadki że na laptopach FPS był już bliski granicy ataku epilepsji."
a co to byly za laptopy? mamy jeszcze do nich dostep? bo stawialbym hipoteze, ze mialy problem z driverami/akceleracja OpenGL i tez przepisanie renderingu na czysty OGL nic by im nie poprawilo. Te hipoteze mamy mozliwosc obalic/potwierdzic jakos?
Leave a comment
Na przykład pan z ticketa #316 miał na laptopie ~20FPS. Zapewne na domyślnych opcjach czyli 800x600 w okienku. Dla mnie taki fps w dynamicznej grze już zaczyna przeszkadzać. Z ładną grafiką 1024x768 i z bumpem i jakmiś bajerami nie będzie się dało grać, ale dobra, zgadzam się, że nie jest to niezbędne, bo gra nawet teraz graficznie prezentuje się bardzo dobrze.
Wydaje mi się jednak, że jeśli taka optymalizacja nie pociąga za sobą bardzo gruntownych zmian to nam nie zaszkodzi, a może zwiększyć zadowolenie z gry u kilku osób.
Wydaje mi się jednak, że jeśli taka optymalizacja nie pociąga za sobą bardzo gruntownych zmian to nam nie zaszkodzi, a może zwiększyć zadowolenie z gry u kilku osób.
Może da się to usprawnić bez zbyt dużej ingerencji w kod. Z oświetleniem to jest spory problem, ponieważ trzeba shadery a jak już toxic wspomniał na rivia tnt2 na pewno nie pójdą. Jeśli chodzi o optymalizacje to mam dwa pomysły, za każdym razem pakować wszystko w jeden vertex array, tu pojawia się problem z teksturami (potrzebny atlas), no i trzeba by wszystko transformować na CPU co nie wiem czy jest dobrym pomysłem. Drugi pomysł to wpakować już wszystkie statyczne obiekty w VBO (tu atlas też potrzebny) i wysyłać tylko index'y (VBO są od OGL'a 1.5, czyli GF6600GT co dyskwalifikuje gorsze kompy (trzeba by dać dwa sposoby renderowania)). Co do wydajności to nie jest tragiczna chociaż za mała jak na tego typu grę. Na GF9800GT było ~850FPS, ale już na GF4MX ~30 więc coś jest nie tak biorąc po uwagę że ty tylko kilka quadów wyświetlonych na ekranie.
VBO jest dostępne od OpenGL 1.5 (?), więc karty dla których optymalizacja jest potrzebna i tak tego nie obsłużą sprzętowo :). Proponuję więc tablicę wierzchołków. I teraz, w OpenGL funkcja glDrawElements jest tania w porównaniu do glVertexPointer etc. Można więc zrobić tak:
- zaalokować potrzebne tablice dla 4 wierzchołków
- przesłać adresy tychże do OGLa ( glVertexPointer etc )
- dla każdego sprite'a zmieniać zawartość tych tablic
- glDrawElements etc
Culling dla potworków jest poprzez quadtree.
Ale wstrzymaj się może jeszcze, bo jak widać są wątpliwości, możliwe że uzasadnione. Niech się wypowie może jeszcze ktoś mądry (Liosan,rAum?) co z tym robimy :)
- zaalokować potrzebne tablice dla 4 wierzchołków
- przesłać adresy tychże do OGLa ( glVertexPointer etc )
- dla każdego sprite'a zmieniać zawartość tych tablic
- glDrawElements etc
Culling dla potworków jest poprzez quadtree.
Ale wstrzymaj się może jeszcze, bo jak widać są wątpliwości, możliwe że uzasadnione. Niech się wypowie może jeszcze ktoś mądry (Liosan,rAum?) co z tym robimy :)
on 2009-09-07 18:56 *
By rAum
Assigned to changed from DamorK to Liosan
Assigned to changed from DamorK to Liosan
Moim zdaniem jeśli pojawiają się wątpliwości to trzeba określić i zlokalizować nasz złom-target na którym chcemy osiągnąć odpowiedni FPS. Następnie zapuścić profiler tak aby zobaczyć co tak naprawdę jest tym wąskim gardłem - rendering czy też procesor ledwo dyszy. I wtedy zastanówmy się co, czy i jak warto optymalizować.
Osobiście uważam że warto by podnieść nieco wydajność aby móc dowalić więcej fajerwerków. W miarę prosta optymalizacja jest w particlach - mianowicie podmiania zaślepki alokatora pamięci na prawdziwy może nieco zwiększyć FPS.
Odbijam na Liosana, niech też się wypowie.
Osobiście uważam że warto by podnieść nieco wydajność aby móc dowalić więcej fajerwerków. W miarę prosta optymalizacja jest w particlach - mianowicie podmiania zaślepki alokatora pamięci na prawdziwy może nieco zwiększyć FPS.
Odbijam na Liosana, niech też się wypowie.
on 2009-09-09 07:34 *
By Liosan
Assigned to changed from Liosan to DamorK
Assigned to changed from Liosan to DamorK
no dobra, dobra, wypowiem się :) ostatnio trochę kiepsko u mnie z czasem...
pan z ticketa #316 ma zwalone sterowniki :) ja na swoim laptopie z zintegrowaną kartą graficzną intela nie spadam poniżej 50 FPS na paczce z dema - to jest raczej znośna jakość, nie?
Mimo to ciągle uważam że choć na razie wydajność jest znośna, to w przyszłości może to być problem. Liczba "bajerów" będzie raczej rosnąć niż maleć.
DamorK - kiedy ostatnio zapuszczałeś profiler? mógłbyś zrobić to jakoś teraz? To da nam dokładniejszy obraz sytuacji.
pan z ticketa #316 ma zwalone sterowniki :) ja na swoim laptopie z zintegrowaną kartą graficzną intela nie spadam poniżej 50 FPS na paczce z dema - to jest raczej znośna jakość, nie?
Mimo to ciągle uważam że choć na razie wydajność jest znośna, to w przyszłości może to być problem. Liczba "bajerów" będzie raczej rosnąć niż maleć.
DamorK - kiedy ostatnio zapuszczałeś profiler? mógłbyś zrobić to jakoś teraz? To da nam dokładniejszy obraz sytuacji.
Moje najczęstsze wyniki na pierwszej mapie: ilość taktów procesora (z QueryPerformanceCounter podczas wykonywania FrameStarted() dla każdego frame listenera:
FL: CDrawableManager: ~5500
FL: Logic: ~1600
FL: (wszystkie inne): 5-300
ALL: ~9000
Czyli CDrawableManager::FrameStarted zżera 5500 / 9000 = 61% czasu wykonywania wszystkich frame listenerów. Chyba dużo, nie?
FL: CDrawableManager: ~5500
FL: Logic: ~1600
FL: (wszystkie inne): 5-300
ALL: ~9000
Czyli CDrawableManager::FrameStarted zżera 5500 / 9000 = 61% czasu wykonywania wszystkich frame listenerów. Chyba dużo, nie?
Culling jest gdzie indziej, a jak pomijam przełączanie animacji to CDrawableManager::FrameStarted zżera ~4200 cykli. Najprościej by było użyć jakiegoś zewnętrznego narzędzia do profilowania OpenGLa (coś jak PerfHUD dla DirectXa) ale mam problemy z uruchomieniem u mnie takich narzędzi.
Na razie tyle, przyjrzę się jeszcze dokładniej.
Na razie tyle, przyjrzę się jeszcze dokładniej.
on 2009-09-10 13:26 *
By rAum
Assigned to changed from rAum to Liosan
Assigned to changed from rAum to Liosan
20 minut, w tym wliczając obczajenie o co biega z poszczególnymi parametrami i drobne eksperymenty.
Przy pomyślnych wiatrach myślę że po nagraniu akcji byłbym w stanie ten czas skrócić do jakichś 3-5 minut jeśli będzie zależało na masówce z uwzględnieniem w miarę dobrej jakości.
Ręcznie szacuję jakieś 8-12 minut roboty (przy pierwszym secie danego potwora - wiadomo że jak ustawie w miarę dobre parametry shaggiego to nie będę musiał od nowa kombinować z innymi zestawami jego animacji)
Przy pomyślnych wiatrach myślę że po nagraniu akcji byłbym w stanie ten czas skrócić do jakichś 3-5 minut jeśli będzie zależało na masówce z uwzględnieniem w miarę dobrej jakości.
Ręcznie szacuję jakieś 8-12 minut roboty (przy pierwszym secie danego potwora - wiadomo że jak ustawie w miarę dobre parametry shaggiego to nie będę musiał od nowa kombinować z innymi zestawami jego animacji)
on 2009-10-30 09:43 *
By Liosan
Description changed from najpierw kontekst:
to [ten ticket ma wyłącznie ch...
Milestone set to Bliżej nieokreślona przyszłość
Summary changed from pogadanki o tym i owym (bump) to wydajność i oświetlenie - dyskusje
Description changed from najpierw kontekst:
to [ten ticket ma wyłącznie ch...
Milestone set to Bliżej nieokreślona przyszłość
Summary changed from pogadanki o tym i owym (bump) to wydajność i oświetlenie - dyskusje
on 2010-09-05 22:51 *
By cixot
Status changed from New to Invalid
Status changed from New to Invalid
Updating tickets (#368, #370, #420, #529, #570, #578, #592, #609, #610, #613, #619, #627, #629, #636, #637, #663, #664, #699, #710, #732, #734, #738, #742, #744, #747, #411, #616, #634, #638, #661, #668, #697, #698, #719, #735, #168, #282, #340, #355, #365, #371, #383, #561, #642, #665, #700)
wontfix
wontfix