AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  Connexion  

Partagez | 
 

 Voxelizer -> Sprites to wavefront

Voir le sujet précédent Voir le sujet suivant Aller en bas 
Aller à la page : 1, 2  Suivant
AuteurMessage
onilink_
Modérateur
avatar

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

MessageSujet: Voxelizer -> Sprites to wavefront   Mer 1 Fév 2012 - 10:48

Sprites voxelizer
De la 2d a la 3d

Auteur : onilink_
Licence : libre, est open source.
Type : Logiciel
Téléchargement : http://www.host-a.net/u/onilink_/voxelizer.7z

Permet de transformer un sprite en voxel au format wavefront (.obj + .mtl).
Vous pourrez ensuite l'importer dans un logiciel de rendu comme Blender.

Utilisation:
Glissez déposez un sprite enregistré en .png sur voxelizer.exe, et deux fichiers devraient apparaitre.
Si une couleur est totalement transparente, alors ce seras considéré comme du vide par le convertisseur.
Vous pouvez aussi utiliser une bumpmap, pour cela son nom être le même que celui du sprite a convertir, avec _bump en plus avant l'extension.
Exemple: chat.png -> chat_bump.png
Les niveaux de gris définissent la hauteur d'un voxel.
De 0 a 59 -> niveau 0.
Puis a partir de 60, gagne 1 niveau tous les 20.

Exemples (sprite de Liberlive, Robin) :



Autres exemples de rendus (sprites de Zelda MC) :
Spoiler:
 
Spoiler:
 

Code source C++
Code:
#include <onidev.h>

string fileGetPath(string file) {
    int pos = file.find_last_of('\\');
    if(pos == -1) pos = file.find_last_of('/');
    return file.substr(0, pos);
}

string fileGetName(string file) {
    int pos = file.find_last_of('\\');
    if(pos == -1) pos = file.find_last_of('/');
    return file.substr(pos+1, file.length());
}

void voxelize(string name, string path);

int main(int argc, char **argv)
{
    if(argc <= 1)
        return 0;
    voxelize(argv[1], fileGetPath(argv[0]) + "\\");
    /*voxelize("bomb.png", "");
    system("pause");
    return 0;*/
}

