zengin pfx





Gothic-Documents: ZenGin ParticleEffects













Dokumentation




GOTHIC







ZenGin: Partikel-Effekte






Autor: Dieter Hildebrandt


Version: 15.Juli 2001










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



Zum Index















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 D-Scripten abgelegt. Folgende D-Scripte sind in diesem Zusammenhang wichtig:

_WORK\DATA\SCRIPTS\ParticleFX.src
In dieser Datei sind alle für das Partikel-System relevanten .d Files aufgelistet.
_WORK\DATA\SCRIPTS\CONFIG\ParticleFX.d
Diese Datei enthält die Parameter-Definitionen von Partikel-Effekten.
_WORK\DATA\SCRIPTS\_INTERN\ParticleFXDef.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\_INTERN\ParticleFXEngine.d
Diese Datei enthält die Parameter-Definitionen von Partikel-Effekten.



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-TypeParameterErwartete WerteBeispiele

VAR FLOATPpsValue; 64
VAR STRINGPpsScaleKeys_S; "1 0.2 0 16 0.1"
VAR INTPpsIsLooping;BOOL1
VAR INTPpsIsSmooth;BOOL0
VAR FLOATPpsFPS; 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.
















Wyszukiwarka

Podobne podstrony:
zengin misc
zengin portale
zengin models

więcej podobnych podstron