Nur ein AnkerEinleitung

Dieser Text dokumentiert die Möglichkeiten und Benutzung einzelner, kleinerer Systeme der Engine.

Nur ein Anker LensFlare Skript

Die Definitionen von Lensflare-Effekten werden in dem File "_WORK\DATA\PRESETS\lensFlare.zen" abgelegt. Dieses File ist ein Archiver-ZEN-File. Es läßt sich textuell editieren, wobei allerdings die Einhaltung des Formates und der Syntax sehr wichtig ist. Der Hauptteil des Files könnte z.B. so aussehen:
[LensFlareFXList % 0 0]
[% zCLensFlareFX 0 0]
name=string:ZSUN_FLARE
numFlares=int:5
[% % 0 0]
texName=string:unsun5.tga
type=enum;FT_CORONA;FT_GLOW;FT_FLARE:2
size=float:0.8
alpha=float:60
rangeMin=float:0
posScale=float:0.3
[]
... (3 Flares ausgelassen) ...
[% % 0 0]
texName=string:unsun5.tga
type=enum;FT_CORONA;FT_GLOW;FT_FLARE:2
size=float:0.7
alpha=float:60
rangeMin=float:0
posScale=float:2.1
[]
[]
[% zCLensFlareFX 0 0]
name=string:GLOW0
numFlares=int:1
[% % 0 0]
texName=string:zflare1.tga
type=enum;FT_CORONA;FT_GLOW;FT_FLARE:1
size=float:1.5
alpha=float:150
rangeMin=float:100
posScale=float:0.0
[]
[]
[% zCLensFlareFX 0 0]
name=string:CORONA0
numFlares=int:1
[% % 0 0]
texName=string:zflare1.tga
type=enum;FT_CORONA;FT_GLOW;FT_FLARE:0
size=float:1.0
alpha=float:155
rangeMin=float:100
posScale=float:0.0
[]
[]
[]
LensFlare-Effekte haben Namen und werden über diese referenziert. So kann z.B. in den Eigenschaften von Lichtquellen im Spacer (Klasse zCVobLight) der Name eines Lensflare-Effektes angegeben werden. Der Effekt mit dem entsprechendem Namen wird dann dargestellt, wenn die Lichtquelle sichtbar ist. Ein Lensflare-Effekt besteht aus einer Anzahl von "Flares", wobei jeder Flare von einem der Typen Glow, Corona oder LensFlare ist. Es lassen sich LensFlare-Effekte grob nach den in ihnen enthaltenen Flares in Glow-, Corona- und LensFlare-Effekte einteilen. Nun eine Beschreibung der einzelnen Flare-Typen.

Innerhalb eines LensFlare-Effektes lassen sich die verschiedenen Flare-Typen auch mischen. So können sich z.B. sowohl Corona- als auch Glow-Flare in einem Effekt befinden.

Die Definition eines Lensflare-Effektes wird mit der Zeile
[% zCLensFlareFX 0 0]
eingeleitet. Der Name des Effekts wird in der folgenden Zeile mit dem Schlüsselwort "name" festgelegt. "numFlares" legt die Anzahl der Flares fest, aus die der Effekt besteht. Bei Glow und Corona Effekten ist diese Zahl typischerweise 1 und bei Lensflare Effekten größer als 1. Dann folgen die Definitionsblöcke der einzelnen Flares, deren Anzahl gleich "numFlares" ist.

Eine Flare-Definition wird mit der Zeile
[% % 0 0]
eingeleitet (Die Angaben zwischen den Klammern haben interne Bedeutung und müssen wie im Beispiel angegeben werden).

Der Texturname des Flares wird unter dem Schlüsselwort "texName" angegeben. "type" legt den Typ des Flares fest (Corona, Glow oder Flare) und "size" dessen Größe (meist Werte um 1.0). "alpha" ist die maximale Opazität des Flares (0 völlig transparent, 255 völlig opak). "rangeMin" ist nur bei Glows und Coronas wirksam und gibt die minimale Distanz in cm an, bis der ein Glow oder eine Corona noch sichtbar ist. Glows und Coronas sind sichtbar, solange sie sich von der Kamera nicht weiter weg als die FarClipPlane und nicht näher als die "rangeMin" befinden. Innerhalb dieser beiden Grenzen ist ihr maximales Alpha gleich dem Wert "alpha" und sie faden sanft aus, wenn sich einer der beiden Grenzen nähern. "rangeMin" kann auch negative Werte haben. In diesem Fall ist das Flare nicht ausgefadet, wenn sich die Kamera am selben Ort wie der Flare befindet.

"posScale" ist nur bei Flares wirksam und gibt die Position des Flares auf der Linie zwischen der Lichtquelle und dem Mittelpunkt des Bildschirmes an. "0.0" ist die Position der Lichtquelle "1.0" der Bildschirmmittelpunkt "2.0" der Ort der Lichtquelle direkt gegenüber etc.

Sowohl der LensFlare-Effekt Definitionsblock, als auch der Flare Definitionsblock werden mit den Zeilen "[]" abgeschlossen.

Anmerkungen:

Nur ein AnkerDatei-Formate