void voxelize(string name, string path)
{
    // read png file
    uint wid, hei, *data, *bump;
    data = (uint*)imageLoadPng(name, wid, hei);
   
    if(data == NULL) {
        printf("Fail to load image. End program.\n");
        return;
    }
   
    string name2 = name.substr(0, name.length()-4)+"_bump.png";
    uint wid2, hei2;
    if(fileExists(name2)) {
        bump = (uint*)imageLoadPng(name2, wid2, hei2);
        if(wid!=wid2 || hei!=hei2)
        {
            delete[] bump;
            delete[] data;
            printf("Bump map size error.\n");
            return;
        }
    }
    else
    {
        bump = new uint[wid*hei];
        for(uint i=0; i<wid*hei; i++)
            bump[i] = 0;
    }
   
    // create indexed image
    vector<uint> palette;
    short *dat = new short[wid * hei];
   
    for(uint i=0; i<wid; i++)
    for(uint j=0; j<hei; j++) {
        uint col = data[i+j*wid];
       
        // transparent color
        if((col&0xFF000000) == 0) {
            dat[i+j*wid] = 0;
            continue;
        }
           
        // check color
        int find=0;
        for(uint n=0; n<palette.size(); n++) {
            if(palette.at(n) == col) {
                find = n+1;
                break;
            }
        }
       
        // find new color
        if(find == 0) {
            palette.push_back(col);
            find = palette.size();
        }
       
        dat[i+j*wid] = find;
    }
    delete[] data;
   
    // Write mtl file
    FILE *f = fopen( (path + "material.mtl").c_str(), "w");
    if(f == NULL) {
        printf("Fail to create material.mtl\nEnd program.\n");
        delete[] dat;
        return;
    }
   
    // write infos
    fprintf(f, "# Generated by Voxelizer 0.1\n");
   
    // write material
    for(uint i=0; i<palette.size(); i++) {
        float r = ( palette.at(i)&0xFF )/255.0;
        float g = ( (palette.at(i)&0xFF00)>>8 )/255.0;
        float b = ( (palette.at(i)&0xFF0000)>>16 )/255.0;
        float a = ( (palette.at(i)&0xFF000000)>>24 )/255.0;
        r = pow(r, 2.38);
        g = pow(g, 2.38);
        b = pow(b, 2.38);
       
        fprintf(f, "newmtl Material.%d\n", i+1);
        fprintf(f, "Ns %f\n", 100.0);
        fprintf(f, "Ka %f %f %f\n", 0.0, 0.0, 0.0);
        fprintf(f, "Kd %f %f %f\n", r, g, b);
        fprintf(f, "Ks %f %f %f\n", 0.0, 0.0, 0.0);
        fprintf(f, "Ni %f\n", 0.0);
        fprintf(f, "d %f\n", a);
        fprintf(f, "illum 1\n\n\n");
    }
    fclose(f);
   
    // Write obj file
    f = fopen( (path + "out.obj").c_str(), "w");
    if(f == NULL) {
        printf("Fail to create out.obj\nEnd program.\n");
        delete[] dat;
        return;
    }
   
    // infos
    fprintf(f, "# Generated by Voxelizer 0.1\n");
    fprintf(f, "mtllib material.mtl\n");
   
    for(float y=0; y<hei; y++)
    for(float x=0; x<wid; x++)
    {
        // object name
        fprintf(f, "o Cube%d\n", int(x + y*wid));
       
        float z = bump[int(x + y*wid)]&255;
        if(z >= 40.0) z = (z-40.0)/200.0;
        else z=0;
       
        // vertices
        fprintf(f, "v %f %f %f\n", x/10.0    , z    , y/10.0    );
        fprintf(f, "v %f %f %f\n", (x+1)/10.0, z    , y/10.0    );
        fprintf(f, "v %f %f %f\n", (x+1)/10.0, z    , (y+1)/10.0);
        fprintf(f, "v %f %f %f\n", x/10.0    , z    , (y+1)/10.0);
        fprintf(f, "v %f %f %f\n", x/10.0    , z+0.1, y/10.0    );
        fprintf(f, "v %f %f %f\n", (x+1)/10.0, z+0.1, y/10.0    );
        fprintf(f, "v %f %f %f\n", (x+1)/10.0, z+0.1, (y+1)/10.0);
        fprintf(f, "v %f %f %f\n", x/10.0    , z+0.1, (y+1)/10.0);
       
        // material
        if(dat[int(x+y*wid)])
        fprintf(f, "usemtl Material.%d\n", dat[int(x + y*wid)]);
       
        // no segments
        fprintf(f, "s off\n");
       
        // faces
        if(!dat[int(x + y*wid)])
            continue;
       
        int i = 8*(x + y*wid);
        fprintf(f, "f %d %d %d %d\n", i+1, i+2, i+3, i+4); // back face
        fprintf(f, "f %d %d %d %d\n", i+5, i+6, i+7, i+8); // front face
        fprintf(f, "f %d %d %d %d\n", i+1, i+5, i+8, i+4); // left face
        fprintf(f, "f %d %d %d %d\n", i+2, i+6, i+7, i+3); // right face
        fprintf(f, "f %d %d %d %d\n", i+1, i+2, i+6, i+5); // top face
        fprintf(f, "f %d %d %d %d\n", i+4, i+3, i+7, i+8); // bottom face
    }
   
    fclose(f);
    delete[] dat;
   
    printf("Voxelization sucess !\n");
}

Enjoy !

_________________
                 


Dernière édition par onilink_ le Ven 11 Mai 2012 - 19:59, édité 2 fois
Revenir en haut Aller en bas
Invité
Invité



MessageSujet: Re: Voxelizer -> Sprites to wavefront   Mer 1 Fév 2012 - 10:55

Just impressive! :O

Franchement, je suis effaré, le premier rendu est vraiment awsm !
J'ai du mal à croire que ça part d'un rendu en 2D basique...

Tu as pris combien de temps pour coder ça ?
Revenir en haut Aller en bas
onilink_
Modérateur
avatar

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

MessageSujet: Re: Voxelizer -> Sprites to wavefront   Mer 1 Fév 2012 - 11:03

Une heure, tout au plus :p
C'est pour ça que je donne le code source direct, c'est pas vraiment un travail de longue haleine x)
Et merci :p

_________________
                 
Revenir en haut Aller en bas
master47
Utilisateur confirmé: Rang *****
avatar

Messages : 2368
Projet Actuel :
-------------------
> PacWars
> The Perfect Pattern Studio

MessageSujet: Re: Voxelizer -> Sprites to wavefront   Mer 1 Fév 2012 - 12:33

haha ça c'est cool ! super

_________________
Suivez la timeline ! The PacWars Timeline
C# .NET, Web & Sound Design.
---
Oldies: http://livegallery.lescigales.org/
Lawl :
Spoiler:
 
Revenir en haut Aller en bas
http://theperfectpattern.tumblr.com
Sushidestroy
Petit bavard
avatar

Messages : 53

