Inhaltsverzeichnis

Partikel-Effekte

Eine bebilderte Übersicht der original Partikel-Effekte ist nicht hier, sondern in der pfx-Datenbank zu finden: PFX-Datenbank.

Zunächst sei gesagt...

Was sind Partikeleffekte

Ein Partikeleffekt ist ein mathematisch präzise beschriebener, meist randomisierter Effekt, mit dem versucht wird meist chaotische (wie Feuer) oder amorphe (wie Nebel) Gebilde darzustellen. Dazu werden viele gleichartige Elemente (Partikel) nach einer bestimmten Vorschrift gezeichnet.

Einen Partikeleffekt in Gothic zeichnet aus:

Die genauen Eigenschaften und deren Bedeutung sind in der folgenden Tabelle gelistet.

Anmerkungen zur Tabelle

BOOL: In Gothic gibt es formal keine Boolschen-Werte. Alle Werte, die ich als „BOOL“ gekennzeichnet habe sind technisch gesehen Integerwerte, die aber nur den Informationsgehalt eines Bits haben. Eine 0 entspricht FALSE, alle anderen Werte entsprechen TRUE.
cl: Mit „cl“ als Einheit meine ich einen Abstand von 1 in der Farbscale von 0 und 255, wobei 0 das Minimum und 255 das Maximum darstellt. Tatsächlich muss man sich solche Zahlen aber als Werte zwischen 0.0 (0) und 1.0 (255) darstellen.
Andere Einheiten: cm (Centimeter), s (Sekunden), ms (Millisekunden)
|X|: Die Anzahl der Elemente in X. So ist (|"1 2 3 4"| == 4)
==: Bedeutet Gleichheit
!=: Bedeutet Ungleichheit
(x,y,z): Tupel stelle ich als Liste in Klammern dar. Ein Tupel wird in Daedalus als String dargestellt, wobei die Elemente durch Leerzeichen getrennt sind, zum Beispiel: „1 2 3“.
Fehlende Tabellenzellen: Eine fehlende/leere Tabellenzelle in der Spalte „Relevant wenn“ bedeutet, dass der Wert immer eine Relevanz hat. Eine fehlende/leere Zelle bei „Einheit“ bedeutet, dass die Eigenschaft entweder dimensionslos ist (wie ein Faktor) oder die Werte einfach nur stellvertretend für Eigenschaften stehen ohne eine Dimension zu besitzen.

Tabelle mit allen Eigenschaften der C_PARTICLEFX Klasse

Eine kleinere Tabelle mit Angaben zum erwarteten Wert der Eigenschaften gibt es hier: PFX-Eigenschaften.

