-
HINTERGRUND DER ERFINDUNG
-
1. Gebiet der Erfindung
-
Die
vorliegende Erfindung betrifft einen auf Teilchen beruhenden Lösungsfinder,
der den Zustand des Teilchensystems ständig verbessert, solange es
sich in einem ungültigen
Zustand befindet.
-
2. Beschreibung des Stands
der Technik
-
Herkömmliche
Teilchensysteme, die bei Simulationen, wie beispielsweise für Animationsvorgänge, verwendet
werden, beginnen jeden Teilchenbewegungs-Berechnungsschritt mit
der Annahme, dass sich bei Beginn des Schritts alle Teilchen in
gültigen
Zuständen
befinden. Bei jedem Schritt führt
das System eine Iteration auf Teilchenpositionen und -geschwindigkeiten
aus, bis alle Teilchen einen gültigen
Zustand erreichen, in dem sich die Teilchen, Kanten und Flächen nicht überlappen.
Wenn ein herkömmliches
System wegen Randbedingungen oder anderen Faktoren eine Situation
erreicht, bei der nicht für
alle Teilchen ein zulässiger Zustand
erreicht werden kann, schlägt
der Vorgang fehl. Ein Fehlschlag führt zu einem "Zusammenbruch" der Simulation,
bei dem beispielsweise das System in eine unendliche Schleife gerät oder sich
die Simulation auf unerwartete Weise verhält, wie beispielsweise, wenn
ein Stück
Stoff zu einem Punkt zusammenschrumpft. Im Ergebnis benötigen herkömmliche
Teilchensysteme oft viel Zeit, um die Endpositionen der Teilchen
zu berechnen.
-
Es
besteht Bedarf nach einem System, bei dem kein Fehlschlag auftritt,
wenn ein Teilchen in einem unzulässigen
Zustand endet, und das Berechnungen kosteneffizienter ausführt, wobei
der Zustand des Systems stetig verbessert wird.
-
KURZE BESCHREIBUNG DER ERFINDUNG
-
Es
ist ein Aspekt der vorliegenden Erfindung, ein System bereitzustellen,
das es einem Teilchen gestattet, in einen unzulässigen Zustand zu geraten,
ohne dass die Simulation fehlschlägt.
-
Ein
weiterer Aspekt der vorliegenden Erfindung ist es, ein System bereitzustellen,
das Berechnungen vereinfacht, damit die Simulation kosteneffizienter
wird.
-
Ein
anderer Aspekt der vorliegenden Erfindung ist es, dass alle Randbedingungen,
die für
das Teilchensystem gegeben sind, in der gleichen Iterationsschleife
behandelt werden.
-
Ein
anderer Aspekt der vorliegenden Erfindung ist es, dass jede Zeitschrittgröße zulässig ist.
-
Ein
anderer Aspekt der Simulation ist es, dass unterschiedliche Erscheinungen
in einem vereinheitlichten Rahmen unter Verwendung von Teilchen
mit Randbedingungen behandelt werden. Beispielsweise werden die
Wechselwirkungen von Stoff, festen Körpern und Fluiden alle gleichzeitig
innerhalb desselben Rahmens behandelt.
-
Die
obigen Aspekte können
durch einen Teilchenposition-Lösungsfinder
mit fester Zeitschrittgröße erhalten
werden, der es Teilchen erlaubt, ein Ende des Zeitschritts in einem
unzulässigen
Zustand zu erreichen, und wobei diese Partikel dann auf einen zulässigen Zustand
hin gedrängt
werden. Dies ermöglicht
es, dass der Lö sungsfinder
die Simulation fortsetzt, während
sich die Simulationsergebnisse auf ein zulässiges Verhalten hin bewegen.
Teilchenkollisionsberechnungen werden vereinfacht, indem ein nicht-sequentielles
Modell herangezogen wird. Die Geschwindigkeit der Simulation wird
verbessert, indem einige Vorgänge
außerhalb der
Berechnungsschleife des Lösungsfinders
ausgeführt
werden.
-
Diese
Aspekte und Vorteile, zusammen mit anderen Aspekten und Vorteilen,
die im Folgenden offensichtlich werden, haben ihre Grundlage in
den Einzelheiten der Ausgestaltung und des Betriebs, wie sie im
Folgenden vollständiger
beschrieben und beansprucht werden, wobei auf die angehängten Zeichnungen
Bezug genommen wird, die einen Teil des vorliegenden Dokuments bilden
und bei denen gleiche Bezugsziffern sich durchgängig auf gleiche Teile beziehen.
-
KURZE BESCHREIBUNG DER ZEICHNUNGEN
-
1 stellt
Formen dar.
-
2 zeigt
Normalen und nächste
Punkte.
-
3 veranschaulicht
einen Lösungsfindungsvorgang.
-
4 zeigt
Teilchenwege und sich ergebende Positionen des Lösungsfinders.
-
5 zeigt übliche Wege
und Positionen.
-
6 stellt
Arten von Kollisionspaaren dar.
-
7 zeigt
eine umhüllende
Kugel für
unterschiedliche Teilchenwege.
-
8 stellt
Gruppen von Kollisionspaaren dar.
-
9 zeigt
eine Kantenkollisionserkennung unter Verwendung einer Umkehrung
des Volumenvorzeichens.
-
10 zeigt
ein Biegen, das durch eine hinzugefügte Verknüpfung gehandhabt wird.
-
11a bis 11c zeigen
eine Handhabung unter Verwendung eines Winkels zwischen Normalen.
-
12 zeigt
Objekte, die beruhend auf Trennungsgeschwindigkeiten getrennt werden.
-
13 stellt
eine Oberflächendurchdringungshandhabung
dar.
-
14 veranschaulicht
den Gesamtvorgang der vorliegenden Erfindung.
-
15a bis 15h stellen
eine Anzeigesequenz eines Teilchensystems dar, das einen unzulässigen Zustand
durchläuft.
-
16 stellt
die Hardware der vorliegenden Erfindung dar.
-
AUSFÜHRLICHE BESCHREIBUNG DER BEVORZUGTEN
AUSFÜHRUNGSFORMEN
-
Einleitung
-
Die
hier gegebene Erörterung
beschreibt einen Dynamik-Lösungsfinder
für interagierende
Teilchen. Der Lösungsfinder
hat den Zweck, die Dynamik einer großen Vielzahl interagierender
Formen in einem einheitlichen Rahmen zu berechnen. Der Lösungsfinder
richtet sich hauptsächlich
auf Anwendungen bei der Computergrafik, die sich von Spezialeffekten
in abendfüllenden
Filmen bis zu Echtzeitsimulationen in Spielen erstrecken. Aber er
kann auch für
andere Zwecke, wie beispielsweise bei der frühen Prototyperstellung und beim
Testen eines physikalischen Systems mittels Simulation, verwendet
werden; auch wenn die Simulation möglicherweise nicht genau genug
für eine
endgültige
Bewertung ist, kann sie helfen, frühe Entwurfsentscheidungen zu
fällen.
Diese Zielanwendungen erfordern physikalisch plausible Simulationen
eines weiten Bereichs natürlicher
Phänomene,
wie beispielsweise von Flüssigkeiten,
festen Körpern
und Stoffen. Weil alle diese Phänomene
möglicherweise
gleichzeitig miteinander interagieren können, ist es wichtig, sie in
einem einzigen Rahmen zu behandeln.
-
Im
Folgenden werden am Beispiel der Stoffsimulation einige der Herausforderungen
erläutert,
die sich einem dynamischen Lösungsfinder
stellen. Zunächst
kann die Bewegung eines Stücks
Stoff, wie beispielsweise eines Bandes oder eines Kleidungsstücks, möglicherweise
ziemlich einfach erscheinen, weil sie gut vertraut ist. Stoff ist
jedoch ein Beispiel für
ein in hohem Maße
sich selbst beeinflussendes System. Die bei weitem größte Herausforderung,
die sich einem Lösungsfinder
für Stoff
stellt, ist es, dass Stoff sowohl mit sich selbst als auch mit der
Umgebung kollidiert. Als Folge hiervon müssen bei jedem Schritt der
Simulation viele Interaktionen verarbeitet werden. Idealerweise
möchten
wir nicht, dass der Stoff sich selbst oder irgendwelche Objekte
in der Umgebung durchdringt. Das Erscheinungsbild von Stoff ist
auch wegen des Auftretens von Falten und Knitterstellen hochgradig
komplex. Demgemäß sollte
ein Lösungsfinder
für Stoff
in der Lage sein, eine sehr große
Datenmenge zu bearbeiten. Insbesondere sollten sich die Kosten (Rechenzeit)
des Lösungsfinders
bei zunehmender Komplexität
in berechnungsfreundlicher Weise erhöhen. Dies schließt teuere
und komplizierte Lösungsfinder
aus. Einfache und effiziente Lösungsfinder
werden bevorzugt. Ein anderer Faktor, der die Simulation von Stoff
erschwert, ist, dass Stoff einer Dehnung starken Widerstand entgegensetzt.
Dies macht es schwierig, den Stoff beispielsweise als System miteinander
verbundener Federn zu modellieren, weil steife Federn teuere Lösungsfinder
erfordern, um Instabilitäten
zu vermeiden. Ferner ist es wichtig, dass der Lösungsfinder das Langzeit-Verhalten
von Stoff widerspiegelt. Beispielsweise sollte ein Stück Stoff,
das nur unter der Einwirkung der Schwerkraft fallengelassen wird,
einen vollständigen
Ruhezustand errreichen. Es scheint keine Stoff-Lösungsfinder zu geben, die alle
diese Herausforderungen fehlerlos bewerkstelligen können. Daher
ist die Stoffsimulation immer noch ein aktives Forschungsgebiet
innerhalb des Felds der Computergrafik. Die anfängliche Motivation für die hier
beschriebene Erfindung war es, einen neuen Stoff-Lösungsfinder
zu erstellen. Später
hat man erkannt, dass der Stoff-Lösungsfinder auf eine größere Klasse
von Phänomenen
erweitert werden kann, wie beispielsweise Teilchen.
-
Eines
der Hauptmerkmale der hier beschriebenen Vorgehensweise ist es,
dass das System dem dynamischen Lösungsfinder gestattet, bei
jedem Zeitschritt zu einem unzulässigen
Zustand, beispielsweise dem Zustand, bei dem der Stoff sich selbst
oder einen anderen Körper
durchdringt, zurückzukehren.
Anstatt zu versuchen, einen zulässigen
Zustand nach jedem Zeitschritt der Simulation zu garantieren, versucht
das System, den Dynamikablauf hin zu einem zulässigen Zustand zu drängen. Der
Lösungsfinder
verbessert allmählich
den Zustand des Stoffs in einem einzigen Zeitschritt der Simulation.
Der Lösungsfinder
stoppt, sobald wir einen zulässigen
Zustand des Systems berechnen, oder wenn er eine vom Benutzer eingestellte
Zeitgrenze erreicht hat, die begrenzt, wie viel Zeit zur Verbesserung
des Zustands aufgewendet werden darf. Diese Vorgehensweise hat mehrere
Vorteile. Erstens ermöglicht
sie schnellere Berechnungszeiten. Für einige Anwendungen ist es
in Ordnung, wenn sich die Simulation in einem unzulässigen Zustand
befindet. Beispielsweise sind in den frühen Stadien der Erstellung
einer Animation die Animatoren mehr daran interessiert, ein Gefühl für die allgemeine
Bewegung der Formen zu erhalten. Eine schnelle Rückkopplung ist in diesem Stadium
wichtiger als kleine Fehler im Aussehen der Formen. Ein weiterer
Vorzug dieser Vorgehensweise ist, dass der Lösungsfinder in einer Situation,
in der nicht alle Randbedingungen erfüllt werden können, nicht
stecken bleibt. Diese Situationen treten auf, weil in einer Animationsumgebung
die Umgebung und Kräfte
nicht immer physikalisch konsistent sind. Schließlich verursachen Lösungsfinder,
die von Anfang an einen zulässigen
Zustand annehmen, üblicherweise
einen vollständigen
Fehlschlag (mindestens nach allgemeiner Erfahrung), wenn sie einen
unzulässigen
Zustand erhalten. Zusammenfassend gilt: Indem ein "Fehlschlag" der Simulation erlaubt
wird, erhalten wir einen Lösungsfinder,
der schneller, robuster und einfacher zu implementieren ist, weil
er Näherungsberechnungen
erlaubt, die in einem System, das immer eine Lösung mit einem gültigen Zustand
zu finden versucht, nicht akzeptabel wären.
-
Notationen
-
Um
die hier dargelegten Algorithmen lesbarer zu machen, werden die
folgenden Notationen verwendet. Die Darstellung nutzt den "Arial fett"-Zeichensatz für alle Variablen
und Programmcodebefehle, um sie klar von dem erläuternden Text zu unterscheiden.
Um bestimmte Elemente eines Feldes auszuwählen, werden Variablen verwendet,
die eine Indexmenge enthalten. Wenn beispielsweise I = (0, 100,
3) gilt, dann setzt der Befehl feld[I] = 0 nur die Einträge 0, 100
und 3 des Feldes auf Null. Wenn die Indexmenge eine Menge aufeinanderfolgender
Indizes zwischen a und b ist, dann wird die Notation a.b verwendet.
Beispielsweise addiert der folgende Befehl feld[1 .. N] + = 1 die
Zahl 1 zu jedem Element des Feldes mit einem Index zwischen 1 und
N. Diese Notationen machen viele der Algorithmen kompakter und daher
leichter zu lesen. Es sollte für
einen Fachmann auf dem Gebiet problemlos sein, die Algorithmen in
irgendeine Computersprache, wie beispielsweise C++, zu übersetzen.
-
Grundstruktur des Lösungsfinders
-
In
dem hier erläuterten
Modell ist eine Form eine Ansammlung von Teilchen, die unter Verwendung von
Kanten, Dreiecken und Tetraedern verbunden sind. 1 zeigt
einige Beispiele 20 und 22 von Formen, die aus
Kanten, Dreiecken und Tetraedern geformt sind und die vom dynamischen
Lösungsfinder
bearbeitet werden. Der Lösungsfinder
trifft keine Annahmen, wie diese Elemente miteinander verbunden
sind, um Objekte zu formen, und wie die Objekte gehandhabt werden,
weil erwartet wird, dass dies auf übliche Weise bewerkstelligt
wird. Beispielsweise wird Stoff als ein Dreiecksnetz modelliert,
und ein dreieckiges Netz kann für
ein höher
aufgelöstes
Bild unterteilt werden, indem übliche
Unterteilungsverfahren verwendet werden.
-
Die
Dynamikeigenschaften des Systems werden modelliert, indem den Teilchen
unterschiedliche Eigenschaften zugewiesen werden, die in Feldern
gespeichert werden, die durch einen Teilchenindex i indiziert werden.
Der Lösungsfinder
betrachtet N als die Gesamtanzahl der Teilchen. Die Dynamikeigenschaften
jedes Teilchens werden durch seine Position pos[i] und Geschwindigkeit
(velocity) v[i] modelliert. Andere Eigenschaften umfassen die inverse
Masse inv_masse[i] und die Dicke radius[i]. Zusätzlich benötigt der Lösungsfinder einige zusätzliche
Daten, die jedem Teilchen zugeordnet sind, wie es ausführlicher
im Folgenden beschrieben wird.
-
Die
Formen interagieren auch mit Flächen,
die die Umgebung modellieren. Einige benötigte Eigenschaft ist, dass
die Fläche
die Berechnung des nächsten
Punkts (oder des kürzesten
Abstands) auf der Fläche für jeden
gegebenen Punkt im Raum gestattet. Eine andere benötigte Eigenschaft
ist es, dass für
jeden Punkt eine Normale existiert, um zu bestimmen, auf welcher
Seite der Fläche
sich ein Punkt befindet. Jede Fläche, die
mit den Formen interagiert, sollte daher eine Funktion aufweisen:
nächster_punkt(fl,
pos, np, norm)
-
Diese
Funktion, die von einem Fachmann auf dem Gebiet bereitgestellt werden
kann, liefert den nächsten
Punkt np und die Normale norm auf der Fläche fl von der Position pos.
-
Einfache
Beispiele solcher Flächen
umfassen Ebenen und Kugeln. Ein Dreiecksnetz ist ein anderes wichtiges
Beispiel. In diesem Fall sind die Normalen an den Kanten und Knoten
als die Mittelwerte der Normalen ihrer benachbarten Flächen definiert. 2 stellt
zwei Beispiele 40 und 42 von Flächen und
ihren nächsten Punkten
dar, wie sie durch eine Funktion definiert werden, die für jeden
Punkt im Raum den nächsten
Punkt auf ihrer Fläche
zusammen mit der dortigen Normalen liefert. Es ist zu bemerken,
dass in manchen Fällen
die Normale nicht notwendigerweise gleich der normalisierten Richtung
des Punkts zum nächsten
Punkt ist.
-
Simulationen
werden einzelbildweise (oder zeitschrittweise) berechnet. Der Lösungsfinder
wird für
jedes Einzelbild der Simulation aufgerufen und erhält als Eingabe
die auf die Teilchen wirkenden externen Kräfte (forces). Diese werden
in einem Feld mit dem Namen kraft gespeichert. Die allgemeine Struktur
einer Animationsschleife gemäß der hier
erläuterten
Vorgehensweise ist wie folgt:
-
Die
erste Programmroutine, hole_kräfte
(kraft) (siehe auch 60 in 3), kümmert sich
um Werte, die vom Lösungsfinder
benötigt
werden und die für
die gesamte Simulation nur einmal berechnet zu werden brauchen.
Die diesen Lösungsfinder
verwendende Anwendung ist dafür
verantwortlich, die externen Kräfte
zu berech nen, wie beispielsweise die Schwerkraft und den Luftwiderstand.
Es ist zu bemerken, dass, weil übliche Lösungsfinder
mit Zeit-Teilschritten arbeiten, die mit Kollisionen in Beziehung
stehen (wie ausführlicher
unten erläutert
wird), diese Krafteingabe bei üblichen
Lösungsfindern
innerhalb eines Zeitschritts mehrmals stattfinden muss. Der hier
beschriebene Lösungsfinder
ist im Ergebnis effizienter.
-
Die
letzte Programmroutine, führe_dämpfung_aus(),
fügt der
Geschwindigkeit der Teilchen eine Dämpfung hinzu. Dieser Schritt
ist nützlich,
um ein großes Überschwingen
aufgrund heftiger Kollisionen zwischen Teilchen zu entfernen. Es
ist daher in manchen Situationen wichtig, diese Programmroutine
am Ende des Simulationsschritts aufzurufen.
-
Simulationen
werden üblicherweise
unter Verwendung eines variablen Zeitschritts fortgeschaltet. Um die
unten aufgeführten
Formeln einfach zu halten, nehmen wir an, dass dieser Zeitschritt
immer gleich 1 ist. Der Lösungsfinder
kann andere Zeitschrittgrößen handhaben,
indem einige der Werte entsprechend skaliert werden, wenn ihre Einheiten
von der Zeit abhängen.
Diese Annahme zwingt den Lösungsfinder
auch dazu, sich nicht auf kleine Zeitschritte zu verlassen, um eine
Stabilität
zu erreichen.
-
Der
Lösungsfinder
weist grob gesprochen drei grundlegende Schritte auf. Im ersten
Schritt
62 werden, wie in
3 dargestellt,
externe Kräfte
zu den Geschwindigkeiten hinzugezählt. In dem zweiten Schritt
64 werden
Kollisionen und Randbedingungen behandelt, indem die Geschwindigkeiten
verändert
werden. Schließlich werden
in dem dritten Schritt
66 die Positionen der Teilchen unter
Verwendung der modifizierten Geschwindigkeiten aktualisiert. Genauer:
-
Die
in dem kraft-Feld bereitgestellten Kräfte modellieren externe Kräfte, wie
beispielsweise die Schwerkraft und den Luftwiderstand. Sie weisen
keine internen Kräfte
auf, die beispielsweise durch Steifheit und Biegen hervorgerufen
werden. Wenn diese auf diese Weise behandelt werden würden, könnten sich
instabile Simulationen ergeben, die unbegrenzte Ergebnisse liefern.
-
Ein
sehr wichtiger Schritt in dem Algorithmus ist die Schleife in dem
Algorithmus, die Kollisionen und interne Kräfte auflöst. Jede Iteration dieser Schleife
versucht eine Verbesserung des Zustands der Simulation. Die Operationen
in der Schleife umfassen zwei grundlegende Schritte. In dem ersten
Schritt versucht der Lösungsfinder,
alle Kollisionen aufzulösen,
die in dem laufenden Simulationsschritt zwischen den Formen auftreten.
Dies beinhaltet, den Weg der Elemente der Form in der Raumzeit zu
verfolgen. Der zweite Schritt löst
interne Kräfte,
wie beispielsweise Streckung und Biegung, mittels weicher Randbedingungen
auf und löst
Durchdringungen zwischen Formen auf, die durch den Kollisionsschritt
nicht aufgelöst
werden. Die Wiederholungsschleife endet, wenn keine Veränderungen
der Teilchen aufgetreten sind ("nichts
ist geschehen")
oder wenn eine Höchstanzahl
it_max erreicht wurde. Dieser letzte Parameter lässt die Anwendung die maximale
im Lösungsfinder
ver brachte Zeit steuern. Typischerweise würde dieser Wert auf zwischen
5 und 20 Iterationen gesetzt werden.
-
An
dieser Stelle kann die hier erläuterte
Vorgehensweise in Kontrast zu anderen üblichen Simulationsstrategien
gesetzt werden. Eines der Hauptmerkmale des hier beschriebenen Lösungsfinders
ist es, dass der Lösungsfinder
die Simulation unter Verwendung der gleichen Zeitschrittgröße (in unserem
Fall gleich 1) fortschreibt. Diese Vorgehensweise unterscheidet
sich sehr von anderen herkömmlichen
Lösungsfindern,
die versuchen, die Kollisionen genauer aufzulösen, indem sie eine unterteilte
Abtastung (sub sampling) des Zeitschritts durchführen. Insbesondere, wenn die
Teilschritte auf der Zeit bis zur ersten Kollision beruhen. Bei
diesem herkömmlichen
Fall werden alle Teilchen immer bis zur Zeit der ersten Kollision
fortgeschrieben. Die Kollision wird dann aufgelöst, und die Teilchen werden
wieder aktualisiert. Dieser Vorgang wird wiederholt ausgeführt, bis
es keine weiteren Kollisionen gibt oder das Ende des Zeitschritts
erreicht ist. Ein mögliches
Problem bei dieser herkömmlichen
Vorgehensweise ist es, dass sie möglicherweise sehr aufwendig
werden kann, wenn es viele Kollisionen gibt. In einigen Fällen kann
sie sogar steckenbleiben, wenn das System eine Situation, die viele
gleichzeitige Kollisionen beinhaltet, nicht auflösen kann. Im Gegensatz dazu
braucht der hier erläuterte Lösungsfinder überhaupt
keine Teilschritte zu verwenden. 4 und 5 veranschaulichen
den Unterschied zwischen der hier erläuterten Vorgehensweise (4)
und herkömmlichen,
durch Kollisionsereignisse fortgeschalteten Simulationen (5)
im Falle dreier interagierender Teilchen a, b und c. Die Teilchen
sind der Randbedingung unterworfen, dass sie sich in horizontaler
Richtung befinden. Die Zeit ist in vertikaler Richtung gezeigt.
Während
eines Zeitschritts bewegt sich daher ein Teilchen entlang eines
stetigen Weges von unten nach oben. Bei der Vorgehensweise der vorliegenden
Ausführungsform
der Erfindung lösen
wir alle Kollisionen für jedes
Teilchen während
der Zeit auf und kombinieren dann die Ergebnisse. Beispielsweise
sind für
Teilchen c zwei "mögliche" Wege gezeigt. Bei der
durch Kollisionsereignisse fortgeschriebenen Vorgehensweise werden dagegen
die Kollisionen sequentiell behandelt (ein sequentielles Kollisionsmodell),
wie durch die zwei Zeit-Teilschritte oder Kollisionspunkte in 5 gezeigt,
so dass dadurch nur ein einziger "möglicher" Weg für jedes Teilchen
zulässig
ist. Ein anderes Merkmal des Lösungsfinders
ist, dass wir am Ende der Iterationen keinen zulässigen Zustand zu garantieren
brauchen. Diese Möglichkeit
ist durch die Endpositionen der Teilchen in 4 veranschaulicht,
in der die Teilchen nicht zu Positionen gelangen, die einem sequentiellen
Kollisionsmodell zugeordnet sind. Wie in der Einleitung bemerkt,
hat dies mehrere Vorteile.
-
In
den nächsten
Abschnitten beschreiben wir die verschiedenen Bestandteile des Lösungsfinders
ausführlicher.
-
Berechnung von Kollisionspaaren
-
Wie
oben erwähnt,
sind die Formen aus Punkten, Kanten, Dreiecken und Tetraedern zusammengesetzt.
Wenn sich die Formen bewegen, muss der Lösungsfinder die Interaktionen
zwischen diesen Grundformen berechnen. Zusätzlich ist diesen Grundformen
eine bestimmte Dicke zugeordnet. Demzufolge arbeiten wir statt mit
Punkten in Wirklichkeit mit Kugeln. Die Dicke kann für jedes
Teilchen unterschiedlich sein und ist in einem Feld radius gespeichert.
Die Dicke bei irgendeinem Punkt einer Kante, eines Dreiecks oder
eines Tetraeders wird berechnet, indem die an deren Knoten definierte
Dicke interpoliert wird.
-
Die
möglichen
Interaktionen zwischen den Grundformen sind auf die folgenden Paare
beschränkt:
Kugel/Kugel (sphere/sphere – ss),
Kugel/Kante (sphere/edge – se),
Kugel/Dreieck (sphere/triangle – st)
und Kante/Kante (edge/edge – ee). 6 stellt
die unterschiedlichen Arten der vom Lösungsfinder betrachteten Paare dar.
Andere Interaktionen wie beispielsweise Dreieck/Dreieck können auf
eine Folge von Interaktionen, die zu einer Kombination der vier
Grundtypen gehören,
reduziert werden. Um beispielsweise die vollständige Interaktion zwischen
zwei Dreiecken zu behandeln, lassen wir jede Kugel des ersten Dreiecks
mit dem zweiten Dreieck kollidieren und umgekehrt. Zusätzlich lassen
wir auch ihre Kanten kollidieren. Dies ergibt sechs Interaktionen
des Typs "st" und neun Interaktionen
des Typs "ee".
-
Bei
jedem Zeitschritt berechnet der Lösungsfinder die vier Paarfelder
paar_ss, paar_se, paar_st und paar_ee. Jeder Eintrag des Paarfeldes
ist eine Indexmenge. Die Anzahl der Indizes für jede Tabelle und ihre Bedeutung
sind wie folgt:
paar_ss: (i0, j0): Interaktion der Kugel i0
mit der Kugel j0
paar_se: (i0, j0, j1): Interaktion der Kugel
i0 mit der Kante (j0, j1)
paa_rst: (i0, j0, j1, j2): Interaktion
der Kugel i0 mit dem Dreieck (j0, j1, j2)
paar_ee: (i0, i1,
j0, j1): Interaktion der Kante (i0, i1) mit der Kante (j0, j1)
-
Diese
vier Paarfelder werden zu einem einzigen Feld paar kombiniert.
-
Die
Berechnung der Paarfelder ist im allgemeinen sehr aufwendig. Daher
muss dafür
Sorge getragen werden, die Paarfelder außerhalb der Iterationsschleife
zu berechnen. Dies erfordert, dass alle möglicherweise kollidierenden
Paare, einschließlich
derjenigen, die durch aufgrund von Kollisionen verursachten Geschwindigkeitsänderungen
verursacht werden, aufgenommen werden. Glücklicherweise kann, wenn die
Massen der Teilchen ungefähr
gleich sind, kein Teilchen jemals die (umhüllende) Kugel verlassen, die
durch seine anfängliche
Position und anfängliche
Geschwindigkeit (und die Dauer des Zeitschritts) definiert ist,
wie in 7 gezeigt. 7 veranschaulicht,
dass die durch die anfängliche
Geschwindigkeit definierte Kugel den Bereich begrenzt, den ein Teilchen
auch nach Kollisionen erreichen kann. Insbesondere zeigt 7 ein
Teilchen 120, das während
des Zeitschritts nicht in eine Kollision verwickelt ist und sich
daher am weitesten von seiner Anfangsposition weg beweg, ein Teilchen 122,
das in der Mitte des Zeitschritts kollidiert, und ein Teilchen 124,
das früh während des
Zeitschritts kollidiert. Für
Paare, die Dreiecke und Kanten beinhalten, berechnet der Lösungsfinder
die Kugel, die die umhüllenden
Kugeln ihrer Teilchen umhüllt.
-
Für jedes
Paar sich überlappender
umhüllender
Kugeln werden mögliche
Kollisionspaare erzeugt. Eine unkomplizierte, aber teuere Art, diese
Paare zu berechnen, ist es, einfach alle umhüllenden Kugeln zu vergleichen.
Offensichtlich ist diese Vorgehensweise zu teuer, wenn wir viele
umhüllende
Kugeln zu betrachten haben. Glücklicherweise
kann dieser Vorgang durch Verwendung einer räumlichen Datenstruktur beschleunigt werden.
Später
in diesem Dokument (siehe die unten gegebene Erörterung über räumliche Datenstrukturen) werden
zwei mögliche
Datenstrukturen erörtert:
Die Hash-Tabelle (Streuwerttabelle) und der Kugelbaum, die diesen
Vorgang beschleunigen können.
Der Lösungsfinder
ist jedoch nicht auf diese Datenstrukturen beschränkt.
-
Wenn
Selbst-Kollisionen aufgelöst
werden, ist das folgende Problem aufgetreten. Man betrachte eine Form,
die sich in einem Ruhezustand befindet, ohne dass externe Kräfte auf
sie einwirken. In diesem Fall sollte die Form in dem Ruhezustand
verbleiben. Wenn jedoch die Summe der Radien zweier Teilchen größer als
ihr Abstand im Ruhezustand ist, kollidieren sie mit sich selbst
und bewegen sich auseinander. Dies führt zu einer unerwünschten
Ausweitung der Form. Um dieses Problem zu beheben, ordnet der Lösungsfinder
jedem Kugel/Kugel-Kollisionspaar eine "Kollisionslänge" zu. Diese Länge ist gleich dem Minimum
der Summe ihrer Radien und ihres Abstands voneinander in ihrem Ruhezustand.
Dies stellt sicher, dass Selbst-Kollisionen den Ruhezustand nicht
verändern,
wenn keine externen Kräfte
ausgeübt
werden. Die Kollisionslängen
werden in einem Feld mit dem Namen koll_länge gespeichert. Um die Berechnung
dieser Kollisionslängen
zu beschleunigen, führt
der hier beschriebene Lösungsfinder
zu Beginn der Simulation eine Vorab-Berechnung einer Liste von Kollisionsnachbarn
durch und berechnet auch ihre Abstandsweite im anfänglichen
Zustand. Immer wenn ein Paar hinzuge fügt wird, wird ein Überprüfungsvorgang
ausgeführt,
um festzustellen, ob die Teilchen in dem Paar Nachbarn sind, und
um koll_länge[k]
für dieses
Paar entsprechend zu setzen.
-
Alle
in diesem Vorgang beschriebenen Schritte werden in der Funktion
berechne_paare() berechnet, die unmittelbar vor der Iterationsschleife
aufgerufen wird.
-
Raum-Zeit-Kollisionen
-
Der
erste Schritt in der Iterationsschleife ist das Auflösen von
Kollisionen zwischen den Kugeln, Kanten, Dreiecken und Flächen, die
in dem Zeitschritt auftreten. Um diese Kollisionen aufzulösen, durchläuft der Lösungsfinder
jedes mögliche
Kollisionspaar und berechnet die Zeit bis zur Kollision. Wenn diese
Kollision in dem Zeitschritt stattfindet, wird die entsprechende
Kollisionsreaktion berechnet. In dem Beispiel in
4 können für das Teilchen
c zwei Kollisionen auftreten, nämlich
eine Kollision von c mit b und eine Kollision von c mit a. Der Lösungsfinder
weist zwei unterschiedliche Schemata oder Ausführungsformen für nicht-sequentielle Modelle
aus, die die Reaktionen kombinieren. Das erste Schema oder die erste
Ausführungsform
setzt die Endgeschwindigkeit vorzugsweise auf die Kollisionsgeschwindigkeit
der Kollision mit der kleinsten Kollisionszeit. In
4 würden dadurch
die Kollisions-Endgeschwindigkeiten für die Teilchen b und c auf
diejenigen Geschwindigkeiten gesetzt werden, die sich aus der Teilchenkollision
zwischen diesen Teilchen ergeben, und die Kollision des Teilchens
b mit dem Teilchen a würde
ignoriert werden. Dies ist das in
4 gezeigte
Schema. Das zweite Schema berechnet vorzugsweise einen zeitgewichteten
Durchschnitt der Kollisionsgeschwindigkeiten. Das erste Verfahren
weist eine höhere
Reaktionsgeschwindigkeit auf und ist weniger von einer künstlichen
Dämpfung
beeinträchtigt
als das zweite Verfahren. Das zweite Verfahren ist jedoch robuster,
weil es alle Interaktionen in einem einzigen Zeitschritt berücksichtigt.
Welches Verfahren in der Praxis verwendet werden soll, hängt von
der Anwendung ab, und der Animationstechniker kann zwischen diesen
Schemata je nach Bedarf wählen.
Die Implementierung dieses Schritts ist wie folgt:
-
Die
Funktionen, die die Kollisionen zwischen Paaren und den Flächen bearbeiten,
aktualisieren beide die Geschwindigkeiten mittels einer gemeinsamen
Funktion mit dem Namen aktualisiere_geschwindigkeit. Diese Funktion
und die Programmroutine vor_kollisionen und nach_kollisionen hängen von
dem verwendeten Aktualisierungsschema ab. Bei dem ersten Schema,
bei dem der Lösungsfinder
nur die erste Kollision berücksichtigt,
lautet die Implementierung wie folgt:
-
Bei
dem zweiten Verfahren, bei dem ein gewichteter Mittelwert der Kollisionsgeschwindigkeiten
verwendet wird, lautet die Implementierung wie folgt:
-
Üblicherweise
gilt die Beziehung gewichtung(t) = 1 – t, aber die Funktion gewichtung
könnte
jede beliebige Funktion sein, die von der Zeit bis zur Kollision
oder manchen anderen Parametern abhängt.
ss: Kante
se:
Dreieck
st: Tetraeder
ee: Tetraeder
-
Für eine Darstellung
von Paaren, die zu Elementen einer höheren Dimension gruppiert sind,
wird auf
8 verwiesen. Dies erlaubt es
dem Lösungsfinder,
jedem Paar ein "vorzeichenbehaftetes
Volumen" zuzuordnen.
Eine Kante im eindimensionalen Raum hat ein vorzeichenbehaftetes
Volumen, das durch die Differenz ihrer Endpunkte definiert ist.
Auf ähnliche
Weise definiert ein Dreieck eine vorzeichenbehaftete Fläche im zweidimensionalen
Raum, wobei das Kreuzprodukt verwendet wird. Schließlich definiert
ein Tetraeder ein vorzeichenbehaftetes Volumen im dreidimensionalen
Raum. Im allgemeinen ist das Volumen des Elements als die Determinante
der Matrix definiert, deren Spalten die Punkte des Elements in homogenen
Koordinaten sind. Genauer gesagt, wenn das Element n Punkte P
0, P
1, ..., P
n aufweist, dann ist das Volumen die Determinante der
folgenden Matrix:
-
Es
sei vol(paar) eine Funktion, die dieses Volumen berechnet. Die Nützlichkeit
des Volumens ergibt sich aus der Tatsache, dass es verschwindet,
wenn die Elemente des Paars kollidieren. Für eine Veranschaulichung dieser
Tatsache für
zwei kollidierende Kanten wird auf 9 verwiesen,
wobei gezeigt wird, dass das Vorzeichen des Volumens des Tetraeders
wechselt, wenn die beiden Kanten kollidieren, und es im Moment der
Kollision null ist. Dieses Ergebnis liefert ein Verfahren, um für jedes
Paar den Schnittpunkt zu berechnen. Berechne zunächst die Volumina zu Beginn und
am Ende des Zeitschritts. Dann, wenn das Vorzeichen wechselt, kann
der Lösungsfinder
den Kollisionszeitpunkt unter Verwendung einer einfachen linearen
Interpolation finden. Diese Vorgehensweise funktioniert, wenn die
Elemente infinitesimal dünn
sind. Um mit beliebigen Dicken zu arbeiten, betrachtet der Lösungsfinder
außerdem
den quadrierten Abstand zwischen den beiden Elementen der Paare.
Für Kugeln
ist dies einfach der quadrierte Abstand zwischen ihren Mittelpunkten.
Für die anderen
Interaktionen ist jedoch die Berechnung ein klein wenig verwickelter
und wird im vorliegenden Dokument später erläutert (siehe unten den Abschnitt "Abstand zwischen
Grundformen"). Zum
Zwecke dieser Darlegung nehmen wir an, dass die Abstandsberechnung
in einer Funktion abstand2(paar) implementiert ist. Um den Kollisionszeitpunkt
zu ermitteln, wird die folgende Funktion statt nur das Volumen betrachtet:
koll_funk(paar)
= vorzeichen(vol(paar))·abstand2(paar).
-
Es
sei angenommen, dass die kombinierte Dicke der Elemente gleich dick
ist; dann lautet die Programmprozedur zum Berechnen der Auftreffzeit
wie folgt:
-
Die
Schönheit
dieser Programmprozedur liegt darin, dass sie sehr einfach ist und
für alle
vier Paartypen funktioniert. Es ist zu bemerken, dass die Vorgehensweise
nicht voraussetzt, dass sich die in dem Paar enthaltenen Punkte
während
des Zeitschritts in geraden Bewegungspfaden fortbewegen. Mit dieser
Annahme würde
die Berechnung der Kollisionszeit im Fall "se" die
Lösung
einer quadratischen Gleichung erfordern, und in den Fällen "st" und "ee" würde sie
die Lösung
einer kubischen Gleichung erfordern. Dieses Verfahren mag zunächst als
weniger genau erscheinen. Die Annahme eines linearen Wegs ist jedoch
bereits selbst eine Näherung,
weil in jedem Zeitintervall eine während des Zeitintervalls wirkende
Kraft das Teilchen zu einer Bewegung entlang eines gekrümmten Wegs
veranlasst. Die Verwendung einer teueren Technik, um eine Näherung genau
zu lösen,
wie beispielsweise eine herkömmliche
lineare Näherungsberechnung,
ist unnützer
Aufwand.
-
Für die "ss"-Interaktion muss
der Lösungsfinder
die Kugeln auf eine Linie projizieren, bevor die Volumenformel verwendet
wird. Statt eine zufällige
Richtung zu wählen,
benutzt oder wählt
der Lösungsfinder
die Koordinatenachse, für
die der Absolutbetrag der Differenz zwischen den Kugelpositionen
zur Zeit 0 maximal ist. Auf ähnliche
Weise projiziert der Lösungsfinder
für die "se"-Interaktion die
drei Punkte auf diejenige Ebene, deren Normale die größte Koordinate
derjenigen Normalen ist, die durch die drei Punkte zur Zeit 0 definiert wird.
Diese Wahlentscheidungen stellen sicher, dass der Lösungsfinder
keine Ebene wählt,
für die,
auch wenn die Punkte nicht in Kontakt miteinander geraten, das Volumen
0 ist.
-
Wenn
man diese Teilstücke
zusammensetzt, erhalten wir eine Implementierung der Paarkollisionen wie
folgt:
-
Die
Funktion paarkollision() hängt
vom Paartyp ab und wird später
ausführlicher
beschrieben (siehe unten die Erläuterung "Kollisionsreaktion").
-
Um
die Kollision mit den Flächen
zu bearbeiten, berechnet der Lösungsfinder
für jedes
Teilchen die Durchdringungstiefe am Anfang und am Ende des Zeitschritts.
Wenn sich beide Punkte außerhalb
der Fläche befinden,
braucht nichts getan zu werden. Wenn es eine Überschneidung gibt, ermitteln
wir den Kollisionszeitpunkt und fahren auf ähnliche Weise wie bei den Paarkollisionen
fort. Die Durchdringungstiefe wird aus dem nächsten Punkt auf der Fläche und
der Richtung der Normalen dort berechnet:
-
Die
Durchdringungstiefe ist negativ, wenn keine Durchdringung vorliegt.
Die Implementierung der Zeit bis zum Kontakt ist dann wie folgt
gegeben:
-
Die
folgenden beiden Funktionen werden verwendet, um alle Kugel-/sp-Flächen-Kollisionen aufzulösen. Hier
ist die Implementierung:
-
Für eine ausführlichere
Beschreibung der flächenkollision-Programmroutine
wird auf die später
hier gegebene Erläuterung "Kollisionsantwort" verwiesen.
-
Behandlung von Randbedingungen
-
Nach
dem Ausführen
der Raum-Zeit-Kollisionen muss der Lösungsfinder alle Verformungskräfte, die von
internen Beanspruchungen, wie beispielsweise Streckungen oder Biegungen,
hervorgerufen werden, auflösen.
Gleichzeitig muss der Lösungsfinder
alle Durchdringungen auflösen,
die im Kollisionsschritt nicht vollständig aufgelöst worden sind.
-
Der
Lösungsfinder
löst zunächst alle
Streckungs- und Biegungs-Randbedingungen auf. Beide können bearbeitet
werden, indem lediglich eine Längen-Randbedingung
verwendet wird. Um eine Streckung zu bearbeiten, werden Verknüpfungen
zwischen Teilchenpaaren erzeugt, wobei deren Ruhelänge gleich
der Länge der
Verknüpfung
in ihrer Ruheposition ist. Dies ist ähnlich wie eine Interaktion
vom Typ "ss". Auf ähnliche
Weise fügt
der Lösungsfinder
für jede
innere Kante in einem Netz eine Verknüpfung zwischen den beiden Knoten
auf den Flächen
hinzu, die nicht Teil der Kante sind. Für eine Darstellung, die zeigt,
wie Biegeeffekte gehandhabt werden, indem für jede innere Kante 182 eine
zusätzliche,
die Bewegung einschränkende
Verknüpfung 180 hinzugefügt wird,
wird auf 10 verwiesen.
-
Der
Lösungsfinder
löst dann
die Streck- und Biegekräfte
Verknüpfung
für Verknüpfung auf:
-
Diese
Programmroutine wird eine Anzahl von Malen iteriert, so dass sich
die Änderungen
von einer Verknüpfung
zur anderen fortpflanzen. Veränderungen
der oben angegebenen Implementierung sind möglich. Beispielsweise können die
Teilchengeschwindigkeiten unmittelbar "an ihrem Ort" aktualisiert werden, ohne die Änderungen
in delta_v anzusammeln. Dies ist der anderen Implementierung ähnlich,
die uns oben für
die Raum-Zeit-Kollisionen begegnet ist.
-
Das
Modellieren von Biege-Randbedingungen unter Verwendung der Querkante
zwischen benachbarten Flächen
bringt das Problem mit sich, dass es zwei zulässige Zustände aufweist, wie in 11a und 11b gezeigt:
Die angrenzenden Dreiecke können
zwischen einem und dem anderen Zustand hin- und herklappen. Aus
diesen Gründen
ist ein genaueres Modell entwickelt worden, das den Winkel zwischen
den Flächen
derart einschränkt,
dass er einen bestimmten Wert aufweist. Wie in 11c gezeigt, seien P0, P1, P2 und P3 die Punkte
auf den beiden benachbarten Dreiecken. Zunächst werden die folgenden drei
Vektoren D1 = P1 – P0,
D2 = P2 – P0, D3
= P3 – P0
definiert. Auf Grundlage dieser Vektoren können wir die Normalen zu den
Dreiecken definieren: N0 = D1 × D2
und N1 = D3 × D1.
Wir nehmen an, dass diese Vektoren alle normalisiert sind. Für eine Darstellung
dieser Vektoren wird auf 11c verwiesen.
Der Winkel zwischen den Dreiecken ist gleich dem Winkel = wie in
(punkt((N0 × N1),
D1)). Es sei winkel0 der Ruhewinkel. Als nächstes möchten wir die vier Punkte derart
verschieben, dass der Winkel gleich dem Ruhewinkel winkel0 ist.
Im allgemeinen ist dies ein kompliziertes Problem mit möglicherweise
vielen Lösungen.
Wir verringern die Komplexität des
Problems, indem wir annehmen, dass jeder Punkt so eingeschränkt ist,
dass er sich nur entlang bestimmter Richtungen mit einem festen
Veränderungswert
z bewegen kann. Als mögliche
Wahl kann die folgenden Beziehungen verwendet werden: Q0 = P0 – z N, Q1
= P1 – z
N, Q2 = P2 + z N0 und Q3 = P3 + z N1, wobei N = (N0 + N1)/2 der
Vektor in der Mitte zwischen den Normalen ist (siehe 11c). Es ist zu bemerken, dass sich die Richtungen
zu Null aufaddieren. Indem der Veränderungswert z verändert wird,
erhalten wir für
den Winkel einen anderen Wert. Unser Ziel ist es, einen Wert von
z zu finden, so dass der Winkel gleich dem Ruhewinkel winkel0 wird,
so dass der Winkel zwischen den Normalen beibehalten wird. Eine
herkömmliche Näherungsberechnung
erster Ordnung, die auf den gewünschten
Winkel konvergiert, wird verwendet. Ein Versuch, für jeden
Winkel eine genaue Lösung
zu finden, ist zeitaufwendig, weil Änderungen, die an einem Dreieckspaar
vorgenommen werden, das Ergebnis für ein angrenzendes Paar beeinflussen.
-
Um
die Durchdringung zwischen Formen zu bearbeiten, führt der
Lösungsfinder
eine Schleife über
alle interagierenden Paare aus und erzeugt Geschwindigkeiten (Trennungsgeschwindigkeiten),
die zu den sich ergebenden Kollisionsgeschwindigkeiten addiert werden,
so dass die Grundformen getrennt werden. Dies bewirkt das Hindrängen hin
zu einem zulässigen
Zustand, wodurch die Simulation verbessert wird. Für jedes
Elementpaar berechnet der Lösungsfinder
den nächsten
oder kürzesten
Abstand zwischen den Elementen und führt eine Prüfung durch, um herauszufinden,
ob es eine Überlappung
gibt. Wenn dies der Fall ist, erzeugt der Lösungsfinder eine Trennungsgeschwindigkeit
entlang dieser nächsten
Richtung oder Abstandsrichtung (oder Richtung des zulässigen Punkts),
die die Grundformen trennt. 12 veranschaulicht,
wie dies für
alle vier Interaktionsarten ausgeführt wird, wobei Überlappungen
zwischen Elementen bearbeitet werden, indem trennende Geschwindigkeiten
beruhend auf dem kürzesten
Abstand zwischen ihnen berechnet werden. Die obere Zeile der Beispiele
in 12 stellt die Überlappungssituation
dar, und die untere Zeile veranschaulicht das "Hindrängen", das die erforderliche Trennung ergibt.
Im ebenen Fall beträgt,
wenn sich der Mittelpunkt des Teilchens außerhalb eines Objekts befindet,
die Geschwindigkeit V = (r – d)D/d,
wobei D der Vektor zwischen dem Teilchenmittelpunkt und dem nächsten Punkt
ist, r die Größe des Teilchens
ist, und d der Abstand zwischen dem Teilchen und dem nächsten Punkt
ist, und wenn sich der Mittelpunkt des Teilchens außerhalb
des Objekts befindet, beträgt
die Geschwindigkeit V = (r + d)D/d.
-
Um Überlappungen
mit Flächen
zu bearbeiten, berechnet der Lösungsfinder,
wie oben beschrieben, die Durchdringungstiefe jedes Teilchens, und
erzeugt im Falle einer Überlappung
eine Geschwindigkeit, die das Teilchen aus der Form herausdrängt. Dieser
Vorgang ist auch nützlich,
um Überlappungen
zwischen geschlossenen Dreiecksnetzen aufzulösen, weil diese Flächen sind. 13 veranschaulicht,
wie dieser Schritt funktioniert, bei dem bei der Durchdringungsbearbeitung
für eine
Fläche
jedes Teilchen aus der Fläche
herausgedrängt
wird, und zwar entlang des Wegs zu dem nächsten Punkt auf der Fläche.
-
Räumliche Datenstrukturen
-
Um
die überlappenden
umhüllenden
Kugeln effizient zu finden, können
zumindest zwei räumliche
Datenstrukturen verwendet werden: Eine Hash-Tabelle und ein Kugelbaum.
-
Die
Hash-Tabelle beruht auf der Idee, den Raum in gleichförmige Zellen
zu unterteilen. Die Größe der Zellen
wird auf das Doppelte der Größe der größten umhüllenden
Kugel gesetzt. Jede Zelle speichert eine Liste der umhüllenden
Kugeln, deren Mittelpunkte sich innerhalb der Zellen befinden. Um
die Paare zu finden, brauchen wir nur umhüllende Kugeln zu vergleichen,
die sich in benachbarten Zellen befinden. Dies führt zu einer immensen Ersparnis
von Rechenzeit. Das Problem bei dieser Vorgehensweise ist, dass
wir ein die Zellen enthaltendes Netz haben. Hier ist die Hash-Tabelle
nützlich.
Eine Hash-Tabelle ist eine eindimensionale Repräsentation des dreidimensionalen
Zellennetzes. Eine Hash-Funktion
bildet jeden Eintrag (i, j, k) des Netzes auf einen Index der eindimensionalen
Hash-Tabelle ab. Wenn n_hash die Größe der Hash-Tabelle ist, dann lautet
eine mögliche
Hash-Funktion, die vorzugsweise verwendet wird, wie folgt:
hash(i,
j, k) = ((i mod p) xor (j mod q) xor (k mod r)) mod n_hash
wobei
p, q und r irgendwelche große
Primzahlen sind. Natürlich
werden viele Mengen von Netzindizes auf einen einzigen Index in
der Hash-Tabelle abgebildet. Dies bedeutet, dass ein Eintrag in
der Hash-Tabelle umhüllende
Kugeln von vielen unterschiedlichen Zellen des Netzes haben kann.
Jedoch ist die Anzahl von Vergleichen von umhüllenden Kugeln immer noch eine
Größenordnung
schneller als die Vorgehensweise, bei der kein zusätzlicher
Bedarf an Speicherplatz auftritt.
-
Ein
Nachteil der Vorgehensweise mit einer Hash-Tabelle ist, dass sie
langsam wird, wenn die umhüllenden
Kugeln hochgradig unterschiedliche Größen aufweisen. Dies geschieht
beispielsweise, wenn sich nur einige der Teilchen sehr schnell bewegen
oder wenn die Größen der
Kanten und Dreiecke sehr weitgehend variieren. Daher kann der Lösungsfinder
in einer Ausführungsform
eine andere Datenstruktur verwenden, die besser auf diesen Fall
zugeschnitten ist: den Kugelbaum. Die Idee ist sehr einfach. Der
Lösungsfinder
bindet rekursiv Paare von umhüllenden
Kugeln an eine größere Kugel.
Dies wird solange ausgeführt,
bis nur noch eine einzige Kugel übrig
ist, nämlich
die Wurzel des Kugelbaums. Die Berechnung der Topologie des Baums wird
unter Verwendung einer Hash-Tabelle für die Paarbildung ausgeführt. Dieser
Schritt ist einigermaßen
aufwendig, aber er braucht für
eine Simulation nur ein einziges Mal ausgeführt zu werden. Um Paare zu
berechnen, führt
der Lösungsfinder
eine rekursive Prüfung
durch, um festzustellen, ob die Kugel an eine Kugel im Baum angrenzt.
Wenn nicht, kann der Lösungsfinder
alle Kinder der Kugel ignorieren. Wenn es der Fall ist, dann fährt der
Lösungsfinder
bei den umhüllenden
Kugeln der Kinder fort. Die Position und Größen der umhüllenden Kugeln im Baum müssen zu
Beginn jedes Zeitschritts neu berechnet werden. Dies ist jedoch
eine ziemlich problemlose Berechnung, bei der der Lösungsfinder
die umhüllenden
Kugeln der Blätter
zurücksetzt und
dann die umhüllenden
Kugeln in den verbleibenden Knoten des Baums neu berechnet.
-
Abstand zwischen Grundformen
-
Um
die Zeit von Kollisionen zu berechnen und um die Durchdringungen
zwischen Grundformen aufzulösen,
muss der Lösungsfinder
den kürzesten
Abstand zwischen Paaren davon berechnen. Der Fall zweier Kugeln
ist trivial, wobei der kürzeste
Abstand gleich dem Abstand zwischen ihren Mittelpunkten ist. Der
kürzeste
Abstand zwischen einer Kugel und einer Kante wird berechnet, indem
zunächst
der Mittelpunkt der Kugel auf die unendliche Linie, die die Kante
enthält,
projiziert wird. Wenn sich der Punkt innerhalb der Kante befindet,
ist der Lösungsfinder
fertig, wenn nicht, dann ist der nächste Punkt einer der Endpunkte.
Auf ähnliche
Weise erhält
man den nächsten
Punkt auf einem Dreieck bezüglich
einer Kugel, indem man zunächst
den Punkt in die Ebene des Dreiecks projiziert. Wenn sich der Punkt
innerhalb des Dreiecks befindet, ist der Lösungsfinder fertig. Wenn nicht,
sucht der Lösungsfinder
den nächsten
Punkt auf einer der drei Kanten des Dreiecks. Der nächste Punkt
zwischen zwei Kanten wird berechnet, indem solche Punkte auf den
unendlichen Linien gesucht werden, deren Differenz senkrecht auf
beiden Linien steht. Diese Punkte werden dann auf den nächsten Punkt
auf der Kante projiziert, wenn sie sich außerhalb davon befinden.
-
Kollisionsreaktion
-
Wir
betrachten zunächst
die Kollisionsreaktion des Teilchens, das mit Geschwindigkeit v
auf eine Ebene mit einer Normalen, die gleich norm ist, auftrifft.
Das Verhalten der Kollision kann durch einen Prallparameter prall
und einen Parameter reibung modelliert werden. Die Implementierung
ist wie folgt:
-
Hier
wird ein sehr einfaches Reibungsmodell verwendet; in der Praxis
kann man ein höher
entwickeltes Modell verwenden. Falls der Prallparameter eins und
die Reibung null beträgt,
wird einfach die Normalenkomponente der Geschwindigkeit des Teilchens
umgekehrt.
-
Die
Programmroutine flächenkollision
ist beinahe identisch der Programmroutine für die Ebenenkollision, weil
das Teilchen am Auftreffpunkt mit der tangentialen Ebene kollidiert.
Die Implementierung lautet wie folgt:
-
Die
Paarkollisionen werden auf ähnliche
Weise behandelt. Zunächst
bewegt der Lösungsfinder
den Punkt bis zum Schnittpunkt. Als nächstes berechnet er eine "Normale" norm, die dem kürzesten
Abstand zwischen den bestimmten Punkten entspricht, wie oben erläutert. Weil
die Grundformen eine bestimmte Dicke aufweisen, ist dieser Abstand
niemals gleich null. Für
Kanten und Dreiecke ist der Ort des nächsten Punkts eine Linearkombination
ihrer Knoten. Diese Koordinaten werden im Feld koord gespeichert.
Um einige Formeln unten einfacher zu gestalten, negieren wir die
Koordinaten der zweiten Grundform im Paar. Beispielsweise ergibt
sich im Falle zweier Kugeln immer, dass koord[i0] = 1 und koord[i1]
= –1 sind,
wobei alle anderen Einträge
gleich null sind. Unter Verwendung dieses Feldes lautet die Berechnung
der Relativgeschwindigkeit einfach:
rel_v = punkt(koord, vorher_v)
-
Wir
nehmen an, dass norm und koord von einer Programmroutine mit dem
Namen berechne_paar_daten() berechnet werden. Die Kollision für ein Paar
lautet wie folgt:
-
Gesamtvorgang
-
In
einer bevorzugten Ausführungsform
umfasst der Gesamtvorgang 240 (siehe 14)
der vorliegenden Erfindung, wie oben erläutert, das Berechnen einer
Kugelbaum-Topologie 242 und das Bestimmen 244 von
nächsten
Nachbarn und Kollisionslängen.
Das System berechnet 246 auch auf herkömmliche Weise eine Unterteilungstopologie.
Dann werden Biegeverknüpfungen
bestimmt 248. Anfangspositionen und -geschwindkeiten für die Teilchen
und Elemente werden besorgt 250, und die Berechnungsvorgänge des
Lösungsfinders werden
ausgeführt 252.
Dann wird vorzugsweise ein Vorgang zum Glätten einer Unterteilung (subdivision smoothing)
ausgeführt 254.
-
Darstellung
-
15a bis 15h zeigen
eine Darstellung eines Teilchensystems, das einen Stab und einen
Tuch simuliert, wie sie einen unzulässigen Zustand durchlaufen
und sich zurück
zu einem zulässigen
Zustand entwickeln. 15a zeigt einen Stab, der sich
einem Tuch nähert. 15b zeigt den Stab, wie er beginnt, das Tuch zu
verformen. 15c stellt das Tuch mit hochgradiger
Verformung dar, und der Stab beginnt, das Tuch zu durchdringen,
wobei das Tuch beginnt, im Stab zu verschwinden; ein unzulässiger Zustand.
Die Simulation tritt in einen unzulässigen Teilchenzustand ein,
und die Simulation bricht nicht zusammen. 15d zeigt
das Tuch, wie es durchdrungen worden ist, aber nicht zerrissen worden
ist; ein unzulässiger
Zustand. Der unzulässige
Zustand setzt sich fort, und die Simulation bricht nicht zusammen. 15e zeigt, wie der Stab seine Bewegung umkehrt
und beginnt, sich durch das Tuch zurückzuziehen, wobei sich die
Simulation immer noch in einem unzulässigen Zustand befindet und
die Simulation wiederum nicht zusammengebrochen ist. 15f zeigt, dass das Zurückziehen fortgesetzt wird. 15g zeigt, wie das Tuch von dem Stab freigekommen
ist, und sich wieder in einem zulässigen Zustand befindet. 15h zeigt, wie das Tuch in einem zulässigen Zustand über dem
Stab hängt,
wobei die Simulation von einem zulässigen Zustand zu einem unzulässigen Zustand
zu einem zulässigen
Zustand verlaufen ist.
-
Hardware
-
Die
hier beschriebenen Vorgänge
der vorliegenden Erfindung können
auf einem herkömmlichen
Computersystem 260 ausgeführt werden, wie beispielsweise
dem in 16 dargestellten, das einen
Computer 262 mit einer Anzeige 264, einer Tastatur 266 und
einer Maus 268 aufweist. Das System weist auch einen permanenten
oder entnehmbaren Speicher auf, wie beispielsweise magnetische und
optische Platten, RAM, ROM, usw., in dem das Verfahren und die Datenstrukturen
der vorliegenden Erfindung gespeichert und verteilt werden können. Die
Vorgänge
können
auch beispielsweise durch ein Herunterladen über ein Netz, wie z.B. das Internet,
verteilt werden.
-
Zusammenfassung und Schlussfolgerungen
-
Diese
Erläuterung
hat einen neuen Lösungsfinder
für die
Simulation von verformbaren Formen, die sich selbst beeinflussen,
vorgestellt. Wegen der großen
Menge an Randbedingungen und Kollisionen haben wir einen iterativen
Lösungsfinder
gewählt,
der den Zustand des Systems allmählich
hin zu einem zulässigen Zustand
drängt.
Dies ermöglicht
es, dass die Simulation unzulässige
Zustände
akzeptiert, und es erhöht
die Stabilität
der Simulation. Die meisten Vorgänge
sind sehr einfach und eignen sich für eine einfache Implementierung
des Lösungsfinders.
Dies ist insbesondere wünschenswert,
wenn große
Systeme, die sich selbst beeinflussen, behandelt werden sollen,
wie beispielsweise Tuch.
-
Die
vorliegende Erfindung ist im Hinblick auf zwei Schemata zum Auflösen von
Kollisionen beschrieben worden, nämlich dem Setzen der Endgeschwindigkeit
auf die Kollisionsgeschwindigkeit derjenigen Kollision mit der kleinsten
Kollisionszeit, und dem Berechnen eines zeitgewichteten Mittelwerts
der Kollisionsgeschwindig keiten. Andere Schemata oder Ausführungsformen
sind möglich,
wie beispielsweise ein nicht-gewichteter Mittelwert von Kollisionsgeschwindigkeiten.
-
Die
vorliegende Erfindung ist im Hinblick auf ein Auflösen von
Biege- und Dehnungs-Randbedingungen beschrieben worden. Andere Arten
von internen Energien, wie beispielsweise eine Verdrehung für eine Kurve,
können
mit den gleichen Grundideen implementiert werden.
-
Die
vielen Merkmale und Vorteile der Erfindung sind aus der ausführlichen
Beschreibung offensichtlich, und es wird somit beabsichtigt, dass
die angehängten
Ansprüche
alle Merkmale und Vorteile der Erfindung abdecken sollen, die sich
im recht verstandenen Sinn und Bereich der Erfindung befinden. Weil
viele Modifikationen und Veränderungen
Fachleuten auf dem Gebiet leicht in den Sinn kommen, soll ferner
die Erfindung nicht auf die genaue dargestellte und beschriebene
Konstruktion und Betriebsweise beschränkt sein, und demgemäß kann Rückgriff
auf alle geeigneten Modifikationen und Äquivalente genommen werden,
die in den Bereich der Erfindung fallen.
-
ZUSAMMENFASSUNG
-
Die
vorliegende Erfindung ist ein Lösungsfinder
für Teilchenpositionen,
der es Teilchen gestattet, ein Ende eines festen Zeitschritts in
einem unzulässigen
Zustand zu erreichen, wobei die Teilchen dann hin zu einem zulässigen Zustand
gedrängt
werden. Dies gestattet es dem Lösungsfinder,
die Simulation fortzusetzen, während
sich die Simulationsergebnisse hin auf ein zulässiges Verhalten bewegen. Teilchenkollisionsberechnungen
werden vereinfacht, indem ein nicht-sequentielles Modell herangezogen
wird, wobei einige Kollisionen vernachlässigt oder kombiniert werden.
Die Geschwindigkeit der Simulation wird ferner verbessert, indem
einige Vorgänge
außerhalb
der Berechnungsschleife des Lösungsfinders
ausgeführt
werden, und indem speziell angepasste Datenstrukturen verwendet
werden.