ThKattanek / emu64

C64 Emulator
https://www.thorsten-kattanek.de/index.php/projekte/emu64
GNU General Public License v2.0
38 stars 6 forks source link

Wishlist: PAL delayline emulieren #234

Closed Zirias closed 1 year ago

Zirias commented 1 year ago

PAL-Decoder haben eine Delayline für U und V (also die Farbanteile des YUV-Signals). Das Delay ist exakt eine Rasterzeile, die Farbinformation wird also eine Zeile weiter unten verglichen/beigemischt, eigentlich dazu gedacht, Farbartefakte zu vermeiden. Auf dem C64 lässt sich das nutzen, um nahezu perfekte "Mischfarben" zu erzeugen, Voraussetzung ist, dass beide Farben gleich hell sind (gleicher Luma-Wert).

VICE kann das emulieren (und hat sogar eine Option für eine "U-only Delayline", anscheinend gibt es auch solche Decoder...). Emu64 bisher leider nicht, dadurch sind dann Streifen erkennbar wenn dieser Trick genutzt wird....

Etwas Hintergrundinfo zum Beispiel hier: https://kodiak64.com/blog/luma-driven-graphics-on-c64

ThKattanek commented 1 year ago

Dankeschön für das Issue. Werde das ganze mal studieren und dann sehen wie ich das umsetzten kann. Bin gerade eh dabei wieder hier weiter zu machen.

Zirias commented 1 year ago

Es ist vermutlich sehr komplex .... hier mal ein Beispiel aus einer WIP production, zunächst die pixelgenaue Darstellung: image

Emu64 stellt es mit CRT-Emulation momentan so dar: image

VICE mit CRT-Emulation macht das daraus (und das entspricht der realen Darstellung auf meinem originalen 1081 Monitor, eine flächige Mischfarbe aus 3/4 "lightred" und 1/4 "green"): image

Vermutlich geht es sogar um ein bisschen mehr als "nur" die Delayline, denn NTSC hat keine, aber horizontal mischen sich Farben da trotzdem auch ein bisschen besser (zumindest wenn ich der Emulation von VICE da vertrauen kann, habe selbst leider keine NTSC-Hardware): image

Ja, analoge Video-Signale sind ein wenig Voodoo :rofl:

ThKattanek commented 1 year ago

Ja das Thema ist schon sehr komplex. Habe das gemerkt als ich die CRT Emulation im Emu64 eingebaut habe. Ja die Analogwelt in die Digitale Welt zu pressen ist gar nicht mal so einfach. 😁

Zirias commented 1 year ago

Ich vermute der eigentliche Knackpunkt ist, dass die Auflösung der Farbsignale (U und V) geringer ist als die des Helligkeitssignals (Y). Deshalb ergibt sich oben bei der CRT-Emulation von VICE für NTSC dieses Muster mit den an- und abschwellenden gelben Linien (rot und grün addiert sich nunmal zu gelb). Und bei PAL kommt eben noch die Delayline dazu, durch die sich Farben gleicher Helligkeit auch vertikal mischen, dadurch kriegt man auf einem echten PAL-CRT "echte" Mischfarben hin, solange man eben nur Farben gleicher Helligkeit verwendet.

Ja, ich hab schon aus gutem Grund "wishlist" davorgeschrieben. Es wäre verdammt cool, diese Effekte korrekt zu emulieren (gerade wenn ich lese, dass das z.B. schon 1993 in "Mayhem in Monsterland" aktiv ausgenutzt wurde). Aber da ich selbst absolut keinen Schimmer hätte, wie ich das angehe ... ;-)

ThKattanek commented 1 year ago

Hast du Beispiele als prg die ich mir mal genauer ansehen kann. So kann ich mal vergleichen zwischen c64 mit 1084 und emu64 und vice. Wenn du hier nichts anhängen möchtest kannst du mir das auch als e-mail schicken.

Zirias commented 1 year ago

