Partage
  • Partager sur Facebook
  • Partager sur Twitter

Modélisation 3D et Génération procédurale.

    10 septembre 2019 à 20:21:17

    Bonjour à tous, je suis Thule
    J'ai un projet assez fou : créer par génération procédural des vaisseaux spatiaux ou d'autres véhicules.
    J'ai appris la modélisation 3D :
    A l'école : 
    - Solidworks - avancé;
    - Catia - basique;
    De moi même :
    - Milkshape 3D - moddeur / mapeur sur Half Life 1 et Day Of Defeat;
    - Sketchup - avancé.
    Le truc c'est que l'ensemble de mes connaissance date du lycée et BTS, donc ya plus de 10 ans...
    Et j'ai pas "pris" le tournant nouvelle génération avec l'Unreal, Blender, etc...
    J'ai passé des centaines d'heures sur Sketchup, que j'adore, sur lequel j'ai un bon niveau. Mais J'ai essayé Blender, et même Unreal, et je suis perdu. Cette façon de dessiner par des plans 2D et avoir un vue 3D de prévisualisation, me dépasse ^^.
    Je ne sais pas si quelqu'un arrive à comprendre. Mais pouvez vous me dire honnêtement, si je souhaite modéliser des véhicules en génération procédurale ce qui pourrai le plus se rapprocher de mon expérience de Sketchup ? ou Honnêtement dite le moi, je me sort les doigts et j'apprend sur Blender.
    Autre questions. j'ai vue pas mal de vidéo sur la génération procédurale, la plupart utilise des formules / calculs en partant de zero (exemple : je veux un bâtiment, 4 étages, 2 portes, 5 côtés, un toit plat. Et pouf le logiciel le génère). Mais est il possible de créer des patterns en amont puis par génération de les assembler (Je prend en exemple un jeu : Eve Online, des vaisseaux "rond", des vaisseaux avec des branches, etc... )
    Je vous remercie d'avance.
    • Partager sur Facebook
    • Partager sur Twitter
      10 septembre 2019 à 22:23:35

      Bonjour,

      La facilité de pouvoir faire des batiments est qu'il est généralement peu détaillé (exemple de forme carré) et possède des composants (fenetres, portes) faciles à placer.

      Par exemple, un moyen simple de "générer un batiment (j'entends là un immeuble)" est de modéliser à partir d'un cube un étage, de modéliser des fenetres et une porte ce qui est très facile à faire avec n'importe quel logiciel.

      Puis de faire un algo de type :

      var nbEtage //a definir

      pour i allant de 0 à nbEtage :

      Si i ==0 Poser etage

      Si i > 0 Poser etage sur etage en dessous.

      Cela est un moyen de générer un batiment mais ce n'est pas une génération complete. J'entends par là que l'on fait qu'assembler des blocs mais qu'on ne modifie/ajoute pas par exemple les faces, les arettes ou les cotés des mesh (objets 3D) ce qui est vraiment plus complexe.

      Pour en revenir à l'idée initiale de vouloir modéliser un vaisseau spatial par génération, cela est possible et cela a déja été fait.

      Pour le cas d'Unity, la recherche Google : "unity spaceship generation" offre par exemple :

      https://github.com/mkmarek/unity-spaceship-generator

      En tout cas bien que cela fut déja réalisé. Cela dépend vraiment de quelle méthode choisir pour le générer et cela influera donc sur la qualitée du rendu finale. Pour avoir déja expérimenté la génération procédurale d'ilots volants 3D, cela est très complexe et demande surtout un très bon niveau en programmation, une très bonne connaissance des Mesh 3D et un bon bagage mathématique et arithmétique.

      Ps : Apprendre à modéliser des vaisseaux sous Blender est largement plus rapide que de savoir générer un vaisseau sachant que pour écrire le programme de génération il faut savoir le modéliser.

      Aussi pour les patterns, je pense qu'il est plus simple de creer des patterns et de les assembler mais cela reste assez complexe, il y a de forte chance que cela ne soit pas très beau et n'est pas réalisable pour quelqu'un n'ayant pas beaucoup d'experience la dessus.

      -
      Edité par coukil 10 septembre 2019 à 22:29:26

      • Partager sur Facebook
      • Partager sur Twitter
        11 septembre 2019 à 8:26:11

        Bonjour Coukil,

        Merci pour ta réponse de qualité, ( ca fait longtemps que je n'ai pas eu "Léon", 12 ans, qui me répond et à côté ^^).

        Par chance, dans mes études j'ai fait de la programmation, industrielle en grosse partie, mais aussi du C. Et certain type d'écriture se ressemble, donc je me débrouille, je m'adapte vite au langage. Hors si je dis pas de bêtise, Unity est en C# ? Donc je vais me remettre dedans.

        Je suis tombé sur lui en Youtuber, pour du bâtiment justement : https://www.youtube.com/watch?v=qi3qBzsddcI

        Mais le tien est pas mal aussi. 

        Mon idée est identique sur la base mais je souhaite "améliorer/pousser" la chose : créer un "bloc" avec des points d'accroche choisit, idem que "Unity spaceship generation" ( exemple créer un cokpit avec une porte ), et générer l'assemblage. Mais selon les blocs assembler il y aura peut être du jour entre. Donc je devrait faire une génération dans la génération j'imagine.

        En tout cas j'ai bien compris qu'il y à une grosse partie de modélisation ET de programmation.

        Une autre question, j'ai remarqué que dans les vidéos évoqué tout les deux, Je les vois programmer, modéliser et générer. Mais à quel moment ce qu'ils écrivent en programme, s'affiche à droite dans le panneau, avec le choix du nombre de pièces, de bloc, d'étages, etc.... ? C'est des lignes spécifiques sans valeurs que l'on modifie avant génération et qui sont prévue pour s'afficher dans le panneau pour la génération ?

        Désolé pour mon manque de vocabulaire, entre le C et Unity en l’occurrence ^^.

        Oh j'allais oublier, Unity est il "fait" pour modéliser ? ou il est préférable d'utiliser Blender ( ou autres )

        -
        Edité par Thule_FR 11 septembre 2019 à 8:32:29

        • Partager sur Facebook
        • Partager sur Twitter
          11 septembre 2019 à 21:48:33

          Bonjour,

          La grosse différence entre le C et le C# est que le C# est un langage orienté objet contrairement au C. C'est donc une facon de faire assez différente des langages non orientés objets type C.

          J'ai pris l'exemple de projets d'Unity car c'est un moteur de jeu dont je suis un peu plus familiarisé et dont je pense qu'il y a plus d'exemples de projet de génération de models trouvable sur Internet que sur UE4.

          Je pense qu'en effet l'assemblage de models 3D types portes, cockpit etc ... Serait le moyen le plus simple pour pouvoir générer. Le seul problème est que l'on apercoit assez facilement que le vaisseau est juste un ensemble de blocks reliés entre eux.

          Avec par exemple Spore : https://orig00.deviantart.net/71e9/f/2018/028/d/0/spore_2018_01_28_17_08_33_by_greaseroach-dc1gwwc.png

          Je pense toutefois qu'il s'agit de la facon la plus simple pour pouvoir générer un vaisseau, les autres demandant une connaissance en génération de Mesh assez avancé.

          Tout d'abord, la barre a droite qui permet de modifier les valeurs se nomme l'inspecteur. Il affiche tous les composants (anglais : component) que possède le GameObject. Un GameObject possède par défaut une position dans la scène que l'on nomme Transform (et qui est un composant). Pour le cas de la vidéo, il possède aussi plusieurs scripts dont on peut les considérer en tant que composant.

          Unity donne la possibilitée de modifier des variables dans l'inspecteur si par exemple la variable est publique:

          public int a;

          Unity possède aussi quelques moyens pour pouvoir configurer legerement l'affichage dans l'inspecteur avec des crochet avant la declaration de la variable

          [Range(0,100)]

          public int portee;

          Cela affichera un slider défini entre 0 et 100. Comme dans la vidéo youtube ci dessus. Mais toutefois le meileur moyen de modifier l'affichage dans l'inspecteur est de coder son comportement avec un Editeur Custom (Custom Editor).

          Pour ce qui est de modéliser sous Unity, il ne faut pas confondre : (definition subjective pour expliquer l'idée) Modéliser est la facon de creer une forme géometrique nommé Mesh, on peut par exemple modéliser une tête. Toutefois il ne faut pas confondre avec un travail d'assemblage de models 3D qui ressemblera plus a du build. Par exemple assembler 1 porte et 1 mur est du build dans le sens ou l'on fait qu'assembler des models 3D qui eux ont été modélisés (la porte et le mur). On peut toutefois le modéliser directement et donc considerer la porte et le mur en tant qu'un seul model. ps : je dis build pour simplifier l'idée, je ne connais pas le terme et si ça se trouve, on utilise aussi le terme modéliser.

          Unity possède un plugin nommé "ProBuilder" permettant de modéliser des mesh. Cependant, je trouve qu'il est plus adapté pour du level editing (exemple : faire des couloirs, des salles) mais pas pour modéliser des objets complexe. Le mieux étant de le faire dans Blender et de l'importer sous Unity. D'ailleurs il est aussi possible de modéliser en code dur sous Unity mais cela est difficile :

          ex : https://www.youtube.com/watch?v=eJEpeUH1EMg

          -
          Edité par coukil 11 septembre 2019 à 21:51:51

          • Partager sur Facebook
          • Partager sur Twitter

          Modélisation 3D et Génération procédurale.

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          • Editeur
          • Markdown