Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

3D-Partikelkollisionen

Partikelkollisionen

Da GPU-Partikel vollständig auf der GPU verarbeitet werden, haben sie keinen Zugang zur physischen Welt des Spiels. Wenn Partikel mit der Umgebung kollidieren sollen, müssen Sie Partikel-Kollisions-Nodes einrichten. Es gibt vier davon: GPUParticlesCollisionBox3D, GPUParticlesCollisionSphere3D, GPUParticlesCollisionSDF3D, und GPUParticlesCollisionHeightField3D.

Bemerkung

GPU-Partikelkollisionen sind noch nicht für 2D-Partikelsysteme implementiert.

Allgemeine Propertys

Allgemeine Partikelkollisions-Propertys

Allgemeine Kollisions-Propertys

Es gibt einige Propertys, die Sie auf allen Kollisions-Nodes finden können. Sie befinden sich im Abschnitt GPUParticlesCollision3D im Inspektor.

Die Cull-Maske-Property steuert, welche Partikelsysteme von einem Kollisions-Node betroffen sind, basierend auf den Sichtbarkeitsebenen der einzelnen Systeme. Ein Partikelsystem kollidiert nur mit einem Kollisions-Node, wenn mindestens eine der Sichtbarkeitsebenen des Systems in der Cull-Maske des Colliders aktiviert ist.

Warnung

Es gibt ein bekanntes Problem mit GPU Partikelkollisionen, die verhindern, dass die Cull-Maske in Godot 4.0 richtig funktioniert. Wir werden die Dokumentation aktualisieren, sobald das Problem behoben ist.

Box-Kollision

Partikel-Kollisionsbox

Box-Kollision in der Node-Liste

Box-Kollisions-Nodes haben die Form eines festen, rechteckigen Kastens. Sie kontrollieren ihre Größe mit der Property Ausmaße. Die Ausmaße einer Box misst immer die Hälfte der Seiten ihrer Begrenzungen, so dass ein Wert von (X=1.0,Y=1.0,Z=1.0) eine Box erzeugt, die an jeder Seite 2 Meter breit ist. Box-Kollisions-Nodes sind nützlich, um Boden- und Wandgeometrie zu simulieren, gegen die Partikel kollidieren sollen.

Um einen Box-Kollisions-Node zu erstellen, fügen Sie einen neuen Child-Node zu Ihrer Szene hinzu und wählen GPUParticlesCollisionBox3D aus der Liste der verfügbaren Nodes. Sie können die Position der Box animieren oder sie an einen sich bewegenden Node anhängen, um dynamischere Effekte zu erzielen.

Boxkollision mit Partikelsystemen

Zwei Partikelsysteme kollidieren mit einem Box Kollisions-Node

Kugel-Kollision

Partikel-Kollisionskugel

Kugel-Kollision in der Node-Liste

Kugel-Kollisions-Nodes haben die Form einer ausgefüllten Kugel. Die Property Radius steuert die Größe der Kugel. Während Box-Kollisions-Nodes keine perfekten Würfel sein müssen, sind Kugel-Kollisions-Nodes immer Kugeln. Wenn Sie die Breite unabhängig von der Höhe einstellen wollen, müssen Sie die Property Skalierung im Abschnitt Node3D ändern.

Um einen Kugelkollisions-Node zu erstellen, fügen Sie einen neuen Childe-Node zu Ihrer Szene hinzu und wählen GPUParticlesCollisionSphere3D aus der Liste der verfügbaren Nodes. Sie können die Position der Kugel animieren oder sie an einen sich bewegenden Node anhängen, um dynamische Effekte zu erzielen.

Kugel-Kollision mit Partikelsystemen

Zwei Partikelsysteme kollidieren mit einem Kugel-Kollisions-Node

Höhenfeld-Kollision

Partikelkollisions-Höhenfeld

Höhenfeld-Kollision in der Node-Liste

Die Höhenfeld-Partikelkollision ist sehr nützlich für große Außenbereiche, die mit Partikeln kollidieren müssen. Zur Laufzeit erstellt der Node ein Höhenfeld aus allen Meshes innerhalb seiner Begrenzungen, die mit seiner Cull-Maske übereinstimmen. Partikel kollidieren mit dem Mesh, das dieses Höhenfeld repräsentiert. Da die Erzeugung des Höhenfelds dynamisch erfolgt, kann es der Spielerkamera folgen und auf Veränderungen im Level reagieren. Verschiedene Einstellungen für die Dichte des Höhenfelds bieten eine breite Palette von Performance-Anpassungen.

Um einen Höhenfeld-Kollisions-Node zu erstellen, fügen Sie einen neuen Child-Node zu Ihrer Szene hinzu und wählen GPUParticlesCollisionHeightField3D aus der Liste der verfügbaren Nodes.

Ein Höhenfeld-Kollisions-Node hat die Form eines Kastens. Die Property Ausmaße steuert seine Größe. Die Ausdehnung misst immer die Hälfte der Seiten des Nodes, so dass ein Wert von (X=1.0,Y=1.0,Z=1.0) eine Box erzeugt, die an jeder Seite 2 Meter breit ist. Alles, was außerhalb der Ausmaße des Nodes liegt, wird bei der Erstellung des Höhenfeldes ignoriert.

