Skocz do zawartości

[OpenGL] Jak rysować oteksturowane rzeczy


Force

Polecane posty

Kolejne pytanie teoretyczne :D Ci co piszą w Dx-ie też mogą wypowiedzieć się, zezwalam :D

 

Otóż: załóżmy, że mamy sobie grę, gdzie są "k" rodzajów ludzików, każdy rodzaj ludzika ma jedną inną od pozostałych teksturę. I w tej grze rysujemy ludziki np. po ~30 każdego typu

i pytanie numer 1:

Zależy nam aby jak najrzadziej zmieniać teksturę więc obiekty powinny być rysowane wg rodzaju, ale czy to powinien zapewnić użytkownik co pisze grę w tym silniku czy silnik powinien?

Pytanie numer 2:

Jeśli silnik to jak to powinien zrobić. Czy może gdy wywołujemy metodę render na obiekcie to wrzuca obiekt do listy, która jest zawsze posortowana i gdy wywołujemy metodę w silniku np. EndRender to rysowane jest wszystko z tej listy i lista jest czyszczona i co klatkę zapełniana od nowa. Tu wg mnie czasochłonne byłoby wrzucanie w odpowiednie miejsce na liście obiektu, chyba, że się użyje drzewa AVL no i czy takie czyszczenie co klatką też jest dobre. Może już w tym miejscu gdzie jest EndRender dopiero się sortuje raz całą listę, wyświetla i kasuje. Może każdy rodzaj tekstury ma własną listę obiektów, więc nie ma sortowania? Może też macie jakieś inne rozwiązania lub czytaliście o takowych?

Baza tysięcy lotnisk: http://airportsbase.com

Link do komentarza
Udostępnij na innych stronach

Sortowanie po Z ma duze znaczenie, zauwaz ze obecnie wszystko kozysta z shaderow i rozumiem ze ty tez (przynajmniej "teoretycznie" chcesz miec shadery :P ) przed nakladaniem tekstury czy fragment shaderem karta graficzna "obcina" obiekt i pozostawia tylko to co jest widoczne tak wiec renderujac to co jest najblizej kamery zaslaniasz duzy obszar tak wiec inne obiekty nie beda renderowane cale(albo nawet w ogole) i to ci da wiekszego kopa niz kombinowanie z teksturami.

Link do komentarza
Udostępnij na innych stronach

Wiekszego kopa daje kombinowanie z shaderami, jedna zmiana shadera kosztuje kilak razy wiecej niż jedna zmiana tekstury. Poza tym jak niby chcesz sprawdzać czy obiekt jest zasłonięty? od tego jest bufor głębi. A gdy mam przedmioty przeźroczyste to muszę je ignorować

Baza tysięcy lotnisk: http://airportsbase.com

Link do komentarza
Udostępnij na innych stronach

Force w tym co Blind mówi jest trochę racji

 

Bynajmniej nie chodzi tu o obcinanie trójkątów na poziomie sceny, a o zwykły test głebi jeśli go nie przejdzie pixel to nie będzie dalej przetwarzana informacja no i mamy zysk na prędkości.

Blending właściwie tez trzeba sortować ale w przeciwnym kierunku. Nie ze względu na optymalizacje a na to że blendindg transparent lubi dawać niepoprawne wyniki gdy się rysuje z depth testem dlatego kolejność ma znaczenie.

 

Co się dziej z pixelem ?

http://www.pckurier.pl/archiwum/art0.asp?ID=649

 

occlusion culling pozwala na odrzucanie całych obiektów przysłanianych w czasie renderingu ale to już trzeba samemu implementować lub z pomocą karty graficznej.

 

 

Zajmij sie odrzucaniem całej geometrii przez culling albo portale drzewa oct czy cokolwiek dusza zapragnie a nie bzdurami jak by to miało jakieś większe znaczenie ... to moja rada.

www.spider.dathox.com :)

Link do komentarza
Udostępnij na innych stronach

nie wazne czy bierzesz low poly czy nie, chodzi o ograniczenie wywolywania fragment shadera ktory jest najbardziej wymagajacy. ehhh... ciagle nie rozumiesz.... problem zmiany tekstury w obecnych czasach jest najmniejszym probemem, karty graficzne ciagle sie rozwijaja i problem zmian tekstury byl ale ladnych kilka lat temu.

Link do komentarza
Udostępnij na innych stronach

zwłaszcza, że im coś dalej to jest tego mniej na ekranie

To może by wypadało posortować, renderować od najbliższych i dla najdalszych zasłoniętych nawet nie zmieniać tych shaderów i tekstur co nie? Trzeba by zakodzić coś do testu przysłaniania albo sprzętowo załatwić to na nowszych kartach graficznych ...

 

IMO to rozwiązanie wydaje się bardziej racjonalne niż wszystko upychać na ekran od razu...

www.spider.dathox.com :)

Link do komentarza
Udostępnij na innych stronach

60 animowanych ludzików przy sobie na pełnych shaderach heh xD a smoka w tej bajce nie było ? chyba na kombajny ten engine jakieś robisz :P

 

Robisz silnik do testów (wsadzania 60 ludzików i ile uciągnie fpsów) czy do gier ? bo ten problem z kapelusza wyciągnięty trochę. W grze parę postaci się pojawia i tyle obiektów przysłaniających jest zawsze wiele tego nie widać na pierwszy rzut oka bo przysłaniają to co za nimi :PP

 

aa i nie musisz sprawdzać tego co piszemy na forum gd :) Nie robimy tu żadnej teorii spiskowej ani nie wprowadzamy nikogo w błąd nikt Ci nie powie jednoznacznie co jest najlepszą metodą wszystko zależny od zastosowań silnika bo jak coś jest do wszystkiego to jest do niczego ...

 

W złym miejscu optymalizacji szukasz moim zdaniem ale cóż przekonasz się jeszcze :)

www.spider.dathox.com :)

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...