AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  Connexion  

Partagez | 
 

 [DLL] GMhqx

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
Mass
*Excellent utilisateur*
avatar

Messages : 3324
Localisation : Dans une canonnière wookie.
Projet Actuel :
Wyvup
SpaceShift
Centauri-France


MessageSujet: [DLL] GMhqx   Dim 22 Fév 2015 - 12:45

Salut à tous,

J'ai fait une petite DLL ce matin pour faire du redimensionnement avec l'algorithme HQX sous GM, pour le fun. Bon au final GM m'a plus emmerdé qu'autre chose et du coup c'était pas fun, mais voilà beh

HQX est un algorithme particulièrement efficace avec le pixel art, qui permet de redimensionner une image par un facteur de 2, 3 ou 4 tout en lui appliquant une sorte d'effet de vectorisation, ce qui permet d'upscaller du pixel art sans en faire une bouillie façon starbound troll face
Ca a été développé à la base pour les ému de vieilles consoles.

Originale


HQ2X (taille x2)


HQ3X (taille x3)


HQ4X (taille x4)


Comme ça vous pouvez upscaller votre pixel art puis prétendre que votre jeu est en HD gnii

Utilisation :
La DLL peut :
- Upscaler une image source GIF, PNG, JPG, BMP en une image PNG en utilisant hq2x, hq3x, hq4x
- Upscaler directement un sprite dans GM

Elle ne peut PAS :
- Appliquer un filtre sur l'écran à la façon des émulateurs de vieilles consoles (limitations de GM oblige)

Pour l'utiliser, il faut appeler la fonction Init une fois, puis l'une des fonctions d'upscaling de votre choix.
Si vous souhaitez générer un set de sprites upscallé, le mieux à mon avis est d'utiliser sprite_duplicate pour créer votre nouveau sprite, et lui appliquer une des fonction d'upscaling (commençant par spr).
L'upscaling est assez long, surtout sur les grosses images, donc je vous conseille fortement de l'appliquer lors d'un chargement !

Fichiers :
DLL + Exemple + Source : http://simpleupload.fr/?c=A0XSR90!AePRQvkO
Format zip : http://simpleupload.fr/?c=A0I0Dw3!zXxKt0Al

La DLL utilise onidev et est basé sur les sources de libhqx disponible ici : http://code.google.com/p/hqx/

Pour toute question n'hésitez pas happy1
Revenir en haut Aller en bas
http://madmass.mype.fr/CBNA/
arthuro
Utilisateur confirmé: Rang ****
avatar

Messages : 1318
Localisation : Grenoble / Méribel
Projet Actuel : CBNA

MessageSujet: Re: [DLL] GMhqx   Dim 22 Fév 2015 - 14:06

Bon boulot en tout cas, on obtient des résultats vraiment sympa.

Je me demande pourquoi l'algorithme original se limite aux filtres x2 x3 x4. Tu as une idée ?


_________________

D'autres jeux :
In The Cube
In the cube 2
Revenir en haut Aller en bas
Mass
*Excellent utilisateur*
avatar

Messages : 3324
Localisation : Dans une canonnière wookie.
Projet Actuel :
Wyvup
SpaceShift
Centauri-France


MessageSujet: Re: [DLL] GMhqx   Dim 22 Fév 2015 - 14:33

Absolument pas happy1 je me suis contenté de porter l'algorithme open-source sur une DLL gm beh
Revenir en haut Aller en bas
http://madmass.mype.fr/CBNA/
hyper
Utilisateur confirmé: Rang ****
avatar

Messages : 1429
Localisation : Vendée

MessageSujet: Re: [DLL] GMhqx   Dim 22 Fév 2015 - 16:13

Ça a l'air sympa comme DLL Smile

_________________
> L'IRC du CBNA
côt
Revenir en haut Aller en bas
https://hyperdev.wordpress.com/
Is Daouda
Utilisateur confirmé: Rang *
avatar

Messages : 270
Localisation : Lomé

MessageSujet: Re: [DLL] GMhqx   Dim 22 Fév 2015 - 16:23

Bon boulo grace a cette dll on peut cree facilement des jeux en HD. J'esper que sa ne bouffe pas trop la memoire.

_________________
"Celui qui trouve sans chercher a longtemps cherché sans trouver".
Revenir en haut Aller en bas
Mass
*Excellent utilisateur*
avatar

Messages : 3324
Localisation : Dans une canonnière wookie.
Projet Actuel :
Wyvup
SpaceShift
Centauri-France


MessageSujet: Re: [DLL] GMhqx   Lun 23 Fév 2015 - 11:32

C'est de la manipulation d'image, ça dépend de la taille de l'image d'entrée.
Pour hq2x ça prend au minimum width * height * 4 + width * height * 16 octets, plus les structures de données qui doivent pas peser trop lourd.
Pour hq4x ce sera width * height * 4 + width * height * 64 octets au minimum.
Pour l'image utilisée qui fait 169*111, hq2x prendra 375 ko, hq4x 1276 ko, de toute façon normalement c'est désalloué à la fin de la conversion et vu qu'on convertit qu'un sprite à la fois, ça posera pas de problèmes de RAM happy1
Revenir en haut Aller en bas
http://madmass.mype.fr/CBNA/
onilink_
Modérateur
avatar

Messages : 8883
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

MessageSujet: Re: [DLL] GMhqx   Lun 23 Fév 2015 - 11:36

