Sprite et résolutions ?

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Fig
Messages : 1176
Inscription : jeu. 14/oct./2004 19:48

Sprite et résolutions ?

Message 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
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Sprite et résolutions ?

Message 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()
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Sprite et résolutions ?

Message 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
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Sprite et résolutions ?

Message 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 ?
Avatar de l’utilisateur
Fig
Messages : 1176
Inscription : jeu. 14/oct./2004 19:48

Re: Sprite et résolutions ?

Message 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. :(
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
Avatar de l’utilisateur
Fig
Messages : 1176
Inscription : jeu. 14/oct./2004 19:48

Re: Sprite et résolutions ?

Message 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
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Sprite et résolutions ?

Message 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".
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Sprite et résolutions ?

Message 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.
Avatar de l’utilisateur
Guillot
Messages : 672
Inscription : jeu. 25/juin/2015 16:18

Re: Sprite et résolutions ?

Message 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
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Sprite et résolutions ?

Message 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à...
Avatar de l’utilisateur
Fig
Messages : 1176
Inscription : jeu. 14/oct./2004 19:48

Re: Sprite et résolutions ?

Message 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...
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Sprite et résolutions ?

Message 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à.
Avatar de l’utilisateur
TazNormand
Messages : 1297
Inscription : ven. 27/oct./2006 12:19
Localisation : Calvados (14)

Re: Sprite et résolutions ?

Message 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
Image
Image
Avatar de l’utilisateur
Fig
Messages : 1176
Inscription : jeu. 14/oct./2004 19:48

Re: Sprite et résolutions ?

Message 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.
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
Avatar de l’utilisateur
Fig
Messages : 1176
Inscription : jeu. 14/oct./2004 19:48

Re: Sprite et résolutions ?

Message 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
Dernière modification par Fig le dim. 12/mars/2023 13:18, modifié 1 fois.
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
Répondre