Transkripte
1. Trailer: Hey, sieh dir das an. Diese gesamte Simulation
wurde nur mithilfe von
Geometrieknoten durchgeführt. Und wenn Sie nur
ein wenig über Knoten wissen, wissen
Sie, wie schwierig es sein kann, so etwas zu
erstellen. Die Sache ist die,
Knoten zu verstehen ist schwierig und frustrierend. Aber wenn Sie das nicht tun, werden Sie einen wichtigen Aspekt von
Blender
verpassen , Ihnen
eine neue Welt voller
Möglichkeiten eröffnet Sie
haben wahrscheinlich auch einige
dieser verrückten Node
Crees gesehen und sich gefragt, wie Sie überhaupt
anfangen, das zu tun? Woher weiß ich das?
Weil ich dort war. Ich litt darunter, viele
Antworten auf meine Fragen zu finden. Mit diesem Kurs möchte
ich Ihnen das Erlernen
von Simulationen in Geometrieknoten einfacher
und unterhaltsamer machen. In diesem Kurs lernen
Sie nicht nur, wie
Sie eine
Physiksimulation in Blender erstellen. Sie werden buchstäblich
Ihre eigenen Physik-Engines
innerhalb von Geometrieknoten erstellen . Sie werden etwas über
die realen Lebenskräfte erfahren , die dafür sorgen, dass unsere Welt so
funktioniert, wie sie ist. Sie werden etwas über Geschwindigkeit lernen. Sie lernen etwas über
Beschleunigung, Kollision, Schwerkraft und wie all diese Kräfte miteinander
interagieren. Und mehr. Und
all das wirst du lernen, indem du die Simulation fallender
Bälle
erstellst. Ich weiß, was einige von Ihnen jetzt
vielleicht denken. Hey, Yassine, warum sollte ich mir die Mühe machen eine Simulation fallender
Bälle
zu erstellen Ich möchte lernen, gute Dinge wie
Explosionen zu erzeugen oder zu lernen,
was jeder Glauben Sie mir, das
wäre ein schrecklicher Ansatz. So einfach wie fallende Bälle
mögen wie ein Konzept erscheinen. Sie werden
überrascht sein, wie viele Konzepte Sie lernen werden, wenn Sie
einfach die Simulation erstellen. Was macht es zur
perfekten Übung? Gut in Simulationen zu sein,
heißt gut in Physik zu sein. Und dieser Kurs wird die
Lücke zwischen beiden schließen und Ihnen
diese Tür öffnen. Wenn Sie also
daran interessiert sind,
Simulationen mit
Geometrieknoten in Blender zu lernen , ist
dieser Kurs genau das
Richtige für Sie, und ich kann es kaum erwarten Sie auf der
anderen Seite
zu sehen. Bitte.
2. Wiederholungszonen: Sich wiederholende Zonen. In den
letzten Versionen von Blender wurde
ein neues Konzept
eingeführt, das Zonen wiederholt. Dies ist der Standardwürfel.
Löschen Sie ihn, weil Sie müssen, und ich füge eine Kugel hinzu. Wenn ich den
Geometrieknoteneditor öffne, erstelle ich einen neuen Baum und nenne ihn zum
Beispiel Simulation. Wenn Sie die Dienstprogramme hinzufügen, haben
Sie die Möglichkeit, Zonen
zu wiederholen. Wie Sie sehen können, werden
diese beiden Knoten mit
dieser Box um sie herum stehen. Wiederholungszonen sind eine
Möglichkeit, Blender anzuweisen, bestimmte Operationen
mehrmals zu wiederholen. Was zum Beispiel aus
dieser Gruppeneingabe herauskommt, ist meine ursprüngliche Geometrie,
die Kugel. Ich habe auch meine Gruppenausgabe, also die Geometrie, die
ich am Ende haben werde. Ich werde die
Wiederholungszone zwischen ihnen so einbauen. Ich werde auch einen weiteren
Knoten namens set position hinzufügen, dem ich
die Position eines Objekts ändern kann. Shift A, legt die Position fest und ich setze ihn
in die Wiederholungszone ein. Nehmen wir an, ich verschiebe die Kugel um 1 Meter auf der X-Achse, und genau das habe ich
, wenn ich hier eine eintippe. Nehmen wir nun an, ich möchte
diesen Vorgang zehnmal wiederholen. Natürlich kann es so
einfach sein, hier zehn einzugeben,
aber stellen Sie sich vor, Sie haben
einen größeren Knotenbaum. In dieser Situation müssen
Sie jeden
einzelnen Wert mit zehn
multiplizieren, was mühsam sein kann Aus diesem Grund haben
Sie im ersten
Knoten der Wiederholungszone diese Zahl
mit der Bezeichnung Iterationen,
die angibt, wie
oft
Blender berechnen soll , was sich
innerhalb der Wiederholungszone Wenn ich hier zehn eintippe, führt
Blender zehnmal aus,
was sich innerhalb dieser Wiederholungszone Wenn wir also zusammenfassen,
was sich wiederholende Zonen sind, sind
sich wiederholende Zonen eine
Möglichkeit, Blender anzuweisen, bestimmte Operationen
eine bestimmte Anzahl von Malen zu wiederholen. So einfach ist das.
Was ist nun mit Simulationszonen?
3. Simulationszonen: Simulationszonen. Simulationszonen haben
ein ähnliches Konzept wie die sich wiederholenden Zonen. Es gibt eine Möglichkeit,
bestimmte Operationen
mehrfach auszuführen . Der einzige Unterschied zwischen
Simulationszonen und sich wiederholenden Zonen besteht darin, dass
Sie
in den Wiederholungszonen angeben, wie
oft
Blender diese
verschiedenen Operationen kompilieren soll . In der Zwischenzeit kompiliert
Blender in den
Simulationszonen alle
Operationen in jedem Frame. Wenn ich eine Simulation hinzufüge, habe ich eine Simulationszone. Wie Sie sehen können, ist sie der Wiederholungszone ziemlich
ähnlich, außer dass sie nicht den Iterationswert
hat Hat stattdessen Dilta-Zeit. Wenn ich nun dieselbe Operation mit
der eingestellten Position innerhalb
der Simulationszone
dupliziere , den Gruppeneingang an
den Simulationseingang und
den Simulationsausgang an
den Gruppenausgang
anschließe den Simulationsausgang an
den , um das Endergebnis zu
sehen, passiert zunächst
nichts Aber wenn ich die
Timeline öffne und auf Play drücke, wirst
du sehen, wie sich die Kugel bewegt. Jetzt führt Blender
die Operationen innerhalb der Simulationszonen
in jedem Frame aus. Bei Bild eins
bewegt Blender die Kugel um 1 Meter und bei Frame zehn bewegt die Kugel um 10 Meter.
So einfach ist das. Nun ist es wichtig zu
beachten, dass Blender die Simulation nicht zehnmal
ausführt, wenn sie sich bei Frame zehn befindet. Das wird eine
Menge Computerressourcen benötigen. Es ist eher so, als würde Blender
die Ergebnisse mit
jedem durchgehenden Frame akkumulieren die Ergebnisse mit
jedem durchgehenden Frame Bei Frame eins bewegt
Blender den Würfel beispielsweise um
1 Meter, bewegt
Blender den Würfel indem er
die Simulation einmal ausführt. Bei Frame zwei bewegt Blender
den Würfel ebenfalls um 1 Meter, basierend auf
der vorherigen Position. Blender führt die
Simulation nur einmal aus, und die Startposition
der Simulation ist das Ergebnis
des vorherigen Frames. Ich hoffe, das ergibt Sinn. Zusammenfassend können Sie sich
Simulationszonen nur als
eine sich wiederholende Zone vorstellen , in
der sich die Anzahl der Iterationen bei jedem Frame
ändert Wenn ich einen
Knoten namens Scene Time hinzufüge, gibt mir
dieser Frame-Socket sogar gibt mir
dieser Frame-Socket die Nummer des Frames, auf
dem ich
mich gerade Bei Frame eins
wird es eins ausgeben und bei Frame 37 wird
es 37 ausgeben. Wenn ich zur
Wiederholungszone zurückkehre und
den Frame
in die Iterationen einfüge, bedeutet
das, dass die Anzahl der
Iterationen der Nummer des Frames folgt, auf dem ich gerade bin Wenn ich auf Play drücke, erhalte ich dasselbe Ergebnis wie in
der Simulationszone Sie können sich
Simulationszonen als
eine sich wiederholende Zone vorstellen , bei der die Szenenzeit
in die Iterationen eingebunden ist Der Unterschied zwischen sich
wiederholenden Zonen und
Simulationszonen
sollte jetzt deutlich sein wiederholenden Zonen und
Simulationszonen sich wiederholenden Zonen können
Sie bestimmte Operationen
manuell wiederholen , indem Sie angeben wie oft Sie
sie wiederholen möchten. In der Zwischenzeit tun
Simulationszonen
dies automatisch
bei jedem Frame. Jetzt, wo all
das geklärt ist, können wir anfangen, über Simulationen zu sprechen.
4. Was ist eine Simulation: Was ist eine Simulation? Ich habe diese gute Definition
dessen gefunden, was eine Simulation ist. Eine Simulation ist eine Methode zur Nachahmung eines realen
Prozesses im Laufe der Zeit. Sie entwickelt sich weiter und erstellt ein Modell , das die wichtigsten
Merkmale,
Verhaltensweisen und Funktionen
des Prozesses oder Systems darstellt ,
Verhaltensweisen und Funktionen
des Prozesses oder Wenn ich zum Beispiel
einen Ball habe und ihn herunterfallen lasse, eine Simulation
ein Programm, das vorhersagt,
was passieren wird Ich gebe dem Programm
bestimmte Eingaben, wie groß der Ball ist, wie hoch er vom Boden steht, wie schwer er ist, wie stark die Schwerkraft ihn nach unten
zieht. Und auf der Grundlage dieser Eingaben wird
das Programm versuchen, vorherzusagen, was passieren wird. Wenn wir also eine
physikalische Simulation in Blender erstellen wollen, müssen
wir uns überlegen, wie wir die Realität in Blender
nachbilden können Das heißt, wir müssen an
die realen Lebenskräfte denken , die
es unserer Welt ermöglichen, so zu
funktionieren, wie sie ist Der Schlüssel dazu sind zwei Kräfte, Geschwindigkeit und Beschleunigung, und wir werden
beide erklären. Jetzt fangen wir an, mit dem spaßigen Teil
anzufangen. Im nächsten Video werden wir
etwas über Geschwindigkeit lernen.
5. Was ist Velocity: Was ist Geschwindigkeit? Geschwindigkeit ist
eine physikalische Vektorgröße , die die Geschwindigkeit beschreibt, mit
der ein Objekt seine Position
ändert Einfach ausgedrückt ist Geschwindigkeit, wie schnell
sich etwas bewegt Wir bezeichnen
es allgemein als Geschwindigkeit. Ich möchte, dass Sie
bedenken, dass wir uns Geschwindigkeit nicht vorstellen
können, ohne den Faktor
Zeit zu
berücksichtigen, da
die Geschwindigkeit am Ende des Tages von
der innerhalb
eines bestimmten Zeitraums zurückgelegten Entfernung abhängt . Wir können nicht sagen, dass die Geschwindigkeit
des Autos 100 Kilometer oder
100 Meilen beträgt . Wir müssen angeben,
über welche Zeiteinheit wir sprechen? Sind es 100 Kilometer/Stunde
pro Minute pro Sekunde? Es gibt einen riesigen Unterschied. In unserer kleinen Simulation bewegt sich
diese Kugel mit einer
Geschwindigkeit von 1 Meter pro Bild, und das ist ihre Geschwindigkeit, 1 Meter pro Bild. Oder da meine Bildrate 24 ist, bedeutet
das, dass sich die Kugel 24 Meter/Sekunde
bewegt Wir können sagen, dass ihre Geschwindigkeit 24 Meter/Sekunde
oder 14 40 Meter/Minute oder 86.400 Meter/Stunde
beträgt oder 14 40 Meter/Minute oder 86.400 Meter/Stunde Du verstehst die Idee.
Das ist also Geschwindigkeit. Jetzt müssen wir
über Beschleunigung sprechen.
6. Was ist Beschleunigung: Was ist Beschleunigung? Geschwindigkeit ist die Geschwindigkeit der Positionsänderung
im Laufe der Zeit? Beschleunigung ist die
Änderungsrate der
Geschwindigkeit oder Geschwindigkeit im Laufe der Zeit? Ein Auto beschleunigt, wenn
seine Geschwindigkeit zunimmt. Die Beschleunigung stellt
die Geschwindigkeitsänderungen dar. Wie bei der Geschwindigkeit können wir auch von Beschleunigung
an sich
sprechen , ohne
den Faktor Zeit zu berücksichtigen. Wir können sagen, dass dieses Auto einer
Geschwindigkeit von 10 Metern
beschleunigt Wir müssen angeben, über welche
Zeiteinheit wir sprechen? Beschleunigt es mit einer Geschwindigkeit von 10 Metern/Sekunde pro
Minute Das ist ein großer Unterschied. In dem kleinen System, das
wir in Blender gebaut haben, bewegt sich
die Kugel mit einer
Geschwindigkeit von 1 Meter pro Bild, und das ist ihre Geschwindigkeit. Aber sie beschleunigt und beschleunigt
nicht,
was bedeutet, dass die
Beschleunigung Null ist Im wirklichen Leben nehmen die
Geschwindigkeiten von Objekten aufgrund unterschiedlicher Kräfte
mit der Zeit zu
und ab aufgrund unterschiedlicher Kräfte
mit der Zeit Also, wie können wir solche Dinge
programmieren Blender . Bevor ich
erkläre, wie das möchte
ich die
Simulation ein wenig ändern. Ich werde die
Gruppeneingabe löschen und stattdessen einen Punktknoten hinzufügen. Es ist wichtig zu erwähnen
, dass ein Punkt in Blender
nur ein Datencontainer ist , den wir später durch andere Objekte
ersetzen
können. Deshalb
verwenden wir es, weil
es später eine enorme
Flexibilität bietet. Ich werde die
Simulation so ändern, eine Fallpunktsimulation wird, indem die 0,5
Meter in der Luft
verschiebe, das wäre
also meine
Ausgangsposition. Da ich möchte, dass der
Punkt fällt, muss
ich den
eingestellten Positionsknoten aktualisieren. Anstatt mich auf der X-Achse zu bewegen, muss
ich Blender mitteilen, dass wir uns auf der Z-Achse bewegen
werden. Ich setze die X-Achse auf Null und auf die Z-Achse schreibe
ich zum
Beispiel 0,1 Meter. Wenn ich auf Play drücke, werden Sie feststellen,
dass sich der Ball nach oben und
nicht nach unten bewegt . Das
liegt daran, dass Blender den Ball um 10 Meter nach oben
bewegt. Wenn wir es also nach unten bewegen wollen, müssen
wir
es auf -0,1 Meter ändern Wenn ich jetzt auf Play drücke, werden Sie feststellen, dass der Ball langsam nach unten
fällt Jetzt können wir
darüber nachdenken, wie die Beschleunigung
in unserem System implementieren können. Um zu verstehen, was
wir tun werden, müssen wir zur
Definition von Beschleunigung zurückkehren. Beschleunigung ist die
Änderung der Geschwindigkeit eines Objekts. Ein fallendes Objekt beschleunigt
sich,
was bedeutet, dass seine
Geschwindigkeit allmählich
zunimmt , je mehr Zeit
es mit dem Fallen verbringt Mit anderen Worten,
wir müssen einen
Weg finden , Blender zu sagen: Hey,
Blender, wir wollen, dass du
die Geschwindigkeit mit
jedem Moment erhöhst die Geschwindigkeit mit
jedem Moment erhöhst zum Beispiel
bei Bild eins Bewegen Sie diesen Punkt zum Beispiel
bei Bild eins um
10 Meter nach unten. Verschieben Sie diesen Punkt in Frame 2
um 15 Meter nach unten. Es wird bei minus
020 und 5 Metern liegen. Verschieben Sie diesen
Punkt bei Frame 3 um 2 Meter nach unten. Er wird bei -0,45 Metern liegen. Der Schlüssel zur Beschleunigung besteht
darin, die
zurückgelegte Strecke mit
jedem Bild größer und
größer zu machen . Denk darüber nach. Wenn sich der Ball in jedem Frame um die
gleiche Entfernung bewegt, haben
Sie eine konstante Geschwindigkeit. Aber wenn er beschleunigt
oder abbremst, bedeutet
das, dass die
Distanz, die mit jedem Frame zurückgelegt wird, entweder
größer oder Wenn die Entfernung größer ist, bedeutet
das, dass sie sich beschleunigt, wenn die Entfernung
kleiner wird, bedeutet das, dass
sie Die Lösung, um die
Beschleunigung in unserem
System zu implementieren , besteht darin,
einen Weg zu finden , Blender anzuweisen,
diesen Wert mit der
Zeit entweder zu erhöhen oder zu verringern Um das zu tun, gibt es ein wichtiges Konzept, das
Sie verstehen müssen. Welches sind Attribute. Darüber werden wir im nächsten Video
sprechen.
7. Was ist ein Attribut: Was ist ein Attribut?
Wenn Sie im Blender-Handbuch nachschauen,
was ein Attribut ist, finden
Sie die
folgende Definition. Ein Attribut ist ein
allgemeiner Begriff zur Beschreibung Daten, die pro Element
in einem Geometriedatenblock gespeichert sind. Ich möchte, dass du so
darüber nachdenkst. Stellen Sie sich eine Drei-D-Geometrie vor. Diese Geometrie kann so
einfach sein wie ein Punkt wie in unserem Beispiel oder jedes
andere Drei-D-Objekt. Attribute sind
an das Drei-D-Objekt angehängte Daten, die bestimmte
Eigenschaften
dieses Drei-D-Objekts
definieren . Wenn ich zum Beispiel zu meinem
Geometrieknoten-Workspace
und von der Tabelle aus springe , springe
ich zum Punkt, weil die einzige Geometrie, die ich
momentan habe, der Punkt ist Hier können Sie
all die verschiedenen Attribute
sehen , die mit dieser Geometrie verknüpft Zuallererst
haben Sie den Index. In diesem Fall ist er Null. Aber wenn ich die
Anzahl der Punkte
beispielsweise auf fünf erhöhe , hat
jeder Punkt einen Index. Die Indexnummer
ist ein Attribut. Im Fall des Index ist das Attribut
die Zahl, die sich auf den Index
jedes Punktes bezieht. Sie haben auch das
Positionsattribut , das die Position
dieses bestimmten Punktes definiert. Sie haben auch den
Radius dieses Punktes. Das ist auch ein anderes Attribut. Attribute sind wie
ein Personalausweis, der die Eigenschaften
eines Elements in Blender
definiert. Aus diesem Grund stellt man sich Attribute, wie gesagt, am besten als einen Datenblock vor, der an das Drei-D-Objekt
angehängt
ist der an das Drei-D-Objekt
angehängt bestimmte
Eigenschaften
dieses Drei-D-Objekts definiert . Nun, das sind die Attribute , die standardmäßig
in diesem Punkt enthalten sind. Das Schöne ist, dass Blender es uns ermöglicht,
unsere eigenen Attribute zu erstellen. Wenn ich Attribute hinzufüge, benannte Attribute speichere, habe ich
diesen Knoten, ich direkt
nach der Simulationseingabe anschließe. Der Knoten mit dem Namen des
Attributs speichern
ermöglicht es mir,
meine eigenen Attribute zu erstellen. Ich kann damit beginnen, den Typ
anzugeben. In unserem Fall sind Geschwindigkeit und
Beschleunigung beide Vektoren. Deshalb werde ich
den Datentyp von
Float auf Vector ändern . Als Nächstes gebe ich
diesem Attribut einen Namen. Sie können es nennen, wie es für Sie Sinn
macht, aber um alles klar zu halten, nenne
ich es Geschwindigkeit. Wenn ich jetzt
zur Tabelle zurückkehre, werden
Sie feststellen, dass wir jetzt
ein weiteres Attribut haben , das
als Geschwindigkeit bezeichnet wird Wenn ich das
Attribut mit dem Namen speichern auswähle und auf „Leer schalten“ klicke, stelle ich
fest, dass diese Eigenschaft aus dem
Tabellenkalkulationseditor
verschwindet aus dem
Tabellenkalkulationseditor
verschwindet Ich hoffe, dass Sie jetzt zumindest
eine Vorstellung davon haben , was ein Attribut ist Es ist ein Datenblock, der
an ein Drei-D-Objekt angehängt ist. Aber Sie fragen sich vielleicht, wie das nützlich sein
soll? Nun, da wir Geschwindigkeit
als Attribut haben, können
wir damit beginnen, ein
paar coole Operationen
damit durchzuführen wie zum Beispiel es
bei jedem Frame zu ändern. Denn denken Sie daran,
dass es unser Ziel ist,
die Geschwindigkeit mit der Zeit entweder zu - oder abzunehmen, wodurch wir beschleunigt werden. In unserem aktuellen Knotenbaum ist
die Geschwindigkeit konstant. Wenn wir daran denken, was bei jedem Frame
passiert, ändert
Blender die
Position dieses Punktes um den angegebenen Betrag
des festgelegten Positionsknotens. Wie Sie sehen können, handelt es sich bei
diesem Offset-Socket auch um einen Vektor, da er drei Werte hat, und er hat auch den
rautenvioletten Sockel. Technisch gesehen, wenn wir genauer sein
wollen, stellt
dieser Offset-Socket die Änderungsrate
bei jedem Frame dar, was wir bereits
erwähnt haben, nämlich die Geschwindigkeit. Ich kann einfach einen Knoten
namens Vector hinzufügen und
ihn mit dem Offset verbinden. Ich habe nichts Ausgefallenes gemacht. Ich habe gerade den
Offset durch diesen Vektor ersetzt. Wenn ich -0.1 auf die
Z-Achse des Vektorknotens schreibe und auf Play
drücke, erhalte ich genau
das gleiche Ergebnis Dieser Vektorknoten
steht gerade für Geschwindigkeit. Um noch weiter zu gehen, werde
ich
diesen Vektorknoten löschen
und einen Knoten namens benanntes Attribut hinzufügen, es mir ermöglicht
, ein bestimmtes Attribut
aufzurufen Das Attribut, das ich
aufrufen möchte, ist ein Vektor, und sein Name ist Geschwindigkeit Dieses Geschwindigkeitsattribut, das
wir aufrufen, ist genau
dasselbe Attribut, das wir mithilfe des Attributknotens mit dem
Namen des Speichers
erstellt haben mithilfe des Attributknotens mit dem
Namen des Speichers
erstellt Was ist die Natur
dieses Geschwindigkeitsattributs? Es ist ein Vektor, der der genauen Natur
des Offset-Sockets entspricht, sodass ich das
benannte Attribut
in den
Offset-Socket einfügen kann . Wenn ich auf Play drücke, passiert
nichts, weil dieser
Geschwindigkeitsvektor im
Grunde nur aus Nullen besteht . Woher weiß ich das? Weil
wir im Attribut
namens Store Named die Werte
dieses Geschwindigkeitsvektors nicht spezifiziert haben. Wenn ich -0,1 auf die
Z-Achse schreibe und auf Play drücke, bekommst
du
genau das Gleiche wie zuvor Hier ist die Logik dessen
, was passiert. Wir haben einen Vektor erstellt, den
wir Geschwindigkeit genannt haben, und er hat die folgenden Werte. Dann können
wir in unserem Knotenbaum den von uns
erstellten Vektor
aufrufen oder aufrufen und ihn
an mehreren Stellen verwenden Dieser benannte Attributknoten
sucht also nach einem Vektor
namens Geschwindigkeit, durch diesen
Speicher mit dem Namen Attributknoten definiert wird Es ist, als hätten wir einen Vektor erstellt Jetzt verwenden wir ihn
an mehreren Stellen im Notizbaum. Wenn ich in Zukunft den Velocity-Vektor
ändern möchte, muss ich nur
die Werte im Attribut mit dem Namen
speichern ändern . Diese Änderung
wird sich auf
den gesamten Notizbaum auswirken, Diese Änderung
wird sich da ich den
benannten Attributknoten
überall in meinem Notizbaum verwenden
werde überall in meinem Notizbaum Nachdem wir nun
unseren Notizbaum ein wenig geändert und
das Velocity-Attribut erstellt haben, werden wir
im nächsten Video das
Acceleration-Attribut erstellen
8. Das Beschleunigungsattribut: Beschleunigungsattribut. Wie ich bereits erwähnt habe, ist
Beschleunigung die
Änderung der Geschwindigkeit. Wenn wir also
Beschleunigung in unserem System implementieren wollen, müssen
wir einen Weg finden, die Geschwindigkeit mit der Zeit
zu ändern. Wir wollen Blender
anweisen, die Änderungsrate zu erhöhen. Mit anderen Worten, wir wollen
die Entfernung, die der Punkt von
Bild zu Bild zurücklegt, vergrößern. Bei Frame Null liegt
der Punkt beispielsweise bei 0,0. Schieben Sie
ihn bei Frame 1 um 10 Meter nach unten. Es wird bei minus 10 Metern sein. Schieben Sie es dann um
Null, 15 Meter nach unten, so dass es bei
minus 020 5 Metern sein wird, und schieben Sie es dann 2 Meter um
Null Es wird also bei minus
Null sein, 45 Meter. Auf diese Weise nimmt, wie Sie sehen können, die Entfernung, die der Punkt mit jedem Moment zurücklegt,
allmählich zu, was bedeutet, dass er beschleunigt wird Wie können wir also so
etwas in Knoten in Blender programmieren? Nun, das ist einfach. Also hier haben wir das letzte Mal
aufgehört. Wir haben dieses
Speicherattribut, das
ein Attribut namens Geschwindigkeit definiert , das diese Werte hat, und wir verwenden später dieses
Geschwindigkeitsattribut oder diesen
Geschwindigkeitsvektor genau hier. Wir rufen es von diesem Knoten aus auf
und verwenden es, um die Position zu
aktualisieren, und das gibt
uns eine konstante Geschwindigkeit. Wir wollen, wie gesagt, dafür sorgen,
dass dieser Geschwindigkeitsvektor seine Werte mit der Zeit
erhöht. Einige von Ihnen könnten vorschlagen
, dass ich
diese Eigenschaft hier mit einem Keyframe versehen und ein paar Keyframes hinzufügen kann, damit ich
diesen Wert mit der Zeit animieren Und das ist tatsächlich
ein praktikabler Ansatz. Wir wollen
eine Physik-Engine bauen, die sich um alles
kümmern kann. Ich werde etwas tun, das
zunächst etwas
kontraintuitiv klingt ,
aber ich werde es erklären. Ich werde ein
benanntes Attribut hinzufügen. Wie Sie sich erinnern, ermöglicht mir dieser
Knoten, ein bestimmtes
Attribut, das ich erstellt habe,
aufzurufen oder aufzurufen In diesem Fall rufe ich
einen Vektor auf , der Geschwindigkeit ist Es ist genau derselbe Vektor, den
dieser Knoten erzeugt. Es ist dasselbe Attribut, und ich werde
es in den Wert einfügen. Wie gesagt, das
klingt vielleicht kontraintuitiv. Im Grunde definiert dieser Knoten
also eine Eigenschaft namens Geschwindigkeit, die diesen Wert
hat. In diesen Wert füge ich
ein Attribut ein, das Velocity genannt
wird Es ist buchstäblich
dasselbe Attribut. Es ist wie das Meme
von dem Typen, der
das Wasser in sich selbst gießt ,
während er im Pool ist Sie können sich wahrscheinlich
vorstellen, dass der Blender den Notizbaum
von links nach rechts
liest, also beginnt er
mit den Punkten betritt
dann die Simulationszone Speichern Sie das benannte Attribut,
und für jeden Knoten beginnt
es von
oben nach unten. Zuerst
liest es den Vektorpunkt, dann liest es die Geometrie, dann diese Auswahl und
dann erstellt es eine Eigenschaft namens Geschwindigkeit oder ein Attribut namens Geschwindigkeit. Für den Wert habe ich
die Geschwindigkeit eingegeben, und wann immer Sie
ein Attribut in den Knoten einfügen, der das Attribut
erstellt, nimmt
Blender den Wert Null an Deshalb passiert
nichts, wenn ich jetzt die
Leertaste drücke , um auf Play Der Punkt wird
an der gleichen Stelle bleiben,
denn diese Verbindung, die
ich hier gemacht habe, Attribut
Velocity in
das Attribut mit dem
Namen des Speichers einzufügen , das
es definiert, führt zu Null wird also nichts passieren. Aber
das wirklich Schöne ist jetzt, wenn ich Shift A hinzufüge und
nach Vektormathematik suche
und es direkt hinter das benannte Attribut einfüge, nimmt Blender
jetzt
den Geschwindigkeitsvektor
, der in unserer
Situation eine Null ist, wir fügen ihm einen Wert hinzu, den
ich hier spezifizieren werde, und das ist mein
neuer Geschwindigkeitswert oder
mein neuer Geschwindigkeitsvektor , den
ich später verwenden werde, um die Position zu
aktualisieren. Nehmen wir zum
Beispiel an, ich tippe -0.1. Versuche jetzt darüber nachzudenken,
was passieren wird. Bei Frame Zero wird natürlich
nichts passieren. Ich öffne meine Timeline
und um
meinen Arbeitsbereich besser zu organisieren, werde
ich
das Ganze zusammenklappen, und ich werde gleich hier
einen weiteren Editor hinzufügen, und ich werde es
auf das Drei-D-Viewport umstellen, und lassen Sie es uns wie folgt
herunterfahren Dadurch habe ich hier in meiner Notiz mehr
Platz, versuche es mal. Ich habe hier auf der Timeline, und ich kann mich direkt hier
in meinem 3-D-Viewport bewegen Und da wir
momentan nur an zwei Dimensionen arbeiten , drücke
ich auf dem Ziffernblock auf eine , um zur Vorderansicht
zu springen Das wird also mein
Arbeitsbereich sein. Ich denke, das ist besser. Vielleicht ziehe ich das sogar ein
bisschen
, damit ich mehr
Platz in meiner Notiz habe, versuche es mal. Wie gesagt, im Moment bei Frame
Null wird nichts passieren. Der Punkt befindet sich an der
Startposition von Null oder tatsächlich 5 Metern, aber wir gehen davon aus, dass er Null ist. Bei Bild eins
nimmt Blender den Geschwindigkeitsvektor
, der
den Wert Null hat, addiert ihn um -0,1, und das ist
mein Geschwindigkeitsvektor wir später verwenden
, um die Position zu
aktualisieren Jetzt, bei Bild eins, verschiebt
Blender diesen
Punkt um 10 Meter nach unten Schau, bumm. Also das ist 01. Nehmen wir an, Blender
führt den Zyklus bei Bild zwei erneut aus. Aber was ist der aktuelle Wert dieses
Geschwindigkeitsknotens? Ist es Null oder ist es minus 01? Dies ist die wichtige Sache , die Sie beachten müssen, nämlich dass dieser
Knoten derzeit den Wert
des vorherigen Zustands beibehält. Dieser Knoten enthält derzeit ein Geschwindigkeitsattribut
, das nicht 000 ist. Es ist tatsächlich 00 minus 01. Wenn ich nun minus 01
addiere, wird dieser neue
Geschwindigkeitsvektor, den ich von hier
bekommen werde ,
nicht minus 01 sein. Es wird minus 02 sein,
und du wirst sehen, was passieren wird. Jetzt ist die Entfernung
, die
bei Frame 2 zurückgelegt wird, etwas größer. beim dritten Mal für
Bild Nummer drei Was ist beim dritten Mal für
Bild Nummer drei der Wert dieses? Es ist der vorherige
Geschwindigkeitswert, der minus 02 ist. Jetzt füge ich minus 01 hinzu, also habe ich minus 03, und das ist meine neue Geschwindigkeit , mit der ich die Position
ändern werde. Jetzt wird die Lücke also
größer. Ich bin bei Bild drei.
Bei Bild vier wird
dieser Geschwindigkeitsvektor nicht Null sein. Wie gesagt, es wird minus 03 sein, und wenn ich minus 01 hinzufüge, wird
es bei -0,4 liegen, und
das ist es, was ich verwenden werde, um die Position
zu aktualisieren Bum. Wenn ich jetzt auf Play drücke, wirst
du feststellen, dass der Ball
etwas schneller fällt, je mehr Zeit er mit
dem Fallen verbringt. Lassen Sie mich ein wenig herauszoomen
, um genau zu sehen, was passiert. Und wenn ich auf Play drücke,
wie Sie sehen, bekommen wir
jetzt etwas
, das einem fallenden Ball ähnelt. Der Schlüssel dazu ist dieser kleine
Trick, den wir genau hier gemacht haben. Wir nehmen die Geschwindigkeit
des vorherigen Zustands, fügen ihr einen bestimmten Wert hinzu,
und da es sich bei
jeder Ausführung
der Simulation um einen niedrigen Blender handelt, addieren
wir minus 01 auf der Z-Achse zum vorherigen
Zustand des Geschwindigkeitsvektors. Ich hoffe, das ergibt Sinn. Im Moment ist dieser Vektor, den
ich hier hinzufüge, dieser Vektor eigentlich
der Beschleunigungsvektor. Diese Werte definieren
, um wie viel Blender
die Geschwindigkeit mit jedem Moment
erhöhen soll . Das ist eigentlich Beschleunigung. Da ich möchte, dass
Beschleunigung auch ein Attribut ist, weil ich es später verwenden
werde, füge
ich
jetzt
einen weiteren Knoten hinzu , der als benanntes
Attribut speichern, Shift A, benanntes Attribut
speichern bezeichnet wird, und ich
werde einen Vektor speichern, den ich Beschleunigung nenne und der diese Werte
hat. Und ich werde es genau hier
verwenden, also suche nach einem benannten Attribut. Ich werde nach einem Vektor
suchen, ich gerade erstellt habe und der Beschleunigung
heißt. Wo ist Beschleunigung? Okay? Es ist ein Vektor, der Beschleunigung
genannt wird. Und ich werde es hier anschließen. Nichts wird passieren
, weil diese Beschleunigung Null
ist. Woher weiß ich das? Weil ich in dem Knoten, der ihn definiert, nicht angegeben
habe, welchen Wert dieser Vektor haben
soll. Wenn ich zu
Bild Nummer eins zurückkehre und auf Play drücke,
passiert nichts, weil die
Beschleunigung Null ist. Ich füge nichts hinzu.
Nichts wird sich ändern. Deshalb gebe
ich minus 01 ein. Mm. Und wenn ich jetzt auf Play drücke, bekommst
du genau
dieselbe Animation oder Simulation, die wir gerade hatten. Dieses
Attribut mit dem Namen eines Speichers definiert also einen
Vektor, der als Beschleunigung bezeichnet wird. Und jedes Mal, wenn Blender
die Simulation
ausführt, addieren wir diesen Wert
zur Änderungsrate. Mit anderen Worten, bei jedem Frame oder wann immer Blender die Simulation
ausführt. Um so viel
vergrößert Blender die Entfernung, die
der Punkt zurücklegt. Jedes Mal
erhöht sich die Entfernung um minus 10 Meter. Ich weiß, dass es etwas
verwirrend sein könnte , weil
wir Minus verwenden, aber denken Sie immer daran, dass
der Hauptgrund, warum wir Minus
verwenden, darin besteht, dass
wir herunterfallen. Deshalb brauchen wir
das Minuszeichen. Das ist also unser derzeitiger Notar. Ich hoffe, es macht Sinn. Ich schätze, jetzt haben wir eine
Fallpunktsimulation. Aber tatsächlich gibt
es bei
dieser Simulation ein kleines Problem , das wir im nächsten Video beheben
müssen.
9. Das Problem von Delta-t: Problem von Delta T. Etwas, das
ich bereits erwähnt habe
, ist , dass Simulationen in Blender bei jedem Frame ausgewertet
werden Dies wird zu einem kleinen Problem führen. Unsere aktuelle Bildrate
beträgt 24 Bilder pro Sekunde. Das bedeutet, dass der
Blender
die Simulation 24
Mal in 1 Sekunde ausführt . Ich springe zurück zum Arbeitsbereich
der Geometrieknoten, Punkte. Wenn ich auf Platte drücke, um
die Simulation zwischenzuspeichern , und
dann zu Frame 24 gehe, ist
hier die Position
des Punkts. 00 -25. Nehmen wir an, ich möchte, dass die endgültige
Animation flüssiger ist. Also habe ich beschlossen, die Bildrate auf 60
Bilder pro Sekunde zu Wie oft glaubst
du, wird Blender nach einer Sekunde die Simulation
ausführen? Sie raten richtig, 60 Mal. Wenn ich auf die Platte treffe, um
die Simulation abzufangen und zu Frame 60
übergehe, achte auf die Position
des Punktes. 00 -178. Ich weiß, das könnte verwirrend sein, also um es auf
den Punkt zu bringen, hier ist, was
im wirklichen Leben passiert Stellen Sie sich vor, Sie werfen einen
Ball von einer hohen Stelle. Nehmen wir an, der Ball braucht 3 Sekunden, bis er den Boden
berührt, und Sie haben zwei Kameras, denen eine mit 24 Bildern pro
Sekunde und die andere mit
60 Bildern pro Sekunde aufzeichnet . Wirf den Ball. In 1 Sekunde wird
der Ball auf diesem Level sein. ist wichtig
zu beachten, dass beide Kameras den
Ball an derselben Position erfassen. Der einzige Unterschied besteht darin, dass die 24-FPS-Kamera nur 24 Bilder
aufgenommen hat. Mit anderen Worten, es hat
den Ball in 24
verschiedenen Positionen aufgenommen . In der Zwischenzeit hat die
60-FPS-Kamera 60 Bilder aufgenommen. Mit anderen Worten, es hat
den Ball in 60
verschiedenen Positionen aufgenommen . Das Timing ist immer das Gleiche. Der einzige Unterschied
ist die Bildrate. Was in
Blender passieren sollte, ist Folgendes. Nach 1 Sekunde sollte sich der
Punkt unabhängig
von
der Bildrate an derselben Position befinden. Wie können wir dieses Problem also beheben? Der beste Weg,
die Lösung zu erklären , besteht darin
, etwas zu rechnen. Aber ich verspreche, es wird nicht so kompliziert
sein. Etwas, das ich bereits
erwähnt habe, ist, dass Geschwindigkeit die Geschwindigkeit ist, mit der
sich die Position in der Zeit ändert. Eine Möglichkeit, diese
Aussage in
eine mathematische Funktion zu übersetzen ,
ist wie folgt. V, das ist eine Geschwindigkeit, die Delta P über Delta
T
entspricht . Ich möchte, dass Sie sich
das Wort Delta als Veränderung vorstellen. P steht für Position
und T für Zeit. Wir sagen, Geschwindigkeit ist Delta P, die Änderung der Position. Über Dilta T, die
Veränderung der Zeit. Nun, was ist mit der Beschleunigung? Wie Sie sich erinnern, ist Beschleunigung die Geschwindigkeit, mit der sich die
Geschwindigkeit im Laufe der Zeit ändert. Eine Möglichkeit, dies auch
als Formel zu schreiben, ist die folgende. Beschleunigung A ist
gleich Delta V über
Delta T. Wir sagen, Beschleunigung ist Dilta V, die Geschwindigkeitsänderung, über Dilta T, die Änderungszeit In unserem aktuellen Knotenbaum ist
Delta t eine Variable, die sich
je nach Bildrate ändert Wenn die Bildrate 24 ist, entspricht Delta t 1/24, und wenn die Bildrate 60 ist, dann entspricht Delta T Wir möchten, dass das Timing
unserer Simulation unabhängig
von der
Bildrate gleich auf der Grundlage der ersten Gleichung, Geschwindigkeit gleich Delta
P über Delta T, Kann man auf der Grundlage der ersten Gleichung,
Geschwindigkeit gleich Delta
P über Delta T, schlussfolgern, dass
Delta P gleich Geschwindigkeit multipliziert mit Delta T ist. Basierend
auf der zweiten Gleichung,
A, Beschleunigung gleich
Delta V über Dilta Wir können schlussfolgern, dass Delta V, die Geschwindigkeitsänderung, der Beschleunigung,
multipliziert mit Delta T, der Änderung der Zeit,
entspricht multipliziert mit Delta T, der Änderung der Zeit, Die Mathematik ist wirklich einfach. Alles, was wir
jetzt getan haben, ist,
sowohl die Änderung der Position
als auch die Änderung der Geschwindigkeit
als Funktion von Delta
T auszudrücken sowohl die Änderung der Position
als auch die Änderung der Geschwindigkeit . Dadurch wird Blender die Bildrate
bei der Ausführung der Simulation berücksichtigen . Wie können wir
diese Logik in den
Knotenbaum übersetzen ? Das wird einfach sein. Lassen Sie uns zunächst damit beginnen die
Positionsänderung von Delta P der Geschwindigkeit
multipliziert mit Delta
T entspricht . Welcher Knoten ist
dafür verantwortlich, die Position
des Punktes zu ändern Es ist der Knoten mit der festgelegten Position, und dieser Teil der
Gleichung ist der, den wir berechnen und
in den Offset-Socket eingeben müssen berechnen und
in den Offset-Socket eingeben Im Moment ist es nur
der Geschwindigkeitsvektor. Basierend auf der Gleichung müssen
wir
die Geschwindigkeit mit Delta
T multiplizieren . Sie müssen lediglich einen mathematischen Vektorknoten
hinzufügen, die Operation
auf Multiplikation
umstellen und ihn mit dem Delta T multiplizieren, was Sie
vom ersten Knoten
der Simulationszone erhalten können . Außerdem können Sie die Funktionsweise dieses
Vektor-Mathematikknotens skalieren lassen, und er wird genau das
Gleiche tun. Wir verwenden Multiplikation, wenn wir
es mit zwei Vektoren zu tun haben, aber da die Deltazeit eine einfache Zahl
ist, können
wir sie skalieren. Sie können diesen
Wert immer dann verwenden, wenn Sie einen Vektor
mit einer einzigen Zahl multiplizieren Sie werden in Blender auch
Skalare genannt. Daher der Name Scale
für die Operation. Okay, jetzt machen wir die Änderung der Position
anhand unserer Delta-Zeit wieder wett, die auf
unserer Bildrate basiert. Jetzt müssen wir dasselbe
für die zweite Operation tun . Delta V, die
Geschwindigkeitsänderung entspricht dem
Beschleunigungsvektor
multipliziert mit Delta T. Wo definieren
wir V, die Geschwindigkeitsänderung? Nun, wir definieren die
Geschwindigkeitsänderung mit diesem ersten
gespeicherten Attribut. Derjenige, der für
die Beschleunigung verantwortlich ist. Denken Sie immer daran, dass die Werte wir für den
Beschleunigungsvektor verwenden dafür verantwortlich
sind, wie stark unsere Geschwindigkeit
mit jedem Frame zunimmt. Was ich also tun kann
, ist, einen Vektor
in den Wert dieses
Store-Attributs einzugeben , und Blender
behält standardmäßig die gleichen Werte bei. Die Gleichung Delta
V ist gleich Beschleunigung multipliziert mit Delta T, was wir in den
Werte-Socket des gespeicherten
Attributs eingeben , definiert die
Geschwindigkeit der Geschwindigkeitsänderung, die gleich der Beschleunigung ist,
die dieser Vektorknoten ist,
und wir müssen sie mit
Delta T multiplizieren. Alles
was und wir müssen sie mit
Delta T multiplizieren Sie tun müssen,
ist einen Vektor-Mathematikknoten hinzuzufügen, die Operation auf Skala zu
ändern, und multiplizieren Sie es mit Delta T, das Sie, wie
bereits erwähnt, vom
ersten Knoten
der Simulationszone erhalten können. So können wir die Logik der Gleichungen
umsetzen ,
die ich im Notar
erklärt habe Infolgedessen passt sich
unsere Simulation jetzt an
die Bildrate an und bleibt
unabhängig von der Bildrate konsistent Um sicherzugehen, dass dies der Fall ist, zunächst feststellen, dass die
Animation zu langsam ist,
wenn ich auf Play drücke werden
Sie zunächst feststellen, dass die
Animation zu langsam ist,
wenn ich auf Play drücke. Da unsere Simulation jetzt auf realem Timing und
nicht auf Frame-Nummern
basiert , müssen
wir damit beginnen,
reale Werte
für diese Vektoren zu verwenden. Das ist der Wert der Schwerkraft
im wirklichen Leben. Er ist -9,8 Stellen Sie sicher, dass Sie diesen Wert für
den Beschleunigungsvektor verwenden , da Objekte auf diese Weise beim
Fallen beschleunigen Es ist also immer schön,
die realen
Werte zu verwenden , weil das bedeutet, dass unsere Simulation realistischer sein
wird. Jetzt liegt unsere aktuelle
Bildrate bei 24 FPS. Lassen Sie uns also die Simulation ausführen,
indem wir auf Play klicken. Gehen Sie zu Frame 24
, also 1 Sekunde nach Beginn der Simulation,
und sehen Sie
sich die Position
des Punkts an. Sie liegt bei 0,304. Lassen Sie uns nun die
Bildrate auf 60 FPS ändern, die Simulation erneut
ausführen
und zu Frame 60 übergehen, was auch bedeutet, dass
die Simulation 1 Sekunde dauert, weil wir einfach die Bildrate ändern und die Position
dieses Punkts ablesen, und sie ist bei 0182 Die Werte liegen nahe beieinander, sind
aber nicht identisch Warum ist das so? die Einzelheiten
einzugehen, warum das passiert, müssen Sie nur Folgendes tun: Wann
immer Sie diese Art von
Simulationen in Blender
durchführen, wird
es immer einen Fehler geben Und das liegt an der in Blender
verwendeten
Oiler-Integrationsmethode in Blender
verwendeten
Oiler-Integrationsmethode Ich kann Stunden damit verbringen,
die Oiler-Integrationsmethoden
und all die damit verbundenen Probleme zu erklären die Oiler-Integrationsmethoden und all die damit verbundenen Probleme Aber das wird
zu viel sein, um damit umzugehen. Alles, was Sie
wissen müssen, ist, dass es immer eine gewisse
Fehlerquote geben
wird, mit der wir uns befassen müssen wenn wir diese Art von
Simulationen in Blender durchführen. Außerdem muss ich erwähnen, dass
es andere Möglichkeiten gibt, andere
Integrationsmethoden mithilfe von Knoten
in Blender zu integrieren , aber wir werden fortgeschrittenere Zeug
der Geometrieknoten Und tatsächlich geht es
dabei nicht einmal um Geometrieknoten, sondern um
buchstäblich reine Mathematik Und das ist nicht das
Hauptthema des Kurses. Deshalb opfern wir
etwas Stabilität und akzeptieren der Einfachheit halber einen großen Margenfehler
. Und jetzt, da unsere Simulation unabhängig von der Framerate
ist, müssen
wir dafür sorgen, dass diese
Bälle quasi vom Boden
abprallen, indem wir einige Einschränkungen
einführen, was wir
im nächsten Video tun werden
10. Hinzufügen von Einschränkungen Pt.1: Hinzufügen von Beschränkungen
Teil eins, der Boden. Was wir jetzt sagen, wird im Grunde
für immer untergehen. Wir müssen einen
Weg finden, Blender zu sagen, hey,
Blender, sobald der Punkt den Boden
erreicht hat,
dafür zu sorgen, dass er sich ausgleicht. Das wird eine lustige Übung. Die erste Frage
, die mir in den Sinn kommt, ist, wann das
Thema zur Sprache kommt? Die Antwort ist einfach.
Sobald die Position des Punktes gleich
oder unter Null ist. Wenn ich jetzt zum
Satz zurückkomme, hey, Blender. Sobald unser Punkt das Wort
erreicht hat und
wir wollen, dass er ausgeglichen wird, können
wir ihn in den folgenden
Satz ändern. Hallo, Blender. Sobald die Position unseres Punktes gleich oder kleiner als Null
ist, wollen
wir den Boden
ausgleichen. Jetzt kommt der zweite Teil. Wie können wir es vom Boden
abprallen lassen? Die einfachste Lösung wird
darin bestehen , alle Kräfte umzukehren, die auf unseren
Punkt oder auf unseren Ball einwirken Im Moment führt unsere Simulation
dazu, dass der Punkt nach unten fällt. Alles, was wir tun müssen, ist Blender
zu sagen, dass, sobald der Punkt den Boden erreicht, die Simulation
rückgängig gemacht werden muss. Mit anderen Worten, Geschwindigkeit und Position umkehren
. Um das vollständig zu verstehen, möchte
ich
die Architektur unserer
Simulationsengine erläutern . Wir definieren zunächst
die Beschleunigung. Baum, der zur Definition
der Geschwindigkeit verwendet wird
, mit der wir die Position
aktualisieren. Es ist in gewisser Weise ziemlich systematisch
oder algorithmisch. Es ist ein schrittweiser Prozess. Jetzt teilen wir Blender mit, wenn die Position des
Punktes kleiner als Null ist, kehren wir die Geschwindigkeit um und kehren Sie die Position
des Punktes um. Das wird dazu führen, dass der
Punkt nach oben springt. Es ist, als würden wir
einen Mini-Motor bauen, der
anspringt, sobald die Position
des Punktes kleiner als Null ist Lassen Sie uns all
diese Gedanken in Knoten übersetzen. Der erste Schritt beim Bau unseres Mini-Motors besteht darin, zu wissen
, wann dieser Motor anspringt. Das habe ich mehrmals gesagt. Wenn die Position des
Punktes kleiner als Null ist, füge
ich zunächst
einen Positionsknoten hinzu. Gibt uns die
Position des Punktes,
dann füge ich einen Knoten hinzu, der als separates X Y Z bezeichnet
wird dann füge ich einen Knoten hinzu, der als separates X Y Z bezeichnet , weil wir nur die
Position auf der Z-Achse benötigen, da sie für die
Definition der Position
des Punktes nach oben und unten
verantwortlich ist . Fügen Sie einen Vergleichsknoten hinzu und
setzen Sie ihn auf weniger als Null, und das ist unsere Bedingung. Eine Möglichkeit, die Logik
dieser von uns erstellten Knoten zu lesen ,
ist die folgende. Wenn die Position auf der
Z-Achse kleiner als Null ist, tun Sie etwas. Jetzt werden
wir herausfinden, was passieren
soll, wenn diese
Bedingung erfüllt ist. Das sollte einfach sein, denn
alles, was wir tun müssen, ist, denselben Motor, den wir
gebaut haben, rückwärts
laufen zu lassen, was wir leicht tun können, indem wir ihn
mit minus eins multiplizieren Zuerst müssen wir die Geschwindigkeit
umkehren. Früher ging der Punkt runter, jetzt muss er steigen. Wie können wir die Geschwindigkeit aktualisieren? Einfach. Fügen Sie ein Attribut
mit dem Namen Store hinzu, ändern Sie den Typ in Vector und wir benötigen Geschwindigkeit. Was auch immer wir jetzt
hier schreiben werden, es überschreibt die Werte, die wir zuvor
für den Geschwindigkeitsvektor hatten. Ich füge dann ein benanntes Attribut hinzu. Vektorgeschwindigkeit. Dadurch erhalte ich
den Geschwindigkeitswert aus dem vorherigen Bild, und ich werde
ihn mit minus eins auf
der Z-Achse und eins
auf der X- und Y-Achse multiplizieren , da ich nicht möchte, dass
sie sich ändern, weil Multiplikation mit eins immer zum gleichen Ergebnis
führt Und das stecke ich in den Value-Socket des Attributs
Storm Named Jetzt kehren wir den
Geschwindigkeitsvektor um. Gehen wir zur Aktualisierung
der Position über, sodass der Ball in
die umgekehrte Richtung läuft. Ich füge einen festgelegten Positionsknoten
hinzu, füge einen Positionsknoten
hinzu, füge eine Vektormathematik hinzu und multipliziere ihn mit minus eins auf der Z-Achse. Und einen auf der X- und
Y-Achse und füge diesen direkt
in die Position ein, weil wir die Position direkt nach oben
ändern wollen ,
nicht nur den Offset. Und jetzt ist das unsere
Mini-Engine, die dafür verantwortlich die Simulation
rückgängig zu machen, wenn
der Punkt unter Null fällt Aber im Moment weiß Blender
immer noch nicht, wann die kleine
Engine ausgeführt werden soll, weil wir unsere Knoten,
die die Bedingung definieren, in
den
Auswahl-Socket des
Store-benannten Attributs und
der gesetzten Position
stecken müssen unsere Knoten,
die die Bedingung definieren, in
den
Auswahl-Socket des
Store-benannten Attributs und
der gesetzten Position
stecken den
Auswahl-Socket des
Store-benannten . Also werden
diese beiden Operationen Ändern
der Geschwindigkeit
und zum Ändern der Position nur
ausgeführt, wenn
diese Bedingung erfüllt ist. Wenn ich jetzt auf Play drücke,
merke dir, was passieren wird. Unser Punkt ist, dass wir abprallen, und so können wir
Einschränkungen in unsere Simulation einführen Einschränkungen in unsere Simulation Der Ball wird jetzt für immer
abprallen, aber im wirklichen Leben sollte er langsam Energie
verlieren, bis er das zu umgehen,
müssen Sie Blender anweisen, die
Geschwindigkeit schrittweise zu verringern Sie können das tun, indem Sie
den Geschwindigkeitsvektor erhöhen Anstatt
ihn
also mit minus eins zu multiplizieren, was eine perfekte Reflexion ist, multiplizieren
Sie ihn
beispielsweise mit -0,8 Jetzt
verliert die Simulation
langsam an Dampf , wenn sie den Boden
berührt Bis es aufhört. Die
Art und Weise, wie wir Reibung momentan programmiert haben,
gilt nur , wenn diese
Bedingung erfüllt ist. Sobald der Ball den Boden berührt. Aber im wirklichen Leben sollte
der Ball von Beginn der Simulation an
allmählich
an Geschwindigkeit verlieren . Eine Möglichkeit, das zu umgehen, besteht darin,
einen Vektor-Meth-Knoten hinzuzufügen , ihn maßstabsgetreu
einzustellen
und ihn direkt vor
das im Speicher benannte Attribut einzufügen, und ihn direkt vor
das im Speicher benannte Attribut einzufügen das die Geschwindigkeit
definiert, und
den Wert auf
etwa 0,98 zu setzen den Wert auf
etwa 0,98 zu Jetzt
verliert die Simulation
insgesamt oder bei jedem Frame Energie . Warum? Weil, wie wir wissen, Blender die Simulation in
jedem Frame
kompiliert Für unsere Simulation werde
ich den Skalierungsknoten löschen und in einem zukünftigen Video die
Reibung der Knoten programmieren , die für die
Einschränkungen
verantwortlich Jetzt erstellen wir das
Beschränkungssystem für den Boden. Wir müssen auch
einige Einschränkungen
für die Seitenwände erstellen , und genau das
werden wir im nächsten Video tun.
11. Hinzufügen von Einschränkungen Pt.2: Hinzufügen von Beschränkungen für
zwei Seitenwände. Im vorherigen Video haben wir die Bodenbeschränkung
erstellt, die es dem Ball ermöglicht, vom Boden
abzuprallen In diesem Video werden wir etwas Ähnliches
erstellen. Wir erstellen die Randbedingungen
für die Seitenwände, rechts und links, vorne und hinten. Damit wir alle auf derselben Wellenlänge
sind,
stellen Sie sicher, dass Sie auf
dem Ziffernblock eine Taste drücken , um zur Vorderansicht
zu springen. Wir werden damit beginnen, die Beschränkungen für
die rechte Wand festzulegen. Nehmen wir an, der
Ball soll von
einer imaginären Wand abprallen , die
1 Meter entfernt ist. Rund hier Das Konzept ist dem
, was wir für den Boden gemacht haben, sehr ähnlich . Wir müssen einen Weg finden, Blender
mitzuteilen, dass, wenn der Ball diese imaginäre Wand
berührt, die Simulation
rückgängig gemacht wird Oder um die Analogie mit
der Mini-Engine zu verwenden :
Wir werden
eine kleine Physik-Engine entwickeln , die aktiviert wird, wenn der
Ball die rechte Wand berührt Fangen wir mit der Bedingung an.
Das sollte einfach sein. Der Punkt berührt die Wand. Wenn die Position auf der X-Achse gleich oder mehr als eins
ist. Füge einen Positionsknoten hinzu, um
die Position eines
bestimmten Punktes zu lesen die Position eines
bestimmten Punktes Als Nächstes füge
ich ein separates XYZ Mir geht es nur um die X-Achse, die größer
als eins sein sollte. Ist mein Zustand. Nun gehen wir zu dem über, was
passieren sollte , wenn diese
Bedingung zutrifft. Wir wollen
die Simulation umkehren, also kehren wir zuerst die Geschwindigkeit
und dann die Position um. Anstatt all
diese Knoten von Grund auf neu zu erstellen, kopiere
ich einfach das Setup aus der Bodenbeschränkung und
verbinde es wie folgt. die Geschwindigkeit zu multiplizieren, stellen Sie sicher, dass Sie die
Z-Achse wieder auf eins ändern. Ändern Sie die X-Achse auf minus eins, denn jetzt
arbeiten wir an der X-Achse. Ich werde dasselbe für die Multiplikation
der Position tun. Ich werde die Z-Achse wieder auf eins und die
X-Achse auf minus eins ändern
und außerdem sicherstellen, dass die Bedingung
sowohl
mit dem gespeicherten benannten Attribut
als auch mit der eingestellten Position verbunden wird. Diese Operationen werden nur aktiviert, wenn diese
Bedingung erfüllt ist. Wenn ich jetzt auf Play drücke, fällt
der Ball
direkt nach unten. Ich möchte ihn
leicht nach rechts drücken. Ich gehe direkt nach
dem Punkteknoten, dem ersten Knoten meines Baums, und füge das Attribut Store
Named hinzu. Das ist ein Vektor, und
ich wähle die Geschwindigkeit und rechts, zum Beispiel,
zwei auf der X-Achse. Jetzt beginnt der
Geschwindigkeitsvektor also bei zwei, was bedeutet, dass der Punkt leicht nach rechts verschoben
wird leicht nach rechts verschoben
wird Auf diese Weise können wir
unsere soeben erstellte Wandbeschränkung
testen . Es ist, als hätten wir eine
Anfangsgeschwindigkeit für den Punkt erzeugt, sodass er nicht bei Null beginnt. Wenn ich auf Play drücke, berührt der Punkt
die rechte Wand, aber es verhält sich seltsam Irgendwie springt es auf die
andere Seite. Warum ist das so Nun, wenn wir uns auf
diesen Positionsknoten konzentrieren, werden
Sie feststellen, dass wir ihn
mit minus eins multiplizieren Nehmen wir also hypothetisch an, die Position des Punktes in
einem bestimmten Frame bei 0,9 auf der X-Achse liegt Die Simulation wird
normal
weiterlaufen , da wir die eine Linie nicht
berührt Im nächsten Frame ist die Position
des Balls auf eins,
was bedeutet, dass die
Bedingung jetzt erfüllt ist,
was bedeutet, dass Blender
diese Operationen ausführt , die ihm sagen, dass er die Simulation rückgängig machen
soll. Jetzt sollte sich der Ball also auch
hier bei 0,9 auf der X-Achse befinden. Aber da wir
die Position auf der
X-Achse mit minus eins multiplizieren , springt es auf die andere Seite
auf -0,9 auf der Die Lösung dafür ist einfach. Wir müssen diesen Ball um
zwei Einheiten nach rechts bringen, was wir tun können, indem wir
einen Vektor-Meth-Knoten hinzufügen, ihn auf Hinzufügen
setzen und dann zwei auf der X-Achse
hinzufügen Und wenn ich jetzt auf Play drücke, werden
Sie feststellen, dass der Punkt perfekt
von der rechten Wand
abprallt, und das ist unsere Einschränkung
für die rechte Jetzt erstellen wir die
Beschränkung für die linke Wand. Das sollte einfach sein. Ich
werde die gesamte rechte Wandbeschränkung duplizieren und sie danach wie folgt
verbinden. Die linke Wand ist
die Linie minus eins. Wann
berührt der Ball die linke Wand? Oder die Linie minus eins, wenn die Position gleich
oder kleiner als minus eins ist, ändere
ich meine Bedingung
dahingehend, dass die Position auf der X-Achse
kleiner als minus eins ist. Das ist also mein neuer Zustand. Was passieren sollte, ist, dass
wir die Geschwindigkeit umkehren indem wir sie auf der X-Achse mit
minus eins multiplizieren Also werde ich diese
Knoten so lassen, wie sie sind, und für die eingestellte Position multiplizieren
wir
sie mit minus eins Wir müssen das korrigieren
, indem wir zwei hinzufügen. Im Fall der linken Wand bedeutet das, dass die Kugel
jetzt auf der X-Achse mit
minus eins multipliziert dass die Kugel
jetzt auf der X-Achse mit
minus eins multipliziert wird. Wir müssen sie
also um
zwei Einheiten nach hinten bewegen, was wir leicht tun können,
indem wir zwei subtrahieren Alles, was Sie tun müssen, ist
diesen mathematischen Vektorknoten
von Addieren auf Subtrahieren umzustellen diesen mathematischen Vektorknoten
von Wenn ich jetzt auf Play drücke, werden
Sie sehen, wie unser Punkt sowohl von der rechten als auch
von der linken Wand abprallt, und das ist genau das, was wir wollen Jetzt haben wir die Beschränkung
für die rechte und linke Wand erstellt für die rechte und linke Wand Wir werden genau dasselbe tun nur für die Vorder
- und Rückwand. In unserem 3-D-Viewport betrachten wir jetzt die Vorderansicht,
was bedeutet, dass es sich um die
rechte und linke Wand handelt Wenn ich auf dem Ziffernblock
die Drei drücke, springe
ich zur Seitenansicht, was bedeutet, dass das jetzt die
Vorderseite ist, das ist die Rückseite Eine andere Möglichkeit, sich das früher vorzustellen, war, dass wir
entlang der X-Achse gearbeitet haben. Wenn ich vom Ziffernblock aus
auf eine Taste drücke, siehst
du die rote Linie
, die die X-Achse darstellt. Wenn ich nun
vom Ziffernblock aus die Drei drücke, springe ich zur Seitenansicht und arbeite jetzt
entlang der Y-Achse. Das Erstellen
von Einschränkungen für beide wird sehr einfach sein. Ich werde einfach
das gesamte Setup sowohl
für die rechte als auch für die linke
Wand duplizieren sowohl
für die rechte als auch für die linke und es
von der X-Achse
auf die Y-Achse umstellen . Ich wähle
diese beiden
Knotengruppen aus und drücke D, um sie zu
duplizieren Ich werde sie so verbinden. Fangen wir mit der rechten Wand an , die jetzt die Vorderwand ist. Ändern Sie den Wert,
der von der separaten X-, Y
- zur Y-Achse kommt . Er sollte gleich
oder größer als eins sein. Wenn diese Bedingung erfüllt ist, werden
wir wie folgt vorgehen. Nimm die Geschwindigkeit und
multipliziere sie jetzt mit minus eins auf der Y-Achse und ändere
die X-Achse wieder auf eins. Für die Position gilt dasselbe: Multiplizieren Sie sie mit minus eins auf der Y-Achse und ändern Sie
die X-Achse wieder auf eins. Und da wir auch die Korrektur
berücksichtigen müssen, müssen
wir jetzt zwei auf
der Y-Achse addieren und
Null auf die X-Achse schreiben. Dies ist die Einschränkung
für die Vorderwand. Gehen wir nun zur
Beschränkung für die Rückwand über. Ich werde etwas Ähnliches tun. Ändern Sie den Wert, der aus
der separaten
X-Y-Z-Achse kommt , auf die Y-Achse. Er sollte gleich oder
kleiner als minus eins sein. Und wenn diese Bedingung erfüllt ist, werden
wir Folgendes tun. Nimm die Geschwindigkeit und
multipliziere sie jetzt mit minus eins auf der Y-Achse und ändere
die X-Achse wieder auf eins. Für die gleiche Position multiplizieren Sie sie mit minus eins auf der Y-Achse und ändern Sie
die X-Achse wieder auf eins. Und da wir auch die Korrektur
berücksichtigen müssen, müssen
wir jetzt zwei auf
der Y-Achse subtrahieren und
Null auf die X-Achse schreiben Und so erstellen Sie die Beschränkung sowohl für die Vorder- als auch für
die Rückwand Wenn ich jetzt zum ersten Attributknoten mit
dem Namen des Speichers
zurückkehre , der uns eine
gewisse Anfangsgeschwindigkeit gibt und unserem Punkt auch
eine Anfangsgeschwindigkeit auf
der Y-Achse gebe und auf Play drücke, werden
Sie sehen, wie unser Punkt
von den verschiedenen Wänden abprallt Okay, so können Sie also einige Einschränkungen
für Ihre Simulation
erstellen Im nächsten Video
werden wir
diese Punkte durch im Grunde genommen
Kugeln oder Schalen ersetzen ,
was
eine Reihe neuer
Herausforderungen mit was
eine Reihe neuer sich bringt, die wir bewältigen
müssen.
12. Radius: Radius hinzufügen. führen
wir unsere
Simulation auf der Grundlage von Punkten durch. Wie ich bereits erwähnt habe, sind
Punkte in Blender nur Datencontainer, die wir
später mit anderen Objekten austauschen können . Was wir in diesem
Video tun wollen, ist im Grunde,
diese kleinen Punkte durch eine
Kugel oder ein beliebiges Objekt zu ersetzen . Wenn ich zum Ende
meines Knotenbaums gehe und einen Knoten namens
instance on points
hinzufüge, ich ihn direkt vor
den Gruppenausgabeknoten ein. Diese Instanz auf dem
Punkteknoten ersetzt den Punkt durch eine Instanz oder ein Objekt mit drei D, das
wir auswählen werden. Ich möchte diese
Punkte durch eine Kugel ersetzen. Ich füge eine U-Kugel hinzu. Und ich werde es an
den Instanz-Socket anschließen. Und wie Sie sehen können, wurde unser
Punkt jetzt durch die Kugel ersetzt. Für den Radius
dieser UV-Kugel wollte
ich den
Radius der Punkte übernehmen,
den wir
vom Punkteknoten, dem ersten Knoten des Notars,
angeben können ersten Knoten des Notars Eine Möglichkeit, dies zu umgehen, besteht
darin, einen Radiusknoten hinzuzufügen und ihn in die Skala
des Knotens „Instanz auf Punkten Und wenn ich jetzt den
Radius der Punkte
ändere, ändere ich auch den Radius der Instanzen oder Kugeln. Wenn ich jetzt auf Play drücke,
werdet ihr feststellen, wie unsere Kugel vom Boden und
den Seitenwänden abprallt Wenn Sie sich jedoch konzentrieren, werden Sie ein kleines Problem
feststellen. Oder ein großes Problem,
je nachdem, wie man es betrachtet. Sie werden feststellen, dass, wenn die
Kugel den Boden berührt, ein Teil der Kugel unter
die Bodenlinie fällt . Warum ist das so? Nun, da wir uns vorhin
mit Punkten befasst haben
und ich gesagt habe, dass es sich
nur um Datencontainer handelt, also
haben sie eigentlich keinen Radius. Jetzt, wo wir
diese Punkte durch
Kugeln ersetzen , die eine tatsächliche
Drei-D-Geometrie haben
und einen Radius haben, müssen
wir das
in unserer Physik-Engine berücksichtigen. Mit anderen Worten, wir
müssen einen Weg finden unseren Knotenbaum auf den Radius
aufmerksam
zu machen, sodass er ihn bei der
Ausführung der Simulation berücksichtigt. Wird einfach sein. Ich verspreche es. Fangen wir zunächst mit der
Einschränkung für das Stockwerk an. Wann
berührt die Kugel den Boden. Das sollte leicht zu beantworten sein. Wenn die Position
kleiner als der Radius ist. Denken Sie immer daran, dass
die Position vom
Mittelpunkt eines Objekts aus
bewertet wird. Wenn die Position
oder der Mittelpunkt
des Drei-D-Objekts
kleiner als der Radius ist, bedeutet
das, dass das
Drei-D-Objekt den Boden berührt. Für die Bodenbeschränkung muss ich
lediglich
einen Radiusknoten hinzufügen und ihn
mit der Operation „Weniger als“ verbinden. Wenn nun die Position
der Kugel kleiner
als
der Radius ist, müssen Sie die folgenden Operationen ausführen. Wenn ich auf Play drücke,
läuft alles reibungslos. Sieht aus, als ob der Ball vom Boden
abprallt. Aber wenn ich den
Radius des Punktes
zum Beispiel auf etwa 0,5 Meter ändere zum Beispiel auf etwa 0,5 Meter und
erneut auf Play drücke, um die Simulation zu starten, wirst
du etwas Seltsames sehen Jetzt
geht der Ball, aus welchem Grund auch immer , unter den Boden,
bevor er hochprallt Warum ist das so? Nun,
Sie sehen, Blender führt die gesamte Berechnung auf der
Grundlage der Mitte
des Objekts durch. Es ist wichtig zu betonen , dass alle Operationen, die wir hier
ausführen, alle
auf den Punkten basieren, die wir erstellt haben. Diese Punkte werden erst am Ende des
Notars zu
Kugeln , wenn wir die
Instanz auf bekannte Punkte anwenden Bis zu diesem
Zeitpunkt des Notars
haben wir es also immer noch mit Punkten zu tun,
was bedeutet, dass Blender hier
Punkte sieht, keine Kugeln Als Lösung dafür können
wir Blender
Folgendes mitteilen. Wenn der Ball den Boden berührt, bewegen Sie ihn um
den Radius nach unten, Sie die Korrektur vor
und legen Sie ihn dann zurück. Das wird in Knoten ungefähr
so aussehen. Ich füge einen
Radiusknoten hinzu und verbinde ihn mit
einem kombinierten XY-Z-Knoten
auf der Z-Achse. Wir führen eine Reihe von
Operationen mit Vektoren durch, deshalb muss ich diesen Radius, der ein einzelner
Wert ist
, in einen Vektor
umwandeln . Ich möchte die Position um den Radius
nach unten verschieben . Ich füge einen mathematischen Vektorknoten hinzu, ändere die Operation
auf Subtraktion und verbinde die
Position mit dem ersten Socket,
was bedeutet, dass ich von der Position
subtrahiere Der zweite Wert sollte der Vektor sein ,
den wir
aus dem Radius erhalten haben Also werde ich den Vektor
vom kombinierten X Y Z-Knoten
in den zweiten Socket stecken . Als Nächstes werden wir unsere Korrektur durchführen indem wir diesen
Vektormultiplikationsknoten verwenden. Wir müssen die
Subtraktionsoperation, die wir
zuvor ausgeführt haben, abbrechen , indem wir einen
Vektormathematikknoten hinzufügen, der hinzugefügt werden soll, und ich füge den Vektor hinzu, den
ich zuvor subtrahiert habe. Das ist der Vektor, der aus
dem kombinierten XYZ-Knoten
kommt dem kombinierten XYZ-Knoten Wenn ich auf Play drücke,
wirst du feststellen, dass der Ball jetzt in der richtigen Richtung vom
Boden abprallt Jetzt kommt der schlimmste Teil, nämlich dass
wir eine ähnliche Korrektur
für all die verschiedenen
Einschränkungen vornehmen müssen , rechts und links, vorne und hinten Aber das wird einfach sein. Lass es uns ganz schnell machen. Fangen wir mit dem
Zustand der rechten Wand an. Wann
berührt die Kugel die rechte Wand? Einfach, wenn die Position auf der X-Achse größer als
eins minus Radius ist. Ich füge einen Radiusknoten hinzu. Ich verbinde ihn mit einem mathematischen
Knoten, setze ihn so, dass er subtrahiert, so dass es eins
minus Radius ist, und setze diesen Knoten in den
Größer-als-Node ein Das ist mein neuer Zustand. Warum sollte das jetzt passieren, wenn
diese Bedingung zutrifft? Kehren Sie die Geschwindigkeit um, das
sollte so bleiben, wie es ist. Wenn ich auf Play drücke, wirst du immer noch feststellen, dass der Ball
immer noch über
die rechte Wand hinausgeht ,
weil wir
eine ähnliche Korrektur vornehmen müssen wie beim Boden. Verschieben Sie die
Simulation nach rechts, nehmen Sie die Korrektur vor und bewegen
Sie sie dann zurück Das wird
ungefähr so aussehen. Ich füge einen
Radiusknoten hinzu und stecke ihn diesmal in den kombinierten XYZ-Knoten in
der X-Achse Wie ich bereits
erwähnt habe, führen wir
eine Reihe von Vektoroperationen durch Deshalb muss ich diesen Radius, der ein einzelner
Wert ist
, in einen Vektor
umwandeln . Ich möchte die Position um den Radius nach
rechts verschieben . Ich werde einen mathematischen Vektorknoten hinzufügen und die Operation so
ändern, dass sie hinzugefügt wird. Ich werde die
Position mit dem ersten Socket verbinden,
was bedeutet, dass ich der Position den zweiten Wert
hinzufüge, der der Vektor sein sollte
, den wir
aus dem Radius erhalten haben. Also werde ich den Vektor
vom kombinierten X-Y-Z-Knoten
in den zweiten Socket stecken . Als Nächstes führen wir unsere Korrektur
durch, indem wir diesen
Vektormultiplikationsknoten verwenden.
Dann verwenden wir die AD-Operation, Dann verwenden wir die AD-Operation um die
andere Korrektur zu zählen, und wir müssen die
zuvor ausgeführten Additionsoperationen abbrechen, indem wir einen
vektormathematischen Knoten
hinzufügen , der zum Subtrahieren gesetzt ist, und ich subtrahiere den
Vektor, den ich zuvor hinzugefügt habe, und ich subtrahiere den
Vektor, den ich zuvor hinzugefügt habe,
nämlich den Vektor, der aus
dem kombinierten XYZ-Knoten
kommt dem kombinierten XYZ-Knoten Wenn ich auf Play drücke,
wirst du feststellen, dass der Ball jetzt korrekt von
der rechten Wand abprallt. Das ist die Korrektur
für die rechte Wand. Jetzt müssen wir es
für die linke Wand machen. Beginnen wir mit dem
Zustand für die linke Wand. Wann
berührt die Kugel die linke Wand? Einfach, wenn die Position
auf der X-Achse kleiner als
minus eins plus Radius
oder Radius minus eins ist . Ich füge einen Radiusknoten hinzu. Ich verbinde ihn mit einem mathematischen
Knoten, setze ihn so, dass er subtrahiert, so dass es der
Radius minus eins ist, und setze diesen dann in
den Kleiner-als-Node ein Das ist mein neuer Zustand. Sollte jetzt passieren, wenn
diese Bedingung zutrifft. Kehren Sie die Geschwindigkeit um, das
sollte so bleiben, wie es ist. Wenn ich auf Play drücke,
werden Sie immer noch feststellen, dass der Ball immer noch
über die linke Wand hinausgeht, weil wir eine
ähnliche Korrektur
vornehmen müssen wie beim Boden und
der rechten Wand,
indem wir die
Simulation nach links verschieben Nehmen Sie die Korrektur vor und bewegen
Sie sie dann zurück. Das wird
ungefähr so aussehen. Ich füge einen Radiusknoten hinzu
und stecke ihn diesmal in einen kombinierten X-Y-Z-Knoten in
der X-Achse. Ich möchte die Position um den Radius nach
links verschieben . Ich werde einen mathematischen Vektorknoten hinzufügen und die Operation so
ändern, dass sie subtrahiert Ich werde die
Position an die erste Buchse anschließen,
was bedeutet, dass ich
von der Position den zweiten Wert subtrahiere, der der Vektor
sein sollte, den wir
aus dem Radius erhalten haben Ich werde den Vektor vom
kombinierten XYZ-Knoten
in den zweiten Socket stecken kombinierten XYZ-Knoten
in den zweiten Als Nächstes führen wir unsere Korrektur durch, indem wir diesen
Vektormultiplikationsknoten verwenden Dann verwenden wir die
Subtraktionsoperation um für die
andere Korrektur zu zählen, und wir müssen die
Subtraktionsoperation, die wir
zuvor ausgeführt haben, abbrechen, indem wir einen
mathematischen Vektorknoten hinzufügen und ihn auf Addieren setzen Ich füge den Vektor hinzu, den
ich zuvor subtrahiert Welcher Vektor kommt aus dem kombinierten
XY-Z-Knoten Wenn ich auf Play drücke,
wirst du feststellen, dass der Ball jetzt korrekt von
der linken Wand abprallt Das ist die Korrektur
für die linke Wand. Jetzt müssen wir es für
die Vorder- und Rückwand machen. Das sollte der rechten und linken Wand sehr ähnlich
sein. Ich drücke vom Ziffernblock
die Drei , um zur Seitenansicht
zu springen, und beginnen wir mit
der Korrektur für
die Vorderwand, die aus dieser Ansicht wie die rechte
Wand aussieht. Wann
berührt die Kugel die Vorderwand? Einfach, wenn die Position auf der Y-Achse größer als
eins minus Radius ist. Ich füge einen Radiusknoten hinzu. Ich verbinde ihn mit einem mathematischen
Knoten, setze ihn so, dass er subtrahiert, so dass es eins
minus Radius ist, und setze diesen Knoten in den
Größer-als-Node ein Das ist mein neuer Zustand. Was sollte passieren, wenn
diese Bedingung zutrifft? Kehren Sie die Geschwindigkeit um, das
sollte so bleiben, wie es ist. ich auf Play drücke, werden Sie immer noch feststellen, dass der Ball
immer noch über
die Vorderwand hinausragt , weil wir eine ähnliche
Korrektur wie zuvor vornehmen
müssen , indem wir die Simulation
nach vorne
stellen, die Korrektur
vornehmen und sie
dann nach hinten bewegen. Das wird
ungefähr so aussehen. Ich füge einen
Radiusknoten hinzu und verbinde ihn diesmal mit
einem kombinierten XYZ-Knoten in
der Y-Achse Ich möchte die Position um den Radius nach
vorne verschieben den Radius nach
vorne Ich werde einen Vektor-Meth-Knoten hinzufügen. Ändern Sie die Operation auf Hinzufügen, und ich werde die
Position mit dem ersten Socket verbinden,
was bedeutet, dass ich der Position den zweiten Wert
hinzufüge, der der Vektor
sein sollte, den wir
aus dem Radius erhalten haben Also werde ich den Vektor vom
kombinierten XYZ-Knoten
in den zweiten Socket stecken kombinierten XYZ-Knoten
in den zweiten Socket Als Nächstes führen wir unsere Korrektur durch, indem wir diesen
Vektormultiplikationsknoten verwenden Dann verwenden wir die AD-Operation um die
andere Korrektur zu zählen,
und wir müssen den Vorgang zum Hinzufügen, den wir
zuvor ausgeführt haben, abbrechen, indem wir einen
Vektor-Meth-Knoten hinzufügen , der zum Subtrahieren gesetzt ist. Ich subtrahiere dann den
Vektor, den ich zuvor hinzugefügt habe, also den Vektor, der
aus dem kombinierten XYZ-Knoten kommt Wenn ich auf Play drücke,
werden Sie feststellen, dass der Ball jetzt korrekt von
der Vorderwand abprallt Das ist unsere Korrektur
für die Vorderwand. Jetzt müssen wir
dasselbe für die Rückwand tun. Fangen wir mit der Bedingung an. Wann
berührt die Kugel die Rückwand? Einfach. Wenn die Position
auf der Y-Achse kleiner als minus eins plus Radius
oder Radius minus eins ist. Ich füge einen Radiusknoten hinzu. Ich verbinde ihn mit einem mathematischen
Knoten, setze ihn so, dass er subtrahiert, sodass es der Radius minus
eins ist, und setze diesen dann in
den Kleiner-als-Node ein Das ist mein neuer Zustand. Was sollte jetzt passieren, wenn
diese Bedingung zutrifft? Kehren Sie die Geschwindigkeit um, das
sollte so bleiben, wie es ist. Wenn ich auf Abspielen drücke,
werden Sie immer noch feststellen, dass der Ball immer noch
über die Rückwand hinausgeht, weil wir eine ähnliche
Korrektur wie
zuvor vornehmen müssen, indem wir die
Simulation nach hinten verschieben, die Korrektur
vornehmen und sie
dann vorwärts bewegen Wird ungefähr so aussehen. Ich füge einen
Radiusknoten hinzu und stecke ihn diesmal in den kombinierten XY-Z-Knoten
in die Y-Achse. Ich möchte die Position um den Radius nach
hinten verschieben . Ich füge einen mathematischen Vektorknoten hinzu, ändere die Operation
auf Subtraktion und verbinde die
Position mit der ersten Buchse,
was bedeutet, dass ich
von der Position den zweiten Wert subtrahiere, der der Vektor sein
sollte, den wir aus dem Radius
erhalten haben Also stecke ich den Vektor
vom kombinierten XYZ-Knoten
in die zweite Buchse vom kombinierten XYZ-Knoten
in die Als Nächstes führen wir unsere Korrektur durch, indem wir diesen
Vektormultiplikationsknoten verwenden Dann verwenden wir die
Subtraktionsoperation um für die
andere Korrektur zu zählen, und wir müssen die
Subtraktionsoperation, die wir
zuvor ausgeführt haben, abbrechen, indem wir einen
Vektor-Mathematikknoten hinzufügen, ihn auf Addieren setzen,
und ich füge den Vektor hinzu, den
ich zuvor subtrahiert habe. Das ist der Vektor, der aus dem kombinierten XYZ-Knoten kommt der aus dem kombinierten XYZ-Knoten Wenn ich auf Play drücke,
wirst du feststellen, dass der Ball jetzt korrekt von
der Rückwand abprallt Und jetzt kennt unsere
Physik-Engine den Radius der
Punkte und berücksichtigt ihn bei der
Ausführung der Simulation Ich weiß, es könnte sich
so anfühlen, als ob wir in diesem Video eine Menge
Operationen durchgeführt haben , und das könnte überwältigend sein. Aber falls Sie nicht
verstehen, was wir genau gemacht haben, schauen
Sie sich dieses Video
von Anfang an an und versuchen Sie, sich ein wenig zu konzentrieren und zu visualisieren,
was passiert, und Sie werden überrascht sein,
wie einfach diese Konzepte sind. Ich weiß, es
mag sich wirklich kompliziert anfühlen, besonders wenn ich
das Zeug so schnell mache ,
aber glauben Sie mir, Sie es
einmal verstanden
haben, werden Sie es buchstäblich mit
verbundenen Augen
tun können , weil Sie die Konzepte dahinter
verstehen. Wahrscheinlich werden wir auch
über dich
lachen denkst, dass
auch das kompliziert ist So können wir
den Radius in unserer Simulation implementieren , und im Moment gibt es nur ein
weiteres Problem, das wir lösen müssen, nämlich wie man diese
Kugeln miteinander kollidieren Das werden wir im nächsten Video
tun.
13. Kollision: Kollision. Hallo und willkommen zum letzten technischen Video darüber wie Sie mithilfe von Geometrieknoten Ihre
eigene Physik-Engine
in Blender erstellen können. Wir haben viel durchgemacht, also
geben Sie sich selbst Anerkennung denn dieses Video ist vielleicht das komplizierteste, das es bisher gab. Wir werden nicht viele Knoten
hinzufügen,
aber einige von Ihnen finden es vielleicht
etwas kompliziert,
die Konzepte
zu verstehen, die hinter
all den Operationen wir in diesem Video durchführen werden. Aber ich werde mein Bestes tun, um
alles Schritt für Schritt zu erklären. Und wenn
Sie sich genug konzentrieren, werden
Sie hoffentlich genau die Logik
des Dings verstehen , das wir bauen werden. Hier haben wir beim letzten Mal
aufgehört, und im Moment haben wir es
nur mit
einem Punkt zu tun . Oder ein Ball. Ich möchte mehrere haben. Der einfachste Weg
, das zu umgehen, wäre,
die Anzahl der Punkte auf
etwa zehn zu erhöhen , sagen wir. Und lassen Sie uns den Radius auf
etwas Kleines wie 0,2 Meter einstellen . Jetzt
werden all diese Bälle übereinander liegen. Deshalb verbinde
ich mich mit der Position, einem Knoten mit zufälligen Werten, und dieser Knoten weist jedem Punkt
eine zufällige Position zu. Und alles, was Sie tun müssen
, ist, ihm ein Intervall indem Sie einen
minimalen Maximalwert angeben, zuzuweisen,
indem Sie einen
minimalen Maximalwert angeben,
und
in diesem Intervall wird jedem Punkt
ein zufälliger Wert zugewiesen. Sie können mit den Werten spielen bis Sie das gewünschte
Ergebnis erhalten. Aber in meinem Fall habe ich
diese Werte letztendlich für die
Minimalwerte minus eins minus eins,
drei und für die
Maximalwerte eins, 15 verwendet diese Werte letztendlich für die
Minimalwerte minus eins minus eins, . Wenn ich jetzt auf Play drücke, werden
Sie sehen, dass wir
jetzt zehn Kugeln haben, aber das größte Problem ist,
dass sich all diese Schalen überschneiden
. Sie kollidieren nicht Wir haben Blender
gesagt, dass er die Bälle von den verschiedenen Wänden
abprallen lassen soll, aber wir haben ihm nicht gesagt sie sie
auch voneinander abprallen
lassen sollen, dass sie sie
auch voneinander abprallen
lassen sollen,
und das ist ein entscheidender Teil beim Aufbau unserer eigenen Physik-Engine Also, wie können wir so etwas machen? Lassen Sie uns versuchen,
einige Ideen zu entwickeln, wie wir so etwas
programmieren können Fangen wir mit
der ersten Frage an. Erstens, kollidieren
im Grunde zwei Bälle? Denn wenn wir
diesen Zustand kennen, können
wir Blender sagen, hey, wenn dieser Zustand
eintritt, tun wir etwas. Nun, ich gebe dir die Antwort. Zwei Kugeln kollidieren, wenn der
Abstand zwischen ihnen oder der Abstand zwischen den Mittelpunkten kleiner
ist als der Radius
multipliziert mit Ich denke, das sollte
aus dieser Visualisierung klar hervorgehen. Es fällt mir immer
schwer, dieses Wort auszusprechen. Das ist die Logik der
Bedingung, die wir später aufbauen werden. Wir werden Blender anweisen, immer die Entfernung
zwischen zwei Punkten zu berechnen, und wenn die Entfernung
zwischen ihnen
kleiner ist als der Radius
multipliziert mit zwei, bedeutet
das, dass sie kollidieren, und Sie sollten
etwas dagegen tun Lassen Sie uns das nun in Knoten übersetzen
. Ich werde einen Knoten namens
Index of Nearest hinzufügen. Dieser Knoten gibt mir den
Index des nächstgelegenen Punktes. Wenn ich,
wie bereits
erwähnt, zum Arbeitsbereich der
Geometrieknoten springe ,
hat jeder Punkt einen Index, der sich auf ihn bezieht. Der Index des nächstgelegenen
Knotens gibt mir Index des Punktes
, der einem bestimmten
Punkt am nächsten ist. Sobald ich den Index
des nächstgelegenen Punktes kenne, kann
ich Blender bitten, seine Position zu
lesen, was Sie tun können, indem Sie
einen Knoten namens evaluate at index hinzufügen , was eine Möglichkeit ist, Blender mitzuteilen. Für diesen Punkt möchte ich, dass
du etwas berechnest. In unserem Fall wollen wir
die Position dieses Punktes wissen. Ich ändere den Typ
von Float auf Vector. Weil Position ein Vektor ist. Ich werde einen Positionsknoten hinzufügen
und ihn in den Wert einfügen. Nun ist
der Ausgangsvektor dieser Auswertung am Indexknoten der
Positionsvektor des nächstgelegenen Punktes, Punkt B, der meinem Punkt
am nächsten ist. Die Ausgabe des Positionsknotens ist der
Positionsvektor von Punkt A. Sobald ich
diese beiden Vektoren
habe, kann ich einen mathematischen Vektorknoten hinzufügen und die
Operation auf Entfernung ändern. Wenn ich den
Vektor, der aus
dem Evaluate-at-Index
und dem Positionsknoten kommt , gibt mir
dieser Knoten den
Abstand zwischen ihnen. Woher weiß ich nun, ob diese
beiden Punkte kollidieren? Ich habe die Antwort schon einmal gesagt. Wenn der Abstand zwischen den beiden Punkten kleiner ist als
der Radius multipliziert mit zwei Ich füge einen Radiusknoten hinzu, den
ich mit zwei multiplizieren werde Die Entfernung sollte weniger
als das Zweifache des Radius betragen Das Ergebnis dieser Operation „
Weniger als“ ist meine Bedingung für den Fall, dass zwei
Punkte oder Kugeln kollidieren Jetzt müssen wir uns etwas
Wichtiges überlegen, nämlich die Reihenfolge der Operationen Sollten wir die
Kollisionsbedingungen vor
oder nach der
Beschränkung der Kugeln ausführen oder nach der
Beschränkung der Kugeln , denken Sie eine Sekunde
darüber nach. Die Antwort ist vorher.
Wir müssen mit Kollisionen vor
den Mauern rechnen
. Der Grund dafür
ist, dass es sinnvoller die Kollision
zu berechnen bevor die Wände die Wände
berühren, da sie sich
gegenseitig von
den Wänden wegdrücken oder sich
gegenseitig in die Wände drücken können den Wänden wegdrücken oder sich
gegenseitig in die Wände drücken Sobald wir das wissen, können wir die
Beschränkungen der Wände berechnen. Deshalb füge ich
einen Knoten mit festgelegter Position hinzu
und setze ihn vor
den Teil, und setze ihn vor in dem wir
die anderen Beschränkungen haben. Im Grunde genommen direkt nach dem Knoten, für die
Aktualisierung der Position
verantwortlich ist. Und ich werde das Ergebnis
der Operation „Weniger als“ angeben. Zur Auswahlbuchse
der eingestellten Position notieren. Jetzt, da wir mit dem
Aufbau unserer Bedingung fertig sind, müssen wir uns damit befassen, was passieren
sollte, wenn
diese Bedingung
erfüllt ist , oder was passieren sollte,
wenn zwei Bälle kollidieren Also meine Frage jetzt, was sollte passieren, wenn zwei Bälle kollidieren? Denk drüber nach Die Antwort lautet wie folgt. Wenn zwei Bälle kollidieren, müssen
wir sie voneinander
wegdrücken Das kann
man mit Sicherheit sagen, und
ich finde es auch genial, das zu Aber es gibt zwei wichtige Fragen, die wir beantworten
müssen Zuallererst, um
wie viel sollten wir diese beiden Bälle ausgleichen? Ist es so oder werden
sie sich so anstrengen? Es ist wichtig
, das herauszufinden. Das ist also Nummer eins. Nummer
zwei, in welcher Richtung. Also, wenn diese
beiden Kugeln kollidieren, würden sie so
oder so oder so oder so fliegen Das ist auch wichtig,
dass wir einen Weg
finden müssen , es in Knoten zu
übersetzen Das sollte einfach sein, um wie viel
wir
die Position der beiden
Punkte ausgleichen müssen . Berechne den Abstand
zwischen den beiden Punkten, dividiere ihn durch zwei und verschiebe
jeden Punkt um diesen Betrag. Für die Richtung müssen Sie den Vektor
entlang bewegen , der die beiden Punkte
kreuzt. Wie können wir den Vektor berechnen? Hier ist der
Positionsvektor für den Punkt A
und hier ist der
Positionsvektor für Punkt B. Ich kann den Vektor, und hier ist der
Positionsvektor für Punkt B. Ich kann den Vektor der
sie kreuzt,
berechnen , indem ich eine
Subtraktionsoperation ausführe, Positionsvektor von Punkt A minus den
Positionsvektor von Punkt B. Das gibt mir
den Vektor, entlang dem die
Offset-Position liegen sollte. Lassen Sie uns nun all
diese Gedanken in Knoten übersetzen. Ich beginne mit
der Berechnung des Vektors,
der die beiden Punkte kreuzt. Wie gesagt, das ist die
Position
von Punkt A abzüglich der
Position von Punkt B,
was Sie erreichen können, indem Sie
einen mathematischen Vektorknoten hinzufügen und ihn so
einstellen, dass er subtrahiert Ich stecke die Position in die erste Buchse und den Vektor der aus der Auswertung
am Index
kommt , in die zweite Buchse? Das ist der Vektor, auf dem ich die beiden Punkte
bewegen werde. Gehen wir nun zu dem Betrag um den die beiden Punkte
versetzt werden sollen. Wir müssen diese
Entfernung durch zwei teilen, und das ist der Betrag, um
den ich jeden Punkt verschieben sollte. Wie kann ich die rote
Linie berechnen? Das ist der Radius. Dies ist auch der Radius, und dies ist der Abstand
zwischen den beiden Punkten. Wenn ich den
Radius minus die Entfernung zweimal berechne
, erhalte ich die
Länge der roten Linie oder wie viel sich die beiden
Punkte schneiden. Lassen Sie uns das in Notizen übersetzen. Ich werde einen mathematischen
Notizsatz zum Subtrahieren hinzufügen. Die Operation entspricht dem
Zweifachen des Radius abzüglich der Entfernung
zwischen den beiden Punkten füge einen weiteren mathematischen Knoten hinzu
und setze ihn auf Dividieren, und ich werde ihn durch zwei teilen. Das Ergebnis ist der
Betrag der Kompensation. Ich füge einen mathematischen
Vektorknoten hinzu, ändere ihn auf Skalierung
und skaliere
den Vektor, entlang
dessen die
Operation ausgeführt werden soll,
der vom
Vektorsubtraktionsknoten kommt,
und skaliere ihn um den Betrag, der
vom Divisionsmathematikknoten
kommt Dieser wird direkt in den Offset-Socket des Nodes mit
der eingestellten Position eingegeben Und das ist es.
So können Sie Kollisionen in
unserer Physik-Engine erzeugen. Wenn ich jetzt auf Play drücke, wirst
du immer noch feststellen, dass die Bälle immer
noch kollidieren Das ist der Teil, in dem
du anfangen kannst, mich zu hassen ,
denn selbst nach all
dieser komplizierten Mathematik es immer noch nicht Aber das werden wir reparieren. Ich möchte erwähnen, dass es nicht so ist
, dass das, was wir getan haben, falsch war, das Problem liegt beim Blender. Es ist nicht unsere Schuld.
Es sind Mixer Wie ich bereits
erwähnt habe, müssen
wir uns aufgrund
der in Blender verwendeten
Oiler-Integrationsmethode mit einer
hohen Anzahl von Fehlern befassen Die
Oiler-Integrationsmethode ist bestenfalls in Ordnung und sehr fehleranfällig Die beste Lösung, um unsere Simulation
genauer zu
machen, besteht also darin,
diese Operation nicht nur einmal auszuführen.
Was wäre, wenn wir
einen Weg finden könnten, Blender mitzuteilen, dass
jeder Frame
diese Physik-Engine nicht nur einmal,
sondern beispielsweise 100 Mal ausführt Was wäre, wenn wir
einen Weg finden könnten, Blender mitzuteilen, dass auszuführen.
Was wäre, wenn wir
einen Weg finden könnten, Blender mitzuteilen, dass
jeder Frame
diese Physik-Engine nicht nur einmal, sondern beispielsweise 100 Mal Auf diese Weise erhalten Sie
ein genaueres Ergebnis. Tatsächlich kennen Sie
die Antwort auf diese Frage bereits. Kannst du es erraten? Die Trommel rollt und es wiederholen sich Zonen. Das Erste,
worüber wir in diesem Kurs gesprochen haben. Ich werde eine
Wiederholungszone hinzufügen und
mein gesamtes Beschränkungssystem wie folgt
in die
Wiederholungszone einfügen mein gesamtes Beschränkungssystem . Und jetzt kann
ich vom ersten
Knoten der Wiederholungszone aus angeben, wie oft Blender
die Einschränkungen berechnen
soll. Ja, Blender wird die
Simulation nur einmal ausführen, aber ich kann
mithilfe der Wiederholungszone angeben, wie oft
bestimmte Operationen
innerhalb eines Frames ausgeführt werden sollen. Das wird als Teilschritt bezeichnet. Ich mache zum Beispiel 50. Wenn ich jetzt auf Play, Blender drücke, lässt jedes Bild
das Kollisionssystem
50 Mal laufen , um ein
wirklich genaues Ergebnis zu erhalten. Und jetzt, wie Sie sehen können, kollidieren
unsere Bälle wunderbar und alles
funktioniert reibungslos, und so erstellen wir
das Kollisionssystem
für unsere Bälle Im nächsten Video werde ich
einige abschließende Gedanken dazu teilen, wie man
bestimmte Dinge in
unserer Physik-Engine
14. Das Spawnen der Partikel: Partikel spawnen. Hallo und willkommen. In diesem Video werden
wir dafür sorgen, dass
die Punkte im
Laufe der Zeit erscheinen und nicht
alle auf einmal Hier hören wir beim letzten Mal auf. Im Moment
hat unsere Simulation nur zehn Punkte. Nehmen wir an, ich will 100 Punkte. Wenn ich die Anzahl der
Punkte auf 100 erhöhe und auf Play drücke, werden
Sie feststellen, dass
die Simulation
durcheinander gerät, denn wenn wir die Anzahl der Punkte
erhöhen, erhöhen
wir die
Fehlerwahrscheinlichkeit, und das macht die
Simulation extrem instabil Was ist also die
Lösung dafür? Nun, in unserer aktuellen Simulation haben
wir
von Anfang an 100 Punkte. Was ist, wenn wir einen
Weg finden,
Blender zu sagen , dass er nicht von Anfang an 100
Punkte hat, sondern sie spawnen oder im Laufe der Zeit
hinzufügen Das sollte zu einer
stabileren Simulation führen. Wie können wir das machen? Beginnen wir mit dem ersten Teil
, in dem es darum geht, dem Blender
mitzuteilen, dass er die Partikel
im Laufe der Zeit spawnen soll ?
Das wird einfach sein Sie müssen lediglich
einen
Knoten für die Gelenkgeometrie hinzufügen und ihn
als ersten Knoten in
die Simulationszone einbinden. Ich nehme die Ausgabe
aus dem Punkteknoten, aus dem
Attributknoten mit dem Namen des Speichers , und füge sie
in den Knoten für die gemeinsame Geometrie ein. Was jetzt passieren wird
, ist, dass Blender bei jeder
Ausführung der Simulation
weitere Punkte hinzufügt . Oder genauer gesagt, Blender verbindet die vorherige Geometrie mit der neuen Geometrie. Als Nächstes werde ich die
Anzahl der Punkte auf eins reduzieren, denn wenn ich das nicht mache, explodiert
Blender Es wird anfangen, 100 Punkte zu haben, und jeder Frame fügt weitere 100 Punkte
hinzu Sie können sich leicht vorstellen,
wie das dazu führt, dass sehr schnell eine verrückte Anzahl
von Punkten
haben, was die Software zum Absturz bringen wird. Wenn ich die Anzahl
der Punkte auf eins ändere, fügt
Blender in jedem Frame nur
einen Punkt hinzu. Eigentlich ist das immer noch zu viel, und wir müssen
dafür sorgen, dass ein Blender vielleicht alle 20 Frames
einen Punkt spawnt vielleicht alle 20 Frames
einen Punkt Aber bevor wir das tun, wenn ich auf Play drücke, fügt
Blender, wie Sie sehen können, in jedem Frame einen
neuen Punkt hinzu, was immer noch zu viel ist, und das führt immer noch dazu, dass
die Stimulation instabil ist . Die Lösung besteht darin, Blender
mitzuteilen, dass T nicht jedem Frame
einen Punkt zeigt. Fügen Sie vielleicht alle
zehn oder 20 Frames einen Punkt hinzu. Wie können wir
so etwas also programmieren? Ich werde damit beginnen,
einen Knoten für dieselbe Uhrzeit hinzuzufügen. Dieser Knoten gibt mir entweder den Sekundenwert
oder der Frame ist eingeschaltet. Ich nehme den
Frame und setze ihn in
den Punktezähler ein. Jetzt, bei Bild eins,
fügt Blender einen Punkt hinzu. Bei Frame zwei
fügt Blender zwei Punkte hinzu, also habe ich drei
Punkte und bei Frame drei fügt
Blender drei Punkte hinzu, sodass ich insgesamt sechs Punkte habe. Das will ich nicht. Ich
möchte Blender sagen, dass jeder bestimmten
Anzahl von Frames
ein Punkt erreicht wird. Ich werde einen mathematischen Knoten hinzufügen und ihn auf Floored Modulo setzen Floord Modulo ist nur eine ausgefallene
Art zu sagen, dass dieser Knoten den Rest
einer Divisionsoperation
anhand dieses Werts zurückgibt einer Divisionsoperation diesem Knoten können
wir angeben, wie oft Blender einen neuen
Punkt hinzufügen soll Ich werde auch
einen weiteren mathematischen Knoten hinzufügen und ihn auf zwei setzen, und der Wert sollte Null sein. Hier ist die Logik dessen
, was passiert. Blender nimmt die Nummer
des Frames und
teilt sie dann durch diesen Wert, und wenn der Rest gleich Null
ist Das bedeutet, dass
die Gleichheitsbedingung wahr ist, was bedeutet, dass dieser Knoten
einen ausgibt, also fügt Blender einen Punkt hinzu. Und wenn der Rest nicht gleich Null
ist, bedeutet
das, dass die Bedingung „Gleich
zwei“ falsch ist, was bedeutet, dass dieser Knoten
Null
ausgibt, sodass Blender keinen Punkt hinzufügt. Möchte, dass Blender bei 20 Frames einen
Punkt hinzufügt. Das erhalte ich,
wenn ich hier 20 eintippe. Hier ist ein Beispiel dafür
, was passieren wird. Nehmen wir an, ich bin bei Frame 55. Blender teilt 55 durch 20. Der Rest der
Operation ist 15. 15 ist nicht gleich Null,
was bedeutet, dass dieser Knoten
Null ausgibt, und da dieser Knoten die Zählwerte
des Punkteknotens berechnet, bedeutet
das, dass Blender
keinen Punkt hinzufügt. Nehmen wir an, ich bin bei Frame 60. Blender teilt 60 durch 20. Der Rest der
Operation ist Null, Null ist gleich
Null,
was bedeutet, dass dieser
Knoten
Eins ausgibt , weil diese
Bedingung jetzt erfüllt ist. Dieser geht zum
Punktzähl-Socket und Blender fügt der Simulation einen
Punkt hinzu. Ich denke, der Logik sollte jetzt klar
sein, was passiert. Wenn ich jetzt auf Play drücke, fügt
Blender allmählich
Partikel hinzu, was genau das ist, was ich will. Das Letzte, was ich
tun möchte, ist Blender
mitzuteilen, dass er jeden Punkt in
eine andere Richtung spawnen soll Ich kann das tun, indem jedem Punkt
einen zufälligen
Anfangsgeschwindigkeitsvektor zuweise, was Sie ganz einfach tun können, indem Sie einen
Zufallswertknoten in
den Vektor-Socket des
Store-Name-Attributs
stecken , das die definiert Und ich addiere die Werte zu minus eins minus 10
für das Minimum und 110 für das Maximum Auf diese Weise können wir im Blender die Partikel im
Laufe der Zeit erzeugen lassen die Partikel im
Laufe der Zeit erzeugen Ich denke, die Logik ist super einfach. Im nächsten Video werden wir unserer Simulation einen Bruchteil
hinzufügen.
15. Reibung: Bruchteil hinzufügen.
Ein wichtiger Bestandteil jeder Simulation ist der Bruch. Ohne Reibung springen
die Bälle einfach ewig weiter Deshalb ist es wichtig, einen Weg
zu finden, Blender
anzuweisen,
die Simulation mit der Zeit zu dämpfen Und wir haben dieses
Thema schon einmal angesprochen, aber was wir in diesem
Video tun werden, ist, den Prozess der Änderung
der Reibung
ein wenig zu vereinfachen Nun, das ist unser
gesamter Notizbaum, und ich habe vor, Folgendes
zu tun. Wie Sie sich erinnern,
habe ich in
den Beschränkungen die Geschwindigkeit, die
je nach Achse mit minus eins
multipliziert wird je nach Achse mit minus eins
multipliziert Wenn ich diesen Wert
auf etwa -0,8 erhöhe, führt
das zu mehr Ich möchte diesen Wert für
alle verschiedenen
multiplizierten Knoten
gleichzeitig
ändern alle verschiedenen
multiplizierten Knoten . Das ist einfach Ich werde einen kombinierten XY-Z-Knoten hinzufügen. Ich gebe hier den gleichen
Wert ein, eins, eins minus
eins und setze ihn in den Vektor
des Multiplikationsknotens ein. Ich habe nichts Besonderes gemacht, ich habe nur den Wert im
Multiplikationsknoten durch diesen
kombinierten XYZ-Knoten ersetzt . Der Grund, warum ich das getan habe,
ist, dass ich jetzt
einen Gruppeneingabeknoten hinzufügen und die Z-Achse mit der Gruppeneingabe verbinden kann. Wenn ich jetzt zur Registerkarte
„Modifikator“ gehe, werden
Sie sehen, dass ich den Wert von hier aus
ändern kann Außerdem ist es wichtig zu beachten, dass ich nur den Wert
für die Z-Achsen
ändern werde , da dies der Socket ist, der an den
Gruppeneingang angeschlossen Für den Rest der Sockets bleiben
sie eins. Dies wird den
Prozess der Änderung der
Reibungswerte erheblich erleichtern. Jetzt muss ich dasselbe
für all die verschiedenen
Einschränkungen tun . Ich beginne damit,
es für die rechte Wand zu tun, füge einen kombinierten XYZ-Knoten hinzu
und füge eine Gruppeneingabe hinzu. Ich gehe weiter zur linken Wand, füge eine kombinierte X-Y-Zende
mit denselben Werten hinzu
und füge Gruppeneingaben hinzu. Ich werde das Gleiche jetzt auch für die Vorderwand tun. Schließlich werde ich
dasselbe für die Rückwand tun. S. Und jetzt kann ich die
Reibung von hier aus leicht kontrollieren. Ich kann auch die Seitenleiste öffnen, indem n drücke und den
Geometrie-Knoten-Editor öffne, eine der Gruppeneingaben
auswähle
und du kannst doppelklicken, um den Namen
dieser Eigenschaft in
etwas wie Reibung zu ändern . Für meine Simulation werde ich den Reibungswert auf -0,9
setzen Eine andere Möglichkeit, Brüche hinzuzufügen,
besteht darin, zu
dem im Speicher benannten
Attributknoten zurückzukehren ,
der die Geschwindigkeit definiert Wenn ich einen
Vektormathematikknoten hinzufüge und ihn maßstabsgetreu einstelle, kann
ich
die Geschwindigkeit in der
gesamten Simulation dämpfen die Geschwindigkeit in der
gesamten Simulation Es ist wie eine globale Reibung
, die sich auf jeden Frame auswirkt. Ich kann sogar eine
Gruppeneingabe hinzufügen und sie dort anschließen und ihren Namen in
globale Reibung
ändern. Ich werde es auf 0,99 setzen. Die Simulation
verliert mit jedem Frame um
den Faktor 1% an Geschwindigkeit jedem Frame um
den Faktor 1% an Außerdem kann es nützlich
sein, die Anzahl der Schritte
der Wiederholungszone gegenüber
dem Modifikatorschritt zu ändern Schritte
der Wiederholungszone gegenüber
dem Modifikatorschritt Deshalb werde ich ihn
auch an
einen Gruppeneingabeknoten anschließen und ihn
zum Beispiel Unterschritte nennen zum Beispiel Unterschritte und ihn auf 20 setzen Das sind die Werte, die ich für das Promo-Rendern
verwende. Schließlich werde ich meine
Bildrate auf 120 einstellen, damit ich eine wirklich
gleichmäßige Bildrate habe und meine Simulation weniger fehleranfällig ist. Nehmen wir für den Bildbereich an, ich möchte zehn Sekunden rendern, was bedeutet, dass mein Bildbereich
bis zu 1.200 Frames beträgt Wenn ich auf Play drücke, funktioniert unsere Simulation
reibungslos. Das war's, alle
für dieses Video. Technisch gesehen haben wir alles
fertiggestellt. Im nächsten
werde ich Ihnen zeigen, wie ich die endgültige Szene
erstellt habe und wie man sie rendert.
16. Endgültige Übersicht: Hallo nochmal. Beim letzten Mal. Dies ist das letzte Video zum
Aufbau unserer eigenen
Physik-Engine in Blender. Dieses Video ist eine Zusammenfassung von
allem, was wir
bis zu diesem Zeitpunkt getan haben, aus der Vogelperspektive was wir
bis zu diesem Zeitpunkt getan haben, Das erste, womit
ich in
diesem Video beginnen werde , ist unser Notar, denn derzeit
ist es ein absolutes Chaos Wenn Sie sich entscheiden, in Zukunft zu
diesem Projekt zurückzukehren, werden
Sie sich wahrscheinlich
im C all dieser
verschiedenen Knoten verlieren im C all dieser
verschiedenen Knoten Deshalb beginne ich mit der Organisation und
Benennung des Notars und
gehe dann zur Zusammenfassung Okay, willkommen zurück bei Blender, und das ist mein ganzer Versuch, und es ist ehrlich gesagt ein Chaos. Ich werde die Strg- und
Leertaste drücken , um diesen Editor zu maximieren. Wie Sie sehen können,
gibt es eine Menge Knoten, und vor allem in Zukunft wird
es schwierig sein, zu verstehen
, was
passiert , weil wir unsere Notiz
nicht als Versuch gekennzeichnet haben. Wie ich bereits erwähnt habe, werden wir in diesem
Video zunächst unseren Notizbaum
organisieren. Ich werde zum Anfang
der Notiz gehen und versuchen. Ich wähle
all diese Knoten aus,
drücke Strg G, um sie herum
ein Label zu erstellen, drücke F zwei für einen Namen
und nenne es zum Beispiel Anfangsbedingung. Sobald wir unseren
Ausgangszustand erreicht haben, betreten
wir die Simulationszone. Wir haben diese Gelenkgeometrie die für das Hinzufügen von
Punkten im Laufe der Zeit verantwortlich ist. Danach definieren wir die Beschleunigung mithilfe
dieses benannten Attributs und sie bezieht sich auf die
Skala und diesen Vektorknoten. Stellen Sie sicher, dass Sie
die drei auswählen. Drücken Sie Strg, G, F zwei für einen Namen, und nennen wir
sie Beschleunigung. Als Nächstes haben Sie
das
Attribut Store Named , das für die
Definition der Geschwindigkeit verantwortlich ist. Lass es uns hierher verschieben. Das Gleiche. Lassen Sie uns all diese Knoten so
übereinander legen , indem wir sie stapeln. Wählen Sie all diese Knoten aus
, wählen Sie G und F als Namen, und nennen wir es
Geschwindigkeit, weil wir die Geschwindigkeit
anhand dieser Knoten definieren Als Nächstes aktualisieren wir
die Position
mithilfe des Knotens für die eingestellte Position, also stapeln wir die Knoten
übereinander. Wählen Sie sie aus, steuern Sie G, F zwei und nennen wir sie
Positionsupdate. Danach betreten wir
die Wiederholungszone, die für die
Zusammenstellung der
verschiedenen Einschränkungen verantwortlich ist Zusammenstellung der
verschiedenen Einschränkungen Lassen Sie uns diesen Knoten hier platzieren. Eigentlich werde ich
es nach oben verschieben, aber
versuchen wir einfach , eine Lösung für
dieses ganze Chaos hier zu finden. Um
den gesamten Prozess vereinfachen und mehr Platz zu haben, werde
ich
diese Knoten von Anfang an organisieren. Ich werde diese Knoten haben, die für
die Umwandlung der Punkte in Kugeln
verantwortlich sind , also wähle ich sie alle aus, drücke G, um ein Label zu erstellen, F zwei für einen Namen,
und nennen wir es zum Beispiel Instancer Schieb sie zurück.
Schieb das auch zurück. Je weniger Einschränkung
ich hier habe, es ist die Einschränkung
für die Rückwand. Wählen wir es komplett aus, das sollten all
diese Knoten sein. Organisieren wir sie. Zuallererst werden Sie diese Knoten oben
haben. Ich übernehme Kontrolle G
und das ist mein Zustand. Lassen Sie uns diese
Knoten genau hier organisieren. So etwas in der Art. Vielleicht wirst du arbeiten. Und dann
wähle all diese Knoten, Control G, F, zwei als Namen, und nennen wir es
Backwall Strant Als Nächstes bekommst du das. Machen Sie etwas Ähnliches,
wählen Sie diese
aus, drücken Sie G und F zwei, und nennen wir es Bedingung. Als Nächstes werde ich
diese Knoten hierher verschieben. Dieser hier, hier,
diese hier. Wähle sie alle aus. Drücken Sie
G, F zwei für einen Namen, und nennen wir sie
Frontwandbeschränkung. Nun zur linken Wandbeschränkung, all diese Knoten, wählen Sie diese Steuerbedingung
G F zwei. Als nächstes ist hier, dieser
hier und dieser hier. Wählen Sie den gesamten
Notizbaum aus, kontrollieren Sie G, F zwei, linke Wand, Beschränkung. Sie nun zur rechten
Wandbeschränkung Control G, F, zwei) und verschieben Sie diese Knoten hierher. Das Gleiche gilt für
diesen und diesen, dann so. Wählen Sie dann
alle aus, kontrollieren Sie G, F zwei, rechte Wandbeschränkung. Schließlich die Bodenbeschränkung, bei der es sich um diese Knoten handelt. Wir werden etwas Ähnliches tun. Wählen Sie die beiden Steuerbedingungen
G, F aus. Verschieben Sie diese hier, für die Position,
für die Geschwindigkeit, tut mir leid, und wählen Sie alle aus. Steuern Sie G F, zwei
Stockwerke. Dies sind die
verschiedenen Beschränkungen, und schließlich haben Sie
das Kollisionssystem. Lassen Sie uns versuchen, einen Weg
zu finden, all dies zu organisieren. Ich werde
sie alle auswählen und alles nach unten verschieben. Ich denke, das wird besser sein. Lassen Sie uns diesen
hier platzieren und vielleicht die P-Zone
und all diese Knoten
leicht nach links
verschieben und all diese Knoten
leicht nach links und dann all
diese Control G F Two auswählen, und das nennt man Kollision. Das ist meine Kollisionsgruppe. Und bringen Sie diese Gruppeneingabe zur
Sprache, ein bisschen so. Und auf diese Weise haben wir unseren Knotenbaum
organisiert. Wenn
Sie in Zukunft darauf zurückkommen, werden
Sie genau wissen, was
jede Gruppe von Knoten tut. Weil wir sie beschriftet haben. Wenn Sie
den gesamten Knotenbaum aus der Vogelperspektive betrachten
, beginnen
Sie außerdem , die Logik
hinter allem zu erkennen, was wir getan haben. Als abschließende Zusammenfassung
finden Sie hier die Logik von
allem, was wir gebaut haben. Zunächst
definieren wir die Anfangsbedingungen, wie viele Punkte wir haben, wann wir
Punkte spawnen wollen und all das Diese Punkte werden später in die Simulationszone
gelangen. Das erste, was wir hier
tun, ist die Beschleunigung und dann die Geschwindigkeit zu
definieren. Was wir beide verwenden, um
die Position unserer Punkte zu aktualisieren. Sobald wir diese Grundkonfiguration haben, können
wir anfangen, über
verschiedene Einschränkungen nachzudenken. Für unsere Physik-Engine gibt es zwei Arten von
Einschränkungen, die uns wichtig sind. Die erste ist
die Kollision, also die Kollision zwischen
den verschiedenen Kugeln, und dann die verschiedenen
Wände, also der Boden, die rechte und hintere Wand sowie die linke und vordere Wand. Und am Ende des Notizbaums verwenden
wir diese Instanz
auf dem Punkteknoten, um diese Punkte in eine tatsächliche Geometrie
umzuwandeln, sich in unserem Fall zufällig
um eine EUV-Kugel handelt Und doch ist das unsere
gesamte Physik-Engine. Und ja, das ist
im Grunde alles dafür, wie Sie Ihre eigene
Physik-Engine in Blender erstellen
können. Jetzt können Sie
eine Szene rund um
die Simulation erstellen und
sie nach Belieben rendern. Außerdem, weil Schattierung und Animation den
Rahmen der Ergebnisse sprengen würden
und ich den Kurs
kurz halten und ihn nur
auf Geometrieknoten beschränken wollte kurz halten und ihn nur
auf Geometrieknoten Aus diesem Grund habe ich ein kostenloses
Bonus-Video erstellt, das Sie sich ansehen können. Darin erkläre ich Ihnen Schritt für Schritt
, wie ich mein Rendering erstellt habe Sie können es sich entweder
über den Link in
der Beschreibung oder
auf meiner Website ansehen . Der Teil mit den Geometrieknoten und der Teil mit dem Rasieren sind sehr
unterschiedliche Disziplinen, und deshalb war es
sinnvoller, sie als
separate Dinge zu betrachten, da ich beim
Unterrichten der beiden
unterschiedliche Herangehensweisen Abschließend danke ich Ihnen, dass Sie sich
für diesen Kurs angemeldet haben. Ich hoffe, du hast viel gelernt. Wenn Sie diesen Kurs nützlich fanden, hinterlassen
Sie uns bitte eine gute Bewertung , die uns hilft,
bessere Kurse zu erstellen Sie können den
Rest meiner Kurse trotzdem hier nachlesen. Vielen Dank
und wir sehen uns oder.