Nunja, da der von mir verlinkte Artikel das erwähnt: "Mayhem in Monsterland" ist vermutlich ein brauchbarer Testcase ;)

Was die kleinen Screenshots oben angeht, das ist noch nicht released, daher ja, das kann ich hier nicht anhängen. Ich würde deinem Wort vertrauen, es vertraulich zu behandeln, und es direkt per Mail schicken ... dazu bräuchte ich dann aber deine private Email-Adresse :-)

(edit: falls die nicht öffentlich werden soll ... ich hab n guten spamfilter, gerne Email an felix@palmen-it.de oder zirias@FreeBSD.org gg)

(edit2: JETZT sehe ich die steht ja in deinem Profil. Sorry, Blödheit meinerseits. Frage bleibt aber, sicherst du zu, dass das nicht weitergegeben wird? Es ist eben ein WIP ....)

ThKattanek commented 1 year ago

Ja du kannst mir vertrauen und hast mein Wort, das bleibt bei mir und dient nur mir zu Testzwecken und wird auch nicht weitergegeben.

ThKattanek commented 1 year ago

Ein etwas besseres Ergebnis bekommt man wenn man den HoBlur (UV) auf 3 stellt. aber richtig gemischt ist da auch nichts. Es fällt nur das Schachbrettmuster weg. Wenn natürlich die voriger Zeile in die nächste mit rein spielt sähe das schon ganz anders aus.

Zirias commented 1 year ago

Ein etwas besseres Ergebnis bekommt man wenn man den HoBlur (UV) auf 3 stellt. aber richtig gemischt ist da auch nichts.

Habe ich eben getestet. Ja, das ist vermutlich das Ergebnis, was man auf NTSC erwarten würde, also ohne die Delayline.

ThKattanek commented 1 year ago

Habe mir das jetzt mal genauer angesehen und habe das ganze mal überarbeitet. Die PAL Delayline ist jetzt drin und ich habe noch den UV Blur nochmal geändert. Das ganze sieht jetzt ganz gut aus, denke ich. Ich werde morgen die Delayline einstellbar machen und noch "u only" einbauen. Das ganze ist im Branch. /wish/new_crt_emulation_2. Die Delayline ist momentan "dauer an". Hier ein Screenshot. 1

Zirias commented 1 year ago

Cool, das sieht schon ziemlich realistisch aus! Anders als in VICE (etwas "streifiger"), aber vermutlich kommt es auch auf jedem realen PAL CRT ein wenig anders raus ;-)

ThKattanek commented 1 year ago

So die beiden Sachen kann man nun einstellen und werden auch gespeichern. Werde noch versuchen das Y-Blur zu verbessern. Das "blurt" mir noch auf "1" zu sehr. Wenn das dann drin ist, wird es zum master gemerged. Wenn du das testen möchtest kannst du gerne den branch "new_crt_emulation_2" auschecken Screenshot_20230411_213209

ThKattanek commented 1 year ago

Mir fällt gerade noch ein, wenn du Zeit finden solltest das zu testen, schau mal bitte auf die Performance. Eventuell muss ich da noch was optimieren und wieder mit vor berechneten Tabellen arbeiten oder mir was anderes ausdenken. Aber prinzipiell lässt sich da bestimmt noch was an Performance raus holen. Bei mir läuft das ganze mit den Standard CRT Werten bei 2,1 - 2,2 % Cpu und die alte Version bei 1,8%.

ThKattanek commented 1 year ago

Y_Blur habe ich erneuert und wirkt nicht mehr so schwammig bei "doppelter Texturgröße" links alter Y-Blur / rechts neuer Y-Blur (jeweils Einstellung "1") emu64_11_1 emu64_12_1

ThKattanek commented 1 year ago

Diese Video CRT Einstellungen empfinde ich persönlich am besten. Werde diese wohl als "default" nehmen. Screenshot_20230414_232211

ThKattanek commented 1 year ago

Erledigt!

Ist jetzt im master enthalten und wird Bestandteil von 5.0.20.