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.