Autor Wątek: BlossomRenderFactory - moj pierwszy powazny silnik graficzny  (Przeczytany 9285 razy)

maxest

  • Gość
# Marzec 25, 2008, 17:55:45
Ja tylko ponowie jeszcze raz swoje pytanie, ktore gdzies tam uszlo w tlumie.. :)
Otoz na wykresach w PerfHUDzie dostaje wszedzie tekst "Data unavailable. Instrumented Driver Not Found". Ktos wie o co moze chodzic?

Offline Mr. Spam

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

Offline Charibo

  • Redaktor

# Marzec 25, 2008, 18:12:33
A masz instrumented driver? :)

PerfHUD żeby pokazać pazurki potrzebuje specjalnego sterownika - poszukaj na stronie NV ;)

Offline Ventor

  • Użytkownik

# Marzec 25, 2008, 19:22:55
Jak instalowałem PerfHUD-a to jakieś sterowniki też się zainstalowały, może właśnie o nie chodzi. Plik, który ściągnąłem zajmuje około 90MB i nazywa się "NVPerfKit_x86_XP_5.10.1107.1130.exe".

Co do wydajności - pozwoliłem sobie podmienić geometrię na 280 losowo ułożonych sfer, każda po 224 trójkąty, razem 62720 trójkątów czyli nie za dużo jak na całą scenę. W pierwszej połowie wykresów kamera była obrócona tak, żeby ekran był czarny - zero renderowanych pixeli, druga połowa jak na screenie. Jak widać VS i VA (vertex assembly unit) już nie pozostają bez znaczenia jak w poprzednim przykładzie, zsumowane dają około 35% użycia GPU. Nie można więc tak po prostu powiedzieć, że zwiększenie ilości geometrii nie odbije się na wydajności. Przypomnę jeszcze, że nadal są tylko trzy tekstury.


maxest

  • Gość
# Marzec 25, 2008, 20:28:11
To podsumujmy troche - czy rozwiazaniem, a przynajmniej po czesci, problem z wydajnoscia bedzie ograniczenie tych render target'ow i renderowanie wszystkiego od razu do back buffer'a, gdy bedzie to mozliwe? Jesli tak to oczywiscie to zrobie, na razie musze troszku porzadkow porobic :)

Ventor, Chcialbym jeszcze tylko odniesc sie do tego, co napisales kilka postow wczesniej - ze zabieram sie za efekty ktorych nie potrafie dobrze napisac. Coz, pewnie nie jestem w stanie wyciagnac max wydajnosci z tych efektow, ale przeciez jesli nie bede probowal to nigdy tego nie zrobie ;). Pisanie pojedynczych efektow demonstracyjnie jest zdecydowanie duzo prostsze, teraz, piszac silnik, trzeba to wszystko jakos zgrac. To nie jest proste a to przeciez moje pierwsze "powazne" podejscie :)

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Marzec 25, 2008, 20:32:52
Cytuj
czy rozwiazaniem, a przynajmniej po czesci, problem z wydajnoscia bedzie ograniczenie tych render target'ow i renderowanie wszystkiego od razu do back buffer'a, gdy bedzie to mozliwe?
Definitywnye. W Twoim przypadku myślę, że można się obejść bez rendertargetów w ogóle. :) Innym plusem takiego rozwiązania jest to, że jak komuś będzie teraz za dużo klatek, to będziesz mógł włączyć FSAA (w poprzednim podejściu było by to nieco utrudnione). :)

maxest

  • Gość
# Marzec 25, 2008, 20:49:11
Tyle za kilka tych render target'ow i tak bedzie mimo wszystko. W koncu jest shadow map'a. Poza tym nie wiem czy dla miekkich czasteczek nie bede potrzebowal render targetu, to tam tez bedzie sie mieszac sumowanie (czasteczek) z przezroczystoscia. Ale na pewno pozbede sie render targetu liczacego wspolczynniki mgly - metoda Reg'a, ktora zastosowal w swoim silniku. Teraz obliczenia mgly przeniose na pixel shader'y. To raczej nie bedzie duzo instrukcji - exp i kilka mnozen :)

