Aktualności: C64 Power - online od stycznia 2000 !

Autor Wątek: fade in/out grafiki w multicolorze  (Przeczytany 1510 razy)

0 użytkowników i 1 Gość przegląda ten wątek.

Nitro__

  • Gość
fade in/out grafiki w multicolorze
« Odpowiedź #15 dnia: 18 Maja 2010, 14:12 »
                   
Cytat:
no ale jesli ma sie to wykonac dla kazdej komorki, oraz dla colorRamu to nadal nie wystarcza czasu w jednej ramce -patrz wylicznia wyzej.

Prawda, choc nie wziales jednego sposobu pod uwage, puszczenia kodu od dolnej ramki, za kazdym razem bedzie sie troche zwiekszac ale powinno wystarczyc na caly fade.
Ogolnie mowie caly czas o fade oucie ktory jest prostszy bo wartosci wyjsciowe wszystkich komorek sa jednakowe.
Co do fadeinu, to metoda na calkowity precalc screenramow bedzie najlepszym rozwiazaniem, do dwoch bankow bitmapy i voila, mamy 16\'o kolorowy fade.
                   
Cytat:
Kutfa Nitro daj tu jednak cala procedure tego fadingu

Mowisz o fadeoucie? Jak wyzej.

Offline Skull

  • Level 6
  • ******
  • Wiadomości: 2034
fade in/out grafiki w multicolorze
« Odpowiedź #16 dnia: 18 Maja 2010, 14:23 »
dobra juz widze, czyli rewolucji nie bedzie.

zielok__

  • Gość
fade in/out grafiki w multicolorze
« Odpowiedź #17 dnia: 18 Maja 2010, 14:39 »
                   
skull napisal:
dobra juz widze, czyli rewolucji nie bedzie.


Wykorzystac DMA w REU i bedzie rewolucja \"Smile\"

Offline Sebaloz

  • Level 6
  • ******
  • Wiadomości: 1520
fade in/out grafiki w multicolorze
« Odpowiedź #18 dnia: 18 Maja 2010, 15:49 »
                   
skull napisal:
nie dawno wykorzystalem (z powodzeniem) to:


Trzeba bylo wrzucic linka do calosci

http://atariarea.krap.pl/forum/viewtopic.php?pid=104175#p104175

Offline Skull

  • Level 6
  • ******
  • Wiadomości: 2034
fade in/out grafiki w multicolorze
« Odpowiedź #19 dnia: 18 Maja 2010, 16:02 »
                   
Sebaloz/Lepsi.De napisal:
                   
skull napisal:
nie dawno wykorzystalem (z powodzeniem) to:


Trzeba bylo wrzucic linka do calosci

http://atariarea.krap.pl/forum/viewtopic.php?pid=104175#p104175


hehe, ale ja wykorzystalem tylko to co wkleilem \"Smile\")))

Offline Sebaloz

  • Level 6
  • ******
  • Wiadomości: 1520
fade in/out grafiki w multicolorze
« Odpowiedź #20 dnia: 18 Maja 2010, 16:19 »
                   
skull napisal:
hehe, ale ja wykorzystalem tylko to co wkleilem \"Smile\")))


I po co te nerwy? Pokaz swoj kod to powiem co wykorzystales \"Smile\"

Nitro__

  • Gość
fade in/out grafiki w multicolorze
« Odpowiedź #21 dnia: 18 Maja 2010, 17:01 »
Kolko Bresenhama w ASM\'ie, akurat dla trybu tekstowego:
http://codebase64.org/doku.php?id=base:bresenham_circle_routine&s[]=circle

fenek__

  • Gość
fade in/out grafiki w multicolorze
« Odpowiedź #22 dnia: 18 Maja 2010, 18:45 »
Fade in mozna zrobic tak samo jak fadeouta.
Z tym ze to raczej metoda do dem/kolekcji ale nie gier.

Skoro jest 16 kolorow #$0f ($0x) to mozna dla kazdego koloru wygenerowac prosta 16 bajtowa tabelke przejscia od danego koloru do czarnego (wygaszenie).
Teraz wiaze sie te tabelki ze soba #$0f x #$0f i powstaje #$ff 256 tabelek przejsc kolorow. Tabelki sa niezalezne od siebie.
Mozna je najprosciej rozmiescic w pamieci co 16 bajtow, zajma $1000 bajtow.

