 |
|
Downloads
|
 |
|
 |
|
Social Links
|
 |
|
|
 |
|
Forum
|
 |
| MEMBERS ONLINE | | Currently no members online. |  You are an anonymous user. You can register for free by clicking here |
| |
|
 |
|
Funny Quotes
|
 |
Verwenden Sie die richtige Schreibweise, Grammatik und Punktsetzung um qualitativ hochwertige Übersetzungen zu erhalten.
-- Babelfish |
|
| Author |
Message |
Jezze
|
|
Post subject: MAME Shader Konfiguration
Posted: Jun 29, 2012 - 05:13 PM
|
|
Banned Team Member

Joined: Oct 30, 2004
Posts: 5301
Highscores in 05/2013
Status: Offline
|
|
Vor einiger Zeit hatte ich ja bereits versucht einen Offscreen von Metal Slug mit den Möglichkeiten die mir der Shader von MAME bietet nachzuahmen; was mir - so denke ich - auch recht gut gelungen ist.
Sicherlich interessiert es den ein oder anderen welche Einstellungen ich vorgenommen habe oder gar wie man den Shader initial aktiviert. Bitte beachtet, dass einige Einstellungen nicht mit dem Standard post.fx Shader der mit MAME geliefert wird funktionieren. Weitere Informationen findet ihr ganz zum Schluss des Beitrages.
Shader aktivieren
Um den HLSL Shader von MAME nutzen zu können müsst ihr ihn zunächst in der mame.ini aktivieren. Dazu sucht ihr in der Datei nach DIRECT3D POST-PROCESSING OPTIONS und setzt folgende Einstellungen
Code: hlsl_enable 1
hlslpath hlsl
hlsl_ini_read 1
hlsl_ini_write 0
hlslini hlsl.ini
hlsl_enable
0 deaktiviert den Shader
1 aktiviert den Shader
hlslpath
gibt den relativen Pfad zu dem Verzeichnis an, in dem der eigentlichen Shader Code liegt. Dieses Verzeichnis sollte folgende Dateien beinhalten, die MAME standardmäßig mitbringt:
color.fx
deconverge.fx
focus.fx
phosphor.fx
pincushion.fx
post.fx
prescale.fx
primary.fx
yiq_decode.fx
yiq_encode.fx
hlslini
gibt den Namen der Datei an, in dem die Shader-Parameter gespeichert sind. Ihr könnt diesen Wert auch auf %g gesetzt lassen, wodurch die Shader-Parameter aus einer Datei die den Namen des ROM-Sets trägt geladen werden oder falls diese nicht vorhanden ist direkt aus der mame.ini. Eine hlsl.ini mit den Standard-Einstellungen aus der mame.ini könnt ihr hier herunterladen.
hlsl_ini_read
0 deaktiviert das Lesen aus der hlsl.ini
1 aktiviert das Lesen aus der hlsl.ini
hlsl_ini_write
0 deaktiviert das Schreiben in die hlsl.ini
1 aktiviert das Schreiben in die hlsl.ini
Wenn ihr das Spiel nun startet seht ihr im Grund keinen Unterschied zur normalen Darstellung, was natürlich daran liegt, dass bisher keinerlei Einstellungen in der hlsl.ini vorgenommen wurden.
Grundeinstellungen
Code: hlsl_enable 1
hlsl_prescale_x 0
hlsl_prescale_y 0
hlsl_snap_width 1920
hlsl_snap_height 1280
hlsl_enable
hat die gleiche Auswirkung wie in der mame.ini und muss - auch wenn bereits in der mame.ini angegeben - erneut gesetzt werden.
hlsl_prescale_x/y
geben an um welchen Faktor, das Ausgangsbild skaliert werden sollen. Je niedriger der Skalierungsfaktor desto unschärfer ist das Bild. Eine Angabe von 0 berechnet den Skalierungsfaktor automatisch, so dass es zu keiner Unschärfe kommt. Dies kann bei schwächerer Hardware allerdings zu Lasten der Performance geht, weshalb eine konkrete Angabe des Skalierungsfaktors sinnvoll sein kann.
hlsl_snap_width/height
geben die Auflösung der mit Alt + 12 generieren Snapshots an.
Farbtransformation
Der Shader bietet umfangreiche Möglichkeiten den Farbraum des Ausgangsbildes zu transformieren. Folgende Einstellungen habe ich vorgenommen.
Code: red_ratio 1.050000, 0.000000, 0.100000
grn_ratio -0.100000, 1.000000, 0.250000
blu_ratio -0.250000, 0.250000, 1.250000
offset 0.025000, 0.025000, 0.025000
scale 0.900000, 0.950000, 0.950000
power 1.300000, 1.100000, 1.000000
floor 0.000000, 0.000000, 0.000000
red/grn/blu_ratio
definieren eine 3×3 Matrix, die mit dem RGB-Signal multipliziert wird. Im Grund lässt sich damit der RGB-Farbraum beliebig transformieren. Einfacher gesagt kann damit bestimmt werden, wie stark ein Farbkanal auf einen anderen Farbkanal Einfluss hat. Im Bsp. des Grün-Kanals (-0.100000, 1.000000, 0.250000) wird dieser um 10% (-0.100000) durch den Wert des Rot-Kanals abgeschwächt und um 25% (0.250000) durch den Wert des Blau-Kanals verstärkt.
offset
erhöht bzw. verringert den jeweiligen Farbwert eines Kanals.
Bsp. Rot-Signal = 0.5, Rot-Offset = 0.1, Rot = 0.6
scale
skaliert den jeweiligen Farbwert eines Kanals.
Bsp. Rot-Signal = 0.5, Rot-Scale = 1.1, Rot = 0.55
power
potenziert den jeweiligen Farbwert eines Kanals.
Bsp. Rot-Signal = 0.5, Rot-Power = 2, Rot = 0.25
floor
gibt den minimalen Farbwert eines Kanals an.
Bsp. Rot-Signal = 0.0, Rot-Floor = 0.1, Rot = 0.1
Wenn ihr die Einstellungen wie oben angegeben verwendet sieht das Spiel nun folgendermaßen aus.
Sättigung, Kontrast, Helligkeit und Gamma
Code: saturation 1.150000
brightness 0.950000 ;kein Shader Parameter
contrast 1.250000 ;kein Shader Parameter
gamma 0.900000 ;kein Shader Parameter
Da das obige Bild noch sehr blass und Kontrastarm wirkt, werden nun Sättigung, Kontrast, Helligkeit und Gamma angepasst. Bis auf die Sättigung sind dies jedoch keine Parameter des Shaders und müssen in der mame.ini angegeben werden.
Unschärfe und Farbverlauf
Code: defocus 0.500000, 0.500000
converge_x 0.000000, 0.000000, 1.000000
converge_y 0.500000, 0.000000, 0.000000
phosphor_life 0.500000, 0.500000, 0.500000
defocus
gibt (in Pixel) an wie unscharf das Bild in X und Y-Richtung gemacht werden soll.
converge_x/y
geben (in Pixel) an wie sehr der jeweilige Farbkanal in X und Y-Richtung verschoben werden soll
phosphor_life
gibt an wie Lange der jeweilige Farbwert eines Kanals bestehen bleibt.
0 bedeutet, der Farbwert wird sofort überschrieben
1 bedeutet, der Farbwert bleibt bestehen und wird nur durch einen höheren Farbwert überschrieben
Diese Einstellungen geben dem Bild eine Art "schlechter Qualität" des RGB-Signals.
Maske
Code: shadow_mask_alpha 0.100000
shadow_mask_texture crt_slot_mask.png
shadow_mask_x_count -2
shadow_mask_y_count -2
shadow_mask_usize 0.375000
shadow_mask_vsize 0.375000
shadow_mask_alpha
gibt die Intensität der Maske an.
shadow_mask_texture
gibt den Namen der Textur, die als Maske verwendet werden soll, an. Diese Datei muss im Unterverzeichnis artwork liegen.
shadow_mask_u/vsize
gibt an wie viel Prozent der Textur-Maske in X und Y-Richtung (genauer gesagt in UV-Koordinaten) einem (oder auch mehreren) Pixel des simulierten Bildschirms entspricht. Hierbei muss man beachten, dass die Berechnung der UV-Koordinaten auf Basis von Texturen mit einer Auflösung von power-of-two geschieht. Verwendet man also eine Textur die keine Auflösung von power-of-two besitzt, so wird diese bis zur nächst höheren Auflösung erweitert.
Bsw.
Auflösung = 48×48, power-of-two Auflösung = 64×64, UV-Size = 0.375×0.375, UV-Pixel = 24×24, d.h. 24×24 Pixel der 48×48 großen Textur werden für die Darstellung von 2×2 Pixel verwendet.
Wie sich an der dreifach vergrößerten Texture erkennen lässt, können wir 1x1 Pixel (durchgezogene Markierung) der Texture nicht kacheln um die Slot Mask abzubilden, da die Pixel jeder zweiter Spalte versetzt sind, weshalb 2×2 Pixel (gepunktet Markierung) verwendet werden
shadow_mask_x/y_count
gibt an wie oft die Maske in X und Y-Richtung gekachelt werden soll. Diese Angabe kann allerdings schnell sehr Nerv-tötend werden, wenn man nur eine hlsl.ini verwenden möchte und für jedes Spiel oder eher jedes System die Auflösung anpassen muss. Aus diesem Grund habe ich den post.fx Shader so angepasst, dass die entsprechende Auflösung automatisch gesetzt wird. Durch die Angabe von negativen Werten wird nun automatisch die Auflösung des Spiels oder ein Bruchteil dieser als Mask-Count verwendet.
Bsp.
Auflösung = 320×240, Count = -1, Kachel-Anzahl = 320×240 (Maske beschreibt 1×1 Pixel)
Auflösung = 320×240, Count = -2, Kachel-Anzahl = 160×120 (Maske beschreibt 2×2 Pixel)
Nach diesen Einstellungen sieht das Ergebnis folgendermaßen aus.
Scan-Lines
Code: scanline_alpha 0.250000
scanline_size 1.000000
scanline_height 1.500000
scanline_bright_scale 1.000000
scanline_bright_offset 0.000000
scanline_jitter 0.000000
scanline_alpha
gibt die Intensität der Scanlines an.
scanline_size
gibt die Anzahl der Scanline an
1 bedeutet, die Anzahl der Scan-Lines entspricht der vertikalen Auflösung
2 bedeutet, die Anzahl der Scan-Lines entspricht dem doppelten der vertikalen Auflösung
scanline_height
gibt den Abstand zw. zwei Scan-Lines und somit die Höhe einer Scan-Lines an
0 bedeutet der Abstand zw. zwei Scan-Lines ist minimal und kaum zusehen
2 bedeutet der Abstand (1/2) zw. zwei Scan-Lines entspricht der Höhe (1/2) einer Scan-Lines
4 bedeutet der Abstand (3/4) zw. zwei Scan-Lines entspricht dem dreifachen der Höhe (1/4) einer Scan-Line
scanline_bright_scale
gibt die Helligkeit der Scan-Line an
scanline_bright_offset
hat keinerlei Auswirkungen und wir im Shader nicht verwendet
scanline_jitter
simuliert das wahrgenommene Flackern der Scan-Lines, das beim Zeilensprungverfahren auftritt
Mit diesen Einstellungen erhaltet ihr folgendes Ergebnis.
Krümmung
Code: pincushion 0.300000
pincushion
gibt den Grad Wölbung des Bildschirms an
Den Grad der Wölbung habe ich im post.fx Shader auf ein Viertel reduziert, um eine übertriebene Angabe auszuschließen, die eher an Fish-Lens als an eine normale Bildschirmkrümmung erinnert. Zudem werden die Ecken des Bildschirmes nun abgerundet, wie es bei vielen alten CRT-Monitoren und vor allem bei Fernsehern der Fall war.
Vignettierung und Reflexion
Code: curvature 0.150000
curvature
dieser Wert hat im ursprünglichen post.fx Shader keinerlei Auswirkung und wird nicht verwendet
Ich verwendet diesen Wert zum Simulieren von Vignettierung und Reflexion. Folgende Bilder zweigen was dabei geschieht.
graues Signal
graues Signal mit Vignettierung
graues Signal mit Reflexion
graues Signal mit Vignettierung und Reflexion
Das endgültige Ergebnis sieht nun folgendermaßen aus.
Download
post.fx Filter
Damit ihr die vereinfachte Konfiguration der CRT Masken, sowie die Effekte für Vignettierung und Reflexion nutzen könnt, benötigt ihr diese modifizierte post.fx Datei mit der ihr die vorhandene überschreibt.
Color Adjustment Settings
In dieser hlsl.ini sind lediglich die Farbeinstellungen vorgenommen wurden.
Slot Mask Settings
Diese hlsl.ini soll einen CRT-Monitor mit Slot Mask simulieren, inklusive der gezeigten Farbeinstellungen sowie der vorgestellten Vignettierung und Reflexion.
Zusätzlich benötigt ihr noch diese Texture.
Aperture Grille Settings
Diese hlsl.ini soll einen CRT-Monitor mit Aperture Grille simulieren, inklusive der gezeigten Farbeinstellungen sowie der vorgestellten Vignettierung und Reflexion.
Zusätzlich benötigt ihr noch diese Texture.
Shadow Mask Settings
Diese hlsl.ini soll einen CRT-Monitor mit Shadow Mask simulieren, inklusive der gezeigten Farbeinstellungen sowie der vorgestellten Vignettierung und Reflexion.
Zusätzlich benötigt ihr noch diese Texture.
 |