Variablentyp Eigenschaftsname „Langform“ des Namens Einheit Relevant wenn Bedeutung
FLOAT ppsValue Particles per Second (Value) 1/s So viele Partikel werden pro Sekunde erzeugt
STRING ppsScaleKeys_S Particles per Second: Scale Keyframes Reihe von Faktoren, um die ppsValue im Verlauf skaliert wird
BOOL ppsIsLooping Particles per Second: Is Looping? Soll nach Durchlaufen aller Faktoren in ppsScaleKeys_S wieder von vorne begonnen werden? Andernfalls endet der PFX!
BOOL ppsIsSmooth Particles per Second: Is Smooth? |ppsScaleKeys_S| > 1 Sollen die Faktoren in ppsScaleKeys_S hart aufeinander folgen oder linear ineinander übergeblendet werden?
FLOAT ppsFPS Particles per Second: Frames per Second 1/s |ppsScaleKeys_S| > 1 Wie schnell soll die Liste der Faktoren in ppsScaleKeys_S durchlaufen werden?
STRING ppsCreateEm_S Particles per Second: Create Emitter Ein weiterer PFX, der zusätzlich erzeugt wird. Die Eigenschaft wird selten verwendet.
FLOAT ppsCreateEmDelay Particles per Second: Create Emitter Delay ms ppsCreateEm_S nicht leer Mit dieser Verzögerung wird der in ppsCreateEm_S genannte Effekt erzeugt.
STRING shpType_S Shape: Type Auf welchem Körper sollen die Partikel erzeugt werden. Mögliche Werte sind „POINT“ für einen Punkt, „LINE“ für eine senkrechte Linie, „CIRCLE“ für einen flach liegenden Kreis, „BOX“ für einen Quader und „SPHERE“ für eine Kugel. Auch der Wert „MESH“ ist möglich für ein beliebiges Mesh.
STRING shpFOR_S Shape: Frame of Reference Soll der Effekt am Koordinatensystem der Welt „WORLD“ oder des Effekts „OBJECT“ ausgerichtet werden? Ist „WORLD“ gewählt hat die Drehung des Partikeleffekt-Objekts keinen Einfluss auf die Startposition der Partikel
STRING shpOffsetVec_S Shape: Offset Vector (cm, cm, cm) Um diesen Vektor ist der Emitter vom Ursprung des Objekts verschoben
STRING shpDistribType_S Shape: Distribution Type (shpType_S == „LINE“) ODER (shpType_S == „CIRCLE“) Bei Linien oder Kreisen kann „WALK“ benutzt werden, um die Partikelquelle gleichmäßig entlang der Linie/dem Kreis „laufen“ zu lassen. Ansonsten gibt es nur die zufällige Verteilung „RAND“. Der Wert „UNIFORM“ scheint nicht zu funktionieren und „WALKW“ verhält sich gleich wie „WALK“
FLOAT shpDistribWalkSpeed Shape: Distribution Walk Speed ~100 * Umläufe/s (shpDistribType_S == „WALK“) Die Geschwindigkeit, mit der Kreis bzw. Linie umlaufen werden.
BOOL shpIsVolume Shape: Is Volume? (shpType_S == „BOX“) ODER (shpType_S == „SPHERE) Wenn gesetzt, werden auch innerhalb einer Kugel bzw. einem Quader Partikel erzeugt anstatt nur an den Begrenzungsflächen
STRING shpDim_S Shape: Dimension ([cm, [cm, [cm]]]) (shpType_S != „POINT“) Die Größe des Emitters muss entsprechend dem Typ angegeben werden. Für den Kreis oder die Kugel der Durchmesser, für die Linie eine Länge und für einen Quader drei Kantenlängen
STRING shpMesh_S Shape: Mesh (shpType_S == „MESH“) Wenn der Emitter ein Mesh ist, muss auch angegeben werden welches. Dies kann hier geschehen.
BOOL shpMeshRender_B Shape: Render the Mesh? (shpType_S == „MESH“) Wenn der Emitter ein Mesh ist (die Partikel darauf erzeugt werden) heißt das noch nicht automatisch, dass das Mesh auch mitgerendert wird. Dies wird gesondert hier festgelegt.
STRING shpScaleKeys_S Shape: Scale: Keyframes (shpType_S != „POINT“) Eine Reihe von Faktoren, um die die Größe des Emitters im Verlaufe skaliert wird (so würde eine Kugel mit dem Wert „1 2“ während der Laufzeit des Effekts doppelt so groß).
BOOL shpScaleIsLooping Shape: Scale: Is Looping? (|shpScaleKeys_S| > 1) Soll nach durchlaufen aller Faktoren in shpScaleKeys_S wieder von vorne in der Liste begonnen werden?
BOOL shpScaleIsSmooth Shape: Scale: Is Smooth? (|shpScaleKeys_S| > 1) Sollen die Faktoren in shpScaleKeys_S hart aufeinanderfolgen oder sollen sie linear ineinander übergeblendet werden?
FLOAT shpScaleFPS Shape: Scale: Frames per Second 1/s (|shpScaleKeys_S| > 1) Wie schnell soll die Liste der Faktoren in shpScaleKeys_S durchlaufen werden?
STRING dirMode_S Direction: Mode Wird die Richtung der Partikel explizit angegeben („DIR“), zufällig gewählt („RAND“) oder steuern die Partikel auf ein Ziel zu („TARGET“)?
STRING dirFOR_S Direction: Frame of Reference (dirMode_S == „DIR“) Soll die Flugrichtung der Partikel am Koordinatensystem der Welt „WORLD“ oder des Effekts „OBJECT“ ausgerichtet werden? Ist „WORLD“ gewählt hat die Drehung des Partikeleffekt-Objekts keinen Einfluss auf die Flugrichtung der Partikel
STRING dirModeTargetFOR_S Direction: Target: Frame of Reference (dirMode_S == „TARGET“) Soll die Position des Ziels mit den Koordinatenachsen der Welt „WORLD“ oder des Effekts „OBJECT“ bestimmt werden? Ist „WORLD“ gewählt hat die Drehung des Partikeleffekt-Objekts keinen Einfluss auf das Ziel der Partikel
STRING dirModeTargetPos_S Direction: Target: Position (cm, cm, cm) (dirMode_S == „TARGET“) Koordinaten des Ziels, auf das die Partikel zusteuern sollen (hat nur bei der Erzeugung Einfluss auf die Flugrichtung! Partikel können z.B. durch Gravitation abgelenkt werden!)
FLOAT dirAngleHead Direction: Angle Head Grad (dirMode_S == „DIR“) Richtung in die die Partikel fliegen, vorstellbar als der Winkel nach „links“ (+) oder „rechts“ (-).
FLOAT dirAngleHeadVar Direction: Angle Head Variance Grad (dirMode_S == „DIR“) Der tatsächliche Wert von dirAngleHead wird zufällig im Interval [dirAngleHead - dirAngleHeadVar, dirAngleHead + dirAngleHeadVar] gestreut.
FLOAT dirAngleElev Direction: Angle Elev Grad (dirMode_S == „DIR“) Richtung in die die Partikel fliegen, vorstellbar als der Winkel nach „oben“ (+) oder „unten“ (-).
FLOAT dirAngleElevVar Direction: Angle Elev Variance Grad (dirMode_S == „DIR“) Der tatsächliche Wert von dirAngleElev wird zufällig im Interval [dirAngleElev - dirAngleElevVar, dirAngleElev + dirAngleElevVar] gestreut.
FLOAT velAvg Direction: Velocity cm/ms Geschwindigkeit der Partikel
FLOAT velVar Direction: Velocity Variance cm/ms Die tatsächliche Geschwindigkeit der Partikel wird zufällig im Interval [velAvg - velVar, velAvg + velVar] gestreut.
FLOAT lspPartAvg Lifespan of Particles: Average ms Lebenszeit der Partikel
FLOAT lspPartVar Lifespan of Particles: Variance ms Die tatsächliche Lebenszeit der Partikel wird zufällig im Interval [lspPartAvg - lspPartVar, lspPartAvg + lspPartVar] gestreut.
STRING flyGravity_S fly(???): Gravity (cm/ms², cm/ms², cm/ms²) Gravitation in Richtung der drei Koordinatenachsen der Welt. Einen FrameOfReference-Wert um die Gravitation im Koordinatensystem des Objekts wirken zu lassen gibt es hier nicht.
INT flyCollDet_B fly(???): Collision Detection Die Kollisionserkennung kennt verschiedene Modi: 0 = Keine Kollisionserkennung; 1 = Die Partikel werden abgebremst und reflektiert; 2 = die Partikel werden beschleunigt und reflektiert; 3 = die Partikel halten an; 4 = die Partikel werden entfernt
STRING visName_S Visual: Name Name der Textur, die jeder Partikel hat
STRING visOrientation_S Visual: Orientation Orientierung der Partikel zur Kamera: „NONE“ = Die Partikel schauen immer genau zur Kamera; „VELO“ = die Partikel erscheinen kleiner, je stärker Flug- und Blickrichtung übereinstimmen. Die Partikel „zeigen“ scheinbar in Flugrichtung (sind aber letztlich immernoch zur Kamera ausgerichtet); „VELO3D“ = Die Partikel sind in Flugrichtung ausgerichtet, nur mit dem verbleibenden Freiheitsgrad werden sie zur Kamera ausgerichtet.
BOOL visTexIsQuadPoly Visual: Is Texture a Quad Poly? Wenn gesetzt wird nicht bloß die obere rechte Ecke der Textur gerendert, sondern ein ganzes Rechteck. Das schlägt doppelt auf die Alpha-Poly-Begrenzung, sieht aber je nach Textur deutlich besser aus.
FLOAT visTexAniFPS Visual: Texture Animation: Frames per Second 1/s Textur hat mehrere Frames Wenn die Textur mehrere Frames hat („*.A0.TGA“, „*.A1.TGA“, …) dann kann die Anzahl der Texturwechsel pro Sekunde gewählt werden.
BOOL visTexAniIsLooping Visual: Texture Animation: Is Looping? Textur hat mehrere Frames In aller Regel sollte eine animierte Textur loopen, das heißt, wenn der letzte Frame erreicht ist, sollte wieder beim ersten begonnen werden. Dies kann hier angegeben werden.
STRING visTexColorStart_S Visual: Texture Color: Start (cl,cl,cl) Faktoren (“[R] [G] [B]„) für die einzelnen Farbkanäle. „255 255 255“ (weiß) würde die Textur nehmen, wie sie ist, wohingegen „255 128 0“ (orange) den grünen Kanal auf die Hälfte und den blauen Kanal auf 0 skaliert. Mit den gegebenen Beispielfaktoren könnte ein weißer Rauch zu einem orangenen Rauch gefärbt werden.
STRING visTexColorEnd_S Visual: Texture Color: End (cl,cl,cl) Wie visTexColorStart_S nur der Wert für das Ende der Lebenszeit des Partikels. Zwischen Geburt und Tot wird von visTexColorStart_S linear zu visTexColorEnd_S übergeblendet.
STRING visSizeStart_S Visual: Size: Start (cm, cm) Größe der Partikel. Bei (visOrientation_S==„NONE“) steht der erste Wert für die X-Richtung auf dem Bildschirm, der zweite für die Y-Richtung. Für andere Werte von visOrientation_S ist der zweite Wert die Größe in Flugrichtung.
FLOAT visSizeEndScale Visual: Size: End Scale Die Größe der Partikel verändert sich linear während der Lebenszeit, sodass sie am Ende visSizeEndScale mal so groß sind.
STRING visAlphaFunc_S Visual: Alpha-Function Verschiedene Überblendungsmodi. Bei „NONE“ und „BLEND“ liegt eine verdeckende Überblendung vor wie etwa, wenn mehrere bemalte Folien übereinandergelegt werden. „ADD“ addiert die Farben jeder Fläche auf die des Hintergrunds auf, so gäbe rot (1, 0, 0) + grün (0, 1, 0) ⇒ gelb (1, 1, 0). Ein voll gesättigter Farbkanal bleibt allerdings voll: rot + rot ⇒ rot; es besteht also die Gefahr des Überbelichtens. „MUL“ multipliziert die Farbkanäle der Fläche mit dem Hintergrund, so ergibt beispielsweise orange (1,0.5,0) mal grün (0, 1, 0) ⇒ dunkelgrün (0, 0.5, 0); sprich: wird mit grün multipliziert, wird nichts als grün durchgelassen. Üblicherweise benutzen Partikeleffekte den Modus „ADD“. „MUL“ wird wegen der Eigenheit, dass nur der Hintergrund bearbeitet wird, ohne dass der Effekt selbst ein Aussehen hätte, für PFX kaum benutzt.
FLOAT visAlphaStart Visual: Alpha: Start cl (visAlphaFunc_S == „ADD“) ODER (visAlphaFunc_S == „BLEND“) Wird als Überblendungsmodus „BLEND“ oder „ADD“ verwendet, wird der Alphakanal der Partikeltextur skaliert. visAlphaStart ist der Startwert für diesen Faktor und wird bis zum Tot des Partikels linear zu visAlphaEnd herabgesetzt bzw. heraufgesetzt. visAlphaEnd ist oft 0, damit die Partikel nicht abrupt verschwinden.
FLOAT visAlphaEnd Visual: Alpha: End cl (visAlphaFunc_S != „NONE“) ODER (visAlphaFunc_S == „BLEND“) siehe visAlphaStart
FLOAT trlFadeSpeed Trail: Fade Speed cl/ms Partikeleffekte können in ihrer Flugbahn eine Spur erzeugen, die langsam verblasst. trlFadeSpeed ist die Geschwindigkeit mit der diese Spur verschwindet
STRING trlTexture_S Trail: Texture (trlFadeSpeed > 0) Textur der Spur
FLOAT trlWidth Trail: Width cm (trlFadeSpeed > 0) Breite der Spur
FLOAT mrkFadeSpeed Mark: Fade Speed cl/ms (flyCollDet_B != 0) „Marks“ sind Flecken, die bei der Kollision eines Partikeleffekts mit dem Levelmesh auf dem Levelmesh erzeugt werden. mrkFadeSpeed ist die Geschwindigkeit mit diese Flecken verschwinden
STRING mrkTexture_S Mark: Texture (mrkFadeSpeed > 0) Textur der Flecken
FLOAT mrkSize Mark: Size cm (mrkFadeSpeed > 0) Größe der Flecken
STRING flockMode Flock Mode ??? ???
FLOAT flockStrength Flock Strength ??? ??? ???
BOOL useEmittersFOR use Emitters Frame of Reference? Effekt bewegt sich Wenn gesetzt, sind die Partikel „Kinder“ des Emitters. Sie bewegen sich also mit, wenn sich der Emitter bewegt (anstatt nur ihrer eigenen Bewegung nachzugehen).
STRING timeStartEnd_S Start- and Endtime of Rendering (Stunde, Stunde) Zeitinterval, in dem der Effekt gerendert wird. Glühwürmchen könnte man etwa das Interval „22 3“ geben, sodass sie nur in der Nacht zwischen 22:00 und 3:00 Uhr zu sehen sind.
BOOL m_bIsAmbientPFX Is Ambient PFX? Spieler hat Ambiet-PFX in den Optionen deaktiviert Ambient-PFX werden nicht gerendert (wenn der Spieler das so in seinen Einstellungen gewählt hat).