Offline Ventor

  • Użytkownik

# Marzec 25, 2008, 21:11:52
Ja też jestem za tym żeby zacząć optmalizację od ograniczenia ilości rendertargetów. Później ewentualnie dalsze optymalizacje.

Ventor, Chcialbym jeszcze tylko odniesc sie do tego, co napisales kilka postow wczesniej - ze zabieram sie za efekty ktorych nie potrafie dobrze napisac. Coz, pewnie nie jestem w stanie wyciagnac max wydajnosci z tych efektow, ale przeciez jesli nie bede probowal to nigdy tego nie zrobie ;). Pisanie pojedynczych efektow demonstracyjnie jest zdecydowanie duzo prostsze, teraz, piszac silnik, trzeba to wszystko jakos zgrac. To nie jest proste a to przeciez moje pierwsze "powazne" podejscie :)
Nie jestem przeciwny pisaniu efektów w ogóle ale umieszczaniu ich od razu w silniku. Sam też nie robię w ten sposób, bo jak można zrobić coś optymalnie jeżeli nie wie się jeszcze jak to w ogóle zrobić (praktycznie, bo teoria to nie wszystko). Ja wychodzę z założenia, że najpierw trzeba wiedzieć jak działa dany efekt, wypróbować, "pobawić się", żeby zastanowić się nad jego optymalizacją i implementacją w silniku. Co to za sztuka na pałę skopiować (niekoniecznie dosłownie) 10 tutoriali ze świetnymi efektami, uzuskać słabą wydajność i powiedzieć "zanim zrobię na tym grę sprzety będą lepsze i będzie ładnie chodzić". Owszem, za jakiś czas sprzęty będą lepsze, ale silniki też ewoluują razem ze sprzętem i inni będą mieli lepsze efekty, więcej trójkątów i fpsów, a wtedy taki niedopracowany silnik wypadnie blado.

Warto też zastanowić się nad optymalizacją dopóki nie jest za późno. Nieraz już zaczynałem pewne części swojego silnika od nowa i wiem jak to boli, czasu zawsze brakuje a tu okazuje się, że kilka miesięcy pracy idzie do kosza - najbardziej ucierpiałem przy przejściu z Fixed Function na shadery, a przesiadki na DX 10 nie przeżyję ;)

maxest

  • Gość
# Marzec 25, 2008, 21:23:19
Wiesz... czesc efektow (dynamiczne swiatla, shadow volume) to robilem juz wczesniej. Jednak wtedy rzadko zdarzalo mi sie dokladniej przygladac jak szybko te efekty dzialaly. Dzialaly dobrze, plynnie, wiec zostawialem. Teraz, robic silnik okazalo sie, ze bawiac sie wczesniej shadow volume'ami zapomnialem, ze przeciez obiekty beda podlegac transformacjom, a co za tym idzie - generowanie bryly cienia na CPU przestaje byc dobrym rozwiazaniem :D. Tak wiec imho warto od czasu do czasu sprobowac polaczyc efekty w jakis silniczek bo wtedy wychodza najwieksze babole :)

Cytuj
Co to za sztuka na pałę skopiować (niekoniecznie dosłownie) 10 tutoriali ze świetnymi efektami
Zapewniam Cie, ze u mnie nie jest to w stanie przejsc - nie zaimplementuje efektu dopoki nie bede wiedzial jak go sie robi :) (kopiowanie niezrozumialych kodow zdecydowanie nie jest dla mnie ;))

Offline Ventor

  • Użytkownik

