Partikelsystem: Unterschied zwischen den Versionen
Flo (Diskussion | Beiträge) K (Der Kategorie Effekt zugeordnet) |
K (→Darstellung eines Partikels) |
||
(7 dazwischenliegende Versionen von 4 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
+ | {{Excellent}} | ||
=Partikelsysteme= | =Partikelsysteme= | ||
+ | [[Bild:Partikel feuer.png|right]] | ||
Partikelsysteme sind Grafikeffekte die aus vielen, meist primitiven, voneinander unabhängig berechneten Einzelteilen (Partikeln) bestehen. Bei den Effekten die man mit Partikelsystemen simuliert (oder erzielen möchte) handelt es sich üblicherweise um Objekte die nicht (oder nur schwer) durch ein Polygonmodell darstellbar wären. Typische Anwendungsfälle sind: | Partikelsysteme sind Grafikeffekte die aus vielen, meist primitiven, voneinander unabhängig berechneten Einzelteilen (Partikeln) bestehen. Bei den Effekten die man mit Partikelsystemen simuliert (oder erzielen möchte) handelt es sich üblicherweise um Objekte die nicht (oder nur schwer) durch ein Polygonmodell darstellbar wären. Typische Anwendungsfälle sind: | ||
*Wasser (vom Gebirgsbach bis zum Springbrunnen) | *Wasser (vom Gebirgsbach bis zum Springbrunnen) | ||
Zeile 12: | Zeile 14: | ||
==Darstellung eines Partikels== | ==Darstellung eines Partikels== | ||
− | Üblicherweise werden Partikel als [[Billboard]]s dargestellt. In manchen Fällen sind aber Punkte (mit [[ | + | Üblicherweise werden Partikel als [[Billboard]]s dargestellt. In manchen Fällen sind aber Punkte (mit GL_POINTS, [[Point Sprite]]s) oder Linien (mit GL_LINES) auch ausreichend. |
− | Da Partikel häufig | + | Da Partikel häufig transparent sind, muss man beim Zeichnen etwas achtsam sein. Eine Tiefensortierung ist bei 100en Partikeln nicht mehr allzu schnell. Aus diesem Grund werden Partikelsysteme meist gerendert ohne in den [[Tiefenpuffer]] zu schreiben. Dies wird mittels [[glDepthMask]](GL_FALSE) erreicht. |
==Typische Eigenschaften eines Partikels== | ==Typische Eigenschaften eines Partikels== | ||
Zeile 38: | Zeile 40: | ||
==Erzeugen von Partikeln== | ==Erzeugen von Partikeln== | ||
+ | [[Bild:Tutorial_Partikel1.gif|right]] | ||
Auch beim Erzeugen der Partikel hat man viele Gestaltungsmöglichkeiten. So kann man als Startposition immer einen Punkt angeben, einen Bereich (eine Kugel, einen Quader, ...) oder wenn man möchte sogar die Oberfläche eines beliebigen anderen Objektes. Und auch alle anderen Eigenschaften des Partikels werden innerhalb eines bestimmten Bereiches (oder auch fix) festgelegt. | Auch beim Erzeugen der Partikel hat man viele Gestaltungsmöglichkeiten. So kann man als Startposition immer einen Punkt angeben, einen Bereich (eine Kugel, einen Quader, ...) oder wenn man möchte sogar die Oberfläche eines beliebigen anderen Objektes. Und auch alle anderen Eigenschaften des Partikels werden innerhalb eines bestimmten Bereiches (oder auch fix) festgelegt. | ||
Zeile 90: | Zeile 93: | ||
Während der Lebensspanne eines Partikels können natürlich alle Eigenschaften geändert werden. Die Geschwindigkeit wird häufig durch Graviation und ähnliches modifiziert. Die Position wird durch die Geschwindigkeit modifiziert. Andere Werte werden nach belieben geändert. Dies kann sowohl eine lineare Änderung, eine lineare Interpolation zwischen einigen gegebenen Werten als auch jede andere Funktion sein. | Während der Lebensspanne eines Partikels können natürlich alle Eigenschaften geändert werden. Die Geschwindigkeit wird häufig durch Graviation und ähnliches modifiziert. Die Position wird durch die Geschwindigkeit modifiziert. Andere Werte werden nach belieben geändert. Dies kann sowohl eine lineare Änderung, eine lineare Interpolation zwischen einigen gegebenen Werten als auch jede andere Funktion sein. | ||
− | [[Kategorie:Effekt]] | + | ==Optimierungen== |
+ | Da die Bahnberechnung vieler Partikel unter Umständen recht lange dauern kann (> 1ms), ist es außerdem eine Überlegung wert, diese Berechnungen in einen anderen Thread zu verlagern. Somit wird die Hauptanwendung nicht blockiert und beim Zeichnen des Partikelsystems müssen nur noch die bereits fertig berechneten Vertex-/Punktdaten an die Grafikkarte gesendet werden. Außerdem ist dies unter anderen ein sinnvoller Ansatz zur Auslastung der immer weiter verbreiteten Mehrprozessorsysteme. | ||
+ | |||
+ | |||
+ | ==Siehe Auch== | ||
+ | * [[Tutorial Partikel1]] : Tutorial zum Thema Partikelsysteme | ||
+ | * [[GLSL_Partikel]] : ein Partikelsystem auf der Grafikkarte | ||
+ | * [[GLSL_Partikel_2]] : ein weiteres Partikelsystem auf der Grafikkarte, jedoch unter Einsatz von modernen Techniken. | ||
+ | |||
+ | [[Kategorie:Anleitung]] [[Kategorie:Technik_oder_Algorithmus]] [[Kategorie:Effekt]] |
Aktuelle Version vom 1. März 2014, 14:49 Uhr
(weitere exzellente Artikel) |
Inhaltsverzeichnis
Partikelsysteme
Partikelsysteme sind Grafikeffekte die aus vielen, meist primitiven, voneinander unabhängig berechneten Einzelteilen (Partikeln) bestehen. Bei den Effekten die man mit Partikelsystemen simuliert (oder erzielen möchte) handelt es sich üblicherweise um Objekte die nicht (oder nur schwer) durch ein Polygonmodell darstellbar wären. Typische Anwendungsfälle sind:
- Wasser (vom Gebirgsbach bis zum Springbrunnen)
- Feuer
- Rauch
- Wolken
- Nebel
- Explosionen
- Feuerwerke
- Wetter (Schnee und Regen)
Also primär Objekte wo nicht nur die Oberfläche interessant ist, sondern das gesamte Volumen.
Darstellung eines Partikels
Üblicherweise werden Partikel als Billboards dargestellt. In manchen Fällen sind aber Punkte (mit GL_POINTS, Point Sprites) oder Linien (mit GL_LINES) auch ausreichend. Da Partikel häufig transparent sind, muss man beim Zeichnen etwas achtsam sein. Eine Tiefensortierung ist bei 100en Partikeln nicht mehr allzu schnell. Aus diesem Grund werden Partikelsysteme meist gerendert ohne in den Tiefenpuffer zu schreiben. Dies wird mittels glDepthMask(GL_FALSE) erreicht.
Typische Eigenschaften eines Partikels
Position Jedes Partikel hat eine eigene Position. Dabei wird nicht auf Kollisionen mit anderen Partikel geachtet. Auf Kollisionen mit der Umgebung kann aber sehr wohl geachtet werden, auch wenn dies häufig sehr rechenintensiv ist.
Geschwindigkeit und Richtung Üblicherweise durch einen Vektor dargestellt. Gibt an wie weit und in welche Richtung sich das Partikel bewegen würde wenn 1 Sekunde vergangen wäre. Aber auch die Geschwindigkeit kann sich im Laufe der Zeit ändern, beispielsweise durch Gravitation oder auch Kollision.
Farbe Die Farbe und vor allem die Änderung der Farbe innerhalb der Lebensspanne eines Partikels ist bei vielen Effekten ein essentieller Bestandteil.
Transparenz Damit ein Partikel am Ende seiner Lebensspanne nicht einfach verschwindet, kann man Transparenz verwenden um es langsam sterben zu lassen. Natürlich kann man den Transparenz Wert aber auch für andere Dinge gebrauchen wenn einem der Sinn danach steht.
Größe Ein Partikel langsam kleiner werden zu lassen ist auch eine Möglichkeit damit es nicht von einem Augenblick auf den nächsten verwschindet. Jedoch beispielsweise für Rauch wird man (genau umgekehrt) die Partikel je nach Alter vergrößern.
Alter Partikel werden laufend generiert, damit jedoch nicht unmengen Partikel entstehen müssen sie mit der Zeit auch wieder gelöscht werden. Der Zeitpunkt wann ein Partikel wieder gelöscht wird, wird meist anhand seines Alters fest gelegt. Jedoch auch zur Bestimmung aller anderen Werte kann man wenn man möchte das Alter verwenden (Beispielsweise die Rauchpartikel immer größer, jedoch immer transparenter im Laufe der Zeit).
Rotation Vor allem bei großen Partikeln (wo ein Partikel beispielsweise eine eigene kleine Rauchwolke (als Textur) ist) bringt eine Rotation einiges an Realismus ein.
Erzeugen von Partikeln
Auch beim Erzeugen der Partikel hat man viele Gestaltungsmöglichkeiten. So kann man als Startposition immer einen Punkt angeben, einen Bereich (eine Kugel, einen Quader, ...) oder wenn man möchte sogar die Oberfläche eines beliebigen anderen Objektes. Und auch alle anderen Eigenschaften des Partikels werden innerhalb eines bestimmten Bereiches (oder auch fix) festgelegt.
In der Filmindustrie werden auch häufig hierarchische Partikelsysteme verwendet, bei denen jedes Partikel wiederum ein eigenständiger Erzeuger von Partikeln sein kann (erstmals im Genesis Effekt in "Star Trek II - Der Zorn des Khan").
Verwalten der Partikel
Ein häufiger Fehler der bei Partikelsystemen gemacht wird ist, dass ein Partikel als Objekt mit Funktionen zum animieren und zeichnen ausgestattet wird. Obwohl es weniger dem objektorientiertem Denken entspricht, kann einem das berechnen aller Partikel innerhalb einer Funktion eine menge Zeit sparen.
Eine gängige Möglichkeit Partikel zu Verwalten ist ein Feld (array) oder mit einer Liste (TList) wenn die Anzahl der Partikel nicht fest ist. (Für Infos siehe Delphihilfe zu "TList".)
const maxPartikel = 100; type TPartikel = record Pos : TVector3f; Richt : TVector3f; Farbe : TVector3f; Alpha : real; Alter : integer; maxAlter : integer; RotAchse : TVector3f; Winkel : real; //Kann auch über globale Variable gemacht werden. end; TPartikelFeld = array[1..maxPartikel] of TPartikel;
oder
TPartikelList = TList; PTPartikel = ^TPartikel; var PList : TPartikelList; PPartikel : PTPartikel; i : integer; begin PList := TPartikelList.Create; for i := 1 to 20 do begin new(PPartikel); // Eigenschaften zuweisen PPartikel^.Alter := 0; ... // An die Liste hängen PList.Add(PPartikel); end; end;
Während der Lebensspanne eines Partikels können natürlich alle Eigenschaften geändert werden. Die Geschwindigkeit wird häufig durch Graviation und ähnliches modifiziert. Die Position wird durch die Geschwindigkeit modifiziert. Andere Werte werden nach belieben geändert. Dies kann sowohl eine lineare Änderung, eine lineare Interpolation zwischen einigen gegebenen Werten als auch jede andere Funktion sein.
Optimierungen
Da die Bahnberechnung vieler Partikel unter Umständen recht lange dauern kann (> 1ms), ist es außerdem eine Überlegung wert, diese Berechnungen in einen anderen Thread zu verlagern. Somit wird die Hauptanwendung nicht blockiert und beim Zeichnen des Partikelsystems müssen nur noch die bereits fertig berechneten Vertex-/Punktdaten an die Grafikkarte gesendet werden. Außerdem ist dies unter anderen ein sinnvoller Ansatz zur Auslastung der immer weiter verbreiteten Mehrprozessorsysteme.
Siehe Auch
- Tutorial Partikel1 : Tutorial zum Thema Partikelsysteme
- GLSL_Partikel : ein Partikelsystem auf der Grafikkarte
- GLSL_Partikel_2 : ein weiteres Partikelsystem auf der Grafikkarte, jedoch unter Einsatz von modernen Techniken.