PDA

Voir la version complète : Format de fichier 3D


3L3KMAD
09/10/2005, 15h29
Encore une fois bonjour à tous (ou alors peut être bonsoir ? Ou bonne nuit ? A vous de voir). Enfin, j'aimerais soliciter un peu de votre temps.
Voila, je recherche un format de fichier 3D approprié pour l'utilisation que je voudrais en faire.

Je suis actuellement en train de plancher sur un projet de jeux de stratégie (doucement car j'ai aussi pas mal d'autres choses en tête, mais ce projet me tient à coeur)

Mon problème est que je voudrais pouvoir faire par exemple en sorte que n'importe quelle unité puisse à la base chevaucher n'importe quel animal, ou des choses dans le genre (je pourrais donner des exemples en réfléchissant un peu mais manque de bol je suis un peu crevé en ce moment à cause d'un rhume qui n'en finit pas....).

Enfin pour en revenir au principal, il me faudrait donc un format de fichier qui gère les personnages de manière on va dire squelletale. Je pense du moins que cela correspond à ce que je voudrais mais pour plus de clareté je vais vous expliquer (plus ou moins bien et j'espère plus que moins) ce à quoi je pense :

J'ai en tête de gérer les personnages par membres, c'est à dire de considérer non chaque perso comme un personnage mais comme 2 jambes, 2 bras un tronc et une tête (pour résumer mais l'idée est là).
De ce fait pour chaque membre j'ai besoin évidement de connaître les faces, somments et textures qui le composent, mais aussi de connaîtres les différents points d'attaches par rapports aux autres membres et aussi on va dire un plan spécifique qui permet d'orienter le membre convenablement lors des différents déplacements (plan ou 3 points, ou angles...).

Certains me diront peut être que je me complique royalement la vie et qu'il y a plus simple, auquel cas je vous dirai que je suis ouvert à toute nouvelle idée qui pourrait me faire avancer. Sachant que si j'ai opté pour cette méthode c'est pour un gain de mémoire d'une part, d'autre part parce que même si c'est plus dur à programmé, le résultat est très flexible par raport à une solution du type animations pré-enregistrées. Le seul soucis restant d'une part dans la difficultée à la mettre en oeuvre et aussi peut être dans le temps de calcul nécessaire à chaque instance d'un personnage (multiplié par le nombre de membres...).

Enfin tout ça est bien beau mais je tourne autour du pot vous allez me dire. Mais je pense qu'il était utile de redéfinir le contexte.

Donc, pour revenir une fois de plus au problème principal et pour ceux qui auraient eu le courage de lire jusque là, je voudrais pouvoir éviter de devoir éventuellement construire moi même un éditeur 3D très très basique et donc de pouvoir utiliser un format pré existant. Non que cela me fasse peur au niveau complexité (je n'ai certainement pas encore le niveau mais le meilleur moyen d'y parvenir c'est tout de même d s'y tenter si on en a le courage), mais plutôt niveau temps. Je voudrais pouvoir tout de même alléger quelque peu la dose de travail quand possible.

Donc, j'avais pensé au format ms3d en visionnant rapidement quelques topics dans le forum, mais je n'ai malheureusement pas réussi à trouver quoique ce soit sur le net expliquant clairement comment il marche (il est très probable aussi que je m'y soit mal pris mais je n'ai en semaine qu'un petit 56k avec accès libre de free ce qui limite quelque peu les recherches).

Pour conclure, je fait donc appel à vos connaissances pour me dire ce que vous en pensez, et dans le cas ou mon expliquation autait été claire et pas trop barbante, peut être pourriez-vous me proposer quelques formats de fichier, si possible avec la structure du fichier,pour me permettre d'avancer un peu ?

Dans tout les cas merci d'avance et en particulier à ceux qui sont arrivés à cette ligne !

Aranoth
09/10/2005, 15h38
Voila un exemple de MS3D format ASCII:
// MilkShape 3D ASCII

Frames: 180
Frame: 1

Meshes: 1
"Box01" 0 0
16
0 -10.625000 10.276449 6.405922 0.000000 0.447368 -1
0 -10.625000 0.220776 6.405922 0.000000 1.000000 -1
0 10.625000 10.276449 6.405922 1.000000 0.447368 -1
0 10.625000 0.220776 6.405922 1.000000 1.000000 -1
0 10.625000 10.276449 -6.155922 1.000000 0.447368 -1
0 10.625000 0.220776 -6.155922 1.000000 1.000000 -1
0 -10.625000 10.276449 -6.155922 0.000000 0.447368 -1
0 -10.625000 0.220776 -6.155922 0.000000 1.000000 -1
0 -10.337861 18.416752 -3.224840 0.013512 0.000000 -1
0 -10.337861 18.416752 3.474840 0.013512 0.000000 -1
0 10.337861 18.416752 -3.224840 0.986488 0.000000 -1
0 10.337861 18.416752 3.474840 0.986488 0.000000 -1
0 -10.459954 14.586021 -5.301638 0.007767 0.210526 -1
0 -10.459954 14.586021 5.551638 0.007767 0.210526 -1
0 10.459954 14.586021 -5.301638 0.992233 0.210526 -1
0 10.459954 14.586021 5.551638 0.992233 0.210526 -1
18
0.000000 0.000000 1.000000
1.000000 0.000000 0.000000
0.000000 0.000000 -1.000000
-1.000000 0.000000 0.000000
0.000000 1.000000 0.000000
0.000000 -1.000000 0.000000
-0.705296 0.295491 -0.644394
-0.445562 0.190466 -0.874756
-0.891123 0.120829 0.437378
-0.706764 0.228059 0.669682
0.706764 0.228059 -0.669682
0.891123 0.120829 -0.437378
0.445562 0.190466 0.874756
0.705296 0.295491 0.644394
-0.888593 0.240183 -0.390787
-0.444297 0.437884 0.781574
0.444297 0.437884 -0.781574
0.888593 0.240183 0.390787
28
0 0 1 2 0 0 0 1
0 1 3 2 0 0 0 1
0 2 3 4 1 1 1 2
0 3 5 4 1 1 1 2
0 4 5 6 2 2 2 1
0 5 7 6 2 2 2 1
0 6 7 0 3 3 3 2
0 7 1 0 3 3 3 2
0 8 9 10 4 4 4 3
0 9 11 10 4 4 4 3
0 1 7 3 5 5 5 3
0 7 5 3 5 5 5 3
0 12 6 0 6 7 8 4
0 12 0 13 6 8 9 4
0 14 4 6 10 11 7 4
0 14 6 12 10 7 6 4
0 13 0 2 9 8 12 4
0 13 2 15 9 12 13 4
0 15 2 4 13 12 11 4
0 15 4 14 13 11 10 4
0 8 12 13 14 6 9 4
0 8 13 9 14 9 15 4
0 10 14 12 16 10 6 4
0 10 12 8 16 6 14 4
0 9 13 15 15 9 13 4
0 9 15 11 15 13 17 4
0 11 15 14 17 13 10 4
0 11 14 10 17 10 16 4

Materials: 1
"Material01"
0.200000 0.200000 0.200000 1.000000
0.800000 0.800000 0.800000 1.000000
0.000000 0.000000 0.000000 1.000000
0.000000 0.000000 0.000000 1.000000
0.000000
1.000000
".\sprucepa.jpg"
""

Bones: 0
GroupComments: 0
MaterialComments: 0
BoneComments: 0
ModelComment: 0
c'est un coffre ou un panneau je sais plus.


Et le même model en format *.x (Direct3D) que j'aime bien:
xof 0303txt 0032

// DirectX - from MilkShape3D

Frame DXFrame
{
FrameTransformMatrix
{
1.000000,0.000000,0.000000,0.000000,
0.000000,1.000000,0.000000,0.000000,
0.000000,0.000000,1.000000,0.000000,
0.000000,0.000000,0.000000,1.000000;;
}

Mesh DXMesh
{
16;
-1.062500;1.027645;-0.640592;,
-1.062500;0.022078;-0.640592;,
1.062500;1.027645;-0.640592;,
1.062500;0.022078;-0.640592;,
1.062500;1.027645;0.615592;,
1.062500;0.022078;0.615592;,
-1.062500;1.027645;0.615592;,
-1.062500;0.022078;0.615592;,
-1.033786;1.841675;0.322484;,
-1.033786;1.841675;-0.347484;,
1.033786;1.841675;0.322484;,
1.033786;1.841675;-0.347484;,
-1.045995;1.458602;0.530164;,
-1.045995;1.458602;-0.555164;,
1.045995;1.458602;0.530164;,
1.045995;1.458602;-0.555164;;
28;
3;0,2,1;,
3;1,2,3;,
3;2,4,3;,
3;3,4,5;,
3;4,6,5;,
3;5,6,7;,
3;6,0,7;,
3;7,0,1;,
3;8,10,9;,
3;9,10,11;,
3;1,3,7;,
3;7,3,5;,
3;12,0,6;,
3;12,13,0;,
3;14,6,4;,
3;14,12,6;,
3;13,2,0;,
3;13,15,2;,
3;15,4,2;,
3;15,14,4;,
3;8,13,12;,
3;8,9,13;,
3;10,12,14;,
3;10,8,12;,
3;9,15,13;,
3;9,11,15;,
3;11,14,15;,
3;11,10,14;;

MeshNormals
{
18;
0.000000;0.000000;-1.000000;,
1.000000;0.000000;0.000000;,
0.000000;0.000000;1.000000;,
-1.000000;0.000000;0.000000;,
0.000000;1.000000;0.000000;,
0.000000;-1.000000;0.000000;,
-0.705296;0.295491;0.644394;,
-0.445562;0.190466;0.874756;,
-0.891123;0.120829;-0.437378;,
-0.706764;0.228059;-0.669682;,
0.706764;0.228059;0.669682;,
0.891123;0.120829;0.437378;,
0.445562;0.190466;-0.874756;,
0.705296;0.295491;-0.644394;,
-0.888593;0.240183;0.390787;,
-0.444297;0.437884;-0.781574;,
0.444297;0.437884;0.781574;,
0.888593;0.240183;-0.390787;;
28;
3;0,0,0;,
3;0,0,0;,
3;1,1,1;,
3;1,1,1;,
3;2,2,2;,
3;2,2,2;,
3;3,3,3;,
3;3,3,3;,
3;4,4,4;,
3;4,4,4;,
3;5,5,5;,
3;5,5,5;,
3;6,8,7;,
3;6,9,8;,
3;10,7,11;,
3;10,6,7;,
3;9,12,8;,
3;9,13,12;,
3;13,11,12;,
3;13,10,11;,
3;14,9,6;,
3;14,15,9;,
3;16,6,10;,
3;16,14,6;,
3;15,13,9;,
3;15,17,13;,
3;17,10,13;,
3;17,16,10;;
}

MeshTextureCoords
{
16;
0.000000;0.447368;,
0.000000;1.000000;,
1.000000;0.447368;,
1.000000;1.000000;,
1.000000;0.447368;,
1.000000;1.000000;,
0.000000;0.447368;,
0.000000;1.000000;,
0.013512;0.000000;,
0.013512;0.000000;,
0.986488;0.000000;,
0.986488;0.000000;,
0.007767;0.210526;,
0.007767;0.210526;,
0.992233;0.210526;,
0.992233;0.210526;;
}

MeshMaterialList
{
1;
28;
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0;

Material Material01
{
0.800000;0.800000;0.800000;1.000000;;
0.000000;
0.000000;0.000000;0.000000;;
0.000000;0.000000;0.000000;;

TextureFileName
{
"sprucepa.jpg";
}
}
}
}
}


Les deux ont étés exportés avec Milkshape3D (MS3D), à toi de te faire une idée (mais il en existe d'autres)

3L3KMAD
10/10/2005, 23h09
Merci c'est vraiment sympa ! Effectivement il s'agit bien d'un coffre. Mais, aurais-tu aussi en réserve la synthaxe générale des fichiers MS3D ASCII et X, car, surtout pour les MS3D d'ailleurs, j'ai pu remarquer que le format par exemple indique que les coordonnées sont insrites (dans ton fichier) entre 1 et -1, mais ce n'est pas toujours le cas. Parfois j'ai eu du 0 -1.Je n'ai jamais personnellement pour le moment essayé des exemples avec plus d'une face, donc, je n'ai pas eu autre chose, mais cela n'empêche que ça change... Donc si je pouvais avoir la structure exacte quelque soit le cas (ou l'algo carrément et je me débrouillerais avec (C ou Basic je m'en fout même à la limite en pseudo langage, si celui-ci n'est psa tropdur à comprendre))

Je te remercie par avance !

listorien
12/10/2005, 17h09
En tapant +ms3d +bones dans google je tombe ici :

http://216.239.59.104/search?q=cache:h5NYWS3wfw4J:www.franksilas.com/Gametut.htm+%2Bms3d+%2Bbones&hl=fr

Donc pour toi, je pense que l'animation squelettale est le bon plan :
1) Tu définis une seule animation d'un perso qui monte à cheval (les persos ont tous la même corpulence)
2) Tu appliques la même animation pour tous tes persos

Apparemment le ms3d permet d'utiliser ce type d'animations donc ce format est adapté à tes besoins.

Listorien

3L3KMAD
20/10/2005, 16h50
Merci pour ta réponse listorien. Effectivement après avoir cresé la question quand j'en ai eu le temps, car ces temps ci les études se sont montrées un peu plus sauvages que d'habitude, et comme je ne voulais pas répondre sans avoir un minimum cogité le sujet, ca explique pourquoi une réponse si tardive.

Toujours est-il que j'ai été voir vite fait le site que tu m'as montré, mais j'ai du arrêté de télécharger les différentes images contenues dans la page car ça prenait trop de temps (hé oui pour le moment j'en suis revenu au bête petit modem 56k en attendant l'ouverture de ma ligne adsl, ce qui m'empêche d'ailleurs aussi de faire des recherches trop approfondies sur google).

J'ai essayé par ailleurs de comprendre un peu mieux le code que m'as donné Aranoth, mais comme je n'arrivais pas à tout crener j'ai finalement pris le temps de télécharger milkshape 3D (faut bien faire des concessions pour avancer de temps à autre) mais rien n'y à fait. Donc je relance le débat (je sais je suis chiant) : si quelqu'un possède des tutoriaux ou la documentation de milkshape sur la structure interne des fichiers ms3d et ms3d ascii, ce serait vraiment sympa. Je ferais bien la recherche moi même, mais le peu que j'ai pu faire pour le moment n'as malheureusement pas été fructueux (sinon je ne serais pas en train d'écrire ce message) !

Donc merci d'avance à toute participation de votre part, et prions pour que ma ligne haut débit arrive vite, parce que je me rend compte maintenant que j'en suis privé combien j'en suis dépendant !

must19
20/11/2005, 15h16
essayez de voir le format MD2. il y a de la doc sur ce format dans le site www.game-lab.com d'ailleurs c le seul pour qui j'ai trouver de la docs meme si je pense qu'il n'est pas fait pour le type de jeux que vous voulez creer. mais on l'etudier il peut vous aider a voir plus clair vous pouvez meme telecharger le MDViewer qui permet de visualiser vos models3D

Aranoth
20/11/2005, 15h32
Il me semble que le format MD2 n'anime pas en squeletal, => mauvaise solution.

Désolé mais je ne sais pas où tu pourras trouver la doc de ce format, bien qu'il doit exister des loaders.

par contre voilà un autre exemple de MS3D (ascii) qui utilise des bones et qui est animé (5frames)

// MilkShape 3D ASCII

Frames: 5
Frame: 1

Meshes: 1
"Box01" 0 -1
28
0 -20.380154 3.028386 2.276025 0.000000 0.000000 0
0 -20.380154 -3.028387 2.276025 0.000000 1.000000 0
0 0.824017 3.114155 1.863175 1.000000 0.000000 1
0 -0.530913 -2.746733 2.569339 1.000000 1.000000 1
0 21.572170 -2.147400 -1.995790 0.000000 0.000000 1
0 20.217241 -8.008277 -1.289627 0.000000 1.000000 1
0 20.662273 -2.473005 -6.444024 1.000000 0.000000 1
0 19.307346 -8.333882 -5.737862 1.000000 1.000000 1
0 -0.085889 2.788546 -2.585107 0.000000 0.000000 1
0 -1.440818 -3.072342 -1.878943 0.000000 1.000000 1
0 -20.380154 3.028386 -2.276025 1.000000 0.000000 0
0 -20.380154 -3.028387 -2.276025 1.000000 1.000000 0
0 -20.380154 3.028386 -2.276025 0.000000 0.000000 0
0 -20.380154 -3.028387 -2.276025 0.000000 1.000000 0
0 -20.380154 3.028386 2.276025 1.000000 0.000000 0
0 -20.380154 -3.028387 2.276025 1.000000 1.000000 0
0 -20.380154 3.028386 2.276025 0.000000 1.000000 0
0 -0.085889 2.788546 -2.585107 1.000000 0.000000 1
0 0.824017 3.114155 1.863175 1.000000 1.000000 1
0 -20.380154 -3.028387 2.276025 0.000000 0.000000 0
0 -0.530913 -2.746733 2.569339 1.000000 0.000000 1
0 -1.440818 -3.072342 -1.878943 1.000000 1.000000 1
0 0.824017 3.114155 1.863175 0.000000 0.000000 1
0 -0.530913 -2.746733 2.569339 0.000000 0.000000 1
0 20.217241 -8.008277 -1.289627 0.000000 0.000000 1
0 20.662273 -2.473005 -6.444024 0.000000 0.000000 1
0 -1.440818 -3.072342 -1.878943 0.000000 0.000000 1
0 19.307346 -8.333882 -5.737862 0.000000 0.000000 1
16
0.000000 0.000000 1.000000
0.199889 0.071530 0.977204
0.953939 -0.241911 -0.177423
-0.199889 -0.071530 -0.977204
0.000000 0.000000 -1.000000
-1.000000 0.000000 0.000000
0.000000 1.000000 0.000000
0.075256 0.765463 -0.639065
0.275436 0.940621 0.198411
0.000000 -1.000000 0.000000
-0.075254 -0.765463 0.639064
-0.275435 -0.940621 -0.198411
0.278831 0.496728 0.821897
-0.110694 -0.833511 0.541301
0.110695 0.833511 -0.541301
-0.278829 -0.496729 -0.821897
20
0 0 1 2 0 0 1 1
0 1 3 2 0 1 1 1
0 4 5 6 2 2 2 2
0 5 7 6 2 2 2 2
0 8 9 10 3 3 4 1
0 9 11 10 3 4 4 1
0 12 13 14 5 5 5 2
0 13 15 14 5 5 5 2
0 12 16 17 6 6 7 3
0 16 18 17 6 8 7 3
0 19 13 20 9 9 10 3
0 13 21 20 9 11 10 3
0 4 22 23 12 8 10 3
0 4 23 24 12 10 13 3
0 25 8 22 14 7 8 3
0 25 22 4 14 8 12 3
0 24 23 26 13 10 11 3
0 24 26 27 13 11 15 3
0 27 26 8 15 11 7 3
0 27 8 25 15 7 14 3

Materials: 0

Bones: 3
"joint1"
""
16 -19.750000 -0.250000 0.000000 0.000000 1.570796 0.000000
5
1.000000 -0.000000 0.000000 0.000000
2.000000 -0.000000 0.000000 0.000000
3.000000 -0.000000 0.000000 0.000000
4.000000 -0.000000 0.000000 0.000000
5.000000 -0.000000 0.000000 0.000000
5
1.000000 0.000000 0.000000 0.000000
2.000000 0.000000 0.000000 0.000000
3.000000 1.169371 -0.000000 0.000000
4.000000 -0.087266 -0.000000 -0.000000
5.000000 -0.087266 -0.000000 -0.000000
"joint2"
"joint1"
21 0.000000 0.000000 19.500000 -0.000000 0.000000 0.000000
5
1.000000 0.000000 0.000000 0.000000
2.000000 0.000000 0.000000 0.000000
3.000000 0.000000 0.000000 0.000000
4.000000 0.000000 0.000000 0.000000
5.000000 0.000000 0.000000 0.000000
5
1.000000 0.000000 0.000000 0.000000
2.000000 0.925025 0.767945 -0.000000
3.000000 0.925025 0.767945 -0.000000
4.000000 0.925025 0.000000 -0.000000
5.000000 0.139626 -0.000000 -0.000000
"joint3"
"joint2"
20 0.000000 0.000000 21.250000 0.000000 0.000000 0.000000
5
1.000000 0.000000 0.000000 0.000000
2.000000 0.000000 0.000000 0.000000
3.000000 0.000000 0.000000 0.000000
4.000000 0.000000 0.000000 0.000000
5.000000 0.000000 0.000000 0.000000
5
1.000000 0.000000 0.000000 0.000000
2.000000 0.000000 0.000000 0.000000
3.000000 0.000000 0.000000 0.000000
4.000000 0.000000 0.000000 0.000000
5.000000 0.000000 0.000000 0.000000



[B]EDIT[B] : j'ai trouvé ça sur un autre sujet : http://www.wotsit.org/search.asp?page=1&s=3d
Y'a peut être des trucs interessants.

3L3KMAD
22/11/2005, 21h54
Excusez moi pour la réponse si tardive, en fait je n'avais pas vu le dernier message !

N'y a-t-il pas moyen de recevoir des mails pour nous prévenir qu'un sujet auquel on participe à eu un nouveau message ? Ou alors c possible et je suis bigleux ?

Enfin, j'ai optmé pour le moment pour une solution pour le moins bourrine :

je fignole en ce moment un loaders de fichiers ms3d retraduit d'un exemple trouvé sur le net, pour l'adapter à mes besoins. De la je vais faire un mini éditeur de fichiers 3D qui ne pourra que importer des ms3d ou des fichiers de mon format propre pour les attacher ensemble et les exporter dans mon format adapté perso !

orion
23/11/2005, 09h29
Alors...

Pour recevoir des mails lorsque il y a un nouveau message, il faut que tu aille en haut de la discussion dans "outils de la discussion" et que tu t'abonne a celle ci.

Pour ce qui est du format md2, je déconseille, pour differentes raisons.

Il n'est pas squeletal, donc pour les animations pour chaque frame tu a de nouveau toutes les infos de maillage, ce qui rend le fichier très lourd.

Les animations sont a chier, il faut le dire, car pour je ne sais quel raison, lorsque tu vas vouloir faire de l'interpolation pour rendre ton animation plus fluide, celle ci va trembler. (j'ai même ressorti ce bon vieux quake 2 pour me persuader que ce n'était pas nous qui étions tellement mauvais que pas a la hauteur pour tenter d'utiliser les travaux de J Carmack ;p )

Le format ms3d je ne connais pas, moi je suis parti dans un fichier antique, que je complete ensuite pour exporter le tout dans mon propre format de fichier

Ce format antique, c'est le ase, qui ne gere pas les animations par bones, mais cela ne me derange pas trop, parce que j'aime bien la difficulte donc je bosse sur un systeme de calcul des poids automatique (oui je sais le fou ;p)

Mais je pense que effectivement, si tu veux que le format de fichier colle le plus possible a tes besoins, il est interressant de mettre au point son propre format de fichier.

3L3KMAD
23/11/2005, 12h34
Disons que en fait effectivement c'est même la première idée qui m'est passée par la tête quand j'ai réfléchi au problème. Qui peut connaître mieux que moins les besoins que j'ai niveaux contenu informatif du fichier ? Donc nécessairement le format fait maison reste la solution à toute épreuve, ou presque. Et c'est là le hic qui m'as fait chercher ailleurs : je veux programmer un jeu, pas un modeleur 3D. Donc il ne faudrait pas que je passe trop de temps sur un éditeur. C'est pour cette raison que j'ai pris la décision de couper la poire en deux. Je fait mon propre système de fichiers, donc mon propre modéleur, mais ce modéleur sera capable de loader des fichiers de formats déjà existants pour venir leur gréffer les infos dont j'ai besoins. Voila pourquoi je fini en ce moment le loader de ms3d.

Aranoth
23/11/2005, 12h50
Tu peux également developper un plugin d'export pour ton soft 3D préféré.
Mais faut avoir le SDK !

3L3KMAD
23/11/2005, 13h14
j'y ai pensé mais le plus simple et de refaire un éditeur rapide, qui ne fera qu' assembler des pièces en différents formats pour donner un objet dans le mien !