Ce serait quand même plus pratique en pixel shader Razz

Mais bon GM:S oblige ... >.<

_________________
                 
Revenir en haut Aller en bas
Mass
*Excellent utilisateur*
avatar

Messages : 3324
Localisation : Dans une canonnière wookie.
Projet Actuel :
Wyvup
SpaceShift
Centauri-France


MessageSujet: Re: [DLL] GMhqx   Lun 23 Fév 2015 - 11:40

Un de ces jours j'y arriverai gnii mais mon hook ne marche pas encore pour le moment triste2
Revenir en haut Aller en bas
http://madmass.mype.fr/CBNA/
onilink_
Modérateur
avatar

Messages : 8883
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

MessageSujet: Re: [DLL] GMhqx   Lun 23 Fév 2015 - 11:46

Bah au pire sous GM:S tu peux t'amuser a le faire Razz
Vu qu'y a au moins les shaders pour compenser le reste Razz

_________________
                 
Revenir en haut Aller en bas
Topaze22
*Excellent utilisateur*
avatar

Messages : 6213
Localisation : Sur la Lune
Projet Actuel : Projet HELLO/TOPAZE22 Mario Bros World

MessageSujet: Re: [DLL] GMhqx   Dim 1 Mar 2015 - 9:23

Pour information, car je pense que cela devrait fortement intéresser les gens qui regardent ce topique, et même Mass, le Hello engine permet en temps réel d'utiliser ce filtre et HQX2 et HQX4.

L’intérêt, c'est "la fondue" entre les différents éléments à afficher, et que ça prend beaucoup moins de taille à stocker dans notre projet (pas besoin de retravailler de sprit faible définition de base, donc il reste dans la mémoire, dans sa taille d'origine).

Je n'ai pas le temps de décortiquer les codes, je vous donne le lien vers une capture de mon projet : 1er essai rapide
Et je donne aussi les liens vers le Hello Engine : Le Youtube de HELLO, le concepteur du moteur "HELLO engine 6.1"
Le site web officiel de HELLO pour télécharger le fichier source du "HELLO engine 6.1"

[j'espère qu'on ne va pas m'engueuler pour faire de la pub de mon projet Mario] guns
Alors, j'ai bien fais ?
Le CBNA

Edit : et il me semble que le code du filtre dans le Hello Engine, est visible et libre, donc vous pouvez sans doute le récupérer bien-sur, moyennant des remerciements dans vos credits.


Edit : et au cas où, le script ressemble à ça pour le 4X en sachant que 432x768 c'est ma résolution , et il doit y avoir un draw event d'associé, si vous voulez plus d'info, cherchez par vous même dans la Hello Engine, c'est très propre en tout cas :

/*
** HQ4X Vertex Shader
*/
attribute vec3 in_Position;
attribute vec4 in_Colour;
attribute vec2 in_TextureCoord;

varying vec4 v_vTexcoord[7];
varying vec4 v_vColour;

void main()
{
   //Set the view height and width here!
   float x = 0.5 * (1.0 / 768.0);
   float y = 0.5 * (1.0 / 432.0);
   vec2 dg1 = vec2( x,y);  vec2 dg2 = vec2(-x,y);
   vec2 sd1 = dg1*0.5;     vec2 sd2 = dg2*0.5;
   vec2 ddx = vec2(x,0.0); vec2 ddy = vec2(0.0,y);
   
   vec4 object_space_pos = vec4( in_Position.x, in_Position.y , in_Position.z, 1.0);
   
   gl_Position = gm_Matrices[MATRIX_WORLD_VIEW_PROJECTION] * object_space_pos;
   v_vTexcoord[0].xy = in_TextureCoord;
   v_vTexcoord[1].xy = v_vTexcoord[0].xy - sd1;
   v_vTexcoord[2].xy = v_vTexcoord[0].xy - sd2;
   v_vTexcoord[3].xy = v_vTexcoord[0].xy + sd1;
   v_vTexcoord[4].xy = v_vTexcoord[0].xy + sd2;
   v_vTexcoord[5].xy = v_vTexcoord[0].xy - dg1;
   v_vTexcoord[6].xy = v_vTexcoord[0].xy + dg1;
   v_vTexcoord[5].zw = v_vTexcoord[0].xy - dg2;
   v_vTexcoord[6].zw = v_vTexcoord[0].xy + dg2;
   v_vTexcoord[1].zw = v_vTexcoord[0].xy - ddy;
   v_vTexcoord[2].zw = v_vTexcoord[0].xy + ddx;
   v_vTexcoord[3].zw = v_vTexcoord[0].xy + ddy;
   v_vTexcoord[4].zw = v_vTexcoord[0].xy - ddx;
   
   v_vColour=in_Colour;
}


Et dans le DRAW GUI :
shader_set(sha_hq4x)
draw_surface_stretched(application_surface,0,0,view_wview[0]*4,view_hview[0]*4)
shader_reset()


il y a peut-être besoin de d'autres code pour vous en servir, je vous invite à vous débrouiller awesome

_________________
Topique pour le Projet Hello Mario en préparation.
Sorti du topique lorsque la première démo sera disponible.
Revenir en haut Aller en bas
Contenu sponsorisé




MessageSujet: Re: [DLL] GMhqx   

Revenir en haut Aller en bas
 
[DLL] GMhqx
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Forum Le CBNA :: Développement :: Scripts GML-
Sauter vers: