Next Generation Emulation banner

A shout out to you plugin authours...

3K views 29 replies 11 participants last post by  KojiroTakenashi 
#1 ·
I was just wondering, any of you familiar with Kreed's SuperEagle code? It's used in most SNES emus. On my machine, at least, it bumps out all the blockiness on the display without losing it's sharpness, with no performance hit, possibly even at an increase!
Wouldn't it be possible to convert this code in a manner that allows 2D things (sprites, text, maybe even textures and FMV's?) to be filtered in such a way?
Not only would it cut 2D calculations mostly out of the picture, it'd look good doing it, too.
Just a thought.
 
#2 ·
I am not a plugin author so I am not sure this can be done or not.
I am just posting here to let you know" yes I am familiar with kreed's super eagle mode".Improves performance on my computer too.
As far as code conversion goes I am not sure its that much simple thing.
 
#3 ·
Im also familiar with this engine. I agree it would be a great thing but you need to realise that those engines are done in software, and most of todays psx plugins are in hardware. Because of that, it limits what what can be done easily, im not saying its impossible, just hard, and it may seem that those engines dont have a speed hit, but this is only because the snes is fairly slow and emulation of it has gone a hell of a long way, so the hit wouldnt really be noticeable, except maybe on and older PC. On the other hand psx emu's are using quite a bit of your PC's power. Adding more proccesing on top of what it already does would certainly slow it down. Another thing is that those particular engines have been around for a while as well, and they have been optimised quite a bit, thats why they have good speed. Im not trying to beat on the idea, i think it would be cool, and now with petes open source soft plugin it would be even easier. I just dont think many people would take it on, because it would be a lot of work and only really usuable in software plugins. These days most people use hardware anyway. And the 2D doesnt look bad with just bi-linear filtering or no filtering at all for that vintage psx look :p.

~fluffy~
 
#8 ·
Smooth birts

I've only seen a couple of screenshots of Eagle (or Super Eadge, I'm not sure) so I can only guess how it works.
I agree with fluffy that using acelerated 3D hw makes things a lot more difficult. In that case one needs to filter sprites on the fly. It will work in some cases, but wont work so well in other cases.
For example games a la Final Fantasy have the background built out of 16x16 tiles, so a real good Eagle-like filtering would imply that it's applied as a final pass, after all tiles are combined together on display. This is not so easy and that's why hardware plugins prefer to blindly render tiles without trying to smooth the adiacent edges.
How easy is to use muli-pass efficiently largely depends on how a plugin organized the rendering order. But muli-pass can improve things quit a bit.
Personally I've developed a couple of tricks, one of which was used in FF8 PC (2 pass only version to support weaker hardware). All multi-pass, and they all look better than cutting tiles' edges.

As far as software rendering goes.. there the options are limitless. One could go all the way to scan the whole frame to detect possible edges and resample those edges to remove blockiness. But that's a bit too time consuming. Infact what's practically afforable are techniques like Weighted Median, Bicubic Resampling, Eagle and Directional Stretch ;)
Techniques that still attempt to preserve the natural edginess of the image, but don't look much further than a few surrounding pixels.

Still I think the best smoothing is to have a TV as a output. Computer monitors are just too precise and pixels look like sharp boxes.
If time allows, I'll be investing more efforts researching ways to simulate TV's blurriness.

bau
 
#10 ·
Originally posted by FireGL
i smell Nikk
Huh, you smell me? ;) Haha, serously... If I ever make a soft gpu I'll definitely think about putting a super scaling engine in somewhere :)

You can also get some super 2xSAI effects by turning on bilinear filtering in 2D games :)

Another idea for hardware plugins would be to use textures twice their original size and apply one of these techniques to them. I'm not sure how this would look, but it might be worth a try some day :)
 
#11 ·
Another idea for hardware plugins would be to use textures twice their original
size and apply one of these techniques to them. I'm not sure how this would
look, but it might be worth a try some day
I am sure it'll look terrible... in 3D games the textures get stretched in any way imaginable, so any filter you apply on the raw texture rect will cause artifacts. And in 2D background gfx the edges of the tiles will be more visible, because your texture filter will have no informations about the surrounding textured tiles, and therefore can't use their data to smooth the edges (until you don't sort all tiles each frame, so you know what are the surrounding tiles and textures ... and that's an hard job to do... and prolly it still would cause all kind of glitches).
 
