Novel way of improving hardware rendering quality for many PSX games

Jul 7, 2011 at 12:01 PM

Hello,

I initialy posted this on forums.ngemu.com, but as I used pcsxr to do it, here might have been a better place. Here's the ngemu link

Since long I was trying to think about a way to get those PSX games to look better in HD, you can use filtering for textures, but polygons still looked distorded because their coordinates were still at PSX resolution.
I recently had an idea: since the GTE is doing the 3D to 2D projection (ops RTPS and RTPT), there must be a way to extract high precision polygons coordinates from it and inject them into the GPU plugin!
So basically I have a big array with per PSX pixel 'enhanced' coordinates (32x the PSX res).
I write into it for each vertex the GTE projects, and the GPU plugin gets high res coordinates from it by looking in the cell corresponding to the low resolution vertex coordinates.

I did this using pcsx-reloaded and pete's opengl plugin.

Here are a few before/after:






Compatibility is surprisingly good, in fact I found no games that had severe glitches with that method.
It's still far from perfect though, for example it distorts 2D a little but I thought I had to share my progress :)

As it looks much better when you play it, here are my WIP versions:

v1:
        psx_enhance!.rar
        You can press F12 to temporarily deactivate the effect.
v2:
        psx_enhance!_v2.rar
        - Fixed bugs, no more crashes the first time you select my peops opengl version.
        - Added option to use depth information to try to further improve the rendering quality (disabled by default, doesn't work well with all games).
        Shortcuts are now: F11 to toggle enhance! activation, Shift+F11 to toggle depth information use.

You have to use the bundled peops opengl GPU plugin version for the effect to work !
Please report bugs/successes/failures and have fun :)

I can also post sourcecode if anybody is interested.

Jul 7, 2011 at 12:35 PM

Wow, that is awesome. I would love to see the source code (and hopefully see this feature working on *nix). This will become very useful to me, as I like to play on my huge TV at 1920x1080.

Jul 7, 2011 at 1:08 PM

Here it is:  http://sfx.gligli.free.fr/psx_enhance/psx_enhance!_v2_src.rar

The way I do core<->GPU plugin communication isn't completely safe, it might be a good idea do use a  better interface, maybe something like a callback the GPU plugin would use to get enhanced coordinates from the core...

Jul 9, 2011 at 1:55 AM
Edited Jul 9, 2011 at 4:20 AM

looks awesome :P

plus i was reading today that at phoronix that some guy ported MLAA (Morphological Anti-Aliasing) to mesa, so, i'm not sure if fglrx or the nvidia one have sometingh similar in openGL but pcsxr could use it in the video plugins to filter the image to further reduce the aliasing of the spirtes, like the hud, and fonts

The phoronix article - http://www.phoronix.com/scan.php?page=news_item&px=OTY0MA

MLAA transparencies filtering test - http://www.hardocp.com/article/2010/11/02/amd_morphological_aa_performance_iq_review/8

 

EDIT1: btw it doesn't compile with gcc 4. it seems to be affected by this bug

https://bugs.gentoo.org/attachment.cgi?id=76302

EDIT2: well, after a while of tinkering and stuff i was able to compile it.

i had to enable #define NOVMODE to avoid that bug, rename GL_EXT.H to gl_ext.h, and delete /usr/lib/i386-linux-gnu/libXxf86vm.a from the makefile

but it still won't load because of (i think) some bug in fglrx of something that was fixed in the openGL plugin from the svn. I get the same error that i got back them when updated fglrx to some newer version that came with openGL 4 support. With the one with 2.1 didn't happen.

/home/dario/.pcsxr/plugins/libgpuPeopsMesaGL.so.1.0.78: undefined symbol: glColorTableEXT    :(

try it if you want. i'll have to wait till it's merged into the newer one.

http://ifile.it/a9e2izj/libgpuPeopsMesaGL.so.1.0.78.7z

 

EDIT3·: Tested it in my netbook that uses the intel i915 driver i think, (atom 450) and it loaded this time but pressing F11 and shift+F11 didn't do a thing

Tested with Grand Turismo 2 (sim) PAL

Jul 9, 2011 at 3:16 PM

hmmm, did you also compile my pcsx version? to work it needs modifcations in both the core (to extract data from the GTE) and the gpu plugin (to use it).

also some games don't seem to use those GTE projection ops, so they won't benefit from the enhancement.

Jul 10, 2011 at 3:28 AM
Edited Jul 10, 2011 at 5:23 AM

i compiled your pcsxr version and now it worked, but still F11 and shift+F11 did nothing, at least something visible.

luckly i comes by default, and It looks awesome. I was thinking about this some weeks agos, that the most notisable diference with pcx and modern games was that shit that made the 3D structure look weave and awfull.

hope this gets merged ASAP

 

compiled deb - http://ifile.it/gtc9qr2/pcsxr_1.9.92-1_i386-enheaced.deb  (made with checkinstall)

the plugin - http://ifile.it/a9e2izj/libgpuPeopsMesaGL.so.1.0.78.7z

btw, i had to move the enheaced.h from the win32 folder to the libpcsxcore one, for it to compile

Jul 10, 2011 at 9:58 AM

Ahh cool, yeah, the key shortcut code needs to be ported to the linux GUI I think

Jul 11, 2011 at 8:39 AM
Edited Jul 11, 2011 at 8:46 AM

lol it seems its silently starting to get coded ^_^

 

"gpu gte acuracy interface"

http://pcsxr.codeplex.com/SourceControl/changeset/changes/68598#

Jul 11, 2011 at 9:57 AM

Ah nice :) the way it's done leaves all the work to the GPU plugin, which is a good idea since there might be better ways to store the accuracy info than my per PSX pixel array...

Coordinator
Jul 11, 2011 at 2:53 PM

laharl2k: http://forum.emu-russia.net/viewtopic.php?p=12945#p12945

01/10/2010

Any questions?

Jul 12, 2011 at 3:19 AM

no sir  :P

 

do the 3D part too, please. but with cross eyed too because parallel its kind of dificult :(

Apr 21, 2012 at 3:15 PM

Hi gligli!

Are you still working on this?

Apr 21, 2012 at 3:45 PM

Just tried it. Its awesome. Especially the depth enhancement. Hog of War was crazy wobbly, but now its smooth.

Dec 12, 2012 at 5:04 AM

Does it work on linux?

Coordinator
Dec 12, 2012 at 1:50 PM
Edited Dec 12, 2012 at 1:51 PM

Yes.

Mar 15, 2013 at 3:35 AM
The "GTE Accuracy" option also seems to work on Mac OS X, but its tooltip help in the plugin configuration dialog is misleading and needs to be fixed. Currently it says "Enabling this will use a faster motion jpeg codec with some quality loss", the same help as for the "15bit Motion JPEGs" option above it. Unless you're familiar enough with Playstation hardware acronyms to realize this has to be bogus, you're liable to ignore the option and miss out on the improved geometry rendering it can provide. I only was inspired to try it after reading this discussion, following a couple of links, and discovering there was an option I had missed.
Mar 16, 2013 at 12:26 AM
I'd also like to point out that gligli's original GTE accuracy method offered much better quality than the current implementation, even without depth accuracy. Enabling gligli's depth option made it almost perfect. Why was a different method chosen? They both seem to use similar resources.
Apr 18, 2015 at 3:25 PM
Edited Apr 18, 2015 at 3:26 PM
I have GTE accuracy in my PCSXR OpenGL plugin, but it does otherwise. Instead of unwilggle the geometry, it extends the wiggle to the hud :P

Also, that MESA plugin don't work for me because i'm using 64 bit and the plugin is 32 bit :P