# Marzec 25, 2008, 23:22:48
Cytat: maxest
Wiesz... czesc efektow (dynamiczne swiatla, shadow volume) to robilem juz wczesniej. Jednak wtedy rzadko zdarzalo mi sie dokladniej przygladac jak szybko te efekty dzialaly. Dzialaly dobrze, plynnie, wiec zostawialem. Teraz, robic silnik okazalo sie, ze bawiac sie wczesniej shadow volume'ami zapomnialem, ze przeciez obiekty beda podlegac transformacjom, a co za tym idzie - generowanie bryly cienia na CPU przestaje byc dobrym rozwiazaniem :D. Tak wiec imho warto od czasu do czasu sprobowac polaczyc efekty w jakis silniczek bo wtedy wychodza najwieksze babole :)
... albo lepiej przemyśleć, zależy co szybsze - myślenie czy pisanie ;) Wiadomo, że nie da się przewidzeć wszystkiego, ale im więcej się uda tym mniej poprawiania.

Cytuj
Cytuj
Co to za sztuka na pałę skopiować (niekoniecznie dosłownie) 10 tutoriali ze świetnymi efektami
Zapewniam Cie, ze u mnie nie jest to w stanie przejsc - nie zaimplementuje efektu dopoki nie bede wiedzial jak go sie robi :) (kopiowanie niezrozumialych kodow zdecydowanie nie jest dla mnie ;))
Nie podejżewam Cię o to, bo po Twoich postach na forum widać, że tak nie jest. Po prostu Twój silnik sprawia takie wrażenie - są fajne efekty, ale niedopracowane i co gorsze niedopracowane są też inne rzeczy nie związane bezpośrednio z efektami. Taka moda chyba panuje tu na forum żeby robić per-pixel wypasy, a olać zwykły frustum culling :D

Niedawno zadałem pytanie http://forum.warsztat.gd/index.php/topic,6051.0.html, na które sam sobie później odpowiedziałem, choć do dzisiaj nie wiem czy dobrze. Brak zainteresowania tym tematem tłumaczę sobie tak, że po prostu nikt nie wie jak faktycznie jest, bo wszyscy olewają takie "bzdury" i wolą klepać kolejne efekty tłumacząc że na optymalizacje będzie czas. Ja zaczynam od optymalizacji najprostszych rzeczy, które mogą mieć zauważalny wpływ na końcową wydajność, więc jak skończę silnik nie będę się martwił, że połowa jest do przebudowy.

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Marzec 26, 2008, 00:28:13
Cytuj
Tyle za kilka tych render target'ow i tak bedzie mimo wszystko. W koncu jest shadow map'a.
No Shadow Mapy nie policzyłem. :)

Cytuj
Poza tym nie wiem czy dla miekkich czasteczek nie bede potrzebowal render targetu, to tam tez bedzie sie mieszac sumowanie (czasteczek) z przezroczystoscia.
Nie będziesz potrzebował. Wystarczy do tego zwykły blending i tylko sterujesz alpha per-pixel.

Cytuj
Ale na pewno pozbede sie render targetu liczacego wspolczynniki mgly - metoda Reg'a, ktora zastosowal w swoim silniku.
Jak pisałem kiedyś w innym wątku, możesz sie pozbyć bez problemu, nawet jeżeli chcesz robić mgłę w osobnym przebiegu (wtedy liczysz samą mgłę i sterujesz alphą przy blendingu). :)

maxest

  • Gość
# Marzec 26, 2008, 01:10:13
Cytuj
No Shadow Mapy nie policzyłem. Smiley
Dojdzie jeszcze jedna, gdy bede renderowal odbita scene zeby potem taka teksture zrzutowac na powierzchnie wody :)

Cytuj
Jak pisałem kiedyś w innym wątku, możesz sie pozbyć bez problemu, nawet jeżeli chcesz robić mgłę w osobnym przebiegu (wtedy liczysz samą mgłę i sterujesz alphą przy blendingu). Smiley
Tylko ze wtedy jest problem z przezroczystoscia. Jesli bede chcial w jakims koncowym przebiegu wyliczyc mgle to patrzac przez przezroczyste obiekty widze scene, ale bez mgly, wiec pewnie bede musial obliczenia wrzucic do shadera :)