Page 1 sur 2

Sprite et résolutions ?

Publié : lun. 27/févr./2023 18:11
par Fig
Bonjour à tous,

Je travaille sur un petit jeu multijoueur, et je me posais la question suivante:
Comme gérez vous les différentes résolutions avec les sprites ?

J'ai tout prévu pour du 1920x1080, mais sur une petite résolution, il faut tout réduire. En utilisant les zoomsprites, je perds trop de détails sur les sprites importants.
Faut il que je prévois tous mes sprites en différentes résolutions ?
Résolutions les plus utilisées en 2022 :
1920 x 1080 : 24,58 %
1366 x 768 : 13,73 %
1536 x 864 : 10,58 %
1600 x 900 : 8,52 %
1440 x 900 : 7,99 %
1280 x 720 : 5,9 %

Image

Re: Sprite et résolutions ?

Publié : lun. 27/févr./2023 21:17
par Ollivier
salut fig, je te suggérerais mon humble idée :

[sprite] -> grab* -> [image]
[image] -> smooth resize -> [image réduite]
[image réduite] -> draw -> [sprite]

Avec l'option smooth de ResizeImage() les pixels sont mélangés plutôt que supprimés. Ça atténue les imperfections du rétrécissement.


(*) : avec GrabDrawingImage()

Re: Sprite et résolutions ?

Publié : mar. 28/févr./2023 2:20
par G-Rom
J'ai tout prévu pour du 1920x1080
C'est bien le problème. L'idéal c'est d'ouvrir l'écran a la taille du bureau de l'utilisateur, et ensuite faire du placement "intelligent" de tes éléments.
en % par exemple , pour avoir toujours le même placement selon les différentes résolution.
Il n'y a pas de solution miracle , dès lors que tu donwscale, tu va avoir de la perte.

tu peut faire un produit en croix à partir de la résolution de ton choix :

Position a 150 pour une résolution d'origine 1080

Code : Tout sélectionner

pos_x = resolution_x * 150 / 1080
si résolution x = 640, alors pos x = 88
si résolution x = 2144 alors pos x =~ 297
etc...

Si tu as des sprites qui ne "fit" pas sur des petites résolution , utilise plusieurs type d'asset avec des résolution plus petite.
Quand je parle de résolution d'origine , je veut dire résolution de référence , celle avec laquelle tu as placé tes éléments, j'espère être clair :mrgreen:

Edit :

Pour tes cadres, code un "9 sprite" au lieu d'une simple image , c'est un cadre dynamique ou chaque partie représente un coin et le centre. imagine toi un tableau en 3x3 ou chaque cellule est une partie de sprite

Re: Sprite et résolutions ?

Publié : mar. 28/févr./2023 9:22
par Ollivier
G-Rom a écrit :L'idéal c'est d'ouvrir l'écran a la taille du bureau de l'utilisateur, et ensuite faire du placement "intelligent" de tes éléments.
en % par exemple , pour avoir toujours le même placement selon les différentes résolution.
Il n'y a pas de solution miracle , dès lors que tu donwscale, tu va avoir de la perte.
Salut G-Rom,

comment fais-tu avec les "jointements" entre les sprites ?

Re: Sprite et résolutions ?

Publié : mar. 28/févr./2023 12:54
par Fig
Bonjour les gars,
Il n'y a pas de solution miracle, je vois...

