|
Downloads
|
|
|
|
Forum
|
|
MEMBERS ONLINE | Currently no members online. |
You are an anonymous user. You can register for free by clicking here |
| |
|
|
Review of the moment
|
|
|
|
|
|
|
Author |
Message |
Jezze
|
|
Post subject: MAME Shader Konfiguration
Posted: Jun 29, 2012 - 05:13 PM
|
|
Banned Team Member
Joined: Oct 30, 2004
Posts: 5.751
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:
bloom.fx
color.fx
deconverge.fx
focus.fx
phosphor.fx
pincushion.fx
post.fx
prescale.fx
primary.fx
yiq_decode.fx
yiq_encode.fx
hlslini (seit 0.149 fehlerhaft, mit 0.150 entfernt)
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 (seit 0.149 fehlerhaft, mit 0.150 entfernt)
0 deaktiviert das Lesen aus der hlsl.ini
1 aktiviert das Lesen aus der hlsl.ini
hlsl_ini_write (seit 0.149 fehlerhaft, mit 0.150 entfernt)
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.
Edit:
Um der Verwirrung zw. curvature (ungenutzt) und pincushion für die Bildschirmkrümmung (engl. screen curvature) im original HLSL Shader vorzubeugen, habe ich die beiden Werte in meiner Modifikation vertauscht. So dass nun curvature für die Bildschirmkrümmung und pincushion für die Vignettierung verantwortlich ist. |
_________________ Test your limits and break through!
Last edited by Jezze on Feb 03, 2014 - 12:09 AM; edited 2 times in total
|
|
|
|
|
MasterPhW
|
|
Post subject: MAME Shader Konfiguration
Posted: Jun 29, 2012 - 06:25 PM
|
|
News Scout
Joined: Jul 06, 2004
Posts: 1.919
Location: W-Live
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: 5.751
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. |
_________________ Test your limits and break through!
|
|
|
|
|
|
Post subject:
Posted: Jun 29, 2012 - 06:46 PM
|
|
Retromeister
Joined: Apr 13, 2006
Posts: 1.299
|
|
OPTIMAL !
Danke Jezze, +1 auch von mir. |
|
|
|
|
|
MasterPhW
|
|
Post subject:
Posted: Jun 29, 2012 - 06:50 PM
|
|
News Scout
Joined: Jul 06, 2004
Posts: 1.919
Location: W-Live
Status: Offline
|
|
[quote:4120f3099d="Jezze"]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: 2
Status: Offline
|
|
reife Leistung, Klasse! Vielen Dank. |
|
|
|
|
|
NorQue
|
|
Post subject:
Posted: Jul 11, 2012 - 11:02 PM
|
|
Retromeister
Joined: Jul 18, 2004
Posts: 869
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: 5.751
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. |
_________________ Test your limits and break through!
|
|
|
|
|
cmoses
|
|
Post subject:
Posted: Jun 12, 2013 - 07:02 PM
|
|
Retrohling
Joined: Jun 12, 2013
Posts: 9
Status: Offline
|
|
From United States so I use Google Translate to view the page. I really love the settings, I think they look great. I just downloaded MAME 149 transferred them over but they do not work. I just get a blank screen.
I think it is the post.fx file that might be the issue. Any chance you are thinking about updating? Also 149 has some new HLSL settings.
Thanks |
|
|
|
|
|
Jezze
|
|
Post subject:
Posted: Jun 13, 2013 - 09:48 AM
|
|
Banned Team Member
Joined: Oct 30, 2004
Posts: 5.751
Status: Offline
|
|
Yeah, the shaders were changed with 0.148u5, so my modifications and settings aren't compatible anymore. I'll take a look at the new shader structure and if the changes are not too extensive, I can provide an update shortly.
One of the changes is the support for monitor-glow, as you may already know.
|
_________________ Test your limits and break through!
|
|
|
|
|
cmoses
|
|
Post subject:
Posted: Jun 13, 2013 - 03:05 PM
|
|
Retrohling
Joined: Jun 12, 2013
Posts: 9
Status: Offline
|
|
[quote:0cfcdaff3c="Jezze"]Yeah, the shaders were changed with 0.148u5, so my modifications and settings aren't compatible anymore. I'll take a look at the new shader structure and if the changes are not too extensive, I can provide an update shortly.
One of the changes is the support for monitor-glow, as you may already know.
Yes I like what they have added to HLSL. I think the monitor glow looks best in vector games. I think it still needs tweaking in raster based games. I wasn't really impressed with the default HLSL settings. I have incorporated all of your settings into 149 and they all still work fine. Hopefully the post.fx can be easily changed. The one tweak I have made to your amazing settings is the offset setting in mame.ini. I saw some information in another post about improving the black levels. I currently use
offset -0.04,-0.04,-0.04
which darkens the overall picture just a touch but I think improves on the look. Let me know what you think.
Thanks for your reply. Good luck with the post.fx. |
|
|
|
|
|
Jezze
|
|
Post subject:
Posted: Jun 13, 2013 - 09:08 PM
|
|
Banned Team Member
Joined: Oct 30, 2004
Posts: 5.751
Status: Offline
|
|
I've updated my modified post.fx shader file to work with MAME 0.149.
By the way, could you adjust the shader via a separate hlsl.ini file? If I use a separate file, I just get a black screen. So I must change the settings in the mame.ini, witch is not that great. |
_________________ Test your limits and break through!
|
|
|
|
|
cmoses
|
|
Post subject:
Posted: Jun 13, 2013 - 11:56 PM
|
|
Retrohling
Joined: Jun 12, 2013
Posts: 9
Status: Offline
|
|
[quote:2fa7022ef8="Jezze"]I've updated my modified post.fx shader file to work with MAME 0.149.
By the way, could you adjust the shader via a separate hlsl.ini file? If I use a separate file, I just get a black screen. So I must change the settings in the mame.ini, witch is not that great.
I tried the post.fx and it is working now with 149. I do get a strange moire pattern in the background now that I was not getting on 148. I changed the offset settings back to your original ones and it was still there.
I wasn't sure what you meant by "could you adjust the shader via a seperate hlsl.ini file?". I am not sure how to adjust the shader through a seperate hlsl.ini file. Could you explain this process? Would that be be what is causing the moire pattern? Are you using a new mame.ini can you post it?
Thanks |
|
|
|
|
|
Jezze
|
|
Post subject:
Posted: Jun 14, 2013 - 08:37 PM
|
|
Banned Team Member
Joined: Oct 30, 2004
Posts: 5.751
Status: Offline
|
|
Quote: I do get a strange moire pattern in the background now [...] Ups, I've made a small mistake with my adjustments for MAME. 0.149. The size of the shadow mask wasn't calculated correctly. Please download the post.fx file again.
What I meant with "seperate hlsl.ini file" is, that you can specify a separate file containing all the shader settings.
mame.ini
Code: hlsl_ini_read 1
hlslini hlsl.ini
This file must be in the hlsl directory of MAME. So you can easily switch between completely different settings by changing the file name. Unfortunately, it gives me a black screen in version 0.149. |
_________________ Test your limits and break through!
|
|
|
|
|
cmoses
|
|
Post subject:
Posted: Jun 16, 2013 - 11:03 PM
|
|
Retrohling
Joined: Jun 12, 2013
Posts: 9
Status: Offline
|
|
The new post.fx is working great and looks just like it did in 148, no more moire pattern. Thanks.
I figured out what you meant by the HLSL.ini file. You are right it only gives you a black screen when you try to use it.
Have you played around with the raster_bloom setting? I like he vector_bloom, I think it makes the vector games look better. Not sure about the raster one. It may need some tweaking. |
|
|
|
|
|
|
All times are GMT + 1 Hour
|
|
|
|
|
|
|