|
_________________ Sometimes I think the compiler ignores my comments.
|
| |
|
|
|
 |
MasterPhW
|
|
Post subject: MAME Shader Konfiguration
Posted: Jun 29, 2012 - 06:25 PM
|
|
News Scout

Joined: Jul 06, 2004
Posts: 1822
Location: W-Live
Highscores in 05/2013
Status: Offline
|
|
| Wird zwar höchstwahrscheinlich nix, was ich machen werde, weil es mit viel zu viel Anpassung und viel zu wenig Nutzen und wenn dann meist nur für ein Spiel verbunden ist, aber allein schon Danke für die Arbeit und dafür natürlich +1 beim Renomee System (mit ich das wenigstens dann und wann mal nutze. ;D). |
_________________ Willst du mehr von, über oder mit mir lesen, besuche mich auf
|
| |
|
|
|
 |
Jezze
|
|
Post subject:
Posted: Jun 29, 2012 - 06:40 PM
|
|
Banned Team Member

Joined: Oct 30, 2004
Posts: 5301
Highscores in 05/2013
Status: Offline
|
|
| Welche aufwendigen Anpassungen hast du denn vor? Die Settings, die ich verlinkt habe, lassen sich eigentlich für jedes Spiel ohne Änderungen verwenden. |
|
_________________ Sometimes I think the compiler ignores my comments.
|
| |
|
|
|
 |