Die Property Auflösung steuert, wie detailliert das Höhenfeld ist. Eine niedrigere Auflösung ist schneller, geht aber auf Kosten der Genauigkeit. Wenn die Auflösung des Höhenfeldes zu niedrig ist, kann es so aussehen, als ob Partikel in ebene Geometrien eindringen oder bei Kollisionsereignissen in der Luft stecken bleiben. Es kann auch sein, dass sie einige kleinere Meshes komplett ignorieren.

Höhenfeld-Auflösungen

Bei niedrigen Auflösungen verpasst die Höhenfeldkollision einige feinere Details (links)

Die Property Update-Modus steuert, wann das Höhenfeld aus den Meshes innerhalb seiner Grenzen neu erstellt wird. Setzen Sie sie auf Wenn bewegt, um das Feld nur zu aktualisieren, wenn es sich bewegt. Dies funktioniert gut und ist für statische Szenen geeignet, die sich nicht sehr oft ändern. Wenn Sie Partikel benötigen, die mit dynamischen Objekten kollidieren, die ihre Position häufig ändern, können Sie Immer wählen, um sie bei jedem Bild zu aktualisieren. Dies geht jedoch zu Lasten der Performance und sollte nur bei Bedarf verwendet werden.

Bemerkung

Es ist wichtig, sich daran zu erinnern, daß, wenn Update-Modus auf Wenn bewegt eingestellt ist, es der Höhenfeld-Node ist, dessen Bewegung eine Aktualisierung auslöst. Das Höhenfeld wird nicht aktualisiert, wenn sich eines der darin befindlichen Meshes bewegt.

Die Property Kameraverfolgung aktiviert bewirkt, daß das Höhenfeld der aktuellen Kamera folgt, wenn es aktiviert ist. Es wird immer dann aktualisiert, wenn sich die Kamera bewegt. Diese Property kann verwendet werden, um sicherzustellen, dass es immer Partikelkollisionen um den Spieler herum gibt, ohne dass Performance an Regionen verschwendet wird, die außer Sichtweite oder zu weit entfernt sind.

SDF-Kollision

Partikelkollision SDF

SDF-Kollision in der Nodeliste

SDF-Kollisions-Nodes erzeugen ein Signed Distance Field <https://www.reddit.com/r/explainlikeimfive/comments/k2zbos/eli5_what_are_distance_fields_in_graphics>, mit dem Partikel kollidieren können. Die SDF-Kollision ähnelt der Höhenfeldkollision insofern, als dass sie mehrere Netze innerhalb ihrer Grenzen in ein einziges Kollisionsvolumen für Partikel verwandelt. Ein wesentlicher Unterschied besteht darin, dass Signed Distance Fields Löcher, Tunnel und Überhänge darstellen können, was mit Höhenfeldern allein nicht möglich ist. Der Performance-Overhead ist im Vergleich zu Höhenfeldern größer, so dass sie am besten für kleine bis mittelgroße Umgebungen geeignet sind.

Um einen SDF-Kollisions-Node zu erstellen, fügen Sie einen neuen Child-Node zu Ihrer Szene hinzu und wählen GPUParticlesCollisionSDF3D aus der Liste der verfügbaren Nodes. SDF-Kollisions-Nodes müssen gebacken werden, um irgendeinen Effekt auf Partikel im Level zu haben. Um dies zu tun, klicken Sie auf den SDF backen-Button in der Viewport-Toolbar, während der SDF-Kollisions-Node ausgewählt ist, und wählen Sie ein Verzeichnis, um die gebackenen Daten zu speichern. Da SDF-Kollisionen im Editor gebacken werden müssen, sind sie statisch und können zur Laufzeit nicht geändert werden.

SDF-Partikelkollision

SDF Partikelkollisionen ermöglichen sehr detaillierte 3-dimensionale Kollisionsformen

Ein SDF-Node hat die Form eines Kastens. Die Property Ausmaße steuert seine Größe. Ausmaße messen immer die Hälfte der Seiten seiner Begrenzungen, so dass ein Wert von (X=1.0,Y=1.0,Z=1.0) eine Box erzeugt, die an jeder Seite 2 Meter breit ist. Alles, was außerhalb der Ausmaße des Nodes liegt, wird bei Kollisionen ignoriert.

Die Property Auflösung steuert, wie detailliert das Entfernungsfeld ist. Eine geringere Auflösung führt zu einer schnelleren Performance, allerdings auf Kosten der Präzision. Wenn die Auflösung zu niedrig ist, kann es so aussehen, als ob Partikel die Geometrie der Ebene durchdringen oder bei Kollisionsereignissen in der Luft stecken bleiben. Es kann auch sein, dass sie einige kleinere Meshes komplett ignorieren.

Auflösungs-Vergleich

Derselbe Bereich, der von einem Signed Distance Field bei verschiedenen Auflösungen abgedeckt wird: 16 (links) und 256 (rechts)

Die Property Dicke gibt dem Distance Field, das normalerweise innen hohl ist, eine Dicke, um zu verhindern, daß die Partikel mit hoher Geschwindigkeit eindringen. Wenn Sie feststellen, dass einige Partikel nicht mit der Geometrie der Ebene kollidieren und stattdessen durch sie hindurchschießen, versuchen Sie, diese Property auf einen höheren Wert zu setzen.

Die Property``Maske backen`` steuert, welche Meshes beim Backen der SDF berücksichtigt werden. Nur Meshes, die auf den aktiven Ebenen in der Back-Maske gerendert werden, tragen zur Partikelkollision bei.