Autor Wątek: Algorytm rysowania tekstur z korektą perspektywy i filtrowaniem bilinearnym  (Przeczytany 2040 razy)

Offline integer111

  • Użytkownik

# Luty 16, 2010, 00:31:03
Witam mistrzów klawiatury (:D)
Chodzi mi ostatnio po głowie pewien diabelski pomysł. Mianowicie chciałbym sobie zoptymalizować rysowanie 3d we flashu, na przykład modyfikując kod Papervision albo innej library. W Papervision i innych, trójkąty rysowane są metodą programową co przy wykonaniu przez AVM (Adobe VirtualMashine - część Adobe FlashPlayer) jak wiadomo, nie jest zbyt wydajne. Zauważyłem pewien zabawny paradoks. Oczywiste jest, że trzeba rysowanie jak najbardziej przerzucić z CPU na GPU. Oczywistym też jest, że we Flashu CS4 i FlashPlayerze 10+ jest wsparcie dla shaderków. Najbardziej oczywistym wydaje się wykorzystanie drugiego dla sprawy pierwszego. I tu zabawny element: w żadnej bibliotece nie renderuje się tringlesów za pomocą shaderów. Jedyne co się za ich pomocą robi to to, co shadery wyprawiają w DX i OGL - czyli zwykłe shaderowe sprawy. Więc, jak pisałem wcześniej, postanowiłem to zmienić modyfikując którąś z istniejących bibliotek. Chciałbym, żeby flash rysował mi piekne trójkąty z filtrowaną, perspective correct texturą - nie potrzebne jest żadne cieniowane (nawet płaskie), żadne tam normalmapy, dot3 i inne reflection, refraction (woda ;)). Wystarczą tylko ładne tekstury, które się szybko rysują. I teraz uwaga: jeżeli ktoś kto miał styczność podrzuciłby linki do ALGORYTMU rysowania tekstur z filtrowaniem bilinearnym i poprawną perspektywą będę wdzięczny. Ewentualnie można też samemu wytłumaczyć ;).

Offline Mr. Spam

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

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Luty 16, 2010, 00:35:55
Dobra, ale żeby taki pixel shader mógł zadziałać, to najpierw trzeba narysować trójkąt z korekcją perspektywy.

Offline integer111

  • Użytkownik

# Luty 16, 2010, 00:40:27
Nie do końca, shadery Adobe to nie są zwykłe shadery ;). Same też rysować po pikslu mogą. Jakby taki shaderek dostał odemnie informacje o wierzchołkach trójkąta, i teksturę, to bez probelmu by narysował, tylko teraz pytanie jak on ma to rysować. Jak przekształcać teksturę tak by była z korektą perspektywy i filtrowaniem.

Offline Esidar

  • Użytkownik

# Luty 16, 2010, 01:42:01
Drobny "problem" to taki że shader'y we Flash działają na CPU a nie na GPU http://www.kaourantin.net/2008/05/adobe-pixel-bender-in-flash-player-10.html
GPU we flashu służy głównie za blitowanie movie clip'ów. Możesz więc co najwyżej uzyskać filtrowanie tekstur, ale zobaczysz raczej spadek prędkości i to pewnie spory.

Co do rysowania z korekcją perspektywy, let me google that for you ? :) http://www.google.pl/search?q=correct+perspective+texturing + http://www.google.pl/search?q=bilinear+interpolation
« Ostatnia zmiana: Luty 16, 2010, 01:45:09 wysłana przez Esidar »

Offline lukasyno

  • Użytkownik

# Luty 16, 2010, 11:11:35
AVM (Adobe VirtualMashine - część Adobe FlashPlayer)
jak wiadomo to ActionScriptVirtualMachine
 
Oczywistym też jest, że we Flashu CS4 i FlashPlayerze 10+ jest wsparcie dla shaderków.
Nie ma wspracia GPU JAKO TAKO to dziala tylko na FullScreenie i dla Filmow i w bardzo malym stopniu, cos maja zrobic od nowej wersji flasha 10.1 bo cale 3d flashowe wola o porządne wsparcie gpu... reszta naliczana jest przez CPU dlatego flash tak procesoro-żerny.