|
|
Post subject:
Posted: Jun 29, 2012 - 06:46 PM
|
|
Retromeister

Joined: Apr 13, 2006
Posts: 1292
Highscores in 05/2013
|
|
OPTIMAL !
Danke Jezze, +1 auch von mir.  |
|
|
| |
|
|
|
 |
MasterPhW
|
|
Post subject:
Posted: Jun 29, 2012 - 06:50 PM
|
|
News Scout

Joined: Jul 06, 2004
Posts: 1822
Location: W-Live
Highscores in 05/2013
Status: Offline
|
|
Jezze wrote: Welche aufwendigen Anpassungen hast du denn vor? Die Settings, die ich verlinkt habe, lassen sich eigentlich für jedes Spiel ohne Änderungen verwenden.
Nein, ich habe keine aufwendigen Anpassungen vor, diese Anpassungen wären mir für jedes Spiel zu aufwendig, sorum wird nen Schuh draus. ;D
Miss(t)Verständnis quasi.
Und auch wenn sie bei MS klasse aussehen, heißt das nicht, dass bspw. Street Fighter davon profitieren würde. Daher lass ich es wohl eher Standardmäßig. Bin aber eh nicht so der MAME Bastler. Wenn ich die Zeit hätte, weiß ich ja, könnte man viel mehr aus MAME rausholen. Ich nutze nur kaum was davon um ehrlich zu sein. |
_________________ Willst du mehr von, über oder mit mir lesen, besuche mich auf
|
| |
|
|
|
 |