MessageSujet: Re: Voxelizer -> Sprites to wavefront   Mer 1 Fév 2012 - 13:05

ouh
Revenir en haut Aller en bas
Pixel-boy
Utilisateur confirmé: Rang *
avatar

Messages : 270

MessageSujet: Re: Voxelizer -> Sprites to wavefront   Mer 1 Fév 2012 - 13:23

C'est trop classe !
et quand ça tourne c'est encore plus ouf gnii

je le test dès que je rentre chez moi !
Revenir en haut Aller en bas
http://leblogtwoplayers.blogspot.fr/
onilink_
Modérateur
avatar

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

MessageSujet: Re: Voxelizer -> Sprites to wavefront   Mer 1 Fév 2012 - 13:49

Merci bien gnii
N'hésitez pas a poster vos créations pour ceux qui ont fait quelque chose :p

_________________
                 
Revenir en haut Aller en bas
Ablationer
Administrateur
avatar

Messages : 14989
Localisation : QuébeCanada
Projet Actuel : pas trop mourir

MessageSujet: Re: Voxelizer -> Sprites to wavefront   Mer 1 Fév 2012 - 14:40

cool

maintenant on peut faire un minecraft mais sans les trucs chiants de Notch

_________________
Yo this is stven, White race. The hs diploma i'm holding in this pic is usually there, my principal put it there in 2008. I'm easily startled by coarse fabrics. only one who stayed in the Burger King Kid's Club after they started charging dues. It's called having a fkng job. All clothes found on google except this crown which doesn't say who designed it
Revenir en haut Aller en bas
http://www.lecbna.org/
sachem
­Capitaine Star


Messages : 15495
Projet Actuel :


MessageSujet: Re: Voxelizer -> Sprites to wavefront   Mer 1 Fév 2012 - 16:58

Qu'est-ce que c'est que cette sorcellerie ?

Plus sérieusement, comment fais-tu pour définir la profondeur ? j'ai bien compris le principe du bump map, mais je suppose que ça necessite encore plus d'avantage d'information pour que ça donne un effet optimal ? surtout pour l'exemple de l'arc vu que les voxels de la même couleurs devraient normalement avoir le même niveau de profondeur.
ou peut-être que j'ai loupé quelque chose...


edit : je viens voir que t'as posté le code source, ignore ce post.

edit2 :
moi entrain de lire le code source

_________________
Revenir en haut Aller en bas
http://host-a.net/u/shm31/
marty
Utilisateur confirmé: Rang ***
avatar

Messages : 697
Projet Actuel : laby-ereinte !

MessageSujet: Re: Voxelizer -> Sprites to wavefront   Mer 1 Fév 2012 - 21:53

j'en ai est rêvé ! onilink la fait!!
sans déconner tu me sidère !
on est trop nul, on est a ***** !!

Revenir en haut Aller en bas
onilink_
Modérateur
avatar

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

MessageSujet: Re: Voxelizer -> Sprites to wavefront   Mer 1 Fév 2012 - 23:50

Lawl.

Un ptit rendu pour un pote sinon :

(sprite de Robin)

_________________
                 
Revenir en haut Aller en bas
Dan_lizhot
Modérateur
avatar

Messages : 3463
Projet Actuel : Crypt Of Darkness

MessageSujet: Re: Voxelizer -> Sprites to wavefront   Jeu 2 Fév 2012 - 0:37

vraiment cool oni, c'est fantastique ce que tu fais.
Revenir en haut Aller en bas
Pixel-boy
Utilisateur confirmé: Rang *
avatar

Messages : 270

MessageSujet: Re: Voxelizer -> Sprites to wavefront   Jeu 2 Fév 2012 - 0:48

j'ai fais un ptit truc, l'anim est foireuse mais bon j'ai tellement galérer, je retenterais une prochaine fois. xD
Revenir en haut Aller en bas
http://leblogtwoplayers.blogspot.fr/
Chulien
Utilisateur confirmé: Rang *****
avatar

Messages : 2202

MessageSujet: Re: Voxelizer -> Sprites to wavefront   Jeu 2 Fév 2012 - 8:36

mec, aujourd'hui il neige à marseille et du coup j'ai pas cours, alors c'est pas ton truc qui va éclairer ma journée !
(en fait si ouh )

_________________
anciens projets
Revenir en haut Aller en bas
http://sites.google.com/site/chuliendev
shadow_the_killer
Utilisateur confirmé: Rang ****
avatar

Messages : 1271
Localisation : Québec\Canada
Projet Actuel : Chrono Trigger

MessageSujet: Re: Voxelizer -> Sprites to wavefront   Dim 5 Fév 2012 - 16:46

