|
-
Fragen zur Konvertierung von TGA zu TEX
Hallo,
ich frage mich wovon der Wert der wählbaren Maps bei der Konvertierung zu TEX abhängt. Ich habe eine originale Gothic I-Textur mit Gimp von der Auflösung 256x256 zu 512x512 skaliert und verschiedene Bildverbesserer ausprobiert.
[Bild: xqjW4Rrc2Bild1.jpg]
Die Originaltextur hatte eine Auflösung von 256 x 256 und hatte 6 maps (0-5). Nun weiß ich echt nicht wie viele maps ich nach der Bildbearbeitung und Bildvergrößerung nehmen muß. Da die Auflösung verdoppelt ist gehe ich davon aus auch die map-Anzahl um einen Zähler erhöhen zu müssen. Ist das richtig?
[Bild: 2WS1NloOaOC0Bild2.jpg]
Und dann habe ich noch die Frage ob ich grundsätzlich alle verbesserten und vergrößerten Gothicoriginaltexturen auf 2048 x 2048 skalieren und mit 10 maps konvertieren kann? Ist das überhaupt sinnvoll?
Ich würde gerne alle 1800 Originaltexturen mit den kombinierten verschiedenen Bildverbesserern in GIMP als Batch über Nacht laufen lassen. Kann ich da in der ersten Stufe generell einfach wählen: alle Bilder auf 200% skalieren? Oder muss ich in Gothic bestimmte Texturen in ihrer Größe beibehalten da es sonst Probleme gibt?
Geändert von Inspirate (16.02.2017 um 15:25 Uhr)
-
Ehrlich gesagt, bin ich mir nicht sicher, ob du die Texturen selbst konvertieren musst.
Bisher habe ich noch jede Textur vom Spiel selbst konvertieren lassen und es ist bisher immer gut gegangen. 
Irgendwie meine ich mich zu erinnern, dass irgendwo mal gesagt wurde, es sei sogar besser, die Texturen vom Spiel konvertieren zu lassen.
-
Kann ich denn alle Originaltexturen im TGA-Format auf max. 2048 x 2048 skalieren und aufpolieren um sie dann im Texturenordner unter _WORK abzulegen und Gothic erstellt sich dann die richtige Größe und Mapanzahl im TEX-Format selbst?
-
 Zitat von Inspirate
Kann ich denn alle Originaltexturen im TGA-Format auf max. 2048 x 2048 skalieren und aufpolieren um sie dann im Texturenordner unter _WORK abzulegen und Gothic erstellt sich dann die richtige Größe und Mapanzahl im TEX-Format selbst?
Gothic kompiliert die dann selber ins .TEX-Format (wenn keine .TEX-Dateien mit dem Namen vorhanden sind - also ggf. die Textures.vdf umbennenn, z.B. in Textures.vdf.disabled). Welche Menge von MipMaps dabei gewählt werden weiß ich nicht, aber ich gehe mal davon aus, dass die sinnvoll sind.
Edit: Ich gehe auch davon aus, dass die Texturgröße nicht irgendwie hardkodiert ist, zumindest für die Texturen, die auf Meshes aufgetragen werden... Beim Rest bin ich mir nicht sicher.
-
Noch ergänzend: Gothic kompiliert die Textur dann, wenn sie zum ersten Mal verwendet wird (aber noch nicht kompiliert gefunden wird). Hast du also eine Textur, die nur auf einem Item liegt, dann musst du dafür sorgen, dass das Item auch mal im Spiel vorkommt (z.B. per Marvin Mode einfügen).
Mich würde dabei noch interessieren ob Texturen auf dem Weltmesh alle beim Laden der Welt kompiliert werden oder erst, wenn der Teil des Meshes ins Blickfeld gerät, und ob Texturen von Items in der Welt beim Laden der Welt, wenn das Item in die KI-Glocke kommt, oder wenn das Item ins Blickfeld kommt kompiliert werden.
-
 Zitat von Milky-Way