#12 ·
Cool we got Nikk and Pete involved !

Here are 2 of my cents about filtering tiles or sprites in general.

<b>First cent:</b>

1) Render full tile with no bilinear
2) Render same tile on top but with edges chopped (so smaller) and bilinear.

<pre>__________
| ________ | <- non bilinear
|| || full tile
||Bilinear||
||no-edges||
||________||
|__________|

</pre>

This will give a tile with non-bilinear edges but bilinear content. In this case tiles have a slightly marked edge but dont look chopped.

<b>Second cent:</b>

1) Render full tile with no bilinear
2) Render same tile on top but translucent and with destination coordinates slightly off. Also no bilinear here.

<pre> __________
non bilinear -> | _________|_
full tile | | | | <- non bilinear
| | | | translucent
| | | | on top
|_|________| |
|__________|

</pre>


This is basically a bilinear emulation for 2D. The point N.2 can be one or more passes (for example (x-1, y) , (x+1, y), (x-1, y-1) etc etc).
Another advantage is that one can reduce the smooth effect by using changing the strenght of the transucency.


Of course one still needs to make sure that the change of states are either not compromising performance too much or are properly grouped together.
Also I tested this stuff only for integer coordinates scaling (eg 320x240->640x480). So I'm not sure how well it would look in case of generic size stretch.
 
#14 ·
Originally posted by kazzuya
Cool we got Nikk and Pete involved !

Here are 2 of my cents about filtering tiles or sprites in general.

<b>First cent:</b>

1) Render full tile with no bilinear
2) Render same tile on top but with edges chopped (so smaller) and bilinear.

<pre>__________
| ________ | <- non bilinear
|| || full tile
||Bilinear||
||no-edges||
||________||
|__________|

</pre>


This could certantly be done on sprites, but the amount of state changes would be huge overall, but I'm not sure how much it would affect performance...

<b>Second cent:</b>

1) Render full tile with no bilinear
2) Render same tile on top but translucent and with destination coordinates slightly off. Also no bilinear here.

<pre> __________
non bilinear -> | _________|_
full tile | | | | <- non bilinear
| | | | translucent
| | | | on top
|_|________| |
|__________|

</pre>


This is basically a bilinear emulation for 2D. The point N.2 can be one or more passes (for example (x-1, y) , (x+1, y), (x-1, y-1) etc etc).
Another advantage is that one can reduce the smooth effect by using changing the strenght of the transucency.


Of course one still needs to make sure that the change of states are either not compromising performance too much or are properly grouped together.
Also I tested this stuff only for integer coordinates scaling (eg 320x240->640x480). So I'm not sure how well it would look in case of generic size stretch.
:) Good thinking, I also tried something like this with multitexturing in D3D, but was too lazy to put in a second set of texture coordinates...

Both of these ideas would work perfectly on sprites, but to use on nGons, you'd need to find their center and scale them down by some degree before applying the second layer to them.
 
#15 · (Edited)
Originally posted by Pete Bernert


I am sure it'll look terrible... in 3D games the textures get stretched in any way imaginable, so any filter you apply on the raw texture rect will cause artifacts. And in 2D background gfx the edges of the tiles will be more visible, because your texture filter will have no informations about the surrounding textured tiles, and therefore can't use their data to smooth the edges (until you don't sort all tiles each frame, so you know what are the surrounding tiles and textures ... and that's an hard job to do... and prolly it still would cause all kind of glitches).
I'm not sure how your hardware renderers work, but with mine, they store entire pages that are in the VRAM into entire texture pages that are in the computer's memory. I'm not sure if you're saying that it would look bad on individual tiles because they will have chunky black outlines, or... ?

Besides, with they way I was planning to design it, it would be supra easy to switch to any texture page size if I wanted :p

I really don't know how the Neo*Geo hardware works, but I remember some nice 2D games in Neo Rage X looking good with the super scaling enabled.

So what are your thoughts on using this in software renderers? I'd like to know :)
 
#16 ·
Originally posted by fivefeet8
Anyone know how Snes9x uses ogl and glide to filter snes games? I used those two options in snes9x and they look great with snes games.. Maybe that technique could be used here..
Snes9x uses Bi-linear filtering for Glide. I don't know about OpenGL. Yeah, it looks great when I use my Voodoo2 and Snes9x. So much better than SuperEagle, 2xSAI and other things.
 