est-ce possible qu'il ne démarre pas sur window 7 32 bit ?? moi sa ouvre 1 sec un fenêtre noir dos et sa disparait -_-

_________________
allez voir le Projet d'envergure de la M.R.S
allez voir mon Crono Trigger Il y a du nouveau !!!
------------------------------------------------------------------------
Spoiler:
 


Envoyer moi un pv pour nous rejoindre !
Revenir en haut Aller en bas
onilink_
Modérateur
avatar

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

MessageSujet: Re: Voxelizer -> Sprites to wavefront   Dim 5 Fév 2012 - 16:49

Normal, y a pas d'interface graphique :p
Faut glisser déposer un sprite en png dessus.
Je l'ai marqué plus haut tout ça :b

_________________
                 
Revenir en haut Aller en bas
shadow_the_killer
Utilisateur confirmé: Rang ****
avatar

Messages : 1271
Localisation : Québec\Canada
Projet Actuel : Chrono Trigger

MessageSujet: Re: Voxelizer -> Sprites to wavefront   Lun 6 Fév 2012 - 1:48

ah dsl j'avais mal lu ^^ mon erreur ^^

_________________
allez voir le Projet d'envergure de la M.R.S
allez voir mon Crono Trigger Il y a du nouveau !!!
------------------------------------------------------------------------
Spoiler:
 


Envoyer moi un pv pour nous rejoindre !
Revenir en haut Aller en bas
marty
Utilisateur confirmé: Rang ***
avatar

Messages : 697
Projet Actuel : laby-ereinte !

MessageSujet: Re: Voxelizer -> Sprites to wavefront   Jeu 9 Fév 2012 - 22:34

quand j'ouvre l'objet dans anim8tor (importation obj) j'ai bien la forme dessinée de paint mais en gris impossible de lire le fichier .mtl associé c'est possible de créer un fichier bmp,gif ou autres à la place?
avec quoi ouvrez vous les objets créés avec voxelizer?
Revenir en haut Aller en bas
onilink_
Modérateur
avatar

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

MessageSujet: Re: Voxelizer -> Sprites to wavefront   Jeu 9 Fév 2012 - 23:28

Bah Blender of course :p
Et mtl c'est un fichier material wavefront.

_________________
                 
Revenir en haut Aller en bas
marty
Utilisateur confirmé: Rang ***
avatar

Messages : 697
Projet Actuel : laby-ereinte !

MessageSujet: Re: Voxelizer -> Sprites to wavefront   Ven 10 Fév 2012 - 20:23

j me doute, mais je pensais à un viewer plus léger (tu fais bouger ton objet texturé et tu fais une screesaver) car sur un notebook blender Sad
alors qu'animat8or passe!
j'y connais rien en 3D mais si t'as des solutions pour config ridicule je prends! gnii
Revenir en haut Aller en bas
gaeris
Pas mal


Messages : 35
Localisation : à [Nom de village imprononçable]

MessageSujet: Re: Voxelizer -> Sprites to wavefront   Jeu 21 Juin 2012 - 20:36

bonsoir

j'ai essayé d'ouvrir mon objet avec blender mais les pixels sont tous au même niveau, l'image n'est pas en relief triste2
Et je ne sais pas comment utiliser le fichier .mtl, est-ce la cause du premier problème ?
Revenir en haut Aller en bas
-Coco-
Utilisateur confirmé: Rang ***
avatar

Messages : 545
Localisation : Grenoble - Montpellier
Projet Actuel : Orion VII - 0%

MessageSujet: Re: Voxelizer -> Sprites to wavefront   Ven 22 Juin 2012 - 18:14

Tu es sûr d'avoir fait une heightmap en noir et blanc et de l'avoir nommée correctement ?

_________________
Oh, snap.
Revenir en haut Aller en bas
gaeris
Pas mal


Messages : 35
Localisation : à [Nom de village imprononçable]

MessageSujet: Re: Voxelizer -> Sprites to wavefront   Ven 22 Juin 2012 - 18:48

heu non ...

désolé mais j'y connais pas grand chose a Blender et je débute en 3D
Je pourrais avoir des infos plus détaillées sur l’utilisation des fichiers .obj et .mtl obtenus ?
Revenir en haut Aller en bas
onilink_
Modérateur
avatar

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

MessageSujet: Re: Voxelizer -> Sprites to wavefront   Sam 23 Juin 2012 - 20:52

