Mastersimulationen mit Geometrieknoten in Blender | Yassine Larayedh | Skillshare

Playback-Geschwindigkeit


1.0x


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

Mastersimulationen mit Geometrieknoten in Blender

teacher avatar Yassine Larayedh, VFX Artist

Schau dir diesen Kurs und Tausende anderer Kurse an

Erhalte unbegrenzten Zugang zu allen Kursen
Lerne von Branchenführern, Ikonen und erfahrenen Experten
Wähle aus einer Vielzahl von Themen, wie Illustration, Design, Fotografie, Animation und mehr

Schau dir diesen Kurs und Tausende anderer Kurse an

Erhalte unbegrenzten Zugang zu allen Kursen
Lerne von Branchenführern, Ikonen und erfahrenen Experten
Wähle aus einer Vielzahl von Themen, wie Illustration, Design, Fotografie, Animation und mehr

Einheiten dieses Kurses

    • 1.

      Trailer

      1:51

    • 2.

      Wiederholungszonen

      1:46

    • 3.

      Simulationszonen

      2:30

    • 4.

      Was ist eine Simulation

      1:04

    • 5.

      Was ist Velocity

      1:07

    • 6.

      Was ist Beschleunigung

      3:27

    • 7.

      Was ist ein Attribut

      5:05

    • 8.

      Das Beschleunigungsattribut

      8:38

    • 9.

      Das Problem von Delta-t

      8:13

    • 10.

      Hinzufügen von Einschränkungen Pt.1

      5:08

    • 11.

      Hinzufügen von Einschränkungen Pt.2

      6:51

    • 12.

      Radius

      11:46

    • 13.

      Kollision

      9:36

    • 14.

      Das Spawnen der Partikel

      4:31

    • 15.

      Reibung

      3:51

    • 16.

      Endgültige Übersicht

      7:56

  • --
  • Anfänger-Niveau
  • Fortgeschrittenes Niveau
  • Fortgeschrittenes Niveau
  • Jedes Niveau

Von der Community generiert

Das Niveau wird anhand der mehrheitlichen Meinung der Teilnehmer:innen bestimmt, die diesen Kurs bewertet haben. Bis das Feedback von mindestens 5 Teilnehmer:innen eingegangen ist, wird die Empfehlung der Kursleiter:innen angezeigt.

196

Teilnehmer:innen

3

Projekte

Über diesen Kurs

In diesem Kurs lernen Sie, wie Sie Simulationen mit Geometrie-Knoten in Blender erstellen, indem Sie Ihre eigene Physik-Engine erstellen.

Dieser Kurs ist nicht nur ein weiteres „Klick-Tutorial“ – Es ist ein tiefer Eintauchen in die Welt der Simulationen in Blender.

Sie lernen nicht einfach wie ein Künstler zu denken, sondern auch wie ein Ingenieur.

Sie erkunden die technische Seite der Erstellung realistischer Simulationen.

Wir behandeln wesentliche Physikkonzepte wie

  • Schwerkraft
  • Geschwindigkeit
  • Beschleunigung
  • Kollision und mehr

All das ermöglicht es Ihnen, Simulationen mit einem soliden Verständnis der Wissenschaft dahinter zu meistern.

Am Ende sind Sie gerüstet, um komplexe, dynamische Szenen selbstbewusst zu entwerfen.

Triff deine:n Kursleiter:in

Teacher Profile Image

Yassine Larayedh

VFX Artist

Kursleiter:in

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

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

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

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

Thanks for stopping by! Feel free to reach... Vollständiges Profil ansehen

Level: Intermediate

Kursbewertung

Erwartungen erfüllt?
    Voll und ganz!
  • 0%
  • Ja
  • 0%
  • Teils teils
  • 0%
  • Eher nicht
  • 0%

Warum lohnt sich eine Mitgliedschaft bei Skillshare?

Nimm an prämierten Skillshare Original-Kursen teil

Jeder Kurs setzt sich aus kurzen Einheiten und praktischen Übungsprojekten zusammen

Mit deiner Mitgliedschaft unterstützt du die Kursleiter:innen auf Skillshare

Lerne von überall aus

Ob auf dem Weg zur Arbeit, zur Uni oder im Flieger - streame oder lade Kurse herunter mit der Skillshare-App und lerne, wo auch immer du möchtest.

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.