Inhalt:
- 1 Einleitung
- 2 ParticleFX Parameter
- 2.1 Emitter: Zeitliches Ausstoss-Verhalten
- 2.2 Emitter: Räumliches Ausstoss-Verhalten
- 2.3 Partikel: Start Richtung und Geschwindigkeit
- 2.4 Partikel: Lebensdauer
- 2.5 Partikel: Flugverhalten
- 2.6 Partikel: Visualisierung
- 2.7 Weitere Effekte
1 Einleitung
Die Partikel-Effekte (ParticleFX, PFX), die sich durch das Partikel-System der ZenGin ab Version 0.71 erzeugen lassen, werden durch einen Satz von Parametern festgelegt. Die Definitionen der Partikel-Effekte mitsamt ihren Parametern werden in Daedalus-Scripten abgelegt. Folgende D-Scripte sind in diesem Zusammenhang wichtig:
- _WORK\DATA\SCRIPTS\SYSTEM\ParticleFX.src
In dieser Datei sind alle für das Partikel-System relevanten .d Files aufgelistet.
_WORK\DATA\SCRIPTS\SYSTEM\_INTERN\PARTICLEFXDEF.D |
|
_WORK\DATA\SCRIPTS\SYSTEM\_INTERN\ParticleFX.d |
|
Hier ist die Partikel-Effekt-Klasse "C_PARTICLEFX" deklariert. Konkrete Partikel-Effekte sind Instanzen dieser Klasse (siehe auch Dokumentation zur Skriptsprache).
_WORK\DATA\SCRIPTS\SYSTEM\PFX\Pfx.d |
|
_WORK\DATA\SCRIPTS\SYSTEM\_INTERN\PfxInst.d |
|
Diese Datei enthält die Parameter-Definitionen von allgemeinen Partikel-Effekten.
_WORK\DATA\SCRIPTS\SYSTEM\PFX\PFXMagic.d |
|
_WORK\DATA\SCRIPTS\SYSTEM\_INTERN\PfxInstMagic.d |
|
Diese Datei enthält die Parameter-Definitionen von Partikel-Effekten für Zaubersprüche.
_WORK\DATA\SCRIPTS\SYSTEM\PFX\PARTICLEFXENGINE.D |
|
_WORK\DATA\SCRIPTS\SYSTEM\_INTERN\PfxInstEngine.d |
|
Diese Datei enthält die Parameter-Definitionen von Partikel-Effekten, welche die Engine verwendet. Sie sollten nicht verändert werden.
Die Instanzen-Parameter von Partikel-Effekten werden in einer speziellen Console editiert und auch dort durch den Befehl save gespeichert. Zugang zu dieser Console bekommt man im Editor Spacer oder auch direkt aus Gothic heraus. Hinweise zur Benutzung von Consolen gibt es an anderer Stelle.
Partikel-Effekte können u.a. auch aus .MDS Files heraus gestartet und mit Animationen synchronisiert werden. Siehe dazu die entsprechende Dokumentation.
Zur Performance ist zu sagen, daß ein Partikel-Effekt weniger Rechenzeit beansprucht, je weniger Partikel er enthält, je weiter er von der Kamera entfernt ist und je weniger zeitintensive Einstellungen bei den Parametern gewählt worden sind (dazu unten mehr). Interessant ist, wie groß die Bedeutung der Entfernung der Partikel von der Camera für die Performance ist.
Die Aktivierung folgender Features steigert den Rechenzeitbedarf deutlich:
- Kollisionserkennung
- Marks
- Trails
2 ParticleFX Parameter
Die Parameter der Partikel-Effekte werden in der Regel über die Console innerhalb des Spacers editiert, können aber auch in den entsprechenden .d Sourcefiles geändert werden.
In diesem Abschnitt werden die über 40 Parameter eines Partikel-Effekts thematisch zusammengefaßt erläutert. Die Tabelle führt für jeden Parameter dessen Name, D-Type, erwartete/gültige Werte und schließlich beispielhafte Werte auf. Parameter, deren Namen mit einem "_S" enden, sind vom Typ String und erwarten als Eingabe entweder einen von mehreren vorgegebenen Bezeichnern, die in der Spalte "erwartete Werte" durch Anführungszeichen geklammert und durch Kommata getrennt aufgeführt sind, oder eine Liste von Zahlen. Falls für einen Parameter aus einer Liste von vorgegebenen Bezeichnern auszuwählen ist und der Parameter entweder einen leeren oder falsch geschriebenen Wert enthält, wird die erste Alternative aus der Liste der möglichen gewählt. Ein "_S" Parameter ohne Wert ist also kein Fehler.
"BOOL" deutet daraufhin, daß ein boolescher Wahrheitswert erwartet wird, 0 für FALSCH, oder 1 für WAHR. "VECn" steht für einen n-dimensionalen Vektor aus Real-Zahlen, "ANGLE" steht für Winkel Angaben in Grad.
Parameter, die das Kürzel "FOR" enthalten, fassen die Angabe einer "Frame-of-Reference", also Bezugssystem-Angabe. Gültig sind hier "world" und "object", wobei letzteres mehr Rechenzeit kostet und nur wenn nötig gewählt werden sollte.
2.1 Emitter: Zeitliches Ausstoss-Verhalten
D-Type | Parameter | Erwartete Werte | Beispiele |
VAR FLOAT | PpsValue; | | 64 |
VAR STRING | PpsScaleKeys_S; | | "1 0.2 0 16 0.1" |
VAR INT | PpsIsLooping; | BOOL | 1 |
VAR INT | PpsIsSmooth; | BOOL | 0 |
VAR FLOAT | PpsFPS; | | 0.5 |
"pps" steht für "particles per second". Diese Parameter steuern das zeitliche Ausstoss-Verhalten des Emitters, daß auch über die Zeit durch Angabe von ScaleKeys animiert werden kann. Falls ScaleKeys angegeben werde, wird die Liste dieser Keys mit einer gewissen Geschwindigkeit (ppsFPS) durchlaufen, wobei optional zwischen den einzelnen Keys interpoliert wird (ppsIsSmooth). Wenn PpsIsLooping auf 1 gesetzt ist, wird der Durchlauf durch die Liste fortwährend wiederholt, ansonsten wird die Liste nur ein einziges mal durchlaufen und der PFX stirbt am Ende, sobald der letzte Partikel verschwunden ist. Die einzelnen ScaleKeys variieren über die Zeit den unter PpsValue angegebenen Wert. In diesem Fall ist die Einheit dieses Wertes "particles per second". Falls keine ScaleKeys angegeben sind und auch das Flag PpsIsLooping den Wert 0 hat, so wird der Wert des PpsValue nicht als "pps" interpretiert, sondern als die Anzahl Partikel, die auf einmal zu Beginn des Effektes erzeugt werden.
Beachte: PpsIsLooping=0; => Effekt löscht sich am Ende selbst
Beispiele:
ONCE
PpsValue = 40;
PpsScaleKeys_S = "";
PpsIsLooping = 0;
PpsIsSmooth = 0;
PpsFPS = 0;
NONSTOP
PpsValue = 40;
PpsScaleKeys_S = "";
PpsIsLooping = 1;
PpsIsSmooth = 0;
PpsFPS = 0;
TIMESPAN
PpsValue = 40;
PpsScaleKeys_S = "1.0";
PpsIsLooping = 0;
PpsIsSmooth = 0;
PpsFPS = 5;
PUFFS
PpsValue = 40;
PpsScaleKeys_S = "1.0 0 0 0 1.0 16.0 0.2 0.5";
PpsIsLooping = 1;
PpsIsSmooth = 1;
PpsFPS = 0.8;
2.2 Emitter: Räumliches Ausstoss-Verhalten
D-Type |
Parameter |
Erwartete Werte |
Beispiele |
VAR STRING |
ShpType_S; |
"Point, line, box, circle, sphere, mesh" |
mesh |
VAR STRING |
ShpFOR_S; |
"World, Object" |
|
VAR STRING |
ShpOffsetVec_S; |
VEC3 |
|
VAR STRING |
ShpDistribType_S; |
"Rand, uniform, walk" |
|
VAR FLOAT |
ShpDistribWalkSpeed; |
|
0.0001 |
VAR INT |
ShpIsVolume; |
BOOL |
|
VAR STRING |
ShpDim_S; |
VEC1/3 |
"10", "23 32 20" |
VAR STRING |
ShpMesh_S; |
|
"Cross.3ds" |
VAR INT |
ShpMeshRender_B; |
BOOL |
|
VAR STRING |
ShpScaleKeys_S; |
|
|
VAR INT |
ShpScaleIsLooping; |
BOOL |
|
VAR INT |
ShpScaleIsSmooth; |
BOOL |
|
VAR FLOAT |
ShpScaleFPS; |
|
|
Diese Parameter legen die Orte fest, an denen neue Partikel erschaffen werden. Zu diesem Zweck werden Formen/Shapes mitsamt einiger Eigenschaften angegeben, auf denen die Partikel generiert werden. Die Größe, der lokale Offset und die über die Zeit variierte Skalierung der Shapes kann ebenfalls festgelegt werden.
- ShpType_S wählt einen der möglichen ShapeTypen aus. Im Fall "mesh" werden die Partikel auf der Oberfläche des Meshes erzeugt. "point" ist der schnellste ShapeTyp.
- ShpFOR legt fest, ob die Shape den Rotationen des Emitters folgen soll ("object") oder nicht ("world").
- ShpOffsetVec legt im lokalen Koordinatensystem des Emitters einen 3D Offset -Vektor fest (wichtig um einen PFX korrekt an Model-Nodes/Limbs auszurichten).
- ShpDistribType legt fest, wie neu generierte Partikel auf der Shape angeordnet werden. "rand" wählt den Ort zufällig, "uniform" wählt den Ort geordnet&gleichmässig (allerdings nur bei "line" und "circle"), "walk" wählt den Ort geordnet&gleichmässig, aber nur auf einem gewissen Teilstück der Shape (nur bei "line" und "circle"). Im Falle des Distributions-Modus "walkw" legt ShpDistribWalkSpeed fest, wie schnell der Ort der Partikel-Generierung über die Shape wandert.
- ShpIsVolume legt fest, ob die Partikel auf dem Rand oder auf der Fläche/in dem Volumen der Shape generiert werden sollen.
- ShpDim legt die Größe der Shape fest (nicht bei "mesh") und ist je nach ShapeType ein 1 oder 3 dimensionaler Vektor (line,circle, sphere 1D, box 3D).
Falls als ShapeType "mesh" gewählt wurde, kann unter ShpMesh der Name des Meshes als .3ds File spezifiziert werden. Falls ShpMeshRender auf 1 gesetzt ist, wird das Mesh zusammen mit den Partikeln gerendert.
Die Parameter ShpScale* legen die über die Zeit variierte Skalierung der Shape fest und verhalten sich ähnlich wie die entsprechenden pps* Parameter.
2.3 Partikel: Start Richtung und Geschwindigkeit
D-Type |
Parameter |
Erwartete Werte |
Beispiele |
VAR STRING |
DirMode_S; |
"none, dir, target, mesh" |
|
VAR STRING |
DirFOR_S; |
"world, object" |
|
VAR STRING |
DirModeTargetFOR_S; |
"world, object" |
|
VAR STRING |
DirModeTargetPos_S; |
VEC3 |
|
VAR FLOAT |
DirAngleHead; |
ANGLE [0..359] |
|
VAR FLOAT |
DirAngleHeadVar; |
ANGLE [0..179] |
|
VAR FLOAT |
DirAngleElev; |
ANGLE [-90..+90] |
|
VAR FLOAT |
DirAngleElevVar; |
ANGLE [-90..+90] |
|
VAR FLOAT |
VelAvg; |
CM/MSEC |
0.3 |
VAR FLOAT |
VelVar; |
CM/MSEC |
0.1 |
Diese Parameter legen die Flugrichtung und Geschwindigkeit neuer Partikel fest.
Im DirMode "none" wird eine rein zufällige Flugrichtung festgelegt, was bedeutet, daß die Partikel kugelförmig vom Emitter abstrahlen.
Der DirMode "dir" legt fest, daß sich die Flugrichtung eines neuen Partikels aus den Werten der Parameter DirAngleHead und DirAngleElev ergibt, wobei ersterer die Heading angibt und zweiterer die Elevation. Diese beiden werden werden jeweils um die Werte der Parameter DirAngleHeadVar und DirAngleHeadVar variiert (+/- Varianz). Es ist anzumerken, daß aus Optimierungs-Gründen die Winkel nicht exakt eingehalten werden, sondern evtl. streuen, sich nicht-uniforme Verteilungen ergeben, oder sogar völlig unerwartete Ergebnisse liefern. In diesen Fällen sollten sich allerdings trotzdem durch kleine Justierungen die gewünschten Effekte erzielen lassen.
Im DirMode "target" wird die Flugrichtung aller neu erzeugter Partikel auf ein gemeinsames Ziel hin asugerichtet. Die Koordinaten dieses Ziels werden entweder in lokalen oder Weltkoordinaten (DirModeTargetFOR) als Parameter DirModeTargetPos angegeben.
Im DirMode "mesh" werden die Partikel von den Polys des Meshes mit der Varianz DirAngleHeadVar und DirAngleElevVar abgestrahlt.
VelAvg und velVar legen die durchschnittliche Geschwindigkeit und die +/- Varianz davon fest.
2.4 Partikel: Lebensdauer
D-Type |
Parameter |
Erwartete Werte |
Beispiele |
VAR FLOAT |
lspPartAvg; |
MSEC |
700 |
VAR FLOAT |
lspPartVar; |
MSEC |
300 |
2.5 Partikel: Flugverhalten
D-Type |
Parameter |
Erwartete Werte |
Beispiele |
VAR STRING |
flyGravity_S; |
VEC3 |
0 -0.0001 0 |
VAR INT |
flyCollDet_B; |
[0,1,2,3,4] |
|
Der unter flyGravity anzugebene Kraft-Vektor bezieht sich auf das Weltkoordinaten-System.
FlyCollDet_B legt das Kollisionsverhalten der Partikel fest: 0= kein Test auf Kollision, 1= bremsende Reflektion, 2= beschleunigende Reflektion, 3= Geschwindigkeit auf null setzen, 4= Partikel entfernen. Eine aktivierte Kollisionserkennung benötigt relativ viel Rechenzeit.
2.6 Partikel: Visualisierung
D-Type |
Parameter |
Erwartete Werte |
VAR STRING |
visName_S; |
Fire_a0.tga |
VAR STRING |
VisOrientation_S; |
"none, velo, velo3d" |
VAR INT |
VisTexIsQuadPoly; |
BOOL |
VAR FLOAT |
visTexAniFPS; |
&bsp; |
VAR INT |
VisTexAniIsLooping; |
BOOL |
VAR STRING |
VisTexColorStart_S; |
RGB [0..255,0..255,0..255] |
VAR STRING |
VisTexColorEnd_S; |
RGB [0..255,0..255,0..255] |
VAR STRING |
visSizeStart_S; |
VEC3 |
VAR FLOAT |
VisSizeEndScale; |
[0..1..x] |
VAR STRING |
visAlphaFunc_S; |
"none, blend, add, mul" |
VAR FLOAT |
visAlphaStart; |
[0..255] |
VAR FLOAT |
visAlphaEnd; |
[0..255] |
VisName gibt den Filenamen des für die Partikel zu benutzenden Visuals an. [Zur Zeit funkionieren nur (animierte) Textures, Meshes folgen evtl. noch. Auch werden alle Partikel mit demselben Visual ausgestattet].
VisOrientation legt fest, mit welcher Orientierung die Visuals gerendert werden. "none" rendert Textures als zum Bildschirm ausgerichtete Decals, während "velo" die Texture-Decals an dem Geschwindigkeits-Vektor der Partikel ausrichtet.
Parameter, die ein "tex" im Namen enthalten, wirken sich nur aus, wenn alsVisuals Textures benutzt werden.
VisTexIsQuadPoly legt fest, ob für die Partikel Tris oder Quads benutzt werden sollen. Tris sind i.A. wesentlich schneller als Quads. Quads sollten nur in absoluten Ausnahmefällen benutzt werden.
VisTexAniIsLooping legt fest, ob eine animierte Partikel-Textur geloopt auf dem letzten Frame gestoppt werden soll.
Die Partikel Attribute "color", "size" und "alpha" werden über die gesamte Lebensdauer des Partikels hinweg linear zwischen Start und Endwert interpoliert. Die Bedeutung der Parameter sollte klar sein.
2.7 Weitere Effekte
D-Type |
Parameter |
Erwartete Werte |
Beispiel |
VAR FLOAT |
trlFadeSpeed; |
ALPHA/MSEC [0..x] |
0.4 |
VAR STRING |
trlTexture_S; |
Trail.tga |
VAR FLOAT |
TrlWidth; |
CM |
5 |
VAR FLOAT |
mrkFadeSpeed; |
ALPHA/MSEC [0..x] |
0.1 |
VAR STRING |
mrkTexture_S; |
&bsp; |
Mark.tga |
VAR FLOAT |
mrkSize; |
CM |
50 |
Trail:
Die Flugbahn eines jeden Partikels durch einen "Trail" visualisiert werden. Dieser Trail hat eine gewisse Dicke trlWidth, wird mit einer der Textur trlTexture_S gerendert und fadet mit der Geschwindigkeit trlFadeSpeed aus. Trails werden nur erzeugt, wenn trlFadeSpeed einen Wert größer null hat.
Trails benötigen relativ viel Rechenzeit.
Mark:
Wenn Partikel mit ihrer Umgebung kollidieren können sie auf dieser Spuren, sogennante "Marks" hinterlassen. Diese Marks sind vierseitige Polygone, die am Ort der Kollision erzeugt werden und sich exakt der dort vorgefundenen Oberfläche anpassen. Marks habe eine gewisse Größe mrkSize, werden mit einer bestimmten Textur mrkTexture_S gerendert und faden mit der Geschwindigkeit mrkFadeSpeed aus. Marks werden nur erzeugt, wenn mrkFadeSpeed einen Wert größer null hat und Kollisionserkennung für den Partikeleffekt aktiviert ist (siehe flyCollDet_B).
Marks benötigen relativ viel Rechenzeit.
|