Offline integer111

  • Użytkownik

# Luty 16, 2010, 14:52:02
No dobra, kwestie optymalizacji chyba mamy za sobą. Nic sobie nie zoptymalizuje. A może? Może gdyby tak przerzucić te trudniejsze zadania (translacja, rotacja, rzutowanie, renderowanie) na shadery to i tak będzie szybciej (mimo ze na CPU)? W końcu te shadery są wydajniejsze niż samo AS. (Jeżeli tak nie jest proszę wyprowadzić mnie z błędu) Googlować sam potrafię, serio! ;) Ale jeżeli znalazłby się ktoś z chwilą wolnego kto byłby w stanie jako tak to wytłumaczyć. Rozumiem angielski i rozumiem w miarę matematykę 3d, ale jak czytam o matematyce 3d po angielsku to już mi trudno jest.

Wiem, że ogół wygląda tak: mam zawieszone w przestrzeni 3d punkty z XYZ i powiedzmy UV, oraz informacjami jak się łączą w trójkąty. Potem następuje backface culling, następnie rzutowanie (kwadratowe bądź perspektywiczne) na płaszczyznę (). Mając płaszczyznę z trójkątami obcina je się tak by pasowały tylko do tej płaszczyzny (nie pamiętam nazwy procesu), i na samym końcu już na płaszczyźnie 2d nanosi się odpowiednio poprzekształcane tekstury (filtorwanie, korekta perspektywy/affine).

No tak, tylko jak spoglądam na wiki http://en.wikipedia.org/wiki/Texture_mapping na wzorek to nic z niego nie rozumiem.

Offline yarpen

  • Użytkownik

# Luty 16, 2010, 14:59:48
W skrocie - interpolujesz glebokosc (1/z) oprocz U/V/X/Y i dla kazdego piksela robisz korekte perspektywy (uzywajac interpolowanych wartosci). Kiedys robilo sie to co 8/16 pixeli, zeby nie spowalnialo za bardzo. Tu masz dosyc dobry papier Kalmsa/TBL: http://www.lysator.liu.se/~mikaelk/doc/perspectivetexture/

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Luty 16, 2010, 17:05:52
Cytuj
Może gdyby tak przerzucić te trudniejsze zadania (translacja, rotacja, rzutowanie, renderowanie) na shadery to i tak będzie szybciej (mimo ze na CPU)? W końcu te shadery są wydajniejsze niż samo AS.
Zależy w jaki sposób te shadery możesz odpalać. Shaderów są dwa rodzaje (DX10 pomijamy): vertex shader i pixel shader. Na wejściu zawsze jest trójkąt. Vertex shader przelicza wierzchołki trójkątów, potem rasteryzer rysuje trójkąt i interpoluje dane do pixel shadera, a pixel shader wylicza tylko, jak i gdzie mają być próbkowane tekstury (to robi sampler) i robi różne operacje na kolorach.

Offline integer111

  • Użytkownik

# Luty 18, 2010, 13:24:50
Tak jak powiedział Esidar, shadery Adobe wykonują się na CPU, i w ogóle nie należy o nich myśleć jak o shaderach. Mogą przyjmować na wejściu Vector3D (coś ala wierzchołek) mogą zwykłe wartości Number lub int (Number to coś jak float), mogą też tablice wartości bitowych. Tak jak napisali w dokumentacji, shadery adobe mogą służyć na przykład do obróbki dźwięku (echo) w czasie rzeczywistym, i różne inne cuda. Ogólnie rzecz ujmując służą do pracy z dużą ilością danych, z którymi sam AS by sobie nie poradził. Wracając do tematu algorytmów to wyczaiłem - wydaje się - dobrą książkę, http://helion.pl/ksiazki/trik1.htm. Ktoś miał może styczność, opinie czy tam wszystko jest dobrze opisane będą mile widziane (mam na myśli wszystkie algorytmy itp).