Noch ergänzend: Gothic kompiliert die Textur dann, wenn sie zum ersten Mal verwendet wird (aber noch nicht kompiliert gefunden wird). Hast du also eine Textur, die nur auf einem Item liegt, dann musst du dafür sorgen, dass das Item auch mal im Spiel vorkommt (z.B. per Marvin Mode einfügen).
Mich würde dabei noch interessieren ob Texturen auf dem Weltmesh alle beim Laden der Welt kompiliert werden oder erst, wenn der Teil des Meshes ins Blickfeld gerät, und ob Texturen von Items in der Welt beim Laden der Welt, wenn das Item in die KI-Glocke kommt, oder wenn das Item ins Blickfeld kommt kompiliert werden.
Besser über den GothicStarter (mod) konvertieren lassen. Da lassen sich alle Texturen konvertieren bevor das Spiel überhaupt startet. Das dauert zwar bei meiner i7 2700k@4,5GHz geschätzte 30 Minuten... aber konvertiert ist dann wirklich jede TGA im Texturordner in das TEX-Format bevor das Spiel dann startet.
[Bild: GothicStarter__mod_.jpg]
Geändert von Inspirate (16.02.2017 um 20:18 Uhr)
-
Wie gesagt, nicht konvertierte Texturen werden sowieso konvertiert. Das "Texturen konvertieren" im GStarter kannst du dir also sparen. Zumindest, wenn du nicht alle Texturen geändert hast.
-
 Zitat von Dada
Wie gesagt, nicht konvertierte Texturen werden sowieso konvertiert. Das "Texturen konvertieren" im GStarter kannst du dir also sparen. Zumindest, wenn du nicht alle Texturen geändert hast.
Ich habe es bereits im ersten Versuch gleich mit allen Texturen versucht. Aber speziell bei durchsichtigen Dingen wie Büsche & Bäume treten nun schwarze Umrandungen auf. Sie sind nicht mehr sichtduchlässig. Der Himmel hat auch mit den Filtereigenschaften gelitten. Die Schriften haben nun auch einen schwarzen Schatten und im Startmenü passt der Gothic-Shriftzug nicht mehr hinein - er ist nun zu groß und geht über das Menü hinaus.
Steine und Mauern hingegen gelingen gut mit den Filtereinstellungen, Holz wirkt leider heller. Ich versuche es nun in Etappen, erst mal nur die alte Burg. Die finde ich echt gelungen nach der Bearbeitung. Danach dann nur Holz oder Gras etc. mit anderen eigenen angepassten Filtern. Für alle Texturen die gleichen Filtereinstellungen zu nehmen haut einfach nicht hin.
Geändert von Inspirate (16.02.2017 um 20:49 Uhr)
-
 Zitat von Inspirate
Besser über den GothicStarter (mod) konvertieren lassen. Da lassen sich alle Texturen konvertieren bevor das Spiel überhaupt startet. Das dauert zwar bei meiner i7 2700k@4,5GHz geschätzte 30 Minuten... aber konvertiert ist dann wirklich jede TGA im Texturordner in das TEX-Format bevor das Spiel dann startet.
[Bild: GothicStarter__mod_.jpg]
Es hieß "schon immer" man solle diese Option nicht benutzen, sie funktioniere nicht korrekt. Genaueres ist mir aber nicht bekannt.
-
 Zitat von Inspirate
Hallo, ich frage mich wovon der Wert der wählbaren Maps bei der Konvertierung zu TEX abhängt.
Da jede Mipmap halb so groß ist wie ihr Vorgänger und 1px die minimale Kantenlänge ist, kommt man bei 265x265px auf 7 Mipmaps. Das kann man einfach über log2(min(a, b))-1 berechnen, wobei a und b die Kantenlänge der Textur sind. Ich hab früher mal ausprobiert weniger Mipmaps erzeugen zu lassen, aber das macht qualitativ keinen Unterschied. Wenn man zu wenige hat, sieht es sogar schlechter aus.
 Zitat von Inspirate
Und dann habe ich noch die Frage ob ich grundsätzlich alle verbesserten und vergrößerten Gothicoriginaltexturen auf 2048 x 2048 skalieren und mit 10 maps konvertieren kann? Ist das überhaupt sinnvoll?
Ich halte das nicht für ratsam, aber man kann damit mal experimentieren. 
 Zitat von Inspirate
