GameCorp - Index des forumsGame MakingProgrammationLangages C et C++Petite Explication sur la conception d'un moteur next-gen physique
Petite Explication sur la conception d'un moteur next-gen physique
| yamashi |
Posté le 08 Mar 2008 à 05:57
|
|
![]() Messages : 35 GCPoints : 5774 |
Bonjour, J'en peux plus de coder mon moteur 3D donc je me suis dis que partager mon savoir serait une bonne idée ! En premier lieu je vais vous expliquer ma technique pour faire une destruction de modèle dynamique, qui rend comme dans crysis ( sans la qualité mais voyons juste la technique ). I. Destruction dynamique par découpage de vertices La méthode proposé est une méthode expérimentale, celle-ci est en cours de développement donc pas encore fiable même si sur une base théorique elle marche. 1) Comprendre le système a) Rappel du fonctionnement d'un modèle 3D Un modèle 3D comme vous le savez surement est une suite de vertices reliés, représentant un objet, son image est projeté sur un plan 2D d'où son nom de fractal. En jeu vidéo nous utilisons les modèle 3D pour représenté le monde jouable, basé sur la réalité ou une idée imaginaire. La génération de la fractal est effectué a partir de paramètre stocker dans des matrices a quatre dimensions ( Cf : Matrice OpenGL pour plus de précision sur la projection 2D ). Ces matrices sont généré à partir d'ensemble de vertices qui relié forme des faces, ces faces sont texturé a partir de fichier ressources ou de code rgb. La projection est calculé grâce au rapport du viewPort, entité paramétrable. Un modèle a une apparence pleine hors tout modèle est vide ou remplie d'un système de particule qui donne une impression de plein, qui peut grâce a un shader apparaître bien plus réaliste. C'est cette aspect vide qui nous intéresse pour la conception d'un effet de destruction massive et réaliste, qui peut rendre très bien sans trop de travail. Pourquoi cela n'existe pas depuis toujours alors ? Cette question peut paraître évidente bien que la réponse soit simple, et logique : L'idée et la conception en elle même est simple mais la puissance de calcul des processeur n'était pas assez importante pour faire une simulation physique en temps réel. C'est pourquoi en plus des carte graphique il est possible d'acheter des cartes Physique Carte physique : Les cartes physiques permettent de retiré des cycles du processeur, leurs core sont similaire a ceux des cartes graphiques, d'ailleurs il est possible d'exploiter une carte graphique pour bien d'autres choses, comme la simulation physique, un NPU, encryption massive, antivirus... b) Fonctionnement du système Si vous connaissez un peu la modélisation 3D ou le mapping vous verrez que l'idée est plutôt simple. Nous procéderons par une démonstration par l'exemple. Dans cette exemple nous prendrons le cas d'un impact sur une barre en bois. Imaginons qu'un éclat d'une voiture entre en impact avec notre barre en bois. Mais comment faire pour casser le modèle a cet endroit ? Notre barre en bois est un cylindre, hors nous savons les courbes de bezier sont basés sur des droite. Il nous faut donc aplatir notre cylindre. Nous utiliserons un cylindre de base 12 lignes. Supposons que notre cylindre est posé droit. Et que notre CollisionPoint est effectué au point P(0,0). Nous ajoutons un vertex sur cette ligne, plus que 11 vertex a ajouter. Mais maintenant comment trouver les coordonnées des points a faire. Pour de tel mesure pas la peine de suivre le vecteur déplacement de l'objet, nous utiliserons donc le droite Y = 0; Pour projeter le points sur les autres droites. Nous avons une autres ligne tracé passant par A et B de coordonnées A( -5, -5 ) et B ( -5, 5 ) nous avons donc la droite d'équation d: X = -5, il va de soit que le vertex a ajouté se trouve en P' ( -5,0 ). Il suffit de répéter cette action autant de fois que nécessaire. Mais cela ne suffit pas a couper. Car nous avons une face en plus certe mais il faut deux faces, il faudra donc ajouter des vertex aux coordonnées P'( -5, -0.1 ) et P'' ( -5, 0.1 ) en supposant la disparition de matière physique, qui devient copeaux de bois, de toute façon les gamers ne s'amuseront pas a regarder si 1 mm de matière a disparu ou non, ceci nous permet de rester dans ![]() Suite a venir
Dernière édition le 06 Avr 2009 à 10:40
Intel E8400 @ 3.8ghz
4GB PC6400 Nvidia Geforce 9600GT o/c 1 TB |
|
| Darktib |
Posté le 08 Mar 2008 à 13:26
|
|
![]() Messages : 4017 GCPoints : 347288 |
Tres interessant... J'attend la suite avec impatience^^ Rien a dire, a part peut etre deux defauts: 1_ l'orthographe. Ne t'inquiete pas, il existe des correcteurs recrutés, faut juste que Mod clarifie un peu les roles et ton tuto sera corrigé. 2_ le manque d'exemple et screenshots. Mais ca encore c'est pas trop grave^^ Amoins peut etre que tu applique ce procedé avec un autre moteur tel Irrlicht ou Ogre. Bonne rédaction ! |
|
| Huntil |
Posté le 08 Mar 2008 à 13:54
|
|
![]() Messages : 1012 GCPoints : 289843 |
L'orthographe est correct. Il est difficile de se relire soi-même quand on est plongé dans son texte. Les correcteurs n'auront pas énormément de boulot à cause de yamashi donc comme tu dis, aucune raison de s'inquiéter. Sinon pareil, j'attends la suite. Juste une remarque: le tuto aborde (ou simplement cite) des notions qui ne sont pas forcément connues de tous. Quelques courtes explications ou plus simplement un lien vers un article expliquant la notion, sur le wiki par exemple, ne serait pas du luxe.
Copyright © 2007 - 2010 Huntil
"Il faut toujours un drame" |
|
| Darktib |
Posté le 08 Mar 2008 à 14:11
|
|
![]() Messages : 4017 GCPoints : 347288 |
En effet l'orthographe n'est pas trop mal...mais il reste une faute (récurrente) chez les forumers : le 'é' a la place du 'er' (ou vice versa...) Si j'ai le temps (et quand j'aurai compris comment Irrlicht enregistre ses mesh) j'essayerai ta technique. |
|
| noob4ever |
Posté le 08 Mar 2008 à 15:49
|
|
![]() Messages : 295 GCPoints : 48742 |
C'est dommage, tu parles des cartes physiques mais tu ne dis pas à quoi elles servent concrètement Pour ceux qui sont intéressés, le site d'ageia http://www.ageia.com/ des screens ne sont pas de refus non plus. quel(s) rapport(s) avec le langage C ou C++ ? j'attend la suite
Dernière édition le 08 Mar 2008 à 15:50
What did C:/DARTHVADER said to C:/DARTHVADER/LUKESKYWALKER ?
I'm your folder |
|
| yamashi |
Posté le 08 Mar 2008 à 18:23
|
|
![]() Messages : 35 GCPoints : 5774 |
Rapport avec le C++ : Je coderais ce procédé et vous donnerez ce code expliqué pour que vous puissiez l'utiliser facilement et le modofiez a votre guise. Pour ce qui est des screens shots, je n'ai pas encore finis l'implantation du moteur physique dans le moteur 3D qui a beaucoup avancé depuis mon post donc je n'ai pas de screen mais je peux vous faire des shema pour l'explication, sinon les théorème que vous ne connaissez pas faite le savoir que je vous ajoute un petit cours de math !
Intel E8400 @ 3.8ghz
4GB PC6400 Nvidia Geforce 9600GT o/c 1 TB |
|
| yamashi |
Posté le 10 Mar 2008 à 15:50
|
|
![]() Messages : 35 GCPoints : 5774 |
Citation :
Irrlicht est un peu chiant a cause de ca car celui-ci utilise des list partout ! Il te suffit de faire poper la list en la copiant avant et ajouter les vertices entre les vertices primaire. (je n'est pas abordé cette notion tu comprendras par la suite)
Intel E8400 @ 3.8ghz
4GB PC6400 Nvidia Geforce 9600GT o/c 1 TB |
|
| gus |
Posté le 11 Mar 2008 à 19:07
|
|
![]() Messages : 371 GCPoints : 52046 |
Moi je trouve le tuto interressant. | |
| Darktib |
Posté le 11 Mar 2008 à 20:11
|
|
![]() Messages : 4017 GCPoints : 347288 |
Visiblement tu connais le format d'une SMesh (ou IMesh?) ? Faudra que tu m'aprenne ce format... si tu as le temps bien entendu^^ |
|
| delfare |
Posté le 08 Août 2008 à 15:59
|
|
![]() Messages : 8 GCPoints : 5923 |
il y a quelques truc qui m'étonne dans ton article : Citation :
je pense pas qu'un objet 3d soit un objet fractal (sauf peut-etre pour certaines végétations quand on utilise des générateurs). d'après wikipedia, "On nomme fractale ou fractal (nom masculin moins usité), une courbe ou surface de forme irrégulière ou morcelée qui se crée en suivant des règles déterministes ou stochastiques impliquant une homothétie interne". C'est donc quand il est généré en suivant un algorithme et non pas en modélisant manuellement comme dans la plupart des modèles 3D Citation :
il me semble que le viewport, c'est la zone d'écran sur laquelle on dessine, la projection est calculé par une matrice (généralement, un calcul ortho ou perspective) Citation :
généralement, les modèles sont vides. je n'ai jamais entendu parlé d'utiliser un système de particule pour donner une impression de plein. ce serait gaspiller énormément de ressources et très peu utile car on ne regarde pas à l'intérieur. les systèmes de particules sont utilisé pour générer du feu, des fumées, de la neige, de la pluie,... sinon, pour la carte physique, je crois pas que ça va vite être intégré en standart dans les PC. par contre, ce qui se développe plus, c'est l'utilisation de la carte graphique pour effectuer des calculs physiques (voir General-purpose computing on graphics processing units ou GPGPU, pour l'utiliser, il y a CUDA qui est compatible avec les cartes nvidia geforce 8 ou supérieur). quelques infos ici : http://developer.download.nvidia.com/compute/cuda/1.1-Beta/x86_website/Physically-Based_Simulation.html mais pour les explosions, impacts,... je crois que c'est généralement modélisé avec des infos physique spécifiques (exemple : créer une voiture avec des composants séparés et les lier avec des joints dont on indique la résistance ainsi que d'autres paramètres) mais je ne crois pas qu'on rajoute en temps réel des nouveaux vertex aux points d'impact car ça deviendrait très complexe pour des modèles contenant beaucoup de polygones |
|
| Darktib |
Posté le 09 Août 2008 à 19:26
|
|
![]() Messages : 4017 GCPoints : 347288 |
A tiens, y des trucs que j'avais pas lu^^ Pour les objets pleins delfare a tout a fait raison. Pareil pour les fractales : de toute facon meme les vegetaux ne les utilisent pas. En general il s'agit d'un systeme beaucoup plus simple (qui varie enormement) Tout a fait d'accord aussi pour le viewport. Par contre je pense que rajouter des vertices peut etre une alternative HD, meme si ca bouffe pas mal de performances. Mais le plus simple est juste de deplacer les vertices concernés |
|
GameCorp - Index des forumsGame MakingProgrammationLangages C et C++Petite Explication sur la conception d'un moteur next-gen physique
Répondre