EndungNameBeschreibung
.MANModelAnimationEnthält die Animation eines Models
.MDHModelHierarchieEnthält die Hierarchie eines Models
.MDMModelMeshEnthält das Mesh eines Models
.MDLModel (complete)Enthält die Hierarchie und das Mesh eines Models
.MDSModelScriptEnthält das Script eines Models, das zugehörige Hierarchie, Meshes und Animationen festlegt
.MMSMorphMeshScriptEnthält das Script eines MorphMeshes, das zugehörige Hierarchie, Meshes und Animationen festlegt
.MMBMorphMeshBinaryEnthält ein komplettes MorphMesh in compilierter Form: Hierarchie, Meshes und Animationen
.MRMMultiResolutionMeshEnthält ein statisches Mesh, dessen Polygonzahl zur Laufzeit kontinuierlich reduzierbar ist (CLOD)
.MSHMeshEnthält die Animation eines Meshes. Altes Format
.ASCACII, 3DS-MAX ExportEnthält aus 3DS-MAX exportierte Daten in textueller Form. Die Engine kann dieses Format einlesen und in kompilierte Format übersetzen
.DATcompiled scriptsDie in .SRC Files aufgeführten Quelltext .D Files werden kompiliert und in ein .DAT File gespeichert
.SRClist of script filesEnthält eine Auflistung von .D Script-Files
.D Ein Script-File
.DLS, .SGT, .STYDirectMusic FormatKann vom DirectMusic Producer gelesen und geschrieben werden
.ZENZenGin Archive.ZEN Files können beliebige Daten einhalten (Teil des OOP-Persistenz Mechanismus), enthalten aber meistens einen kompletten Level, oder ein Hierarchie von Level-Objekten
.BIN, .CSL Enthalten Text und Cutscene Daten
.TEXTextureEnthält eine Textur samt MipMap (Standard-Format: DXTC/S3TC)
.FNTFontEnthält die UV-Koordinaten aller Buchstaben eines Fonts (bzgl. einer korrespondierenden Textur)

Nur ein AnkerTexturen

Nur ein AnkerTexture Format Hints

Grafiker legen die Texturen im Quellformat in ein Unterverzeichnis von "_WORK\DATA\TEXTURES\" an. Für ein möglichst hohe Performance zur Laufzeit wird jede Ursprungs-Textur bei erstmaliger Benutzung (oder zu Programmstart per Kommandozeilen-Option) in ein internes Format (DXTC/S3TC) konvertiert und als Datei mit der Endung ".TEX" im Verzeichnis "_WORK\DATA\_COMPILED" abgelegt. Siehe dazu auch die Dokumentation zum GothicStarter.

Auf die Konvertierung von Quell- nach internem Format kann man mit "Hints" Einfluss nehmen. Hints sind textuelle Schlüsselwörter, die im Namen oder Pfad der Ursprungs-Textur abgelegt sind:

Nur ein AnkerNamen für Multi-Texturen

Ein Textur-Name mit dem Format

"NAME_[BUCHSTABE0][ZAHL0]_..[BUCHSTABEn][ZAHLn].TGA"
(Beispiel: "HUM_HEAD_HAIR1_C0_V0.TGA")

steht für eine Multitextur, also eine ganze Reihe von Texturen, die über das Namensschema verbunden sind. Dieses Format sollte ausschließlich für Multitexturen verwendet werden. Demnach ist folgender Texturname für eine einzelne Textur nicht zulässig : "w_s2_v1.TGA". Die Engine fängt solche "falschen" Namen zwar ab, ist beim Laden allerdings langsamer.

Multitexturen werden z.B. benutzt für framebasierte Textur-Animationen (z.B. kann sich bewegendes Wasser durch das Abspielen einer Sequenz von Texturen dargestellt werden "WATER_A0.TGA" ...), oder um alle Textur-Variationen in einen gemeinsamen Zusammenhang zu bringen, die auf dem Mesh eines Model angewandt werden können. In Gothic z.B. werden auf die Körper-Meshes der Menschen Multitexturen gelegt, um diese zur Laufzeit auf demselben Mesh austauschen zu können. Die verwendeten Multitexturen haben zwei Kanäle: der Kanal "C" steht für die Hauttönung, der Kanal "V" für die Variation. Die Textur "Hum_Body_Naked_V2_C3.tga" bezeichnet z.B. die Körpertextur eines Menschen ohne Rüstung in der Variation 2 und der Hauttönung 3 (= dunkelhäutig). Die Wahl einer konkrete Texturvariation für ein gegebenes Model findet in den Skripten statt.
Damit Gothic die Textur Irgendwas_V3.TGA findet und korekt anzeigt müssen auch die Texturen Irgendwas_V1.TGA und Irgendwas_V2.TGA vorhanden sein. Deshalb gibt es in G1 soviele Kopftexturendummys die nur rot sind. Bei Gothic 2 gibt es, vermutlich um dieses Problem zu umgehn, überhaupt keine Hauttönung ungleich 0.

Materialnamen in ZENs sollten mindestens zwei Zeichen lang sein, sonst kommt es beim Verbinden von mehreren ZENs und anschließendem Laden der gespeicherten ZEN zu Problemen (Zugriffsverletzung in zCBspTree::ConnectMaterialsToSectors ).


Detail-Maps

Dabei handelt es sich um Materialien denen eine Textur zugewiesen ist, für die jedoch zusätzlich eine zweite, so genannte Detail-Textur, zugewiesen ist die durch einen bestimmten Algorithmus überblendet wird.

Interessant dabei ist, dass über die Materialeigenschaft "detailObjectScale" angegeben werden kann, wie stark die Detail-Textur auf der Basis-Textur gekachelt wird. Durch die Wahl eines Wertes wie 0.6 ist es möglich dass die End-Textur durch die Überlagerung weniger gekachelt wirkt da ja die Detail-Textur über der gekachelten Basis-Textur liegt und an anderen Stellen gekachelt wird wie diese, wobei sich auf weiten Flächen ein neues, unregelmäßigeres Muster ergibt.

Leider ist ansonsten wenig über dieses Feature bekannt wie z.B. Pferformance oder Unterstütztung verschiedener Grafikkarten. In Gothic 2 wurde dieses Feature für Wasser-Materialien wie die Ozean-Textur eingesetzt und kann per ini über den Wert "zDetailTexturesEnabled=0" deaktiviert werden (standardmäßig aktiviert).