Oder muss ich in Gothic bestimmte Texturen in ihrer Größe beibehalten da es sonst Probleme gibt?
Gothic kann Texturen bis 4096x4096px verarbeiten, wenn ich mich richtig erinnere.
 Zitat von Dada
Irgendwie meine ich mich zu erinnern, dass irgendwo mal gesagt wurde, es sei sogar besser, die Texturen vom Spiel konvertieren zu lassen.
Ja, denn GoMan verwendet zur Erzeugung der Mipmaps einen Box-Filter und das sieht dann im Spiel grausam aus. 
Bei Gothic weiß ich es nicht, aber es wird wohl ein bilinearer Filter sein.
 Zitat von Lehona
Ich gehe auch davon aus, dass die Texturgröße nicht irgendwie hardkodiert ist, zumindest für die Texturen, die auf Meshes aufgetragen werden... Beim Rest bin ich mir nicht sicher.
Den Konverter stört das nicht, da kann man reinschmeißen, was man will. Es ist lediglich zu beachten, dass man das Seitenverhältnis beibehält. 
 Zitat von Milky-Way
Es hieß "schon immer" man solle diese Option nicht benutzen, sie funktioniere nicht korrekt. Genaueres ist mir aber nicht bekannt.
Ich hab nun schon einiges mit Texturen gemacht und das ist die beste Option, so lange man auf eine eigene Toolchain verzichten möchte. Mir sind da absolut keine Fehler bekannt.
"Weltmacht mit drei Buchstaben?" – Fred & Günther
Geändert von ThielHater (17.02.2017 um 10:20 Uhr)
-
 Zitat von ThielHater
