Simulations maîtriser l'utilisation des nœuds de géométrie dans Blender | Yassine Larayedh | Skillshare

Vitesse de lecture


1.0x


  • 0.5x
  • 0.75x
  • 1 x (normale)
  • 1.25x
  • 1.5x
  • 1.75x
  • 2x

Simulations maîtriser l'utilisation des nœuds de géométrie dans Blender

teacher avatar Yassine Larayedh, VFX Artist

Regardez ce cours et des milliers d'autres

Bénéficiez d'un accès illimité à tous les cours
Suivez des cours enseignés par des leaders de l'industrie et des professionnels
Explorez divers sujets comme l'illustration, le graphisme, la photographie et bien d'autres

Regardez ce cours et des milliers d'autres

Bénéficiez d'un accès illimité à tous les cours
Suivez des cours enseignés par des leaders de l'industrie et des professionnels
Explorez divers sujets comme l'illustration, le graphisme, la photographie et bien d'autres

Leçons de ce cours

    • 1.

      Bande-annonce

      1:51

    • 2.

      Zones de répétition

      1:46

    • 3.

      Zones de simulation

      2:30

    • 4.

      Qu'est-ce qu'une simulation

      1:04

    • 5.

      Qu'est-ce que la vélocité

      1:07

    • 6.

      Qu'est-ce que l'accélération

      3:27

    • 7.

      Qu'est-ce qu'un attribut

      5:05

    • 8.

      L'attribut d'accélération

      8:38

    • 9.

      Le problème du delta-t

      8:13

    • 10.

      Ajouter des restrictions Pt.1

      5:08

    • 11.

      Ajouter des restrictions Pt.2

      6:51

    • 12.

      Rayon

      11:46

    • 13.

      Collision

      9:36

    • 14.

      Fraye de Particle

      4:31

    • 15.

      Friction

      3:51

    • 16.

      Aperçu final

      7:56

  • --
  • Niveau débutant
  • Niveau intermédiaire
  • Niveau avancé
  • Tous niveaux

Généré par la communauté

Le niveau est déterminé par l'opinion majoritaire des apprenants qui ont évalué ce cours. La recommandation de l'enseignant est affichée jusqu'à ce qu'au moins 5 réponses d'apprenants soient collectées.

195

apprenants

3

projets

À propos de ce cours

Dans ce cours, vous apprendrez à créer des simulations en utilisant les nœuds géométriques dans Blender, en créant votre propre moteur physique.

Ce cours n'est pas seulement un autre tutoriel sur le « click-this-button », c'est une plongée dans le monde des simulations dans Blender.

Vous n'apprendrez pas à penser comme un artiste, mais aussi comme un ingénieur.

Vous explorerez le côté technique de la création de simulations réalistes.

Nous aborderons les conceptes essentiels de la physique tels que

  • Gravité
  • Vitesse
  • Accélération
  • Collision, et plus

Tout cela vous permettra de maîtriser les simulations avec une solide compréhension de la science qui les sous-tend.

À la fin, vous serez équipé pour créer des scènes complexes et dynamiques en toute assurance.

Rencontrez votre enseignant·e

Teacher Profile Image

Yassine Larayedh

VFX Artist

Enseignant·e

I'm a VFX generalist, which is a fancy way of saying I do a bit of everything when it comes to visual effects.

I also have a bit of an obsession with the technical side of 3D--things like shading nodes and procedural stuff that make most people's eyes glaze over. But hey, it's fun for me!

I also happen to be pretty good at video editing. VFX and editing go hand-in-hand, so I figured I might as well get good at both.

When I'm not working on my own stuff, I actually enjoy teaching others how to do this kind of thing. I know, weird, right? But there's something really satisfying about breaking down complicated processes and seeing people have that "Aha!" moment. So, I started creating courses to share what I've learned.

Thanks for stopping by! Feel free to reach... Voir le profil complet

Level: Intermediate

Notes attribuées au cours

Les attentes sont-elles satisfaites ?
    Dépassées !
  • 0%
  • Oui
  • 0%
  • En partie
  • 0%
  • Pas vraiment
  • 0%

Pourquoi s'inscrire à Skillshare ?

Suivez des cours Skillshare Original primés

Chaque cours comprend de courtes leçons et des travaux pratiques

Votre abonnement soutient les enseignants Skillshare

Apprenez, où que vous soyez

Suivez des cours où que vous soyez avec l'application Skillshare. Suivez-les en streaming ou téléchargez-les pour les regarder dans l'avion, dans le métro ou tout autre endroit où vous aimez apprendre.

Transcription

