Originariamente pubblicato in data 15/05/1999
A
C
C
O
M
A
Z
Z
I
Lanimazione
Lanimazione
Vi siete mai chiesti come si ottengano le animazioni sullo schermo di un personal computer?
La prima esperienza del sottoscritto con un personal computer è datata 1980. A quell'epoca fummo trascinati da Lucio Bocchetti, ben noto ai lettori di Bit, in un non troppo austero centro di calcolo, dove un gruppo di cospiratori aveva requisito alcuni gloriosi Apple II Europlus e stava utilizzando, meraviglia delle meraviglie, Microsoft Olympic decathlon. Qualche mese più tardi il mio primo amore al silicio entrava in casa mia (mio padre mi aveva convinto ad accettare un computer al posto del videoregistratore che chiedevo da tempo. Ripensandoci in retrospettiva, suppongo che il genitore abbia avuto un'influenza tutt'altro che malvagia).
Dopo qualche altro mese, stavo smontando Olympic decathlon rotellina per rotellina, per vedere come potesse ottenere delle animazioni così ben fatte. Forse qualche lettore non si è mai chiesto come sia possibile realizzare una animazione su un PC ; questo è tuttavia un argomento piuttosto interessante.
I precetti da seguire quando si vuole ottenere una animazione morbida sullo schermo di un personal computer sono gli stessi utilizzati nella cinematografia: alternando ad alta velocità immagini statiche di una figura in pose leggermente differenti tra loro, l'occhio resta ingannato e vede una figura in movimento.
Una pellicola cinematografica proietta 24 immagini al secondo; una trasmissione televisiva è formata da 20 immagini al secondo; e lo schermo di un personal computer ridisegna l'immagine 50 o 60 volte al secondo. La condizione sine qua non è dunque soddisfatta.
Il problema che incontriamo è tutt'altro: nessun personal computer è tanto veloce da poter sopportare la grande massa di elaborazione necessaria per animare morbidamente lo schermo. Come ben sappiamo, la grafica computerizzata è da sempre una consumatrice pantagruelica di memoria: e animare una figura significa spostare pacchi di byte, che rappresentano le diverse posizioni della figura in movimento, dalle locazioni dove sono state memorizzate alle locazioni che il computer trasmette allo schermo sotto forma di immagine.
I personal dalla natura più orientata al videogame, come Commodore Amiga e il glorioso C64 prima di lei , risolvono il busillis con un trucco di natura hardware. Al microprocessore che governa la macchina viene affiancato un secondo chip, più modesto ma specializzato nello spostamento ad alta velocità dei byte su e giù per la memoria.
Le figure animate da questo chip vanno sotto il nome di sprite (uno sprite non è una bevanda analcolica, ma uno spiritello del folklore anglosassone). L'uso degli sprite permette animazioni caratterizzate da una velocità e una morbidezza notevoli, e i pochi problemi che si presentano sono relativi alla sincronizzazione tra il microprocessore e il chip che muove gli sprite e al riconoscimento delle collisioni tra sprite (perchè quando un fantasma raggiunge PacMac, per esempio, il giocatore ha perso!) Su Amiga, la macchina grafica per antonomasia, alla disponibilità degli sprite si aggiunge una caratteristica che non ha pari altrove: Amiga può visualizzare come pagina grafica un blocco qualunque dei 512 Kbyte inferiori.
Cos'è una pagina grafica? Chiamiamo pagina grafica quella zona della memoria di un computer che può venire utilizzata per la grafica. Spieghiamoci con un esempio: se mettiamo il numero 01 23 45 67 89 nei primi byte della pagina grafica vediamo sullo schermo grafico dieci pixel di dieci colori diversi. Se poi sostituiamo la sequenza 01 23 con la sequenza 00 00 i primi quattro punti divengono una linea uniforme del colore numero zero.
Se un computer possiede almeno due pagine grafiche, cioé due zone distinte che possono venire visualizzate come immagine grafica, si può fare una buona animazione anche senza sprite. Il computer disegna sulla pagina grafica numero uno mentre la numero due è visualizzata; poi scambia le due pagine, cioé smette di visualizzare la seconda in favore della prima.
Questo costituisce un passo dell'animazione, visto che le due immagini non coincidono. A questo punto il computer disegna sulla pagina due. Il processo si ripete finchè ce ne sia bisogno.
Il Macintosh e gli Apple II hanno due pagine grafiche. Amiga, come abbiamo detto, può averne sino a otto. I computer Ibm e compatibili, tipicamente, ne hanno una sola. Se non si hanno due pagine grafiche a disposizione l'unico sistema a disposizione per effettuare dell'animazione è la forza bruta: il microprocessore del computer deve cancellare le figure e ridisegnarle tra un passaggio e l'altro del pennello elettronico che disegna lo schermo.
Ovviamente, questo metodo è molto più difficile e meno flessibile nell'applicazione dei due che abbiamo già citato: ecco uno dei motivi per cui il Pc Ibm non ha a disposizione giochi degni di confronto con quelli delle altre macchine (la ragione più valida, però, è un'altra: i possessori dei Pc in Ms/Dos preferiscono utilizzarli per compiti di fatturazione, magazzino, contabilità e gestione condominii, e al mercato, si sa, non si comanda).
Per poter animare una schermata grafica avendo una sola pagina grafica a disposizione si fa solitamente uso di Vblint, l'interrupt verticale sincronizzato allo schermo. Semplificando un po' (un bel po', chiediamo perdono agli esperti di hardware), un programma che faccia dell'animazione può fare in modo di conoscere il momento in cui il pennello elettronico che disegna o ridisegna lo schermo (da sinistra a destra, dall'alto in basso) ha raggiunto il fondo dello schermo. Il pennello ci mette un po' per risalire, e quindi passa qualche tempo prima che ricominci a tracciare dalla parte alta dello schermo.
Il programma, sincronizzandosi col pennello, disegna nella pagina grafica in un punto che il pennello non sta toccando: in questo modo evita gli sfarfallii che accompagnerebbero altrimenti l'animazione.
E il piccolo miracolo del software è compiuto ancora una volta.