PDA

Volledige versie bekijken : blur filter


Stuf
%Europe/Berlin %894 %2005, 22:27
hey..

ik heb een blurfilter over de x van een plaatje gegooid dmv AS.
check (http://members.home.nl/stefnitert/experiments/filters/bluronrollover.html)

maar nu vind ik het niet lekker smooth gaan.. zeker niet na een tijdje..
Om dit te voorkomen, moet ik dan bitmap caching gaan gebruiken? En zo ja, hoe moet dat?

alvast bedankt..

kH_
%Europe/Berlin %910 %2005, 22:50
Aangezien jouw filter voldoet aan een vast patroon is het beter om alle mogelijke blur toestanden van het plaatje vast te houden en daar doorheen te loopen. Een blur filter is
namelijk vrij ''duur', in die zin dat voor ieder pixel enkele omringende pixels worden genomen, waarvan het gemiddelde wordt bepaald. Ok, wel hardware versneld, maar toch.
Pas ook op, dat je niet teveel samples gebruikt, aangezien het filter op die manier simpelweg nog vaker over je plaatje gehaald wordt.

TheDutch
%Europe/Berlin %915 %2005, 22:58
Bitmap caching is alleen van toepassing wanneer je beweegende objecten hebt en het object wat je wilt cachen qua grootte niet continue veranderd. Je hebt geen bewegende objecten dus heeft het ook geen enkele zin om daar bitmap caching op toe te passen.

Wat vind je precies niet zo "smooth" lopen? Graag hoor ik ook wat meer info over je filmpje zoals FPS en misschien wat code :).

Stuf
%Europe/Berlin %030 %2005, 01:43
framerate = 30

dit is de code:

import flash.filters.*;


var bf:BlurFilter = new BlurFilter(100, 0, 10); // (blurX, blurY, quality)

picture.filters = [bf];

picture.onRollOver = function() {
this.onEnterFrame = function() {
bf.blurX += (0-bf.blurX)/5;
picture.filters = [bf];
}
}

picture.onRollOut = function() {
this.onEnterFrame = function() {
bf.blurX += (100-bf.blurX)/5;
picture.filters = [bf];
if(bf.blurX < 1) {
delete this.onEnterFrame;
}
}
}

Ik heb een tutorial van gotoandlearn een beetje ge"modified". Totdat dit eruit kwam.
Ik merk wel dat ie na een tijdje echt extreem het systeem vertraagd.. waar dat aan ligt weet ik niet..

@kH_

ik snap niet goed wat je hier mee bedoelt

Aangezien jouw filter voldoet aan een vast patroon is het beter om alle mogelijke blur toestanden van het plaatje vast te houden en daar doorheen te loopen.

TheDutch
%Europe/Berlin %200 %2005, 05:49
Waarom laat je de onEnterFrame continue lopen onRollOver en delete je hem wel bij onRollOut? Wanneer de blur gemaakt is dient ook bij onRollOver de onEnterFrame gedelete te worden :).

Verder is 30FPS een normale FPS snelheid en ziet de rest van je code er ook goed uit. Bij mij runt jouw Flashmovie dan ook keurig.

Erwin
ps. Volgensmij is jouw signature een beetje heel erg CPU afhankelijk en vertraag je mijn computer er enorm mee. Dit is erg vervelend omdat ik op die manier moet wachten tot de letters die ik type op het scherm verschijnen. Zou je hier wat aan kunnen doen?

SaphuA
%Europe/Berlin %300 %2005, 08:13
import flash.filters.*;
var bf:BlurFilter = new BlurFilter(100, 0, 10); // (blurX, blurY, quality)
picture.filters = [bf];
picture.onRollOver = function() {
this.onEnterFrame = function() {
bf.blurX += (0-bf.blurX)/5;
bf.blurX = Math.round(bf.blurX);
picture.filters = [bf];
}
}
picture.onRollOut = function() {
this.onEnterFrame = function() {
bf.blurX += (100-bf.blurX)/5;
bf.blurX = Math.round(bf.blurX);
if(bf.blurX < 1) {
bf.blurX = 0;
delete this.onEnterFrame;
}
picture.filters = [bf];
}
}


Dit zou het zoiezo wel wat moeten verbeteren... snap verder niet echt wat het probleem is :) Zou je niet een maxomum voor je filter instellen?

kH_
%Europe/Berlin %321 %2005, 08:43
Zet het aantal samples aub NIET op 10 zeg, geen hond ziet qua kwaliteit verschil met wat minder samples, maar je CPU merkt het wel degelijk ;)

10 samples -> filter 10x toepassen!

Wat ik bedoel met vast patroon -> maak in het begin een Array aan met alle mogelijke toestanden van het plaatje. Loop daar bij een onRollOver en onRollOut gewoon doorheen ipv continu het filter op je plaatje los te laten. Je alloceert daardoor wel een aardige hoeveelheid geheugen, maar het gaat wel sneller, wanneer alle plaatjes eenmaal 'berekent' zijn.
Gebruik een filter alleen realtime, wanneer alle mogelijke toestanden van hetgeen jij weer wilt geven niet vast staat, OF het dusdanig veel toestanden zijn, dat het qua geheugen ondoenlijk is om ze vooraf te genereren.

TheDutch
%Europe/Berlin %338 %2005, 09:07
kH_ heb je niet een benchmark bestandje die het verschil tussen beide manieren laat zien? Zou voor iedereen de boel een stuk meer verhelderen :).

kH_
%Europe/Berlin %401 %2005, 10:37
Tja, ik heb dr eigenlijk niet zo'n zin in, maar in principe pomp je gewoon een Array vol met BitmapData objecten, die je stuk voor stuk aan een movieclip knoopt.

TheDutch
%Europe/Berlin %417 %2005, 11:00
Vraag me ten zeerste af of dat echt sneller/merkbaar is...

Je kunt de stappen van die blur ook met de filter verzorgen, ligt er maar net aan hoe en hoevaak je de filter toepast. De filter uitvoeren met de juist arguments en aanroep of zelf steeds die MovieClip laden met BitmapData uit een array lijkt me qua performance nou niet zo verschillend.

Wie weet gaan we het ooit nog eens benchmarken om hier meer over te kunnen vertellen en weten :).

Stuf
%Europe/Berlin %496 %2005, 12:54
hey..
bedankt voor jullie moeite

@TheDutch..
Ik heb nu bij de onRollOver ook de onEnterFrame weggehaald zoals bij de onRollOut..
Nu moet ik wel zeggen dat het voorbeeld wat ik bovenaan geef, ook wel een heel lompe blur is. Normaal zou ik nooit een plaatje zo veel blurren..


@kH_
Eigenlijk heb ik geen ervaring met arrays, ik weet wat ze doen maar heb geen idee hoe ik ze kan toepassen in mijn script.
Op de flash 8 seminar heb ik wel gezien dat iemand de filters in een array had staan. Dus mss is het een oplossing

Nogmaals bedankt heren..

TheDutch
%Europe/Berlin %551 %2005, 14:14
De filters staan altijd in een array, dat is wat anders dan bitmap data in een array stoppen ;).

picture.filters = [bf];

of

filterArray = new Array();
filterArray.push(bf);
picture.filters = filterArray;

Hier zet je de filter "bf" in de filter array om toe te passen op MovieClip picture.

kH_
%Europe/Berlin %591 %2005, 15:12
Uhm TheDutch, dat weet ik wel, maar het gaat er nu juist om, dat het filter elke iteratie opnieuw wordt 'uitgevoerd'.