Co do make\'a procedury wygaszania to wyglada to tak:
 - bierzemy bajt z ekranu
 - dla bajtu pobieramy adres tabelki fejd ina/auta
 - adres wstawiamy do spidkodu
 - dla $d800 mozna postapic tak samo, albo ograniczyc adres do tablic
  #$0x
 - wskazowka: jezeli mamy masywne problemy z pamiecia dobrze aby tabelki z zerem #$0x nie lezaly w pamieci ram $d000-$dfff \"Wink\"

fejdin/aut wyglada tak:
lda tabelka_kolorow_dla_danego_bajtu,x
sta screen

cykle:5+4=9*1000 bajtow=9000 cykli, *2 ($d800) = 18000

18000 cykli z 18656 wiec ciezko z odgrywaniem muzyki.

Tu mozna jeszcze zrobic 2 optymalizacje.
Pierwsza dotyczy ekranu, jako ze jest 256 kombinacji a pol ekranu jest 1000 to mozna przeskanowac ekran i sprawdzic ktora kombinacja wystepuje dla ktorych pol ekranu.
np. #$6b powtarsza sie dla screen+$0200, screen+$0234, screen+$344
spidkod wyglada wtedy tak
lda tabelka_kolorow_dla_danego_bajtu,x
sta screen+$0200
sta screen+$0234
sta screen+$0344
W ten sposob 1000 odczytow lda $yyyy,x ograniczamy do 256 odczytow
co daje przyspieszenie o 1000-256=744*5=3720 cykli
3720 cykli/63=59 lini rastra -> czyli jest czas na odgrywanie muzyki

No i to samo zrobic dla $d800 tylko jeszcze kolory $d800 andowac przez #$0f, aha w procedurze make\'a nie spidkodzie!.
(czasem niektore edytory/konwertery syfia pamiec kolorow $d800).
Mozna pokusic sie o polaczenie procedury dla ekranu i $d800 ale trzeba
dokladnie sprawdzic ile jej wykonanie zajmie rastrow dla danego obrazka i jak bedzie wygladac odswiezanie.

Ogolnie sam fejd in/out wykonuje sie poprzez zmiane rejestru X i skoku do spidkoda.
Zmieniamy wartosc rejestru X=#$00-#$0f i mamy albo fejd in albo fejd aut.

Ostatnia optymalizacja to przeskanowanie mapy ekranu i mapy kolorow, w celu sprawdzenia ile w rzeczywistosci potrzebujemy tablic kolorow z tych 256 \"Wink\"

To co opisalem dotyczy wygaszania calosci ekranu jednym indeksem, gdyby wygaszac okregiem, to wtedy trzeba dodatkowa przed \"kazdym\" bajtem odczytac wartosc rejestru X z komorki ze strony zerowej przyporzadkowanej dla danego okregu.
Dodatkowo mozna zeskanowac komorki ekranu po okregach i wtedy
tylko raz odczytuje sie rejestr X i rysuje wartosci na ekranie okregiem ale
to gryzie sie z optymalizacja opisana wyzej jeden odczyt lda -> kilka sta (komorki moga nalezec do innych okregow).

No moglem tu zastosowac jakies skroty myslowe takze jak cos jest nie jasne to moge cos dopisac.

Offline Skull

  • Level 6
  • ******
  • Wiadomości: 2034
fade in/out grafiki w multicolorze
« Odpowiedź #23 dnia: 18 Maja 2010, 19:29 »
i to jest calkiem zbalansowana idea, brawo Fenek (chociaz ja i tak nie jestem nigdy zwolennikiem speedcode)

lda tabelka_kolorow_dla_danego_bajtu,x
sta screen

cykle:5+4=9*1000 bajtow=9000 cykli, *2 ($d800) = 18000

nawet mozna liczyc 4+4

bo lda $aaaa,x zajmuje 5 cykli tylko gdy przekracza strone pamieci (to w sta $aaaa,x jest 5 cykli)

wnioski: Carrion, jak widzisz z pozoru blachy \"efekt\" fade-ingu obrazka na c64 nie jest taki prosty, jak sie wydaje \"Smile\")))))
A wiec patrzcie na to teraz w demach(moze grach), klatkujcie i podziwiajcie albo i nie.