C'est vraiment pas un truc qui me passionne de faire ça, je trouve ça terriblement pénible et casse pied par rapport au reste du dev.
Mais, Il vaut mieux que je m'en occupe tout de suite qu'à la fin. :(

Re: Sprite et résolutions ?

Publié : mar. 28/févr./2023 16:56
par Fig
Ok, en utilisant le ratio et en modifiant la qualité pour les transformations des sprites, j'obtiens quelque chose de potable.
Je dois néanmoins tricher un peu pour ajuster les sprites qui sont juxtaposés (à cause des erreurs d'arrondi au pixel) mais c'est bon.

Merci à vous ! :D

Re: Sprite et résolutions ?

Publié : mar. 28/févr./2023 18:33
par Ollivier
Fig a écrit :Je dois néanmoins tricher un peu pour ajuster les sprites qui sont juxtaposés (à cause des erreurs d'arrondi au pixel) mais c'est bon.
C'est ça que j'appelle le "jointement entre les sprites".

Re: Sprite et résolutions ?

Publié : mar. 28/févr./2023 22:33
par G-Rom
Ollivier a écrit : mar. 28/févr./2023 9:22
G-Rom a écrit :L'idéal c'est d'ouvrir l'écran a la taille du bureau de l'utilisateur, et ensuite faire du placement "intelligent" de tes éléments.
en % par exemple , pour avoir toujours le même placement selon les différentes résolution.
Il n'y a pas de solution miracle , dès lors que tu donwscale, tu va avoir de la perte.
Salut G-Rom,

comment fais-tu avec les "jointements" entre les sprites ?
il n'existe pas de "demi pixel" tu arrondis au supérieur.

Re: Sprite et résolutions ?

Publié : mer. 01/mars/2023 12:24
par Guillot
hou, ça à l'air joli ton jeu !
comment t'as fais ton interface graphique, c'est Gadget3D ?
(je travail sur un equivalent basé sur les sprites, je le posterai bientot)

j'ai découvert récemment la fonction:
SpriteQuality(#PB_Sprite_BilinearFiltering)
je te le signal au cas ou, moi j'etais passé à coté jusqu'ici !

si possible, tu peux m'envoyer une copie d'ecran de tes problemes de jointure

Re: Sprite et résolutions ?

Publié : mer. 01/mars/2023 12:44
par Ollivier
Guillot a écrit : mer. 01/mars/2023 12:24j'ai découvert récemment la fonction:
SpriteQuality(#PB_Sprite_BilinearFiltering)
je l'avais complètement oublié cette fonction-là...

Re: Sprite et résolutions ?

Publié : jeu. 02/mars/2023 21:24
par Fig
Guillot a écrit : mer. 01/mars/2023 12:24 hou, ça à l'air joli ton jeu !
comment t'as fais ton interface graphique, c'est Gadget3D ?
(je travail sur un equivalent basé sur les sprites, je le posterai bientot)

j'ai découvert récemment la fonction:
SpriteQuality(#PB_Sprite_BilinearFiltering)
je te le signal au cas ou, moi j'etais passé à coté jusqu'ici !

si possible, tu peux m'envoyer une copie d'ecran de tes problemes de jointure
Bonjour Guillot,

Je n'utilise pas Gadget3D mais une version améliorée de ce fil: viewtopic.php?p=203085&hilit=objet#p203085
En gros, tu as un sprite "père" avec coordonnées et contenant du texte éventuellement. (autres propriétés, couleurs, zoom, transparence, ordre d'affichage/layer, animations scrolling etc)
Ce sprite peut avoir des sprites "fils" à l'intérieur de celui-ci. Il leur transmet ses caractéristiques (ie:les coordonnées sont relatives à celles du sprite père par exemple) Eux-même peuvent contenir du texte. Etc...
Ca permet de déplacer/zoomer les sprites "père" et tous les autres bougent avec.
J'ai en permanence le retour du sprite survolé par ma souris c'est donc assez simple de gérer l'interface..
Je suppose que tu es arrivé à un système similaire toi aussi... :wink:

Pour le pathfinding j'ai utilisé un JPS Astar que j'avais en grande partie écrit en assembleur. (car carte compte 6320x6320 cellules et le pathfinding est instantané)

Oui, SpriteQuality(#PB_Sprite_BilinearFiltering) m'a permis de régler mes problèmes de résolution merci :)

J'ai hate de voir ce que tu as pondu en matière de gestion de sprite, c'est toujours inspirant !
Pour ma part je partagerais volontiers ce que j'ai fait, mais je suis néophyte en matière de sécurité serveur et j'ai peur qu'avec l'adresse ip dans le code, on me le bousille...

Re: Sprite et résolutions ?

Publié : jeu. 09/mars/2023 0:02
par Ollivier
fig a écrit :Oui, SpriteQuality(#PB_Sprite_BilinearFiltering) m'a permis de régler mes problèmes de résolution merci :)
Déjâ merci pour l'aperçu : je viens de me refaire Nibble de Rick Raddatz, et l'aperçu, si je trouve le temps de partager mon modeste code ne sera vraiment pas à la hauteur de ton image qui me fait penser à Heroes of might and magic.

Ensuite, je suis surpris que SpriteQuality(etc) fonctionne si bien, comme une baguette magique.

Déjà parce que l'interpolation des couleurs passe par le noir (pas linéaire dans l'espace des couleurs).
Ensuite, parce que le clamping (avec Beubeuh Poolevoerde ? Non...) est ingérable sauf en bidouillant avec ClipSprite().

Mon avis est de vectoriser au maximum tes images avec la bibliothèque ImageVector qui gère l'anti-aliasing.

Merci aussi pour le partage de ton code source de ton pathfinding qui est un superbe sujet de discussion, et ce partage, bien qu'il ne me profite pas par manque de temps à consacrer, est un excellent sujet depuis plusieurs années.

Je me souviens effectivement de cette petite demande anodine en Assembleur, maillon d'un hasheur-maison. Et puis tes diverses explications qui ont suivi.

Il y a enfin une demande d'amélioration que tu as faite contre vents et marées puisque je t'ai dis publiquement que c'était inutile. Mais l'inutile c'est un peu comme la pluie : ça ne tombe que sur les cons ! (Au moins dans le cadre de cette demande).

Alors une petite astuce (juste pour les yeux, comme au Scrabble, comme dit falsam) que ta requête honorée a apporté au langage : pouvoir demander très élégamment au compilateur de traiter des majuscules (ou minuscules) à l'instar de Ucase()/Lcase().

Code : Tout sélectionner

Macro sq():'
EndMacro

Macro test(x)
CompilerIf sq()x#sq() <= $100 ; équivalent de IF LEN(X$)<1
DEBUG "UN SEUL CARACTERE SVP"
CompilerElse
;#auPif = sq()x#sq() & ~' ' ; voilà ! le "non" binaire (précédant une constante) voulu par fig
; qui permet un UCASE()...
CompilerIf sq()x#sq()& ~' '>= 'A' and sq()x#sq() & ~' '=< 'Z'
 DEBUG "c'est une lettre"
 CompilerEndIf
 CompilerEndIf
 EndMacro
 test(z)
 
Merci évidemment à tous les autres pour vos participations, avec l'assurance de vous savoir en vie.
Notamment à G-Rom qui parle d'interpolation en 2009, et de clamp en 2016 avec les explications, codes, définitions et liens qui vont avec et me permettent d'être capable d'exprimer un problème dans ce domaine-là.

Re: Sprite et résolutions ?

Publié : jeu. 09/mars/2023 20:05
par TazNormand
Fig a écrit : jeu. 02/mars/2023 21:24 .../...
Je n'utilise pas Gadget3D mais une version améliorée de ce fil: viewtopic.php?p=203085&hilit=objet#p203085
En gros, tu as un sprite "père" avec coordonnées et contenant du texte éventuellement. (autres propriétés, couleurs, zoom, transparence, ordre d'affichage/layer, animations scrolling etc)
Ce sprite peut avoir des sprites "fils" à l'intérieur de celui-ci. Il leur transmet ses caractéristiques (ie:les coordonnées sont relatives à celles du sprite père par exemple) Eux-même peuvent contenir du texte. Etc...
Ca permet de déplacer/zoomer les sprites "père" et tous les autres bougent avec.
J'ai en permanence le retour du sprite survolé par ma souris c'est donc assez simple de gérer l'interface..
Je suppose que tu es arrivé à un système similaire toi aussi... :wink:
.../...
Salut Fig,

ça m'intéresse ton système de Sprite Père & Fils, mais ton lien de download dans ton topic de 2019 est mort, pourrais-tu le remettre en ligne ou nous redonner un lien fonctionnel.

Si je comprends bien, il serait possible d'avoir par exemple un gros sprite père représentant un bus se déplaçant horizontalement, et des sprites fils genre des personnages qui se bougent dans ce bus ?

Et question idiote : en lib 2D classique de PB ou sous Ogre (j'aime pas la 3d, je suis un vieux qui préfère le retro 2D)

Merci de tes éclaircissements

Sam aka Taz

Re: Sprite et résolutions ?

Publié : jeu. 09/mars/2023 21:04
par Fig
Salut Taz,

Ce sont des sprites 2D, je suis un vieux aussi...
Et tu as bien compris le principe.

Il reste ce dépôt qui doit encore marcher https://github.com/FoxFig/2DSpriteObject

C'est ma version de l'époque, je l'ai amélioré depuis. (un fichier sprite.pb à inclure et un fichier d'exemple.pb avec les images...)


Edit: en regardant en détail ce que j'avais fait, cela reprend uniquement la gestion des animations, pas le système de père/fils...
IL faudra que j'extrais le moteur du jeu pour te montrer.

Re: Sprite et résolutions ?

Publié : jeu. 09/mars/2023 21:20
par Fig
Bonsoir Olivier, merci pour ton post, je te lis toujours avec intérêt, même si j'avoue ne pas toujours réussir à te suivre, tu raisonne trop vite pour moi je pense ... 8O

Effectivement la gestion de qualité des sprites avec le zoom au ratio suffit, moyennant un peu de triche comme je le disais (je fais se chevaucher les sprites qui sont juxtaposés ainsi on ne voit pas d'espace entre eux à cause de l'erreur d'arrondi).

Je vous souhaites une bonne soirée :D