perjantaina 25. tammikuuta 2008

Pikselin piirtoa

Kun nyt olemme alkaneet puhua 3d:stä niin meidän pitää puhua myös pikseleistä, koska ilman niitä emme saa aikaan kunnon 3d:tä. Toki jonkinlaista saadaan rendattua ilman pikseleitäkin, mutta ongelmia tulee. Varsinkin teksturoidessa ja Z-bufferin kanssa. Teksturointi vielä joten kuten onnistuu, mutta Z-Buffer on mahdoton ilman pikseleitä ja vaihtoehdoksi jää Z-Sort, joka ei toimi kunnolla. Tästä syystä Sandyn ja Papervisionin polyt napsahtelee eikä piirry aina oikein.

Ongelma kuitenkin on, että flash on hidas tuhertamaan pikseleitä. Nyt kuitenkin meillä on AS3 ja sen kehuttu huima nopeus käytössämme, joten testataan millä vahudilla pikseliä ruutuun saadaan ja millä tavalla saadaan niitä sinne nopeitein.

Tässä siis testiä parista eri tavasta piirtää pikseleitä. Testit piirtää kuvan mukaisen kuvan 10 kertaa ja laskee keskiarvon kokonaispiirtoajasta. Testikoneena Intel dual core 1.86GHz, 2GB ja GeForce 7600 GT.



Testi 1: Pikselin piirtoa joka pikselille setPixel() methodilla.
pixelBench1.swf
pixelBench1.fla

Keskimääräinen piirtoaika: 24.4ms
FPS: 40.98

Testi 2: Pikselit kirjoitetaan ensin byteArray objektiin josta se piirretään kerralla bitmapData objektiin ja näytetään ruudulla.
pixelBench2.swf
pixelBench2.fla

Keskimääräinen piirtoaika: 22.6ms
FPS: 44.25
Parannusta testiin 1: 7.38%
Tämä testi koossa 640*480 vei aikaa 92ms eli fps oli 10.87.
Jos poistamme jakolaskut for-looppien sisältä saamme nipistettyä piirtoajan 68.6ms fps 14.58.

Testi 3: Sama kuin testi 2, mutta tällä kertaa emme luo bytearrayta joka kerta uudestaan vaan käytämme samaa arrayta. Tämä ei yllättäen nopeuttanut mitään. Tosin matikkaa tarvittiin vähän lisää, josta johtunee tuo hidastuminen. Yleensä kuitenkin muistin varaaminen dynaamisesti on hidasta ja jota pitäisi välttää, mutta tässä kohtaa ei niin näytä olevan. Kenties flash sisäisesti käsittelee bytearrayta niin ettei tästä ole hyötyä.
pixelBench3.swf
pixelBench3.fla

Keskimääräinen piirtoaika: 28.6ms
FPS: 34.97

Huomaamme että versio 2 on nopein, mutta sekin on kuitenkin todella hidas ja aivan liian hidas jotta voisimme piirtää sillä oikeaa 3d grafiikka reaaliaikaisesti. Eli joudumme edelleen AS3 ajallakin välttelemään pikselin piirtoa ainakin minun koneellani :(.

2 kommenttia:

MP3 e MP4 kirjoitti...
Blogin järjestelmänvalvoja on poistanut tämän blogitekstin.
xcx kirjoitti...

Poistettu komentti oli spammia.