#17 ·
Ok. Sucks to be me. Spent well over 20 minutes of my precious time typing out a long-winded speech on this, so I'll try and keep it short.
Bilinear - good, but the deal is, it get blurry. Blurry bad.
Eagle, at least for me, smooths while keeping things sharp. Sharp good.
Sharp good. Blurry bad.
Simple enough yet?;)
I'm saying this should go for primarily 2D things, like text, or sprites.
It would do wonders for FF Tactics, because it could clean up sprites in software, but do polygons and fight the jaggies in hardware.
This would be kinda intensive, but I'm sure it's nothing my computer couldn't handle.
Also, with the way Square seems to handle it's sprites - some of them where polygons and textures should go (PSX wasn't really made for spriteys...), this would seem to pose a problem, but maybe someone can figure that out later.
I do agree the best smoothing would be a real TV, but I'm not going to be using an emu on my TV, am I? ;)
In some instances, though, I do think this would provide a speed up - but only in some games.
Then again, each game is different. So Nyeeh:p
Eagle smooths AND retains sharpness - sometihng I do see being lost with, like, 99% of the stuff out there, at least for sprites.
Anyways, I'd put up some screenshots and technical stuffs, but really, I don't feel like doing it all over again.
All this would be rather complex, but with PSX Emulation slowly reaching 100%, I don't think it would hurt to try right now.
 
#19 ·
Originally posted by KojiroTakenashi
Ok. Sucks to be me. Spent well over 20 minutes of my precious time typing out a long-winded speech on this, so I'll try and keep it short.
Bilinear - good, but the deal is, it get blurry. Blurry bad.
Eagle, at least for me, smooths while keeping things sharp. Sharp good.
Sharp good. Blurry bad.
Simple enough yet?;)
I'm saying this should go for primarily 2D things, like text, or sprites.
It would do wonders for FF Tactics, because it could clean up sprites in software, but do polygons and fight the jaggies in hardware.
This would be kinda intensive, but I'm sure it's nothing my computer couldn't handle.
Also, with the way Square seems to handle it's sprites - some of them where polygons and textures should go (PSX wasn't really made for spriteys...), this would seem to pose a problem, but maybe someone can figure that out later.
I do agree the best smoothing would be a real TV, but I'm not going to be using an emu on my TV, am I? ;)
In some instances, though, I do think this would provide a speed up - but only in some games.
Then again, each game is different. So Nyeeh:p
Eagle smooths AND retains sharpness - sometihng I do see being lost with, like, 99% of the stuff out there, at least for sprites.
Anyways, I'd put up some screenshots and technical stuffs, but really, I don't feel like doing it all over again.
All this would be rather complex, but with PSX Emulation slowly reaching 100%, I don't think it would hurt to try right now.
I still prefer the filtered ogl or glide than eagle mode.. It looks the best IMO..
 
#20 ·
well true
I still prefer the filtered ogl or glide than eagle mode.. It looks the best IMO..
specially if you have a GFX card capable of FSAA

but for people who doesnt have a power full GFX card looks cool

Huh, you smell me? Haha, serously... If I ever make a soft gpu I'll definitely think about putting a super scaling engine in somewhere
well i think of you nickk coz your starting to implement things at a moment
 
#21 ·
Originally posted by FireGL
well true

specially if you have a GFX card capable of FSAA

but for people who doesnt have a power full GFX card looks cool



well i think of you nickk coz your starting to implement things at a moment
Yeah, as I said, I'll certantly try it when I have some free time :) I would like to learn how to do a 2xSAI technique anyway, because it does look cool in software :)

Well, I was also thinking earlier today that you could also argue that putting scanlines on just screen writes could look ugly, but I've noticed that it also looks really nice too :)
 
#22 ·
^_^; this is where my big monitor comes at a dis-advantage.
Big, heavy monitor almost the size of your average TV, with tons more resolution.
Not pretty, Not pretty at all.
I usually have to zoom out of my games to keep the graphics looking cozy. Sadly for me, scanlines are no option.
Oh, FSAA works alright, but hell if I ever get it to work at full speed.:eyes:
Oh dear, I do indeed get the feeling my little suggestion has opened up a can of worms ^_^;;;;;
 
#25 ·
Wh ydo you have such a big monitor anyway? Do you use it for any special program that requires it?
 
This is an older thread, you may not receive a response, and could be reviving an old thread. Please consider creating a new thread.
Top