Portal-Zone Gothic-Zone Gothic II-Zone Gothic 3-Zone Gothic 4-Zone Modifikationen-Zone Download-Zone Foren-Zone RPG-Zone Almanach-Zone Spirit of Gothic
English Deutsch
World of Gothic



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-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.

 

Basiert auf der G1MDK-Dokumentation. Copyright © Piranha Bytes




Username:
Passwort:
angemeldet bleiben:

Fanart