FreneticGeek
|
|
|
Post subject:
Posted: Jul 10, 2012 - 09:43 PM
|
|
Retrohling

Joined: Jul 10, 2012
Posts: 1
Highscores in 05/2013
Status: Offline
|
|
| reife Leistung, Klasse! Vielen Dank. |
|
|
| |
|
|
|
 |
NorQue
|
|
Post subject:
Posted: Jul 11, 2012 - 11:02 PM
|
|
Retromeister

Joined: Jul 18, 2004
Posts: 867
Highscores in 05/2013
Status: Offline
|
|
| Was für einen Monitor hast du eigentlich, der eine 1920x1440er Auflösung darstellen kann? Das höchste was ich finden kann hat bei 1920 Pixeln horizontaler Auflösung 1200 Pixel vertikal, alles andere scheint nur in Notebooks verbaut worden zu sein und ist mir zu klein. Kannst du mal ein Beispiel mit 1200 Pixeln vertikaler Auflösung posten? |
|
|
| |
|
|
|
 |
Jezze
|
|
Post subject:
Posted: Jul 12, 2012 - 09:41 AM
|
|
Banned Team Member

Joined: Oct 30, 2004
Posts: 5301
Highscores in 05/2013
Status: Offline
|
|
Mein Monitor unterstützt auch keine Auflösung von 1920x1440. Diese Auslösung wird wie beschrieben nur für die Erstellung der Screenshots (Alt + 12) verwendet und wurde gewählt um den kleinen Ausschnitt des Bildes mit Marco möglichst groß und detailliert zu haben.
Das Ergebnis mit einer vertikalen Auflösung von 1200 würde in etwa genau so aussehen, als würdest du die aktuellen Screenshots bilinear herunter skalierst. |
|
_________________ Sometimes I think the compiler ignores my comments.
|
| |
|
|
|
 |
|
|
|
|
|