1. Bande-annonce: Hé, jette un œil à ça. L'ensemble de cette simulation a été réalisé simplement en utilisant des nœuds de géométrie. Et si vous en savez un peu plus sur les nœuds, vous savez à quel point il peut être difficile de créer de tels objets. Le fait est que comprendre les nœuds est difficile et frustrant. Mais si vous ne le faites pas, vous passerez à côté d'un aspect crucial du blender qui vous ouvrira un nouveau monde de possibilités. Vous avez probablement aussi vu certains de ces fous cris de nœuds et vous vous êtes demandé comment vous y preniez pour commencer Comment puis-je le savoir ? Parce que j'y étais. J'ai eu du mal à trouver de nombreuses réponses à mes questions. En créant ce cours, je souhaite rendre le processus d'apprentissage des simulations dans les nœuds de géométrie plus facile et plus amusant pour vous. Tout au long de ce cours, vous n'apprendrez pas simplement à créer une simulation physique dans Blender. Vous allez littéralement construire vos propres moteurs physiques à l'intérieur des nœuds de géométrie. Vous découvrirez les forces de la vie réelle qui font fonctionner notre monde tel qu'il est. Vous allez en apprendre davantage sur la vélocité. Vous découvrirez l'accélération, les collisions, la gravité et la façon dont toutes ces forces interagissent les unes avec les autres. Et bien plus encore. Et vous apprendrez tout cela en créant la simulation de chute de balles. Je sais ce que certains d'entre vous pensent peut-être en ce moment. Hé, Yassine, pourquoi est-ce que je me donnerais la peine créer une simulation de chute de balles Je veux apprendre à créer de bonnes choses, comme des explosions, ou apprendre ce que fait chaque nœud. Croyez-moi, ce serait une mauvaise approche. Aussi simple que faire tomber des balles peut sembler un concept. Vous serez surpris par la quantité de concepts que vous apprendrez en créant simplement la simulation. Qu'est-ce qui en fait l'exercice parfait ? Être bon en simulation, c'est être bon en physique. Et ce cours comblera le fossé entre les deux et vous ouvrira cette porte. Donc, si vous souhaitez apprendre des simulations à l'aide de nœuds de géométrie dans Blender, ce cours est pour vous, et j'ai hâte de vous voir de l' autre côté. Je vous en prie. 2. Zones de répétition: Zones répétitives. Dans les versions récentes de Blender, un nouveau concept a été introduit : les zones répétitives. C'est le cube par défaut, supprimez-le car vous y êtes obligé, et je vais ajouter une sphère. Si j'ouvre l'éditeur de nœuds de géométrie, crée un nouvel arbre et appelons-le , par exemple, simulation. Si vous allez ajouter des utilitaires, vous aurez la possibilité de répéter les zones. Comme vous pouvez le voir, ces deux nœuds seront entourés de cette boîte. Les zones de répétition sont un moyen de demander au mixeur de répéter certaines opérations plusieurs fois. Par exemple, ce qui ressort de cette entrée de groupe est ma géométrie d'origine, qui est la sphère. J'ai également ma sortie de groupe, qui est la géométrie que j'aurai d'ici la fin. Je vais boucher la zone répétitive entre eux comme ça. Je vais également ajouter un autre nœud appelé set position, qui me permettra de modifier la position d'un objet. Déplacez A, réglez la position, et je vais le brancher dans la zone de répétition. Supposons que je déplace la sphère d'un mètre sur l'axe x, et c'est exactement ce que j' aurai si j'en tape une ici. Supposons maintenant que je veuille répéter cette opération dix fois. Bien sûr, cela peut être aussi simple que de taper dix ici, mais imaginez si vous avez une arborescence de nœuds plus grande. Dans ce cas, vous devrez multiplier chaque valeur par dix, ce qui peut être difficile. C'est pourquoi, dans le premier nœud de la zone de répétition, vous avez ce nombre intitulé itérations, qui représente le nombre de fois que vous voulez que Blender calcule ce qui se trouve à l'intérieur de la zone de répétition Si je tape dix ici, mixeur exécutera dix fois ce qui se trouve à l'intérieur de cette zone de répétition. Donc, si nous devions résumer ce que sont les zones répétitives, les zones répétées sont un moyen de dire au mélangeur répéter certaines opérations un certain nombre de fois. C'est aussi simple que cela. Maintenant, qu'en est-il des zones de simulation ? 3. Zones de simulation: Zones de simulation. concept des zones de simulation est similaire à celui des zones répétitives. Il existe un moyen d'exécuter plusieurs fois certaines opérations. La seule différence entre les zones de simulation et les zones répétitives est que dans les zones de répétition, vous spécifiez combien de fois vous souhaitez que Blender compile ces différentes opérations. Pendant ce temps, dans les zones de simulation, Blender compilera toutes les opérations à chaque image. Si je vais ajouter une simulation, j'aurai une zone de simulation. Comme vous pouvez le constater, elle est assez similaire à la zone de répétition, sauf qu'elle n'a pas la valeur d'itération A plutôt dilta le temps. Maintenant, si je duplique la même opération de position définie dans la zone de simulation, branche l'entrée du groupe dans l'entrée de simulation et la sortie de simulation dans la sortie du groupe pour voir le résultat final, rien ne se passera au début. Mais si j'ouvre la chronologie et que j'appuie sur Play, vous verrez la sphère bouger. Maintenant, Blender exécute les opérations dans les zones de simulation à chaque image. Au premier cadre, le mixeur déplacera la sphère d'un mètre, et au dixième, il déplacera la sphère de 10 mètres. C'est aussi simple que cela. Maintenant, il est important de noter que Blender n' exécute pas la simulation dix fois alors qu'il est à l'image dix. Cela nécessitera de nombreuses ressources informatiques. C'est plutôt comme si Blender accumulait les résultats à chaque image qui passe. Par exemple, à la première image, Blender déplacera le cube mètre en exécutant la simulation une fois. À la deuxième image, Blender déplacera également le cube un mètre en fonction de la position précédente. Blender n'exécute la simulation qu'une seule fois, et la position de départ de la simulation est le résultat de l'image précédente. J'espère que cela a du sens. En résumé, vous pouvez considérer les zones de simulation comme de simples zones répétitives où le nombre d'itérations change à chaque image En fait, si j'ajoute un nœud appelé heure de scène, ce socket de trame me donnera le numéro de l'image sur laquelle je me trouve. À la première image, il en sortira un, et à l'image 37, il en sortira 37. Si je reviens à la zone de répétition et je branche l'image dans les itérations, cela signifie que le nombre d' itérations suivra le numéro de l'image sur laquelle je me trouve Si je clique sur Play, j'obtiens le même résultat que dans la zone de simulation. Vous pouvez considérer les zones de simulation comme des zones répétitives dont l'heure de la scène est intégrée aux itérations La différence devrait maintenant être claire entre les zones répétitives et les zones de simulation. Les zones de répétition permettent de répéter certaines opérations manuellement en spécifiant nombre de fois que vous souhaitez répéter. Pendant ce temps, les zones de simulation le feront automatiquement à chaque image. Maintenant que tout cela est réglé, nous pouvons maintenant commencer à parler de simulations. 4. Qu'est-ce qu'une simulation: Qu'est-ce qu'une simulation ? J'ai trouvé cette bonne définition de ce qu'est une simulation. Une simulation est une méthode permettant d' imiter un processus du monde réel au fil du temps. Il évolue en créant un modèle qui représente les caractéristiques, les comportements et les fonctions clés du processus ou du système Par exemple, si j'ai une balle et que je la fais tomber, une simulation sera un programme qui prédit ce qui va se passer. Je vais donner à ce programme certaines informations, comme la taille de la balle, sa hauteur par rapport au sol, son poids, force de la gravité qui la tire vers le bas. Et sur la base de ces données, le programme essaiera de prévoir ce qui va se passer. Donc, si nous voulons créer une simulation physique dans Blender, nous devons réfléchir à des moyens de recréer la réalité dans Blender Cela signifie que nous devons réfléchir aux forces de la vie réelle qui permettent à notre monde de fonctionner tel qu'il est. La clé pour cela réside dans deux forces, la vitesse et l'accélération, et nous les expliquerons toutes les deux. Nous commençons maintenant à passer à la partie amusante. Dans la prochaine vidéo, nous allons en apprendre davantage sur la vélocité. 5. Qu'est-ce que la vélocité: Qu'est-ce que la vélocité ? La vlocité est une quantité vectorielle physique qui décrit la vitesse à laquelle un objet change de position Pour le dire simplement, la vélocité est la vitesse à laquelle quelque chose se déplace. C'est ce que nous appelons communément la vitesse. Ce que je veux que vous gardiez à l'esprit, c'est que nous ne pouvons pas penser à la vitesse sans tenir compte du facteur temps, car la vitesse à la fin de la journée dépend la distance parcourue au cours d'une certaine période de temps. Nous ne pouvons pas dire que la vitesse de la voiture est de 100 kilomètres ou 100 miles. Nous devons préciser selon quelle unité de temps parlons-nous ? Est-ce 100 kilomètres/heure par minute par seconde ? Il y a une énorme différence. Dans notre petite simulation, cette sphère se déplace à une vitesse de 1 mètre par image, soit sa vitesse, 1 mètre par image. Ou comme ma fréquence d'images est de 24, cela signifie que la sphère se déplacera de 24 mètres/seconde On peut dire que sa vitesse est de 24 mètres/seconde, soit 14 40 mètres/minute, soit 86 400 mètres/heure Tu as compris l'idée. C'est donc la vélocité. Nous devons maintenant parler d'accélération. 6. Qu'est-ce que l'accélération: Qu'est-ce que l'accélération ? La vélocité est le taux de changement de position dans le temps ? L'accélération est le taux de variation de la vélocité ou de la vitesse dans le temps ? Une voiture accélère lorsque sa vitesse augmente. L'accélération représente les changements de vitesse. Tout comme la vitesse, on peut parler d'accélération seule sans tenir compte du facteur temps. On peut dire que cette voiture accélère à une vitesse de 10 mètres. Nous devons préciser selon quelle unité de temps parlons-nous ? Accélère-t-il à une vitesse de 10 mètres/seconde par minute et par heure ? Cela fait une énorme différence. Dans le petit système que nous avons construit dans Blender, la sphère se déplace à une vitesse de 1 mètre par image, et c'est sa vitesse. Mais elle n'accélère ni n'accélère, ce qui signifie que l' accélération est nulle. Dans la vie réelle, la vitesse des objets augmente et diminue avec le temps en raison de différentes forces Alors, comment pouvons-nous programmer de telles choses dans un mixeur ? Avant d' expliquer comment procéder, je voudrais modifier un peu la simulation. Je vais supprimer l'entrée du groupe et ajouter un nœud ponctuel à la place . Il est important de mentionner qu'un point dans Blender n'est qu'un conteneur de données que nous pouvons ensuite remplacer par d'autres objets. C'est pourquoi nous l'utilisons car il offre une grande flexibilité par la suite. Je vais changer la simulation pour en faire une simulation de point de chute en déplaçant 0,5 mètre dans les airs Ce serait donc ma position de départ. Puisque je veux que le point tombe, je dois mettre à jour le nœud de position défini. Au lieu de me déplacer sur l'axe X, je dois dire à Blender que nous allons nous déplacer sur l'axe Z. Je vais remettre l'axe x à zéro, et sur l'axe z, j'écrirai, par exemple, 0,1 mètre. Si je clique sur Play, vous remarquerez que la balle se déplace vers le haut non vers le bas. C'est parce que le mixeur déplace la balle de 10 mètres vers le haut. Donc, si nous voulions le déplacer vers le bas, nous devons le faire passer à -0,1 mètre. Maintenant, si je clique sur Play, vous remarquerez que la balle tombe lentement. Nous pouvons maintenant commencer à réfléchir à la manière d'implémenter l'accélération dans notre système. Pour comprendre ce que nous allons faire, nous devons revenir à la définition de l'accélération. L'accélération est le changement de vitesse d'un objet. Un objet qui tombe accélérera, ce qui signifie que sa vitesse augmentera progressivement au fur et à mesure qu'il passera du temps à tomber. En d'autres termes, nous devons trouver un moyen de dire à Blender : « Hé, Blender, nous voulons que vous augmentiez la vitesse à chaque instant qui passe. Comme dans le premier cadre, par exemple, déplacez ce point de 0,1 mètre vers le bas. Au deuxième cadre, déplacez ce point de zéro de 15 mètres vers le bas. Il sera à moins 020 5 mètres. Au troisième cadre, déplacez ce point de zéro de 2 mètres vers le bas. Ce sera à -0,45 mètre. La clé pour accélérer, c' d'augmenter de plus en plus la distance parcourue à chaque image. Pensez-y. Si la balle se déplace de la même distance à chaque image, vous aurez une vitesse constante. Mais lorsqu'il accélère ou décélère, cela signifie que la distance parcourue à chaque image augmente ou diminue Si la distance est plus grande, cela signifie qu'elle accélère, si la distance diminue, cela signifie qu'elle accélère. La solution pour implémenter l'accélération dans notre système est de trouver un moyen de dire à Blender d' augmenter ou de diminuer cette valeur avec le temps. Pour ce faire, il existe un concept important que vous devez comprendre. Ce sont les attributs. C'est ce dont nous parlerons dans la prochaine vidéo. 7. Qu'est-ce qu'un attribut: Qu'est-ce qu'un attribut ? Si vous consultez le manuel du mixeur pour savoir ce qu'est un attribut, vous trouverez la définition suivante. Un attribut est un terme générique qui décrit les données stockées par élément dans un bloc de données de géométrie. Voici comment je veux que tu y penses. Imaginez une géométrie en trois D. Cette géométrie peut être aussi simple qu'un point, comme dans notre exemple, ou n'importe quel autre objet en trois D. Les attributs sont des données associées à l'objet en trois D qui définissent certaines caractéristiques de cet objet en trois D. Par exemple, si je passe à l'espace de travail de mes nœuds de géométrie et que je quitte la feuille de calcul, je passerai au point car la seule géométrie dont je dispose actuellement est le point Ici, vous pourrez voir tous les différents attributs attachés à cette géométrie. Tout d'abord, vous avez l'index. Dans ce cas, il s'agit de zéro. Mais si j'augmente le nombre de points, par exemple, à cinq, chaque point aura un indice. Le numéro d'index est un attribut. Dans le cas de l'indice, l'attribut est le nombre qui fait référence à l'indice de chaque point. Vous avez également l'attribut position qui définit l'emplacement de ce point en particulier. Vous avez également le rayon de ce point. C'est également un autre attribut. Les attributs sont comme une carte d'identité qui définit les caractéristiques d'un élément dans Blender. C'est pourquoi la meilleure façon de penser aux attributs, comme je l'ai dit, est qu'ils sont un bloc de données attaché à l'objet en trois D, qui définit certaines caractéristiques de cet objet en trois D. Maintenant, ce sont les attributs fournis par défaut avec le point. bien, c'est que Blender nous permet de créer nos propres attributs. Si je dois ajouter des attributs, stocker un attribut nommé, j' aurai ce nœud que je vais brancher juste après l'entrée de simulation. Le nœud d'attribut nommé store me permettra de créer mes propres attributs. Je peux commencer par préciser le type. Dans notre cas, la vitesse et l'accélération sont toutes deux des vecteurs. C'est pourquoi je vais changer le type de données de float en vecteur. Ensuite, je vais donner un nom à cet attribut. Vous pouvez l'appeler comme bon vous semble, mais pour que tout soit clair, je vais l'appeler vélocité. Maintenant, si je reviens à la feuille de calcul, vous remarquerez que nous avons maintenant un autre attribut appelé vélocité Si je sélectionne l' attribut nommé magasin et que je clique sur le bouton vide pour le désactiver, remarquez que cette propriété disparaîtra de l'éditeur de feuille de calcul J'espère qu'au moins maintenant vous avez une idée de ce qu'est un attribut. Il s'agit d'un bloc de données attaché à un objet tridimensionnel. Mais vous vous demandez peut-être en quoi cela est censé être utile ? Eh bien, maintenant que nous avons la vélocité comme attribut, nous pouvons commencer à faire un tas d'opérations intéressantes avec elle, comme la changer à chaque image qui passe. Parce que n'oubliez pas que notre objectif est de faire la vitesse augmente ou diminue avec le temps, ce qui nous donnera une accélération. Dans notre arborescence de nœuds actuelle, la vitesse est constante. Si nous pensons à ce qui se passe à chaque image, Blender changera la position de ce point en la quantité spécifiée du nœud de position défini. De plus, comme vous pouvez le voir, cette douille offset est un vecteur, puisqu'elle possède trois valeurs et qu'elle possède la douille violette en losange. Techniquement, si nous voulons être plus précis, ce socket de décalage représente le taux de variation à chaque image, ce que nous avons mentionné précédemment, c'est-à-dire la vélocité. Une chose simple que je peux faire est d'ajouter un nœud appelé vecteur et de le brancher dans le offset. Je n'ai rien fait d'extraordinaire. Je viens de remplacer le décalage par ce vecteur. Si j'écris -0,1 sur l' axe z du nœud vectoriel, appuyez sur play, j'obtiendrai exactement le même résultat Ce nœud vectoriel représente actuellement la vitesse. Pour aller encore plus loin, je vais supprimer ce nœud vectoriel, et je vais ajouter un nœud appelé named attribute, qui me permettra d' invoquer un certain attribut L'attribut que je souhaite invoquer est un vecteur et son nom est vélocité Cet attribut de vélocité que nous appelons est exactement le même que celui que nous avons créé en utilisant le nœud d'attribut nommé store. Quelle est la nature de cet attribut de vélocité ? C'est un vecteur, qui est la nature exacte du socket offset, donc je peux brancher l'attribut nommé dans le socket offset. Si je clique sur Play, rien ne se passera car ce vecteur de vélocité est essentiellement composé zéros. Comment puis-je le savoir ? Parce que dans l'attribut store named, nous n'avons pas spécifié les valeurs de ce vecteur de vélocité. Si j'écris -0,1 sur l'axe z et que j'appuie sur play, vous obtiendrez exactement la même chose qu'avant Voici la logique de ce qui se passe. Nous avons créé un vecteur appelé vélocité, dont les valeurs sont les suivantes. Ensuite, dans notre arborescence de nœuds, nous pouvons invoquer ou appeler le vecteur que nous avons créé et l'utiliser à plusieurs endroits Ce nœud d'attribut nommé recherche donc un vecteur appelé vélocité, défini par ce nœud d'attribut nommé magasin. C'est comme si nous avions créé un vecteur. Maintenant, nous l'utilisons à plusieurs endroits dans l'arbre des notes. À l'avenir, si je souhaite modifier le vecteur de vélocité, il me suffira de modifier valeurs de l'attribut store named, et cette modification se répercutera l'ensemble de l'arbre de notes, car j' utiliserai le nœud d'attribut nommé partout dans mon arbre de notes Maintenant que nous avons légèrement modifié notre arbre de notes et créé l'attribut de vélocité, et dans la vidéo suivante, nous allons créer l'attribut d' accélération. 8. L'attribut d'accélération: Attribut d'accélération. Comme je l'ai déjà mentionné, l'accélération est le changement de vitesse. Donc, si nous voulons implémenter l'accélération dans notre système, nous devons trouver un moyen de faire en sorte que la vitesse change avec le temps. Nous voulons dire à Blender d' augmenter le taux de variation. En d'autres termes, nous voulons augmenter la distance parcourue par le point d'une image à l'autre. Par exemple, à l'image zéro, le point est à 0,0. Au premier cadre, poussez-le de 10 mètres vers le bas. Il sera à moins 10 mètres. Puis poussez-le de zéro, 15 mètres vers le bas, pour qu'il soit à moins 020 5 mètres, puis poussez-le de zéro de 2 mètres Ce sera donc à moins zéro, 45 mètres. En faisant cela, comme vous pouvez le constater, la distance parcourue par le point à chaque instant augmente progressivement, ce qui signifie qu'il s'accélère. Alors, comment pouvons-nous programmer une telle chose dans les nœuds de Blender ? Eh bien, c'est simple. C'est donc là que nous nous sommes arrêtés la dernière fois. Nous avons ce magasin nommé attribut qui définit un attribut appelé vélocité qui possède ces valeurs, et nous utiliserons ensuite cet attribut de vélocité ou ce vecteur de vélocité ici même. Nous l'appelons depuis ce nœud, et nous l'utilisons pour mettre à jour la position, ce qui nous donne une vitesse constante. Ce que nous voulons faire, comme je l'ai dit, c'est faire en sorte que ce vecteur de vitesse augmente ses valeurs au fil du temps. Certains d'entre vous pourraient suggérer que je puisse cadrer cette propriété ici et ajouter quelques images-clés, et je pourrai animer cette valeur avec le temps Et il s'agit en fait d'une approche viable. Ce que nous voulons faire, c'est construire un moteur physique capable de tout gérer. Je vais faire quelque chose qui va sembler un peu contre-intuitif au début, mais je vais l'expliquer. Je vais ajouter un attribut nommé. Comme vous vous en souvenez, ce nœud me permettra d' appeler ou d'invoquer un certain attribut que j'ai créé Dans ce cas, je vais appeler un vecteur, qui est la vélocité. Il s'agit exactement du même vecteur que ce nœud est en train de créer. C'est le même attribut, et je vais le connecter à la valeur. Comme je l'ai dit, cela peut sembler contre-intuitif. Donc, en gros, ce nœud définit une propriété appelée vélocité qui a cette valeur. Dans cette valeur, je branche un attribut appelé vélocité C'est littéralement le même attribut. C'est comme le mème du gars qui se verse de l'eau pendant qu'il est dans la piscine Vous pouvez probablement deviner que le mixeur lit l'arbre de notes de gauche à droite Il commence donc par les points, puis entre dans la zone de simulation. Stockez l'attribut nommé, et pour chaque nœud, il commencera du haut vers le bas. premier temps, il lira le point vectoriel, puis la géométrie, puis cette élection, puis il créera une propriété appelée vélocité ou un attribut appelé vélocité. Pour la valeur, j'ai inséré la vélocité, et chaque fois que vous branchez un attribut dans le nœud qui crée l'attribut, Blender prend une valeur de zéro C'est pourquoi maintenant, si j'appuie sur barre d' espace pour appuyer sur jouer, rien ne se passera. Le point restera au même endroit, car cette connexion que j'ai établie ici, vélocité de l'attribut dans le magasin nommé attribute qui le définit, me mènera à zéro se passera donc rien. Mais ce qui est vraiment bien, c'est que si j'ajoute le décalage A et que je cherche des mathématiques vectorielles, et que je vais le brancher juste après l'attribut nommé, Blender prendra le vecteur de vitesse, qui est zéro dans notre cas, nous y ajouterons une valeur que je spécifierai ici, et ce sera ma nouvelle valeur de vélocité ou mon nouveau vecteur de vitesse que j'utiliserai plus tard pour mettre à jour la position. Supposons, par exemple, que je tape -0,1. Essaie maintenant de penser à ce qui va se passer. À l'image zéro, bien sûr, rien ne se passera. Je vais ouvrir ma chronologie, et pour mieux organiser mon espace de travail, je vais la réduire à ceci, et je vais ajouter un autre éditeur ici, et je vais la remplacer par la fenêtre en trois D, et abaissons-la comme ceci Cela me donnera plus de place ici dans ma note d'essayer. J'ai ici la chronologie, et je peux me déplacer ici dans ma fenêtre en trois D. Et comme nous ne travaillons actuellement que sur deux dimensions, je vais en appuyer sur une depuis le pavé numérique pour passer à la vue de face. Ce sera donc mon espace de travail. Je pense que c'est mieux. Peut-être que je vais même le faire glisser un peu pour avoir plus d' espace dans ma note, essayez. Comme je l'ai dit, à l'heure actuelle, rien ne se passera à l'image zéro. Le point se trouve à la position de départ de zéro ou en fait de 5 mètres, mais nous supposons qu'il est nul. À la première image, Blender prendra le vecteur de vitesse, qui a une valeur de zéro, pour y ajouter -0,1, et ce sera mon vecteur de vitesse que nous utiliserons plus tard pour mettre à jour la position Alors maintenant, à la première image, mixeur déplacera ce point de 0,1 mètre vers le bas. Regarde, boum. C'est donc 01. À la deuxième image, supposons que le mixeur recommence le cycle. Mais quelle est la valeur de ce nœud de vitesse à l'heure actuelle ? Est-ce zéro ou moins 01 ? C'est la chose importante que vous devez garder à l'esprit, savoir que ce nœud conservera actuellement la valeur de l'état précédent. Ce nœud contient actuellement un attribut de vélocité qui n'est pas 000. Il s'agit en fait de 00 moins 01. Maintenant, quand je vais y ajouter moins 01, ce nouveau vecteur de vitesse que je vais obtenir à partir d'ici ne sera pas moins 01. Ce sera moins 02, et remarquez ce qui va se passer. Maintenant, la distance parcourue à la deuxième image est légèrement plus grande. Pour la troisième fois, quelle est la valeur de la troisième image ? Il s'agit de la valeur de vélocité précédente, qui est de moins 02. Maintenant, je vais y ajouter moins 01, donc j'aurai moins 03, et ce sera ma nouvelle vélocité que je vais utiliser pour changer de position. Aujourd'hui, l'écart se creuse. J'en suis à la troisième image. À la quatrième image, ce vecteur de vitesse ne sera pas nul. Comme je l'ai dit, ce sera moins 03, et quand j'y ajouterai moins 01, sera à -0,4, et c' est ce que je vais utiliser pour mettre à jour la position Boum. Maintenant, si je clique sur play, vous remarquerez que la balle tombera un peu plus vite, plus elle passe de temps à tomber. Permettez-moi de faire un petit zoom arrière pour bien voir ce qui se passe. Et si je clique sur Play, comme vous pouvez le voir, nous avons maintenant quelque chose qui ressemble à une balle qui tombe. La clé, c'est ce petit truc que nous avons fait ici. Nous prenons la vitesse de l'état précédent, y ajoutons une certaine valeur, et comme il s'agit d'un mélangeur faible chaque fois qu'il exécute la simulation, nous ajoutons moins 01 sur l'axe z à l' état précédent du vecteur de vitesse. J'espère que cela a du sens. heure actuelle, ce vecteur que j'ajoute ici est en fait le vecteur d'accélération. Ces valeurs sont celles qui définissent dans quelle mesure vous souhaitez que le mixeur augmente la vitesse à chaque instant. Il s'agit en fait d'une accélération. Comme je veux également que l' accélération soit un attribut parce que je l' utiliserai plus tard, je vais ajouter un autre nœud dès maintenant appelé store named attribute, shift A , store named attribute, et je vais stocker un vecteur que j' appellerai accélération qui a ces valeurs. Et je vais l' utiliser ici, alors recherchez un attribut nommé. Je vais chercher un vecteur que je viens de créer appelé accélération. Où est l'accélération ? OK ? C'est un vecteur appelé accélération. Et je vais le brancher ici. Rien ne se passera car cette accélération est nulle. Comment puis-je le savoir ? Parce que dans le nœud qui le définit, je n'ai pas précisé quelle valeur doit avoir ce vecteur. Si je reviens à la première image, et si je clique sur Play, rien ne se passera car l' accélération est nulle. Je n'ajoute rien. Rien ne changera. C'est pourquoi je vais taper moins 01. Mm. Et maintenant, si je clique sur Play, vous obtiendrez exactement la même animation ou simulation que nous venons d'avoir. Cet attribut nommé store définira donc un vecteur appelé accélération. Et chaque fois que Blender exécute la simulation, nous ajoutons cette valeur au taux de variation. En d'autres termes, chaque image ou chaque fois que Blender exécute la simulation. C'est à quel point le mixeur augmentera la distance parcourue par le point. À chaque fois, la distance augmentera de moins 0,1 mètre. Je sais que cela peut être un peu confus parce que nous utilisons le moins, mais souvenez-vous toujours que la principale raison pour laquelle nous utilisons moins est que nous sommes en train de chuter. C'est pourquoi nous avons besoin du signe moins. Voici donc notre notaire actuel. J'espère que c'est logique. Nous avons maintenant une simulation du point de chute, je suppose. Mais en fait, il y a un petit problème dans cette simulation que nous devons corriger dans la vidéo suivante. 9. Le problème du delta-t: Le problème de Delta T. J'ai déjà mentionné que les simulations dans Blender sont évaluées à chaque image. Cela provoquera un petit problème. Notre fréquence d'images actuelle est de 24 images par seconde. Cela signifie que le mixeur exécutera la simulation 24 fois en 1 seconde. Je vais revenir à l' espace de travail des nœuds de géométrie, aux points. Si je touche la plaque pour mettre la simulation en cache , puis que je passe à l'image 24, voici l'emplacement du point. 00 -25. Maintenant, disons que je veux que l' animation finale soit plus fluide. J'ai donc décidé d'augmenter la fréquence d'images à 60 images par seconde. Au bout d'une seconde, combien de fois pensez-vous que Blender exécutera la simulation ? Tu devines bien, 60 fois. Si je touche une plaque pour voir la simulation et que je passe à l'image 60, remarquez l'emplacement du point. 00 -178. Je sais que cela peut prêter à confusion, alors pour bien comprendre, voici ce qui se passe dans la vraie vie. Imaginez que vous lancez une balle depuis un endroit élevé. Supposons que la balle mette 3 secondes avant de toucher le sol et que vous disposiez de deux caméras, l'une enregistrant à 24 images par seconde et l'autre à 60 images par seconde. Lance le ballon. Dans 1 seconde, le ballon sera à ce niveau. est important de noter que les deux caméras captureront le ballon dans la même position. La seule différence est que la caméra 24 FPS n' a enregistré que 24 images. En d'autres termes, il a enregistré le ballon dans 24 positions différentes. Pendant ce temps, la caméra 60 FPS a enregistré 60 images. En d'autres termes, il a enregistré le ballon dans 60 positions différentes. Le timing est toujours le même. La seule différence est la fréquence d'images. Ce qui devrait se passer dans Blender est le suivant. Au bout d'une seconde, le point doit être à la même position, quelle que soit la fréquence d'images. Alors, comment pouvons-nous résoudre ce problème ? La meilleure façon d'expliquer la solution est de faire quelques calculs. Mais je te promets que ce ne sera pas si compliqué. Ce que j'ai déjà mentionné, c'est que la vitesse est le taux de changement de position dans le temps. une façon de traduire cette déclaration en Voici une façon de traduire cette déclaration en fonction mathématique. V, qui est la vitesse égale à Delta P sur Delta T. J'aimerais que vous considériez le mot Delta comme le changement. P représente la position et t le temps. Nous disons que la vitesse est Delta P, le changement de position. Sur Dilta T, le changement d'heure. Maintenant, qu'en est-il de l'accélération ? Comme vous vous en souvenez, l'accélération est le taux de variation de la vitesse dans le temps. Une autre façon de l'écrire sous forme de formule est la suivante. Accélération A égale, Delta V sur delta t. Nous disons que l'accélération est Dilta V, le changement de vitesse, sur Dilta T, le temps de changement Dans notre arborescence de nœuds actuelle, Delta t est une variable qui change en fonction de la fréquence d'images. Si la fréquence d'images est de 24, Delta t est égal à 1/24, et si la fréquence d'images est de 60, Delta T est égal à 1/60 Nous voulons que le timing de notre simulation soit le même, quelle que soit la fréquence d'images. Sur la base de la première équation, vitesse est égale à Delta P sur Delta T, puis-je en conclure que Delta P est égal à la vitesse multipliée par Delta T. Sur la base de la deuxième équation, A, l'accélération est égale à Delta V sur Dilta T ? Nous pouvons en conclure que Delta V, le changement de vitesse est égal à l'accélération, multipliée par Delta T, le changement dans le temps. Le calcul est très simple. Tout ce que nous avons fait maintenant est d'exprimer à la fois le changement de position et le changement de vélocité en fonction de Delta T. Cela permettra à Blender de prendre en compte la fréquence d'images lors de l'exécution de la simulation. Comment pouvons-nous traduire cette logique dans l' arborescence des nœuds ? Ce sera simple. Commençons par le changement de position du delta P est égal à la vitesse multipliée par le delta T. Quel est le nœud responsable du changement de position du point ? C'est le nœud de position défini, et cette partie de l' équation est celle que nous devons calculer et saisir dans le socket offset. Pour le moment, il ne s'agit que du vecteur de vitesse. Sur la base de l'équation, nous devons multiplier la vitesse par Delta T. Vous devez ajouter un nœud mathématique vectoriel, modifier l'opération de multiplication et le multiplier par le Delta T, que vous pouvez obtenir à partir du premier nœud de la zone de simulation. Vous pouvez également définir le fonctionnement de ce nœud mathématique vectoriel à l'échelle, et il fera exactement la même chose. Nous utilisons la multiplication lorsqu'il s'agit de deux vecteurs, mais comme le temps Delta est un simple nombre, nous pouvons le modifier en échelle. Vous pouvez utiliser celui-ci chaque fois que vous multipliez un vecteur par un seul nombre Ils sont également appelés scalaires dans Blender. D'où l'échelle du nom de l'opération. OK, maintenant nous compensons le changement de position en fonction de notre temps Delta, qui est basé sur notre fréquence d'images. Nous devons maintenant faire la même chose pour la deuxième opération. Delta V, le changement de vitesse est égal au vecteur d'accélération multiplié par Delta T. Où définissons-nous V, le changement de vitesse ? Eh bien, nous définissons le changement de vélocité en utilisant ce premier attribut nommé magasin. Celui responsable de la création de l'accélération. Rappelez-vous toujours que les valeurs que nous utilisons pour le vecteur d' accélération sont responsables de l' augmentation de notre vélocité à chaque image. Donc, ce que je peux faire, c'est entrer un vecteur dans la valeur de cet attribut nommé store, et par défaut, le mixeur conservera les mêmes valeurs. L'équation, Delta V égale accélération multipliée par Delta T, que nous allons saisir dans le socket de valeurs de l'attribut store named définit le taux de variation de la vitesse, qui est égal à l'accélération, qui est ce nœud vectoriel, et nous devons le multiplier par Delta T. Tout ce que vous avez à faire est d'ajouter un nœud mathématique vectoriel, modifier l'opération à l'échelle, et multipliez-le par Delta T, que vous pouvez obtenir à partir du premier nœud de la zone de simulation, comme je l'ai déjà mentionné. C'est ainsi que nous pouvons implémenter la logique des équations que j'ai expliquées chez le notaire. Par conséquent, notre simulation s'adaptera désormais à la fréquence d'images, et elle restera cohérente quelle que soit la fréquence d'images. Pour être sûr que c'est le cas, si je clique sur Play, vous remarquerez tout d'abord que l' animation est trop lente. Comme notre simulation est désormais basée sur le chronométrage réel, non sur des numéros d'images, nous devons commencer à utiliser des valeurs réelles pour ces vecteurs. C'est la valeur de la gravité dans la vie réelle. Il est de -9,8 Assurez-vous d'utiliser cette valeur pour le vecteur d'accélération, car c'est ainsi que les objets accélèrent en cas de chute. Il est donc toujours agréable d'utiliser les valeurs réelles, car cela signifie que notre simulation sera plus réaliste. Notre fréquence d'images actuelle est maintenant de 24 images par seconde. Lancez donc la simulation en appuyant sur Play. Passez à l'image 24, soit 1 seconde après le début de la simulation, et observez la position du point. Il est à 0,304. Maintenant, passons la fréquence d'images à 60 images par seconde, relançons la simulation et passons à l'image 60, ce qui signifie également 1 seconde après le début de la simulation, car suffit de changer la fréquence et de lire la position de ce point, et il est à 0182 Les valeurs sont proches, mais elles ne sont pas identiques. Pourquoi est-ce le cas ? Sans entrer dans les détails de la raison pour laquelle cela se produit, il vous suffit de faire en sorte que chaque fois que vous faites ce genre de simulation dans Blender, il y ait toujours Et cela est dû à la méthode d' intégration de l'huileur utilisée dans Blender Je peux passer des heures à essayer d'expliquer quelles sont les méthodes d'intégration de l'huileur et tous les problèmes qui s'y rattachent Mais ce sera trop difficile à gérer. Donc, tout ce que vous devez savoir, c'est qu'il y aura toujours une marge d' erreur à gérer lorsque nous réalisons ce type de simulations dans Blender. Je dois également mentionner qu' il existe d'autres moyens d' intégrer d' autres méthodes d' intégration dans Blender à l'aide de nœuds, mais nous allons exploiter les éléments plus avancés des nœuds de géométrie. Et en fait, il ne s'agit même pas nœuds de géométrie, mais de mathématiques purement mathématiques. Et ce n'est pas le sujet principal du cours. C'est pourquoi nous allons sacrifier une certaine stabilité et accepter une erreur de marge importante par souci de simplicité. Maintenant que notre simulation est indépendante de la fréquence d'images, nous devons faire en sorte que ces balles rebondissent sur le sol en introduisant certaines contraintes, ce que nous verrons dans la vidéo suivante 10. Ajouter des restrictions Pt.1: Ajouter des contraintes Première partie, le sol. Notre point de vue actuel ne cessera de tomber pour toujours, en gros. Nous devons trouver un moyen de dire à Blender, hé, Blender, une fois que le point atteint le sol, de le remettre en équilibre. Ce sera un exercice amusant. La première question qui me vient à l'esprit est quand le point atteint-il le sol ? La réponse est simple. Une fois que la position du point est égale ou inférieure à zéro. Maintenant, si je reviens à la phrase, hey, Blender. Une fois que notre point atteint le sol, si nous voulons qu'il soit contrebalancé, nous pouvons le remplacer par la phrase suivante. Hé, Blender. Une fois que la position de notre point est égale ou inférieure à zéro, nous voulons retrouver l'équilibre par rapport au sol. Maintenant vient la deuxième partie. Comment le faire rebondir sur le sol ? La solution la plus simple sera d'inverser toutes les forces appliquées sur notre point ou sur notre balle. À l'heure actuelle, notre simulation est en train de faire échouer les choses. Il suffit donc de dire à Blender qu'une fois que le point touche le sol, il faut inverser la simulation. En d'autres termes, inversez la vitesse et la position. Pour bien comprendre cela, je souhaite expliquer l'architecture de notre moteur de simulation. Nous définissons d'abord l'accélération. Arbre utilisé pour définir la vélocité, que nous utilisons pour mettre à jour la position. C'est plutôt systématique ou algorithmique dans un sens. Il s'agit d'un processus étape par étape. Nous allons maintenant dire à Blender si la position du point est inférieure à zéro, inversez la vitesse et inversez la position du point. Cela fera rebondir le point. C'est comme si nous construisions un mini-moteur qui démarrera une fois que la position du point sera inférieure à zéro. Traduisons toutes ces pensées en nœuds. La première étape de la construction notre mini-moteur est de savoir quand ce moteur démarrera. Je l'ai dit plusieurs fois. Lorsque la position du point est inférieure à zéro, je vais commencer par ajouter un nœud de position. vais nous donner la position du point, puis j'ajouterai un nœud appelé x y z séparé car nous n'avons besoin que de la position sur l'axe z, puisque c'est lui définit la position du point vers le haut et vers le bas. Ajoutez un nœud de comparaison et réglez-le sur une valeur inférieure à zéro, et c'est notre condition. une façon de lire la logique de Voici une façon de lire la logique de ces nœuds que nous avons créés . Lorsque la position sur l'axe Z est inférieure à zéro, faites quelque chose. Nous allons maintenant construire ce qui devrait se passer lorsque cette condition est vraie. Cela devrait être simple car tout ce que nous avons à faire est de faire fonctionner le même moteur que nous avons construit juste en sens inverse, ce que nous pouvons faire facilement en le multipliant par moins un Tout d'abord, nous devons inverser la vitesse. Avant, le point diminuait, maintenant il doit augmenter. Comment pouvons-nous mettre à jour la vélocité ? Facile. Ajoutez un attribut nommé store, changez le type en vecteur, et nous avons besoin de vélocité. Tout ce que nous allons écrire ici remplacera les valeurs que nous avions précédemment pour le vecteur de vitesse J'ajouterai ensuite un attribut nommé. Vitesse vectorielle. Cela me donnera la valeur de vélocité de l'image précédente, et je la multiplierai par moins un sur l'axe z et un sur les axes x et y, car je ne veux pas qu' elles changent car multiplier par un donnera toujours le même résultat Et je vais le brancher dans le socket de valeur de l'attribut nommé storm. Nous inversons maintenant le vecteur de vitesse. Passons à la mise à jour de la position pour que la balle aille dans le sens inverse. Je vais ajouter un nœud de position défini, ajouter un nœud de position, ajouter un calcul vectoriel et le multiplier par moins un sur l'axe z. Et un sur les axes x et y et insérez-le directement dans la position, car nous voulons changer la position directement vers le haut , pas seulement le décalage. Et maintenant, c'est notre mini-moteur chargé inverser la simulation si le point passe en dessous de zéro Mais pour le moment, Blender ne sait toujours quand lancer le petit moteur car nous devons connecter nos nœuds définissant la condition au socket de sélection de l'attribut store named et à la position définie. Maintenant, ces deux opérations de modification de la vitesse et de changement de position ne seront exécutées que lorsque cette condition sera remplie. Si je clique sur Play maintenant, observez ce qui va se passer. Notre point de vue est de rebondir, et c'est ainsi que nous pouvons introduire des contraintes dans notre simulation La balle rebondira désormais pour toujours, mais dans la vraie vie, elle devrait perdre de l'énergie lentement jusqu'à ce qu'elle s'arrête La solution sera de demander au mixeur de diminuer progressivement la vitesse. Vous pouvez le faire en augmentant le vecteur de vitesse. Ainsi, au lieu de le multiplier par moins un, ce qui est une réflexion parfaite, vous le multipliez par -0,8, par exemple Désormais, la simulation perd lentement de la vapeur chaque fois qu'elle touche le sol. Jusqu'à ce que ça s'arrête. La façon dont nous avons programmé friction à l'heure actuelle ne s'applique que lorsque cette condition est remplie. Une fois que le ballon touche le sol. Mais dans la vraie vie, la balle devrait en fait perdre de la vitesse progressivement dès le début de la simulation. Une solution consiste à ajouter un nœud de méth vectoriel, à le définir sur une échelle et à le brancher juste avant l'attribut store named définissant la vélocité et à définir la valeur sur quelque chose comme 0,98 Désormais, la simulation perdra de l'énergie globalement ou à chaque image. Pourquoi ? Parce que, comme nous le savons, Blender compile la simulation à chaque image. Pour notre simulation, je vais supprimer le nœud d'échelle, et je programmerai la friction entre les nœuds responsables des contraintes dans une prochaine vidéo. Nous construisons maintenant le système de contrainte pour le sol. Nous devons également créer des contraintes pour les parois latérales, et c'est exactement ce que nous allons faire dans la prochaine vidéo. 11. Ajouter des restrictions Pt.2: Ajouter des contraintes pour deux, les parois latérales. Dans la vidéo précédente, nous avons créé la contrainte de sol, qui permettra à la balle de rebondir sur le sol Dans cette vidéo, nous allons créer un objet similaire. Nous définirons les contraintes pour les parois latérales, à droite et à gauche, à l'avant et à l'arrière. Juste pour que nous soyons tous sur la même longueur d'onde, assurez-vous d'appuyer sur un chiffre dans le pavé numérique pour passer à la vue de face. Nous allons commencer par créer les contraintes pour le bon mur. Imaginons que nous voulions que le ballon rebondisse sur un mur imaginaire situé à 1 mètre de distance. Par ici. Le concept est très similaire à ce que nous avons fait pour le sol. Nous devons trouver un moyen dire à Blender que si la balle touche ce mur imaginaire, il faut inverser la simulation. Ou pour utiliser l'analogie avec le mini-moteur, nous allons créer un petit moteur physique qui se déclenchera si la balle touche le bon mur. Commençons par la condition. Cela devrait être simple. La pointe touche le mur. Si la position sur l'axe X est égale ou supérieure à un. Ajoutez un nœud de position pour lire la position d'un point particulier, je vais ajouter ensuite un xyz séparé Tout ce qui m'intéresse, c'est l'axe X, qui devrait être supérieur à un. C'est mon état. Passons maintenant à ce qui devrait se passer si cette condition est vraie. Nous voulons inverser la simulation, donc nous inversons d'abord la vitesse, puis la position. Au lieu de créer tous ces nœuds à partir de zéro, je vais simplement copier la configuration à partir de la contrainte d'étage et la connecter comme ceci. Pour multiplier la vélocité, assurez-vous de remettre l'axe z à un. Remplacez l'axe X par moins un, car nous travaillons maintenant sur l'axe X. Je ferai de même pour le multiplicateur de la position. Je vais remettre l'axe z à un et changer l' axe x à moins un, et m'assurer également de relier la condition à la fois à l'attribut store named et à la position définie. Ces opérations ne démarreront que si cette condition est remplie. Maintenant, si je clique sur Play, la balle tombera directement vers le bas. Je veux le pousser légèrement vers la droite. Je vais aller juste après le nœud points, le premier nœud de mon arbre, et ajouter l'attribut store named. C'est un vecteur, et je vais choisir la vitesse, et à droite, par exemple, deux sur l'axe x. Maintenant, le vecteur de vitesse commencera à deux, ce qui signifie que le point sera légèrement poussé vers la droite, et nous pourrons ainsi tester notre contrainte murale que nous venons de créer. C'est comme si nous avions créé une vitesse initiale pour le point, afin qu'il ne commence pas à zéro. Si je clique sur Play, le point touchera le mur droit, mais il agit bizarrement D'une manière ou d'une autre, il passe de l' autre côté. Pourquoi est-ce le cas ? Eh bien, si nous nous concentrons sur ce nœud de position, vous remarquerez que nous le multiplions par moins un Supposons donc, hypothétiquement, la position du point à un certain cadre soit à 0,9 sur l'axe x. La simulation continuera de fonctionner normalement car nous n'avons pas touché la seule ligne. À l'image suivante, la balle est en position 1, ce qui signifie que la condition est désormais remplie, ce qui signifie que Blender exécutera ces opérations pour lui demander d'inverser la simulation. Alors maintenant, la balle devrait également être ici à 0,9 sur l'axe x. Mais comme nous multiplions la position sur l'axe x par moins un, on passe de l'autre côté à -0,9 sur l' La solution est simple. Nous devons placer cette balle de deux unités vers la droite, ce que nous pouvons faire en ajoutant un nœud de méth vectoriel, réglant pour qu'il soit ajouté et en ajoutons deux sur l'axe x. Et maintenant, si je clique sur Play, vous remarquerez que le point rebondit parfaitement sur le bon mur, et c'est notre contrainte pour le bon mur Nous allons maintenant créer la contrainte pour le mur gauche. Cela devrait être simple. Je vais dupliquer l'intégralité contrainte du mur droit et la connecter ensuite comme suit. Le mur de gauche correspond à la ligne moins un. Quand est-ce que le ballon touche le mur gauche ? Ou sur la ligne moins un, lorsque la position est égale ou inférieure à moins un, je changerai ma condition pour qu'elle soit lorsque la position sur l'axe x est inférieure à moins un. C'est donc ma nouvelle condition. Ce qui devrait se passer, c'est que nous inverserons la vitesse en la multipliant par moins un sur l'axe x. Je vais donc garder ces nœuds tels qu'ils sont, et pour la position définie, nous les multiplions par moins un Nous devons corriger cela en ajoutant deux. Dans le cas du mur de gauche, puisque nous multiplions par moins un sur l'axe x, cela signifie que la balle va maintenant sauter sur le côté droit Nous devons donc la déplacer de deux unités vers l'arrière, ce que nous pouvons faire facilement en soustrayant Tout ce que vous avez à faire est de remplacer ce nœud mathématique vectoriel par ajout par soustraction. Maintenant, si je clique sur Play, vous verrez que notre point de vue rebondit à la fois sur le mur droit et sur le mur gauche, et c'est exactement ce que nous voulons Nous avons maintenant créé la contrainte pour le mur droit et le mur gauche. Nous ferons exactement la même chose pour les murs avant et arrière. Dans notre fenêtre en trois D, nous examinons maintenant la vue de face, qui signifie qu'il s'agit du mur droit et du mur gauche Si je tape trois sur le pavé numérique, je passe à la vue latérale, qui signifie que maintenant c'est le recto, c'est le verso. Une autre façon de voir les choses tout à l'heure, c' nous travaillions le long de l'axe X. Si j'en touche un depuis le pavé numérique, vous verrez la ligne rouge qui représente l'axe X. Maintenant, si je tape trois sur le pavé numérique, je passe à la vue latérale, et je vais maintenant travailler le long de l'axe Y. La création de contraintes pour les deux sera très simple. Je vais simplement dupliquer l'ensemble de la configuration pour les murs droit et gauche et le faire passer du mode de fonctionnement basé sur l'axe X à l'axe Y. Je vais sélectionner ces deux groupes de nœuds et appuyer sur D pour les dupliquer Je vais les connecter comme ça. Commençons par le mur de droite qui est maintenant le mur avant. Modifiez la valeur provenant de l'axe x y z séparé par l'axe y. Il doit être égal ou supérieur à un. Si cette condition est remplie, nous procéderons comme suit. Prenez la vitesse et multipliez-la par moins un sur l'axe y maintenant et ramenez l'axe x à un. Pour la position, même chose, multipliez-la par moins un sur l'axe y et ramenez l'axe x à un. Et comme nous devons également tenir compte de la correction, nous devons maintenant en ajouter deux sur l'axe y et écrire zéro sur l'axe x. Il s'agit de la contrainte pour le mur avant. Passons maintenant à la contrainte pour le mur arrière. Je vais faire la même chose. Remplacez la valeur sortant du x y z séparé par l'axe y. Il doit être égal ou inférieur à moins un. Et si cette condition est remplie, nous procéderons comme suit. Prenez la vitesse et multipliez-la par moins un sur l'axe y maintenant et ramenez l'axe x à un. Pour la position, même chose, multipliez-la par moins un sur l'axe y et ramenez l'axe x à un. Et comme nous devons également tenir compte de la correction, nous devons maintenant soustraire deux sur l'axe y et écrire zéro sur l'axe x. Et c'est ainsi que vous établissez la contrainte pour le mur avant et pour le mur arrière. Maintenant, si je reviens au premier magasin nommé attribute node qui nous donne certaine vélocité initiale, que je donne à notre point une certaine vélocité initiale sur l'axe y et que je clique sur play, vous verrez notre point rebondir sur les différents murs D'accord, voici comment vous pouvez créer des contraintes pour votre simulation. Dans la prochaine vidéo, nous allons remplacer ces points par des sphères ou des bols, ce qui introduira une nouvelle série de défis à relever. 12. Rayon: Ajouter le rayon. À ce stade, nous exécutons notre simulation en fonction des points. Comme je l'ai déjà mentionné, points dans Blender ne sont que des conteneurs de données que nous pouvons ensuite échanger avec d'autres objets. Ce que nous voulons faire dans cette vidéo est essentiellement de remplacer ces petits points par une sphère ou un objet quelconque. Si je vais à la fin de mon arborescence de nœuds et ajoute un nœud appelé instance on points, je le brancherai juste avant le nœud de sortie du groupe. Ce nœud d'instance sur points remplacera le point par une instance ou un objet en trois D que nous choisirons. Je veux remplacer ces points par des sphères. Je vais ajouter une sphère en U. Et je vais le brancher sur le socket de l'instance. Et comme vous pouvez le constater, notre point est maintenant remplacé par la sphère. Pour le rayon de cette sphère UV, je voulais hériter du rayon des points, nous pouvons spécifier à partir du nœud de points, le premier nœud du notaire Une solution consiste à ajouter un nœud Radius et le connecter à l'échelle du nœud Instance on Points. Et maintenant, si je change le rayon des points, je changerai également le rayon des instances ou des sphères. Maintenant, si je clique sur Play, vous remarquerez comment notre sphère rebondit sur le sol et les parois latérales Mais si vous vous concentrez, vous remarquerez un petit problème. Ou un gros problème, selon la façon dont on le voit. Vous remarquerez que lorsque la sphère touche le sol, une partie de la sphère passe sous la ligne du sol. Pourquoi est-ce le cas ? Eh bien, puisque nous avons traité de points tout à l'heure, et j'ai dit que ce ne sont que des conteneurs de données, ils n' ont donc pas vraiment de rayon. Maintenant que nous remplaçons ces points des sphères qui ont réellement une géométrie en trois D et qui ont un rayon, nous devons en tenir compte dans notre moteur physique. En d'autres termes, nous devons trouver un moyen rendre notre arbre de nœuds conscient du rayon, afin qu'il en tienne compte lors de l' exécution de la simulation. Ce sera simple. Je te le promets. Commençons d'abord par la contrainte pour le sol. Quand est-ce que la sphère touche le sol ? Il devrait être facile de répondre à cette question. Lorsque la position est inférieure au rayon. Rappelez-vous toujours que la position est évaluée à partir du point central d'un objet. Lorsque la position ou le centre de l'objet en trois D est inférieur au rayon, cela signifie que l'objet en trois D touche le sol. Pour la contrainte d'étage, il me suffit d'ajouter un nœud de rayon et de le brancher en cas d'opération inférieure à 1. Maintenant, si la position de la sphère est inférieure au rayon, effectuez les opérations suivantes. Si je clique sur Play, tout se passera bien. On dirait que la balle rebondit sur le sol. Mais si je change le rayon du point à environ 0,5 mètre, par exemple, et que je clique à nouveau sur Play pour voir la simulation, vous verrez quelque chose de bizarre. Maintenant, pour une raison ou une autre, la balle passe sous le sol avant de rebondir. Pourquoi est-ce le cas ? Eh bien, vous voyez que Blender fait tous les calculs en fonction du centre de l'objet. Il est important de souligner que toutes les opérations que nous effectuons ici sont toutes basées sur les points que nous avons créés. Ces points ne deviennent des sphères à la fin du notaire que lorsque nous utilisons l' instance sur des points connus. Donc, jusqu'à ce stade du notaire, nous avons toujours affaire à des points, ce qui signifie que Blender voit des points ici, pas des sphères. Donc, comme solution à cela, nous pouvons dire à Blender ce qui suit. Si la balle touche le sol, déplacez-la vers le bas du rayon, effectuez la correction, puis remettez-la Cela ressemblera à ceci dans les nœuds. Je vais ajouter un nœud de rayon et le brancher un nœud XY Z combiné sur l'axe Z. Nous faisons un tas d' opérations sur le vecteur, c'est pourquoi je dois convertir ce rayon, qui est une valeur unique, en vecteur. Je veux déplacer la position vers le bas d'un rayon. Je vais ajouter un nœud mathématique vectoriel, modifier l'opération de soustraction, et je vais connecter la position au premier socket, ce qui signifie que je vais la soustraire de La deuxième valeur doit être le vecteur obtenu à partir du rayon. Je vais donc brancher le vecteur du nœud x Y Z combiné dans le deuxième socket. Ensuite, nous allons effectuer notre correction en utilisant ce nœud de multiplication vectorielle. Nous devons annuler l'opération de soustraction que nous avons effectuée auparavant en ajoutant un ensemble de nœuds mathématiques vectoriels à ajouter, et j'ajouterai le vecteur que j'ai soustrait auparavant, qui est le vecteur sortant du nœud x Y Z combiné Si je clique sur Play, vous remarquerez que la balle rebondit maintenant sur le sol dans le bon sens Maintenant, le pire, c'est que nous devons apporter une correction similaire aux différentes contraintes, à droite et à gauche, à l'avant et à l'arrière. Mais ce sera simple. Faisons-le très vite. Commençons par l' état du mur droit. Quand est-ce que la sphère touche le bon mur ? simple lorsque la position sur l'axe x est supérieure à un moins le rayon. Je vais ajouter un nœud Radius. Je vais le connecter à un nœud mathématique, le configurer pour qu'il soit soustrait, sorte qu'il soit un moins le rayon, de sorte qu'il soit un moins le rayon, et je le brancherai sur le nœud supérieur à C'est ma nouvelle condition. Pourquoi cela se produirait-il maintenant si cette condition est vraie ? Inversez la vitesse, elle devrait rester telle quelle. Si je clique sur Play, vous remarquerez tout de même que la balle va toujours au-delà du mur droit, car nous devons apporter une correction similaire à celle que nous avons faite pour le sol. En décalant la simulation vers la droite, effectuez la correction, puis déplacez-la vers l'arrière Cela ressemblera à ceci. Je vais ajouter un nœud radius et le brancher au nœud xyz combiné sur l'axe X cette fois Comme je l'ai déjà mentionné, nous effectuons un tas d'opérations sur le vecteur. C'est pourquoi je dois convertir ce rayon, qui est une valeur unique, en vecteur. Je veux déplacer la position à droite du rayon. Je vais ajouter un nœud mathématique vectoriel, modifier l'opération pour ajouter. Je vais connecter la position à la première prise, ce qui signifie que je vais ajouter à la position la deuxième valeur, qui devrait être le vecteur obtenu à partir du rayon. Je vais donc brancher le vecteur du nœud x y z combiné dans le deuxième socket. Ensuite, nous allons effectuer notre correction en utilisant ce nœud de multiplication vectorielle, puis nous utiliserons l'opération publicitaire pour compter l' autre correction, et nous devons annuler les opérations d' ajout que nous avons effectuées auparavant en ajoutant un nœud mathématique vectoriel défini pour soustraire, et je soustrairai le vecteur que j'ai ajouté auparavant, qui est le vecteur issu du x y z combiné Si je clique sur Play, vous remarquerez que la balle rebondit maintenant correctement sur le mur droit Il s'agit de la correction pour le mur droit. Maintenant, nous devons le faire pour le mur de gauche. Commençons par l' état du mur gauche. Quand est-ce que la sphère touche le mur gauche ? simple lorsque la position sur l'axe x est inférieure moins un plus le rayon ou au rayon moins un. Je vais ajouter un nœud Radius. Je vais le connecter à un nœud mathématique, le configurer pour qu'il soit soustrait, sorte que ce soit le rayon moins un, et le brancher sur le nœud inférieur à C'est ma nouvelle condition. Cela devrait se produire maintenant si cette condition est vraie. Inversez la vitesse, elle devrait rester telle quelle. Si je clique sur Play, vous remarquerez tout de même que la balle va toujours au-delà du mur gauche, car nous devons apporter une correction similaire à celle que nous avons faite pour le sol et le mur droit en bouleversant la simulation sur la gauche Effectuez la correction, puis déplacez-la vers l'arrière. Cela ressemblera à ceci. j'ajouterai un nœud radius et le connecterai Cette fois, j'ajouterai un nœud radius et le connecterai à un nœud x Y Z combiné sur l'axe X. Je veux déplacer la position la gauche en fonction du rayon. Je vais ajouter un nœud mathématique vectoriel, modifier l'opération de soustraction Je vais connecter la position à la première prise, ce qui signifie que je vais soustraire de la position la deuxième valeur, qui devrait être le vecteur obtenu à partir du rayon Je vais brancher le vecteur du nœud xyz combiné dans le deuxième socket Ensuite, nous allons effectuer notre correction en utilisant ce nœud de multiplication vectorielle. Ensuite, nous utilisons l'opération de soustraction pour compter l' autre correction, et nous devons annuler l'opération de soustraction que nous avons effectuée auparavant en ajoutant un nœud mathématique vectoriel, puis en le configurant pour Je vais ajouter le vecteur que j'ai soustrait auparavant Quel est le vecteur sortant du nœud xy Z combiné Si je clique sur Play, vous remarquerez que la balle rebondit maintenant correctement sur le mur gauche Il s'agit de la correction pour le mur gauche. Maintenant, nous devons le faire pour les murs avant et arrière. Cela devrait être vraiment similaire au mur droit et au mur gauche. Je vais appuyer sur trois sur le pavé numérique pour passer à la vue latérale, et commençons par corriger le mur avant, qui ressemble au mur de droite vu de cette vue. Quand est-ce que la sphère touche la paroi avant ? simple lorsque la position sur l'axe y est supérieure à un moins le rayon. Je vais ajouter un nœud Radius. Je vais le connecter à un nœud mathématique, le configurer pour qu'il soit soustrait, sorte qu'il soit un moins le rayon, de sorte qu'il soit un moins le rayon, et je le brancherai sur le nœud supérieur à C'est ma nouvelle condition. Que devrait-il se passer si cette condition est vraie ? Inversez la vitesse, elle devrait rester telle quelle. j'appuie sur Play, vous remarquerez toujours que la balle va toujours au-delà la paroi avant, car nous devons effectuer une correction similaire à que nous avons faite auparavant en plaçant la simulation vers l'avant, la correction, puis en la déplaçant vers l'arrière. Cela ressemblera à ceci. Je vais ajouter un nœud radius et le brancher un nœud xyz combiné sur l'axe y cette fois Je veux faire avancer la position en fonction du rayon. Je vais ajouter un nœud de méth vectoriel. Changez l'opération pour ajouter, et je vais connecter la position à la première prise, ce qui signifie que je vais ajouter à la position la deuxième valeur, qui devrait être le vecteur que nous avons obtenu à partir du rayon. Je vais donc brancher le vecteur du nœud xyz combiné dans le deuxième socket Ensuite, nous allons effectuer notre correction en utilisant ce nœud de multiplication vectorielle. Ensuite, nous utilisons l'opération publicitaire pour prendre en compte l' autre correction, et nous devons annuler l'opération d'ajout que nous avons auparavant en ajoutant un nœud de méth vectoriel défini pour soustraire, et je vais soustraire le vecteur que j'ai ajouté auparavant, qui est le vecteur issu du nœud xyz combiné Si je clique sur Play, vous remarquerez que la balle rebondit maintenant correctement sur le mur avant Voici notre correction pour le mur avant. Nous devons maintenant faire de même pour le mur arrière. Commençons par la condition. Quand est-ce que la sphère touche le mur arrière ? C'est simple. Lorsque la position sur l'axe y est inférieure à moins un plus le rayon ou au rayon moins un. Je vais ajouter un nœud Radius. Je vais le connecter à un nœud mathématique, le configurer pour qu'il soit soustrait, sorte que ce soit le rayon moins un, et je le brancherai sur le nœud inférieur à C'est ma nouvelle condition. Que devrait-il se passer maintenant si cette condition est vraie ? Inversez la vitesse, elle devrait rester telle quelle. Si je clique sur Play, vous remarquerez toujours que la balle va toujours dépasser le mur arrière, car nous devons apporter une correction similaire à celle que nous avons faite auparavant en bouleversant la simulation en arrière, en effectuant la correction, puis en la déplaçant vers l'avant Ça ressemblera à quelque chose comme ça. Je vais ajouter un nœud radius et le brancher au nœud XY Z combiné sur l'axe y cette fois. Je veux reculer la position d'un rayon. Je vais ajouter un nœud mathématique vectoriel, modifier l'opération de soustraction, et je vais connecter la position au premier socket, ce qui signifie que je vais soustraire de la position la deuxième valeur, qui devrait être le vecteur obtenu à partir du rayon Je vais donc brancher le vecteur du nœud XYZ combiné dans le deuxième socket Ensuite, nous allons effectuer notre correction en utilisant ce nœud de multiplication vectorielle. Ensuite, nous utilisons l'opération de soustraction pour compter l' autre correction, et nous devons annuler l'opération de soustraction que nous avons auparavant en ajoutant un nœud mathématique vectoriel, en le réglant sur addition, et j'ajouterai le vecteur que j'ai soustrait auparavant, qui est le vecteur issu du nœud x y z combiné Si je clique sur Play, vous remarquerez que la balle rebondit maintenant correctement sur le mur arrière Maintenant, notre moteur physique connaît le rayon des points et en tiendra compte lors de l' exécution de la simulation. Je sais que vous pouvez avoir l' impression que nous avons fait beaucoup d' opérations dans cette vidéo, ce qui peut être bouleversant. Mais si vous ne comprenez pas exactement ce que nous avons fait, revenez en arrière et regardez cette vidéo depuis le début essayez de vous concentrer un peu et de visualiser ce qui se passe, et vous serez surpris de la simplicité de ces concepts. Je sais que cela peut sembler très compliqué, surtout quand je fais les choses si vite, mais croyez-moi, une fois que vous l'aurez compris, vous pourrez le faire comme si vous aviez littéralement yeux bandés parce que vous comprenez les concepts sous-jacents Nous allons probablement aussi nous moquer de vous parce pensez que c'est aussi compliqué. C'est ainsi que nous pouvons implémenter le rayon dans notre simulation, et pour le moment, il ne nous reste plus qu'un seul problème à résoudre, savoir comment faire entrer ces balles en collision les unes avec les autres C'est ce que nous allons faire dans la prochaine vidéo. 13. Collision: Collision. Bonjour, et bienvenue dans la dernière vidéo technique sur création de votre propre moteur physique dans Blender à l'aide de nœuds de géométrie. Nous avons beaucoup lu, alors accordez-vous du crédit car cette vidéo est peut-être la plus compliquée à ce jour. Nous n'allons pas ajouter beaucoup de nœuds, mais certains d'entre vous trouveront peut-être un peu compliqué de comprendre les concepts qui sous-tendent toutes les opérations que nous allons effectuer dans cette vidéo. Mais je ferai de mon mieux pour tout expliquer étape par étape. Et j'espère que si vous vous concentrez suffisamment, vous comprendrez exactement la logique de ce que nous allons construire. C'est là que nous nous sommes arrêtés la dernière fois, et pour le moment nous n'avons affaire qu'à un seul point. Ou une balle. Je veux en avoir plusieurs. Le moyen le plus simple de contourner ce problème sera d'augmenter le nombre de points à environ dix, disons. Et fixons le rayon à quelque chose de petit, comme 0,2 mètre. Maintenant, toutes ces balles seront placées les unes sur les autres. C'est pourquoi je vais me connecter à la position, un nœud à valeur aléatoire, et ce nœud attribuera une position aléatoire à chaque point. Et tout ce que vous avez à faire est de lui donner un intervalle en spécifiant une valeur maximale minimale, et il attribuera une valeur aléatoire dans cet intervalle pour chaque point. Vous pouvez jouer avec les valeurs jusqu'à obtenir le résultat souhaité. Mais dans mon cas, j'ai fini par utiliser ces valeurs pour les valeurs minimales moins un moins un, trois, et pour les valeurs maximales, un, 15. Maintenant, si je clique sur Play, vous verrez que nous avons maintenant dix sphères, mais le plus gros problème, c'est que tous ces bols se croisent. Ils n'entrent pas en collision. Nous avons demandé à Blender de faire rebondir les balles sur les différents murs, mais nous ne lui avons pas dit de les faire rebondir les unes sur les autres, et c'est un élément crucial de la construction de notre propre moteur physique Alors, comment pouvons-nous faire une telle chose ? Essayons de réfléchir à quelques idées sur la façon dont nous pouvons programmer une telle chose Commençons par la première question. Est-ce que deux balles entrent en collision en fait ? Parce que si nous connaissons cette condition, nous pouvons dire à Blender que, hé, si cette condition se produit, fais quelque chose. Eh bien, je vais vous donner la réponse. Deux balles entrent en collision lorsque la distance entre elles ou entre les centres est inférieure au rayon multiplié par deux Je pense que cela devrait ressortir clairement de cette visualisation. J'ai toujours du mal à prononcer ce mot. C'est la logique de la condition que nous allons créer plus tard. Nous allons dire à Blender de toujours calculer la distance entre deux points, et si la distance entre eux est inférieure au rayon multiplié par deux, cela signifie qu'ils entrent en collision, et vous devriez faire quelque chose pour y remédier Maintenant, traduisons cela en nœuds. Je vais ajouter un nœud appelé index of nearest. Ce nœud me donnera l' indice du point le plus proche. Si je passe à l'espace de travail des nœuds de géométrie, comme je l'ai déjà mentionné, chaque point possède un index qui y fait référence. L'indice du nœud le plus proche me donnera l'indice du point le plus proche d'un certain point. Une fois que je connais l'indice du point le plus proche, je peux demander à Blender de lire sa position, ce que vous pouvez faire en ajoutant un nœud appelé evaluate at index, qui est un moyen de le dire à Blender. Sur ce point, je veux que vous calculiez quelque chose. Dans notre cas, nous voulons connaître la position de ce point. Je vais changer le type de float en vecteur. Parce que la position est un vecteur. Je vais ajouter un nœud de position et le connecter à la valeur. Maintenant, le vecteur de sortie de cette évaluation au nœud d' indice est le vecteur de position du point le plus proche, point B, qui est le plus proche de mon point. La sortie du nœud de position est le vecteur de position du point A. Une fois que j'ai ces deux vecteurs, je peux ajouter un nœud mathématique vectoriel et modifier l' opération en distance, et si je branche le vecteur provenant du évaluation à l'index et du nœud de position, ce nœud me donnera la distance qui les sépare. Maintenant, comment savoir si ces deux points entrent en collision ? J'ai déjà dit la réponse. Si la distance entre les deux points est inférieure au rayon multiplié par deux. J'ajouterai un nœud de rayon que je multiplierai par deux, la distance devant être inférieure à deux fois le rayon. Le résultat actuel de cette opération inférieure à une est ma condition lorsque deux points ou deux balles entrent en collision Il y a maintenant une chose importante à laquelle nous devons penser, l'ordre des opérations. Si nous appliquons les contraintes de collision avant ou après la contrainte des balles , réfléchissez-y une seconde. La réponse est avant. Nous devons compter les collisions avant les contraintes des murs La raison en est qu'il est plus logique calculer la collision avant que les murs ne touchent les murs, car ils peuvent s'éloigner les uns des autres ou se pousser mutuellement contre les murs. Une fois que nous le savons, nous pouvons gérer les contraintes des murs. C'est pourquoi je vais ajouter un nœud à position définie, et je le brancherai avant la partie où nous avons les autres contraintes. En gros, juste après le nœud chargé de mettre à jour la position. Et je vais enregistrer le résultat de l'opération inférieure. Vers la douille de sélection de la note de position définie. Maintenant que nous avons fini de construire notre condition, nous devons maintenant passer à ce qui devrait se passer si cette condition est vraie ou à ce qui devrait se passer si deux balles entrent en collision Ma question maintenant est la suivante : que devrait-il se passer si deux balles entrent en collision ? Pensez-y. La réponse est la suivante. Si deux balles entrent en collision, nous devons les éloigner l'une de l'autre C'est une chose sûre à dire, et je trouve aussi que c'est supergénial de le dire Mais il y a deux questions importantes auxquelles nous devons répondre. Tout d'abord, de combien devons-nous compenser ces deux balles ? C'est comme ça ou ils vont se débrouiller comme ça ? C'est une chose importante à comprendre. C'est donc le numéro un. Numéro deux, dans quelle direction. Donc, si ces deux balles entrent en collision, tourneront-elles comme ceci, ceci ou cela ? C'est également une chose importante dont nous avons besoin pour trouver un moyen de le traduire en nœuds. Pour ce qui est de savoir dans quelle mesure nous devons décaler la position des deux points, cela devrait être simple. Calculez la distance entre les deux points, divisez-la par deux et déplacez chaque point de cette valeur. Pour la direction, il faut pousser le vecteur qui traverse les deux points. Comment calculer le vecteur ? Voici le vecteur de position pour le point A, et voici le vecteur de position pour le point B. Je peux calculer le vecteur qui les traverse en effectuant une opération de soustraction, vecteur de position du point A moins le vecteur de position du point B. Cela me donnera le vecteur le long duquel la position de décalage doit se produire Maintenant, traduisons toutes ces pensées en nœuds. Je vais commencer par calculer le vecteur passant par les deux points. Comme je l'ai dit, ce sera la position du point A moins la position du point B, ce que vous pouvez faire en ajoutant un nœud mathématique vectoriel et en le configurant pour qu'il soit soustrait Je vais insérer la position dans le premier support et le vecteur sortant de l'indice d'évaluation dans le second support ? C'est le vecteur sur lequel je vais déplacer les deux points. Passons maintenant au montant de combien pour compenser les deux points. Nous devons calculer cette distance divisée par deux, et c'est le montant par lequel je dois compenser chaque point. Comment puis-je calculer la ligne rouge ? C'est le rayon. C'est également le rayon, et c'est la distance entre les deux points. Si je multiplie par deux le rayon moins la distance, cela me donnera la longueur de la ligne rouge ou le degré d'intersection des deux points Traduisons cela en notes. Je vais ajouter un ensemble de notes mathématiques à soustraire. L'opération est égale à deux fois le rayon, moins la distance entre les deux points. vais ajouter un autre nœud mathématique et le configurer pour le diviser, et je vais le diviser par deux. Le résultat obtenu est le montant de la compensation. J'ajouterai un nœud mathématique vectoriel, le changerai en échelle, et je mettrai à l'échelle le vecteur selon lequel je veux que l' opération se produise, qui provient du nœud de soustraction vectorielle, et je le mettrai à l'échelle en fonction de la quantité provenant du nœud mathématique de division Cela ira directement dans le support de décalage du nœud à position définie. Et c'est tout. C'est ainsi que vous pouvez créer une collision dans notre moteur physique. Maintenant, si je clique sur Play, vous remarquerez toujours que les balles entrent toujours en collision C'est là que tu peux commencer à me détester parce que même après tous ces calculs compliqués, ça ne marche toujours pas Mais nous allons régler ce problème. Je tiens à mentionner que ce n'est pas que ce que nous avons fait est mal, le problème concerne le mixeur. Ce n'est pas de notre faute. Ce sont des mixeurs Comme je l'ai déjà mentionné, en raison de la méthode d'intégration des huileurs utilisée dans Blender, nous devons faire face à un nombre élevé d'erreurs La méthode d'intégration de l'huileur fonctionne au mieux, et elle est vraiment sujette aux erreurs La meilleure solution pour rendre notre simulation plus précise est donc , au lieu de n'exécuter cette opération qu'une seule fois, si nous pouvions trouver un moyen de dire à Blender que chaque image ne fait pas tourner ce moteur physique une seule fois, qu'il le fasse, par exemple, 100 fois. De cette façon, vous obtiendrez un résultat plus précis. En fait, vous connaissez déjà la réponse à cette question. Peux-tu le deviner ? Le tambour roule, et il répète des zones. La première chose dont nous avons parlé dans ce cours. Ce que je vais faire, c'est ajouter une zone de répétition et j'insérerai ensemble de mon système de contraintes dans la zone de répétition comme ceci. Et maintenant, à partir du premier nœud de la zone de répétition, je peux spécifier combien de fois je veux que Blender calcule les contraintes. Oui, Blender n'exécutera la simulation qu'une seule fois, mais je peux spécifier à l'aide de la zone de répétition combien de fois exécuter certaines opérations dans une seule image. C'est ce qu'on appelle une sous-étape. Je vais en faire 50, par exemple. Maintenant, si je clique sur Play, Blender, chaque image exécutera le système de collision 50 fois pour obtenir un résultat vraiment précis. Et maintenant, comme vous pouvez le constater, nos balles entrent bien en collision et tout fonctionne parfaitement. C'est ainsi que nous avons créé le système de collision pour nos balles Dans la prochaine vidéo, je vais partager quelques réflexions finales sur la façon de faire certaines choses dans notre moteur physique. 14. Fraye de Particle: Des particules apparaissent. Bonjour et bienvenue, et dans cette vidéo, nous allons faire apparaître les points au fil du temps et ne pas les avoir tous en même temps C'est là que nous nous sommes arrêtés la dernière fois. À l'heure actuelle, notre simulation ne compte que dix points. Disons que je veux 100 points. Si j'augmente le nombre de points à 100 et que je clique sur Play, vous remarquerez que la simulation va mal tourner, car lorsque nous augmentons le nombre de points, nous augmentons la probabilité d'erreur, ce qui rend la simulation très instable Quelle est donc la solution à ce problème ? Eh bien, dans notre simulation actuelle, nous avons 100 points depuis le début. Et si nous trouvions un moyen de dire à Blender de ne pas avoir 100 points dès le début, mais de les générer ou de les ajouter au fil du temps ? Cela devrait conduire à une simulation plus stable. Comment pouvons-nous le faire ? Commençons par la première partie, qui est de savoir comment dire à Blender de faire apparaître les particules au fil du temps ? Ce sera simple. Il vous suffit d'ajouter un nœud de géométrie conjointe et de le connecter en tant que premier nœud de la zone de simulation. Je vais prendre la sortie du nœud de points, techniquement du nœud d' attribut nommé magasin , et la connecter au nœud de géométrie conjointe. Ce qui va se passer maintenant, c'est que Blender ajoutera plus de points à chaque fois qu'il exécutera la simulation. Ou pour être plus précis, Blender associera la géométrie précédente à la nouvelle géométrie. Ensuite, je vais réduire le nombre de points à un, car si je ne le fais pas, le mixeur va exploser Il commencera à avoir 100 points, et chaque cadre ajoutera 100 points supplémentaires. Vous pouvez facilement voir comment cela vous permettra d' obtenir un nombre incroyable de points très rapidement, ce qui fera planter le logiciel. Lorsque je change le nombre de points à un, Blender n'ajoute qu' un point par image. En fait, c'est encore trop, et nous devrons faire en sorte qu'un mixeur fasse apparaître un point, peut-être toutes les 20 images Mais avant cela, si je clique sur play, comme vous pouvez le voir, Blender ajoute un nouveau point à chaque image, ce qui est encore trop, et cela rend la stimulation instable. La solution sera de dire à Blender que T ne pointe pas un point à chaque image. Ajoutez peut-être un point toutes les dix images ou 20 images. Alors, comment peut-on programmer une telle chose ? Je vais commencer par ajouter un nœud de même heure. Ce nœud me donnera soit valeur des secondes, soit le cadre sur lequel je suis connecté. Je vais prendre le cadre et le connecter au nœud de décompte des points. Maintenant, à la première image, le mixeur ajoutera un point. À la deuxième image, Blender ajoutera deux points, donc j'aurai trois points et à la troisième image, Blender ajoutera trois points, donc j'aurai six points au total. Ce n'est pas ce que je veux. Je veux dire à Blender qu'il y a un point pour un certain nombre d'images. J'ajouterai un nœud mathématique et je mettrai sur Flored modulo Floord modulo est juste une façon sophistiquée de dire que ce nœud renverra le reste d' une opération de division par cette valeur Ce nœud nous permettra de spécifier à quelle fréquence nous voulons que le mixeur ajoute un nouveau point. J'ajouterai également un autre nœud mathématique et je le mettrai à deux, et la valeur devrait être zéro. Voici la logique de ce qui se passe. Blender prendra le numéro de l'image, amon le divisera ensuite par cette valeur, et si le reste est égal à zéro Cela signifie que cette condition d'égalité est vraie, qui signifie que ce nœud en produira un, donc Blender ajoutera un point. Et si le reste n' est pas égal à zéro, cela signifie que cette condition égale à deux est fausse, qui signifie que ce nœud produira zéro, donc Blender n'ajoutera aucun point. Je veux que le mixeur ajoute un point sur 20 images. C'est ce que j'obtiendrai si je tape 20 ici. Voici un exemple de ce qui va se passer. Disons que je suis à l'image 55. Blender divisera 55 par 20. Le reste de l' opération est de 15. 15 n'est pas égal à zéro, ce qui signifie que ce nœud produira zéro, et comme ce nœud va compter les points du nœud, cela signifie que Blender n'ajoutera aucun point. Maintenant, disons que j'en suis à l'image 60. Blender divisera 60 par 20. Le reste de l' opération est nul, zéro est égal à zéro, qui signifie que ce nœud en produira un car cette condition est vraie maintenant. Celui-ci ira au socket de comptage de points, et Blender ajoutera un point à la simulation. Je pense que la logique devrait maintenant être claire quant à ce qui se passe. Maintenant, si je clique sur Play, Blender commencera à ajouter des particules progressivement, qui est exactement ce que je veux. La dernière chose que je veux faire est de dire à Blender de faire apparaître chaque point dans une direction différente Je peux le faire en attribuant un vecteur de vitesse initiale aléatoire à chaque point, ce que un vecteur de vitesse initiale aléatoire à chaque point, vous pouvez faire facilement en branchant un nœud à valeur aléatoire dans le socket vectoriel de l'attribut store name définissant la vélocité initiale Et j'ajoute les valeurs à moins un moins 10 pour le minimum et 110 pour le maximum. C'est ainsi que nous pouvons faire en sorte que le mixeur fasse apparaître les particules au fil du temps. Je pense que la logique est super simple. Dans la vidéo suivante, nous ajouterons une fraction à notre simulation. 15. Friction: Ajouter une fraction. La fraction est un élément important de toute simulation. Sans friction, les balles continueront à rebondir pour toujours. C'est pourquoi il est important de trouver un moyen dire à Blender d'atténuer la simulation avec le temps Nous avons déjà abordé ce sujet auparavant, mais dans cette vidéo, nous allons faciliter un peu le processus de modification de la friction. Maintenant, il s'agit de l'ensemble de notre arbre de notes, et ce que je prévois de faire est le suivant. Comme vous vous en souvenez, dans les contraintes, j'ai la vélocité multipliée par moins un en fonction de l'axe. Si je porte cette valeur à quelque chose comme -0,8, cela entraînera plus de friction Ce que je veux, c'est changer cette valeur pour tous les différents nœuds multipliés à la fois. C'est simple. Je vais ajouter un nœud xy z combiné. Je vais saisir la même valeur ici, un, un moins un, et la connecter au vecteur du nœud multiplicateur. Je n'ai rien fait d'extraordinaire, j'ai juste remplacé la valeur du nœud multiplicateur par ce nœud x y z combiné. La raison pour laquelle je l'ai fait est que je peux maintenant ajouter un nœud d'entrée de groupe, prendre l'axe Z et le brancher à l'entrée du groupe. Maintenant, si je passe à l'onglet du modificateur, vous verrez que je peux modifier la valeur à partir d'ici De plus, il est important de noter que je ne modifierai que la valeur des axes z, car il s'agit du socket branché sur l' entrée du groupe Pour le reste des prises, elles resteront unies. Cela facilitera considérablement le processus de modification des valeurs de friction. Maintenant, je dois faire la même chose pour toutes les différentes contraintes. Je vais commencer par le faire pour le bon mur, ajouter un nœud x Y Z combiné et ajouter une entrée de groupe. Je vais passer au mur de gauche, ajouter un zende x y combiné avec les mêmes valeurs et ajouter une entrée de groupe Je vais faire la même chose pour le mur avant en ce moment. Enfin, je vais faire de même pour le mur du fond. S. Et maintenant, je peux facilement contrôler la friction d'ici. Je peux également ouvrir la barre latérale en appuyant sur n et sur l'éditeur de nœuds de géométrie, sélectionnant l'une des entrées du groupe, et vous pouvez double-cliquer pour changer le nom de cette propriété en quelque chose comme friction. Pour ma simulation, je vais régler la valeur de friction à -0,9 Une autre façon d'ajouter une fraction consiste à revenir au nœud d'attribut nommé magasin qui définit la vélocité Si j'ajoute un nœud mathématique vectoriel et que je le mets à l'échelle, je pourrai atténuer la vélocité sur l' ensemble de la simulation C'est comme une friction globale qui s'appliquera à chaque image. Je peux même ajouter une entrée de groupe et l'y brancher, changer son nom en Global Friction. Je vais le mettre à 0,99. La simulation perdra de la vélocité d' un facteur de 1 % à chaque image. Il peut également être utile de modifier le nombre d'étapes de la zone de répétition par rapport à l'étape de modification. C'est pourquoi je vais également le brancher sur un nœud d'entrée de groupe et l'appeler, par exemple, sous-étapes, et je le mettrai à 20. Ce sont les valeurs que j' utilise pour le rendu promotionnel. Enfin, je vais régler ma fréquence d'images à 120, afin d'avoir une fréquence d'images vraiment fluide et ma simulation sera moins sujette aux erreurs. Pour la plage d'images, disons que je veux un rendu de dix secondes, ce qui signifie que ma plage d'images atteindra 1 200 images. Si je clique sur Play, notre simulation fonctionne correctement. Ça y est, tout le monde pour cette vidéo. Techniquement, nous avons tout terminé. Dans la prochaine, je vais vous montrer comment j'ai créé la scène finale et comment en faire le rendu. 16. Aperçu final: Bonjour encore une fois. C'était la dernière fois. Il s'agit de la dernière vidéo de création de notre propre moteur physique dans Blender. Cette vidéo est un résumé, une vue d'ensemble de tout ce que nous avons fait jusqu'à présent. La première chose par laquelle je vais commencer dans cette vidéo, c'est notre notaire, car actuellement c' est un véritable gâchis. Si vous décidez de revenir à ce projet à l'avenir, vous vous perdrez probablement dans le C de tous ces différents nœuds. C'est pourquoi je vais commencer par organiser et étiqueter le notaire, puis je passerai au résumé. OK, bon retour sur Blender, et c'est tout ce que je n'ai pas essayé, et honnêtement c'est un gâchis. Je vais appuyer sur la barre d'espace de contrôle pour maximiser cet éditeur. Comme vous pouvez le constater, il existe de nombreux nœuds, et il sera particulièrement difficile de comprendre ce qui se passe à l'avenir, il sera particulièrement difficile de comprendre ce qui se passe à car nous n'avons pas étiqueté notre note « essayer ». Ce que nous allons faire dans cette vidéo, comme je l'ai mentionné, c'est tout d' abord de commencer par organiser notre arbre de notes. Je vais aller au début de la note, essayer. Je vais sélectionner tous ces nœuds, appuyer sur Ctrl G pour créer une étiquette autour d'eux, appuyer sur F deux pour un nom, et appelons-le, par exemple, condition initiale. Une fois notre condition initiale atteinte, nous entrons dans la zone de simulation. Cette géométrie du joint est responsable de l'ajout de points au fil du temps. Ensuite, nous définissons l'accélération à l'aide de cet attribut nommé, et elle est liée à l' échelle et à ce nœud vectoriel. Assurez-vous de sélectionner les trois d'entre eux. Appuyez sur Ctrl G, F deux pour un nom, et appelons-les accélération. Ensuite, vous aurez l' attribut nommé magasin chargé de définir la vélocité. Déplaçons-le ici. C'est la même chose. Mettons tous ces nœuds les uns sur les autres comme ceci en les empilant Sélectionnez tous ces nœuds, contrôlez G et F deux pour un nom, et appelons-le vélocité, car nous définissons la vélocité à l' aide de ces nœuds. Ensuite, nous mettons à jour la position en utilisant le nœud de position défini, donc empilez les nœuds les uns sur les autres. Sélectionnez-les, contrôlez G, F deux, et appelons-les mise à jour de position. Ensuite, nous entrons dans la zone de répétition, qui est chargée compiler les différentes contraintes Mettons ce nœud par ici. En fait, je vais le déplacer vers le haut, mais essayons juste de trouver une solution à tout ce gâchis ici. En fait, pour faciliter l'ensemble du processus et avoir plus d'espace, je vais commencer à organiser ces nœuds dès la fin. Je vais avoir ces nœuds chargés de transformer les points en sphères Je vais donc tous les sélectionner, Control G pour créer une étiquette, F deux pour un nom, et appelons-le, par exemple, instancer Déplacez-les vers l'arrière. Déplacez-le également en arrière. Moins j'ai de contraintes ici, c'est la contrainte pour le mur arrière. Sélectionnons-le entièrement, qui devrait être l'ensemble de ces nœuds. Organisons-les. Tout d'abord, vous aurez ces nœuds au-dessus. Je vais prendre le contrôle G, et voici mon état. Organisons ces nœuds ici. Quelque chose comme ça. Peut-être que tu travailleras. Ensuite, sélectionnez tous ces nœuds, Control G, F deux pour un nom, et appelons-le «   back wall strant Ensuite, vous aurez ceci. Faites la même chose, sélectionnez-les, contrôlez G et F deux, et appelons-le condition. Ensuite, je vais déplacer ces nœuds ici. Celui-ci ici, ici, ceux-là. Sélectionnez-les tous. Contrôlez G, F deux pour un nom, et appelons-les contrainte du mur frontal. Passons maintenant à la contrainte du mur de gauche, tous ces nœuds, sélectionnez ces deux conditions de contrôle G F. Ensuite, c'est ici, celui-ci ici et celui-ci ici. Sélectionnez l'arbre de notes complet, contrôle G, F deux, mur gauche, contrainte. Passons maintenant à la contrainte du mur droit, contrôle G, condition F deux, déplacez ces nœuds ici. Pareil pour celui-ci et celui-ci, alors comme ça. Ensuite, sélectionnez-les tous, contrôlez G, F deux, contrainte du mur droit. Enfin, la contrainte du sol, savoir quels sont ces nœuds. Nous allons faire la même chose. Sélectionnez les deux conditions de contrôle G, F. Déplacez ceux-ci ici, pour la position, pour la vélocité, désolé, et sélectionnez-les tous. Contrainte Control G F à deux étages. Ce sont les différentes contraintes, et enfin, vous aurez le système de collision. Essayons de trouver un moyen d'organiser tout cela. Je vais tous les sélectionner et tout déplacer vers le bas. Je pense que ce sera mieux. Mettons celui-ci ici et déplaçons peut-être la zone p et tous ces nœuds légèrement vers la gauche, puis sélectionnons tous ces Control G F deux, et cela s'appelle une collision. Voici mon groupe de collision. Et soulevez la contribution de ce groupe, un peu comme ceci. Ce faisant, nous avons organisé notre arborescence de nœuds. À l'avenir, si vous y revenez, vous saurez exactement ce que fait chaque groupe de nœuds. Parce que nous les avons étiquetés. De plus, lorsque vous prenez cette vue aérienne de l' ensemble de l'arborescence des nœuds, vous commencez à comprendre la logique qui sous-tend tout ce que nous avons fait. En guise de résumé final, voici la logique de tout ce que nous avons construit. Tout d'abord, nous commençons par définir les conditions initiales, nombre de points dont nous disposons, moment où nous voulons générer des points, etc. Ces points entreront plus tard dans la zone de simulation. La première chose que nous faisons ici est de définir l'accélération, puis de définir la vitesse. Ce que nous utilisons tous les deux pour mettre à jour la position de nos points. Une fois que nous avons cette configuration de base, nous pouvons commencer à réfléchir à différentes contraintes. Pour notre moteur physique, il existe deux types de contraintes qui nous intéressent. Le premier est la collision, qui est la collision entre les différentes sphères, puis les différents murs, à savoir le sol, le droit et le mur arrière, et le mur gauche et le mur avant. Et à la fin de l'arbre de notes, nous utilisons cette instance sur le nœud de points pour transformer ces points en une géométrie réelle, qui dans notre cas était une sphère EUV Et pourtant, c'est tout notre moteur physique. Et oui, c'est essentiellement tout pour créer votre propre moteur physique dans Blender. Vous pouvez désormais créer une scène autour de la simulation et la rendre comme vous le souhaitez. De plus, comme l'ombrage et animation dépassent le cadre des partitions, je voulais que le cours reste concis et qu'il ne porte que sur les nœuds de géométrie C'est pourquoi j'ai créé une vidéo gratuite en bonus que vous pouvez regarder, dans laquelle je vous explique étape par étape comment j'ai créé mon rendu. Vous pouvez regarder soit à partir du lien dans la description, soit en vous rendant sur mon site Web. La partie nœud géométrique et la partie rasage sont des disciplines très différentes, et c'est pourquoi il était plus logique de les garder distinctes, car j'adopte des approches différentes pour les enseigner Enfin, merci d' avoir suivi ce cours. J'espère que tu as beaucoup appris. Si vous avez trouvé ce cours utile, veuillez nous laisser un avis positif qui nous aidera à créer de meilleurs cours, et vous pouvez toujours consulter le reste de mes cours ici. Merci beaucoup, je vous verrai ou.