Je vais vous dévoiler quelques secrets sur les clignotements de sprite. De quoi devenir un vrai spécialiste!
https://abs.twimg.com/emoji/v2/... draggable="false" alt="🙂" title="Leicht lächelndes Gesicht" aria-label="Emoji: Leicht lächelndes Gesicht">
Vous savez probablement que nos consoles qui embarquent des fonctions hardwares d& #39;affichage de sprite ont des limites...
#Retrogaming #NES
1/18
Vous savez probablement que nos consoles qui embarquent des fonctions hardwares d& #39;affichage de sprite ont des limites...
#Retrogaming #NES
1/18
Il y a plusieurs contraintes sur l& #39;affichage des sprites mais la principale qui défini la capacité de ces hardwares c& #39;est le nombre de sprite affichable sur la même ligne (ou de pixel-sprite) qui sur une NES correspond à 8 sprites de 8 pixels (= 64 pixels-sprite).
2/18
2/18
Cette forte contrainte par ligne est liée simplement au balayage de l& #39;image qui se fait ligne par ligne à une vitesse très élevée et ne laisse que peu de temps pour préparer la prochaine (60 microsecondes).
Sur cette scène qui semble simple on peut déjà dénombrer 12 sprites!
3/18
Sur cette scène qui semble simple on peut déjà dénombrer 12 sprites!
3/18
C& #39;est donc 4 de trop!
Le hardware de la NES (ou de la Master System) ne pouvant en afficher que 8, il y en a donc 4 qui ne pourront pas l& #39;être et vont disparaître.
On parle alors d& #39;overflow de sprite par scanline
https://abs.twimg.com/emoji/v2/... draggable="false" alt="🙂" title="Leicht lächelndes Gesicht" aria-label="Emoji: Leicht lächelndes Gesicht">.
4/18
Le hardware de la NES (ou de la Master System) ne pouvant en afficher que 8, il y en a donc 4 qui ne pourront pas l& #39;être et vont disparaître.
On parle alors d& #39;overflow de sprite par scanline
4/18
C& #39;est le programmeur qui choisit les sprites qui vont disparaître selon l& #39;ordre dans lequel il va construire la liste de sprite qui définit les priorités de chacun.
Et son but va être d& #39;alterner à chaque frame pour que ce ne soit pas toujours le même sprite qui disparaît.
5/18
Et son but va être d& #39;alterner à chaque frame pour que ce ne soit pas toujours le même sprite qui disparaît.
5/18
C& #39;est cette alternance choisie et provoquée volontairement par le programmeur qui va produire ce fameux clignotement de sprite (flickering) et nous permettre ainsi d& #39;entrevoir tous les sprites malgré cette limite hardware.
6/18
6/18
Le clignotement n& #39;est donc pas une conséquence directe de cette limite hardware. C& #39;est quelque chose de provoqué et contrôlé par le programmeur.
Si on ne fait pas cela ça donne ce type de disparition prolongée et on ne veut pas qu& #39;un sprite disparaisse totalement de l& #39;écran.
7/18
Si on ne fait pas cela ça donne ce type de disparition prolongée et on ne veut pas qu& #39;un sprite disparaisse totalement de l& #39;écran.
7/18
Si j& #39;ai pris le temps de vous expliquer tout ça c& #39;est uniquement pour ce dont je vais parler maintenant qui est le véritable sujet du thread
https://abs.twimg.com/emoji/v2/... draggable="false" alt="🙂" title="Leicht lächelndes Gesicht" aria-label="Emoji: Leicht lächelndes Gesicht">
En effet parfois les programmeurs provoquent volontairement un overflow de sprite pour s& #39;en servir comme effet graphique.
8/18
En effet parfois les programmeurs provoquent volontairement un overflow de sprite pour s& #39;en servir comme effet graphique.
8/18
Le meilleur exemple qui est aussi le premier usage de ce trick sur NES à ma connaissance c& #39;est dans les donjons de #Zelda quand on franchit les portes.
9/18
9/18
En effet ce type d& #39;effet d& #39;occlusion de sprite par le décors est compliqué à gérer sur NES de par la façon dont celle ci traite les priorités d& #39;affichages entre les sprites et le background (ce type d& #39;occlusion est plus simple à gérer sur #MasterSystem).
10/18
10/18
Et l& #39;une des solutions pour faire disparaître le sprite de façon progressive c& #39;est de produire volontairement une saturation de sprite sur toutes ces lignes.
On peut effectivement voir ici un paquet de 8 sprites volontairement superposés dans la marge gauche de l& #39;image.
11/18
On peut effectivement voir ici un paquet de 8 sprites volontairement superposés dans la marge gauche de l& #39;image.
11/18
Ces sprites vides (et donc invisibles) créent un overflow sur toutes les lignes de l& #39;image qui se trouve au-dessus de la porte et donc force la disparition du sprite de link (et de tous les autres) sur ces lignes de l& #39;écran.
12/18
12/18
J& #39;appelle ça le trick de l& #39;overflow
https://abs.twimg.com/emoji/v2/... draggable="false" alt="🙂" title="Leicht lächelndes Gesicht" aria-label="Emoji: Leicht lächelndes Gesicht">.
Il existe d& #39;autres méthodes pour faire de l& #39;occlusion de sprite sur NES. Au moins 4 autres (par zone de transition utilisé ici pour les portes Est-Ouest, par priorité complexe, par bank switching, par découpage du sprite...).
13/18
Il existe d& #39;autres méthodes pour faire de l& #39;occlusion de sprite sur NES. Au moins 4 autres (par zone de transition utilisé ici pour les portes Est-Ouest, par priorité complexe, par bank switching, par découpage du sprite...).
13/18
Mais ce trick de l& #39;overflow spécifiquement on peut le retrouver quand même dans d& #39;autres jeux NES comme #Castlevania 2 pour faire disparaître le sprite de Simon quand il marche dans les marécages...
14/18
14/18
..ou dans Felix The Cat et quelques autres.
Ce trick à déjà été utilisé avant Zelda. Après beaucoup de recherches je l& #39;ai retrouvé seulement dans 4 jeux plus anciens. 2 jeux SG-1000 (dont H.E.R.O.) et 2 jeux Coleco (dont River Raid).
15/18
Ce trick à déjà été utilisé avant Zelda. Après beaucoup de recherches je l& #39;ai retrouvé seulement dans 4 jeux plus anciens. 2 jeux SG-1000 (dont H.E.R.O.) et 2 jeux Coleco (dont River Raid).
15/18
Ces machines en ont encore plus besoin que la NES car elles partagent le même chip graphique de Texas Instrument (avec aussi le MSX) qui n& #39;a vraiment aucune fonction de priorité d& #39;affichage entre sprite et background pour aider.
16/18
16/18
Si je parle de ce trick c& #39;est aussi pour vous avertir de faire attention avec la fonction des émulateurs qui permet de s& #39;affranchir des limites hardwares d& #39;affichage de sprite (et donc du clignotement).
17/18
17/18
Car comme je viens de vous l& #39;expliquer, cette limite hardware était donc aussi détournée par les programmeurs pour faire des effets visuels.
Si jamais vous activez cette option d& #39;émulation sur Zelda ca risque de vous donner ce résultat
https://abs.twimg.com/emoji/v2/... draggable="false" alt="⬇️" title="Pfeil nach unten" aria-label="Emoji: Pfeil nach unten">.
18/18
Si jamais vous activez cette option d& #39;émulation sur Zelda ca risque de vous donner ce résultat
18/18
Sauf avec Mesen par exemple qui a une option pour adapter intelligemment (autant que possible) cette fonction selon la situation.
N& #39;oubliez pas si un jour vous voulez retrouver facilement ce type de thread, aller sur mon compte secondaire d& #39;archivage @UpsilandreA
https://abs.twimg.com/emoji/v2/... draggable="false" alt="🙂" title="Leicht lächelndes Gesicht" aria-label="Emoji: Leicht lächelndes Gesicht">
N& #39;oubliez pas si un jour vous voulez retrouver facilement ce type de thread, aller sur mon compte secondaire d& #39;archivage @UpsilandreA