Da jede Mipmap halb so groß ist wie ihr Vorgänger und 1px die minimale Kantenlänge ist, kommt man bei 265x265px auf 7 Mipmaps. Das kann man einfach über log2(min(a, b))-1 berechnen, wobei a und b die Kantenlänge der Textur sind. Ich hab früher mal ausprobiert weniger Mipmaps erzeugen zu lassen, aber das macht qualitativ keinen Unterschied. Wenn man zu wenige hat, sieht es sogar schlechter aus.
Ich habe mal analysiert wie sich der Gothic-Konverter bei der automatischen Konvertierung von TGA nach TEX verhält. Dabei scheint es wichtig zu sein immer von der kleinsten Seite für die Anzahl der Mipmaps auszugehen.
Dabei scheint es folgende Regeln für den Gothic-Konverter zu geben:
2048 x 2048 = 9 Mipmaps (0 - 8) ...kam 2x vor
1024 x 2048 = 8 Mipmaps (0 - 7)
1024 x 1024 = 8 Mipmaps (0 - 7)
512 x 2048 = 7 Mipmaps (0 - 6)
512 x 1024 = 7 Mipmaps (0 - 6)
512 x 512 = 7 Mipmaps (0 - 6)
256 x 2048 = 6 Mipmaps (0 - 5)
256 x 1024 = 6 Mipmaps (0 - 5)
256 x 512 = 6 Mipmaps (0 - 5)
256 x 256 = 6 Mipmaps (0 - 5)
128 x 2048 = 5 Mipmaps (0 - 4)
128 x 1024 = 5 Mipmaps (0 - 4)
128 x 512 = 5 Mipmaps (0 - 4)
128 x 256 = 5 Mipmaps (0 - 4)
128 x 128 = 5 Mipmaps (0 - 4)
64 x 2048 = 4 Mipmaps (0 - 3)
64 x 1024 = 4 Mipmaps (0 - 3)
64 x 512 = 4 Mipmaps (0 - 3)
64 x 256 = 4 Mipmaps (0 - 3)
64 x 128 = 4 Mipmaps (0 - 3)
64 x 64 = 4 Mipmaps (0 - 3)
32 x 128 = 3 Mipmaps (0 - 2) ...kam 15x vor
32 x 64 = 3 Mipmaps (0 - 2) ...kam 4x vor
32 x 32 = 3 Mipmaps (0 - 2) ...kam 28x vor
16 x 16 = 2 Mipmaps (0 - 1) ...kam 1x vor
8 x 32 = 1 Mipmap (0) ...kam 1x vor
8 x 8 = 1 Mipmap (0) ...kam 113x vor
Kleinere Werte als 8 x 8 habe ich bei der automatischen Konvertierung noch nicht gefunden. Ich werde versuchen mich an diesen Vorgaben zu orientieren um die Texturen nicht unnötig durch übermäßige Auflösung aufzublasen.
Geändert von Inspirate (17.02.2017 um 11:33 Uhr)
-
Das Format und das bekannte Verhalten der Engine (und deren Fehler) habe ich vor Ewigkeiten hier dokumentiert:
http://www.bendlins.de/nico/gothic/docs/ztex.zip
Verwendet habe ich es für die ZTex-Tools (um *.DDS in/aus *-C.TEX zu konvertieren):
http://www.bendlins.de/nico/gothic2/ztextools.zip
Code:
ZTEX File Reference
===================
The ZenGin Texture (.tex) file format is used to store textures with or without
mipmap levels. This format can store uncompressed and compressed pixel formats,
and is the proprietary file format used by the PC games Gothic I and Gothic II.
File Layout
-----------
The basic structure of a .tex file is a header, and texture data (pix/mip/pal)
written to a binary file. The header consists of a signature, a version value
and a ZTEX_INFO structure. This header contains all the information needed to
determine the contents of the entire file. The image below shows the layout of
a .tex file:
+------------------------------------+
| File Header (ZTEX_FILE_HEADER) |
| Signature (ZTEX_FILE_SIGNATURE) |
| Version (ZTEX_FILE_VERSION_0) |
| Info Block (ZTEX_INFO) |
| Format (ZTEX_FORMAT) |
| Width of mipmap 0 |
| Height of mipmap 0 |
| Number of mipmaps (0 = none) |
| Reference Width (ingame) |
| Reference Height (ingame) |
| Average Color (A8R8G8B8) |
+------------------------------------+
| Texture data |
| +--------------------------------+ |
| | Palette data (ZTEXFMT_P8 only) | |
| +--------------------------------+ |
| +--------------------------------+ |
| | Pixel data for smallest mipmap | |
| +--------------------------------+ |
| | ... | |
| +--------------------------------+ |
| | Pixel data mipmap 0 (biggest) | |
| +--------------------------------+ |
+------------------------------------+
//TODO: more comments...
Gothic's converter behavior
===========================
The PC games Gothic I and Gothic II automatically convert Targa(2) image files
(_work/Data/Textures/.../*.tga) into the ZTEX format and save it with the name
_work/Data/Textures/_compiled/*-C.TEX. The ingame texture converter uses hints
which are included in the path (case-insensitive) of the source texture (TGA):
NOMIP - do not generate mipmap levels
8BIT - alhpa: ZTEXFMT_A4R4G4B4 (6), else: ZTEXFMT_P8 (9)
16BIT - alpha: ZTEXFMT_A4R4G4B4 (6), else: ZTEXFMT_R5G6B5 (8)
32BIT - alpha: ZTEXFMT_A8B8G8R8 (2), else: ZTEXFMT_B8G8R8 (4)
\4 - half RefWidth and RefHeight until max <= 4
\8 - half RefWidth and RefHeight until max <= 8
\16 - half RefWidth and RefHeight until max <= 16
\32 - half RefWidth and RefHeight until max <= 32
\64 - half RefWidth and RefHeight until max <= 64
\128 - half RefWidth and RefHeight until max <= 128
\256 - half RefWidth and RefHeight until max <= 256
\512 - half RefWidth and RefHeight until max <= 512
\1024 - half RefWidth and RefHeight until max <= 1024
\_DETAIL - successive mipmaps fade to grey (weight 0.3f)
If no hints are found, the converter defaults to ZTEXFMT_DXT3 (with alpha) or
ZTEXFMT_DXT1 (source without alpha). A Simple box filter is used for scaling.
The height and width of converted textures are always scaled to a power of 2.
Mipmaps are generated until the width or the height is lower than or equal 8.
Known Converter Bugs
--------------------
8BIT with mipmaps - lower mipmaps written into mipmap 0.
32BIT with mipmaps and without alpha - lower mipmaps written into mipmap 0.
32BIT with alpha - ZTEXFMT_A8B8G8R8 but A8R8G8B8 pixel.
Für die Erstellung der UV-Maps der Schriften (*.FNT) durch die Engine sollte immer die TGA der Textur vorhanden sein. Ansonsten werden (durch die Kompressionsartefakte) die Buchstabenpositionen und -Ränder schlecht oder gar nicht gefunden. Man braucht die TGA aber nicht ins Release zu packen wenn -C.TEX und FNT vorhanden sind.
"Unter diesen schwierigen Umständen bin ich mir sicher, daß diese guten Menschen meinen augenblicklichen Bedarf an deren Gold verstehen werden." -- Connor
Geändert von NicoDE (17.02.2017 um 11:30 Uhr)
-
Der erste bekannte Bug tritt aber nur auf, wenn die TGA in einem Ordner namens "8BIT" liegt, oder? Es reicht eigentlich aus, wenn man keine Hints nutzt und Gothic dann automatisch DXT1 oder DXT3 verwendet. Da braucht man höchstens noch "NOMIP" für Menügrafiken.
Der "32BIT" Hint funktioniert meines Wissens nach überhaupt nicht. Ich hätte gerne eine Textur mit 8bit Alpha gehabt und hatte dir dazu eine PN geschrieben. Du hast das zwar ausprobiert, warst aber auch nicht erfolgreich. Der Wunsch danach besteht prinzipiell immer noch.
"Weltmacht mit drei Buchstaben?" – Fred & Günther
-
 Zitat von ThielHater
Der erste bekannte Bug tritt aber nur auf, wenn die TGA in einem Ordner namens "8BIT" liegt, oder? Es reicht eigentlich aus, wenn man keine Hints nutzt und Gothic dann automatisch DXT1 oder DXT3 verwendet. Da braucht man höchstens noch "NOMIP" für Menügrafiken.
Ja, man sollte nur vermeiden, Gothic in ein Verzeichnis zu legen, welches "Hints" enthält (es könnte sein, dass der absolute Pfad ausgewertet wird - ungetestet).
 Zitat von ThielHater
Der "32BIT" Hint funktioniert meines Wissens nach überhaupt nicht. Ich hätte gerne eine Textur mit 8bit Alpha gehabt und hatte dir dazu eine PN geschrieben. Du das zwar ausprobiert, warst aber nicht erfolgreich. Der Wunsch danach besteht prinzipiell immer noch. 
Nun, man kann so eine Datei zwar sauber mit den ZTex-Tools aus einer DDS erzeugen, aber der ZenGin nachträglich das Rendern von 8-Bit-Alpha beizubringen übersteigt sowohl meine Kenntnisse, als auch mein Freizeitkontingent
"Unter diesen schwierigen Umständen bin ich mir sicher, daß diese guten Menschen meinen augenblicklichen Bedarf an deren Gold verstehen werden." -- Connor
-
 Zitat von NicoDE
[...] aber der ZenGin nachträglich das Rendern von 8-Bit-Alpha beizubringen übersteigt sowohl meine Kenntnisse, als auch mein Freizeitkontingent
Hatte sich das damals herauskristallisiert? Dann hab ich das leider nicht so in Erinnerung behalten, sorry.
"Weltmacht mit drei Buchstaben?" – Fred & Günther
-
 Zitat von ThielHater
Hatte sich das damals herauskristallisiert?
Mal wird (ein und das selbe Objekt) mit 1-Bit und mal mit 8-Bit-Transparenz gezeichnet. Scheint also irgendwo der Wurm in den Render- und/oder Texture-States drin zu sein. Ist leider nicht mein Fachgebiet... vielleicht kann jemand die Frage beantworten, der sich mit DirectX und/oder der ZenGin in diesem Bereich besser auskennt.
"Unter diesen schwierigen Umständen bin ich mir sicher, daß diese guten Menschen meinen augenblicklichen Bedarf an deren Gold verstehen werden." -- Connor
-
 Zitat von NicoDE
Mal wird (ein und das selbe Objekt) mit 1-Bit und mal mit 8-Bit-Transparenz gezeichnet. Scheint also irgendwo der Wurm in den Render- und/oder Texture-States drin zu sein. Ist leider nicht mein Fachgebiet... vielleicht kann jemand die Frage beantworten, der sich mit DirectX und/oder der ZenGin in diesem Bereich besser auskennt.
Das ganze nennt sich "Alpha-Test" und kann auf jede Textur angewendet werden. Dazu Aktiviert man eben diesen Alpha-Test und gibt einen Grenzwert zwischen 0 und 255 an. Hat ein Pixel einen Alpha-Wert unter diesem Grenzwert, wird er weggeschnitten. Hat die Textur also einen 8-Bit Aplhakanal, wird es daran liegen.
-
Es haben sich mir neue Fragen zum Verhalten der Engine beim konvertieren von TGA nach TEX aufgeworfen.
Ich habe alle TGA-Texturen auf max. 2048 x 2048 hochskaliert und die Engine damit gefüttert. Grundsätzlich konvertiert sie diese TGAs dann in 2K-TEX-Dateien mit 10 mipmaps (jede konvertierte TEX-Datei ist 2731 KB groß und hat 10 mipmaps). Ich hoffte eigentlich dass die Engine die TEXs in Größen umwandeln würde, die optimal für das Spiel sind. Z.B sind selbst die Regentropfen in 2K-TEX mit 10 mipmaps umgewandelt. Dabei sind die im Spiel niemals so groß zu sehen wie in der TEX-Datei auf zehnter mipmap-Stufe. Nun habe ich sehr oft mit dem Error "Out of memory" zu kämpfen.
Kann ich irgendwie protokollieren lassen welchen mipmap-Level die Engine tatsächlich im Spiel nutzt? Oder habe ich da jetzt einen Denkfehler. Nutzt sie wirklich immer die 10 mipmaps? Wie kann ich überhaupt ermitteln welche die optimale Größe für eine Textur im Spiel ist? 
[Bild: Error.jpg]
[Bild: FwfpyewQbXTfGp6Frage.jpg]
edit
Falls es wichtig ist... ich spiele in 4K.
Geändert von Inspirate (24.02.2017 um 07:59 Uhr)
-
Anstatt alles auf eine feste Größe zu skalieren, solltest du eine variable Größe nehmen wie beispielsweise 400%. Du kannst nicht von der Engine erwarten, dass sie die Textur für dich passend skaliert.
"Weltmacht mit drei Buchstaben?" – Fred & Günther
-
 Zitat von ThielHater
Anstatt alles auf eine feste Größe zu skalieren, solltest du eine variable Größe nehmen wie beispielsweise 400%. Du kannst nicht von der Engine erwarten, dass sie die Textur für dich passend skaliert.
Ich habe es jetzt mit einem anderen Denkansatz für mich gelöst. Da die Auflösungen der Texturen damals für (wahrscheinlich) 1280 x 1024 von PB gewählt wurden, erhöhe ich den mipmap-Level um 2 Stufen je Textur und hoffe damit meiner 4K-Auflösung gerecht zu werden. Insgesamt sind es nach der Anpassung nun wenige 2K-Texturen, überwiegend 1K-Texturen und die restlichen Texturen liegen unter 1K mit dem Löwenanteil an 512er Texturen. Den "out of memory" habe ich seitdem nicht mehr erhalten und die Bildqualität ist für mich trotz allem nicht sichtlich schlechter geworden. 
Schade ist es dennoch kein Tool für die engine zu haben welches
a) die geladene Textur in einer Datei protokolliert und dazu
b) den min & max gewählten mipmap-Level der verwendeten Textur protokolliert.
Geändert von Inspirate (24.02.2017 um 21:33 Uhr)
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
|
|