fenek__

  • Gość
fade in/out grafiki w multicolorze
« Odpowiedź #24 dnia: 18 Maja 2010, 19:36 »
Heh, no wlasnie mialem o tych cyklach dopisac.
Policzylem ze 5 bo nie pisalem nic o rozmieszczeniu tablic,
mozna spokojnie zejsc do 4 cykli.

Nitro__

  • Gość
fade in/out grafiki w multicolorze
« Odpowiedź #25 dnia: 18 Maja 2010, 19:43 »
fenek:+1 za rozpisanie tematu, mi z dzisiejszego zaspania cos sie pokrecilo i uznalem fadein za trudny bo tabelki by zajely 64kb \"Smile\"

fenek__

  • Gość
fade in/out grafiki w multicolorze
« Odpowiedź #26 dnia: 18 Maja 2010, 20:01 »
Ee dobra to jeszcze cos dopisze, ale to dotyczy preformatowania obrazka
przed uzyciem go do efektu.
Wyzej napisalem ze jest 256 kombinacji kolorow, no ale mozna to jeszcze przeskoczyc.
Przeszukujemy ekran pamieci kolorow dla pary bajtow zamienionych nybblami czyli np. dla wartosci #$5b szukamy #$b5 i jak znajdziemy #$b5
w pamieci kolorow to bierzemy wartosci bitmapy dla tego pola i podmieniamy kombinacje bitow \"Smile\"

Taki skan i podmianke robimy dla calego obrazka i w sumie na ekranie powinno byc to co bylo ale dane sie zmieniaja. Dopiero po tym stosuje sie taki obrazek do dalszych efektow.

Tak poza tym to czasem dla hiresu lub multi warto samemu wygenerowac poprawna mape uzycia kolorow na podstawie bitmapy i wykonywac \"czyszczenie\" obrazka z nieuzytkow/pozostalosci z edytorow.

zielok__

  • Gość
fade in/out grafiki w multicolorze
« Odpowiedź #27 dnia: 18 Maja 2010, 20:19 »
Na Fenka zawsze mozna liczyc. Brawo za to, ze ci sie chcialo to wszystko opisac.

Offline Sebaloz

  • Level 6
  • ******
  • Wiadomości: 1520
fade in/out grafiki w multicolorze
« Odpowiedź #28 dnia: 18 Maja 2010, 20:30 »
                   
fenek napisal:
Przeszukujemy ekran pamieci kolorow dla pary bajtow zamienionych nybblami czyli np. dla wartosci #$5b szukamy #$b5 i jak znajdziemy #$b5 w pamieci kolorow to bierzemy wartosci bitmapy dla tego pola i podmieniamy kombinacje bitow \"Smile\"


Warto tez wziazc pod uwage mape kolorow $d800, majac trzy kolory w bloku mozna poszukac ktore kombinacje najczesciej sie powtarzaja i zrobic megaswap na bitmapie i dwoch mapach kolorow \"Smile\"

Offline c---n

  • Level 5
  • *****
  • Wiadomości: 861
fade in/out grafiki w multicolorze
« Odpowiedź #29 dnia: 19 Maja 2010, 08:38 »
fenek: swietny tekst - dzieki
juz teraz wiem dla czego nie zostalem koderem \"Wink\" nie chcialo by mi sie tego wszystkiego wymyslac

btw: jesli jednak wszystko dobrze zrozumialem to metoda sebaloza aby zrobic precalc 8 faz fade in/out bedzie najlatwiejszy do zakodowania.

mowie 8 faz bo nie wydaje mi sie aby 16 faz (przez wszystkie kolory) wygladalo ok ablo bylo wogule potrzebne. zgadzam sie z zielokiem ze 8 faz (po odcieniach) wystarczy aby to ladnie wygladalo.

i jeszcze raz na koniec - nie jestem przekonany zeby to musialo chodzic co ramke - 8 odcieni np co druga ramke powinno wygladac rownie plynnie i ladnie.
Tak patrzac na ten watek mam coraz wiecej szacunku dla SES\'a ktory skodowal fade po okregu we FLI. (COP 75%/100%)