Salut.
En fait la heightmap c'est une image en niveau de gris qui va définir la hauteur des voxels.
Donc si tu n'en crée pas, tu seras obligé de modifier les voxels sous Blender.
Pour le fichier mtl, il s'agit juste d'un fichier de matériaux, qui contient la couleurs et la transparence des voxels Smile
Blender le charge automatiquement normalement, si tu l'a pas renommé.

Exemple:
- (heightmap)

Ta heightmap doit avoir le même nom que ton sprite, avec _bump en plus (avant l'extension .png)


marty a écrit:
j me doute, mais je pensais à un viewer plus léger (tu fais bouger ton objet texturé et tu fais une screesaver) car sur un notebook blender Sad
alors qu'animat8or passe!
j'y connais rien en 3D mais si t'as des solutions pour config ridicule je prends! gnii
J'vais essayer de faire une compatibilité anim8or si j'ai le temps :p

_________________
                 
Revenir en haut Aller en bas
Gandoula
Nouveau


Messages : 8
Localisation : Casablanca, Maroc

MessageSujet: Re: Voxelizer -> Sprites to wavefront   Dim 24 Juin 2012 - 0:18

houla, c'est magique ça pour Unity !!! (vu qu'il gère pas d'office des collisions pixel perfect, si oui j'aimerai bien en être au courant)
reste a voir si c'est pratiquement faisable de créer une animations à partir de multiples sprites voxelisées.
GG !!

_________________
"Good musicians program with C#"
Revenir en haut Aller en bas
gaeris
Pas mal


Messages : 35
Localisation : à [Nom de village imprononçable]

MessageSujet: Re: Voxelizer -> Sprites to wavefront   Dim 24 Juin 2012 - 9:52

Merci ça fonctionne !
avec un peut d'entrainement ça peut donner des truc pas mal ! gnii

Une dernière question : il faut quelle différence de nuance de gris pour obtenir une hauteur de un pixel exactement sous blender ?
Revenir en haut Aller en bas
onilink_
Modérateur
avatar

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

MessageSujet: Re: Voxelizer -> Sprites to wavefront   Dim 24 Juin 2012 - 14:32

>gaeris
onilink_ a écrit:
De 0 a 59 -> niveau 0.
Puis a partir de 60, gagne 1 niveau tous les 20.

Donc 20 par 20. De plus t'est pas obligé d'utiliser du gris, seule la composante rouge est prise en compte. (plus rapide sous paint)
N'hésites pas a poster quelques images =)

>Gandoula
C'est possible, mais encore plus long et complexe qu'en pixel art.
De plus ça prendrais pas mal de mémoire, vu que la, c'est un rendu voxel oui, mais pas optimisé comme il se doit.
En effet on n'a pas une matrice de générée, mais juste un modèle 3d, ce qui ne conviendrais pas du tout a un moteur de jeu qui utilise des voxels.
Après vous avez la source, libre a vous de la modifier :p

_________________
                 
Revenir en haut Aller en bas
gaeris
Pas mal


Messages : 35
Localisation : à [Nom de village imprononçable]

MessageSujet: Re: Voxelizer -> Sprites to wavefront   Dim 24 Juin 2012 - 23:52

Merci beaucoup ça marche nickel

mon premier résultat, j'en suis assez fier même si ce n'est qu'un essai happy1


Et encore bravo onilink_ pour ton logiciel !
Revenir en haut Aller en bas
onilink_
Modérateur
avatar

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

MessageSujet: Re: Voxelizer -> Sprites to wavefront   Lun 25 Juin 2012 - 2:01

Merci :p

Très sympa ton rendu, dans une petite scène ça pourrais vraiment en jeter Smile

_________________
                 
Revenir en haut Aller en bas
marty
Utilisateur confirmé: Rang ***
avatar

Messages : 697
Projet Actuel : laby-ereinte !

MessageSujet: Re: Voxelizer -> Sprites to wavefront   Mer 10 Avr 2013 - 1:26

salut onilink_, j'adore ce soft !

pourrais tu le peaufiner avec un éditeur et un exportateur en gif/png/avi afin de nous éviter de recourir à d'autre logiciel?




_________________
Code:
rnd=>insight=>play

http://gamemaker.info/fr/manual



Revenir en haut Aller en bas
Contenu sponsorisé




MessageSujet: Re: Voxelizer -> Sprites to wavefront   

Revenir en haut Aller en bas
 
Voxelizer -> Sprites to wavefront
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 2Aller à la page : 1, 2  Suivant
 Sujets similaires
-
» Voxelizer -> Sprites to wavefront
» Les sprites
» Pack sprites
» Gestion des ressources et compression des sprites
» Recherche sprites (et eventuellement musiques) pour un jeu..

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Forum Le CBNA :: Informations :: Projets-
Sauter vers: