AccueilAccueil  FAQFAQ  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  Connexion  

 

 [DLL] GMhqx

Aller en bas 
+2
arthuro
Mass
6 participants
AuteurMessage
Mass
*Excellent utilisateur*
Mass


Messages : 3351
Localisation : Dans une canonnière wookie.
Projet Actuel : Monter des trucs et des machins

[DLL] GMhqx Empty
MessageSujet: [DLL] GMhqx   [DLL] GMhqx EmptyDim 22 Fév 2015 - 13: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
[DLL] GMhqx 1424608808-input

HQ2X (taille x2)
[DLL] GMhqx 1424608829-output2

HQ3X (taille x3)
[DLL] GMhqx 1424608844-output3

HQ4X (taille x4)
[DLL] GMhqx 1424608869-output4

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 ****
arthuro


Messages : 1480
Localisation : Paris
Projet Actuel : Diagon https://arthursonzogni.com/Diagon

[DLL] GMhqx Empty
MessageSujet: Re: [DLL] GMhqx   [DLL] GMhqx EmptyDim 22 Fév 2015 - 15: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 ?


_________________
[DLL] GMhqx Pochette[DLL] GMhqx Signature.php?gid=588
D'autres jeux :
In The Cube
In the cube 2
Revenir en haut Aller en bas
Mass
*Excellent utilisateur*
Mass


Messages : 3351
Localisation : Dans une canonnière wookie.
Projet Actuel : Monter des trucs et des machins

[DLL] GMhqx Empty
MessageSujet: Re: [DLL] GMhqx   [DLL] GMhqx EmptyDim 22 Fév 2015 - 15: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 ****



Messages : 1455

[DLL] GMhqx Empty
MessageSujet: Re: [DLL] GMhqx   [DLL] GMhqx EmptyDim 22 Fév 2015 - 17:13

Ça a l'air sympa comme DLL Smile

_________________
côt.
Revenir en haut Aller en bas
https://cagibi.itch.io/
Is Daouda
Utilisateur confirmé: Rang **
Is Daouda


Messages : 392
Localisation : ...

[DLL] GMhqx Empty
MessageSujet: Re: [DLL] GMhqx   [DLL] GMhqx EmptyDim 22 Fév 2015 - 17: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*
Mass


Messages : 3351
Localisation : Dans une canonnière wookie.
Projet Actuel : Monter des trucs et des machins

[DLL] GMhqx Empty
MessageSujet: Re: [DLL] GMhqx   [DLL] GMhqx EmptyLun 23 Fév 2015 - 12: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
onilink_


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

[DLL] GMhqx Empty
MessageSujet: Re: [DLL] GMhqx   [DLL] GMhqx EmptyLun 23 Fév 2015 - 12:36

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

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

_________________
[DLL] GMhqx Runningpotato1[DLL] GMhqx TvF6GED [DLL] GMhqx MdetltS
Revenir en haut Aller en bas
Mass
*Excellent utilisateur*
Mass


Messages : 3351
Localisation : Dans une canonnière wookie.
Projet Actuel : Monter des trucs et des machins

[DLL] GMhqx Empty
MessageSujet: Re: [DLL] GMhqx   [DLL] GMhqx EmptyLun 23 Fév 2015 - 12: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
onilink_


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

[DLL] GMhqx Empty
MessageSujet: Re: [DLL] GMhqx   [DLL] GMhqx EmptyLun 23 Fév 2015 - 12: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

_________________
[DLL] GMhqx Runningpotato1[DLL] GMhqx TvF6GED [DLL] GMhqx MdetltS
Revenir en haut Aller en bas
Topaze22
*Excellent utilisateur*
Topaze22


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

[DLL] GMhqx Empty
MessageSujet: Re: [DLL] GMhqx   [DLL] GMhqx EmptyDim 1 Mar 2015 - 10: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.
[DLL] GMhqx Projet13
Revenir en haut Aller en bas
Contenu sponsorisé





[DLL] GMhqx Empty
MessageSujet: Re: [DLL] GMhqx   [DLL] GMhqx Empty

Revenir en haut Aller en bas
 
[DLL] GMhqx
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: