F-Zero GX in Stereo 3D on Nintendo Wii (Not with Dolphin)

Started by biolizard89, September 28, 2011, 08:15:36 AM

Previous topic - Next topic

biolizard89

http://www.youtube.com/watch?v=C_DNgv5aYRg

This is F-Zero GX on a Nintendo Wii, hacked to play in Stereo 3D. This does NOT use Dolphin. The only equipment required is a Wii with Homebrew enabled, and a 3D display which supports field-sequential (480i) or frame-sequential (480p) format. For those of you who don't have a 3D display or whose 3D display doesn't support those formats, a combination of a KWorld USB DVD-Maker capture card (~$30US) + the Windows program Stereoscopic Player (39 EUR, free trial available) will allow any 3D format to be used, including anaglyph (red/cyan) glasses.

The hack was done by me (Jeremy Rand AKA biolizard89 of VECLabs). It will be released in the form of a Gecko cheat code in the near future.

This is one more thing that the Wii can do on its own, without having to shell out $3000 for a Dolphin-capable PC.  I do apologize for the fact that YouTube compressed the video so heavily... it looked beautiful as I recorded it; very immersive with an excellent sense of motion.  I'll release the code in the near future, once I fix a minor bug in the code that makes it less user-friendly to set up than I would prefer.

EDIT: After playing through most of the levels in Stereo 3D, here are my favorite stereo-enhanced effects in F-Zero GX:

  • Falling sparks/rain which look like they're all around you
  • Flowing effects under the floor which induce a feeling of floating (facing one direction) and falling (facing the other direction)
  • Enclosed tracks which induce claustrophobia
  • Irregularly surfaced tracks which induce a roller-coaster feeling

It's absolutely amazing how much the game's graphics benefit from the Stereo 3D effect.  So much more immersive it's hard to describe -- I'm not making it up, I actually did get floating/falling/claustrophobic sensations from the game.

James0x57



biolizard89

Quote from: James0x57 on September 28, 2011, 01:53:37 PM
Bloody brilliant! How did you figure this out?
Thanks James!

This works by hijacking the camera routines.  I found the address for the XYZ coordinates of the camera; next to it was the transformation matrix for the camera's aim.  I hooked the routine which writes to the XYZ camera coords so that it either adds or subtracts a small vector (proportional to the viewport's X vector) to the camera's XYZ coords each frame; it switches between adding (right eye) and subtracting (left eye) the vector each frame.  The result is that every 1/60 of a second, the view outputted from the Wii switches from left to right eye or vice versa.  A 3D TV (or Stereoscopic Player with a capture card, which is what I'm testing with) takes those alternating frames and generates a 3D view.

F-Zero made this slightly harder than it should be, because the routine that writes to the camera also writes to at least 20 other variables, so the hook needed some intelligence.  (I ended up hooking another routine that reads from the camera, so that it writes a stable camera pointer to a Gecko Register, which the other hook then uses to check if the camera is what's being written to.)  Also, both the data and ASM in F-Zero is in a different address every time you boot the game, so I had to use an F6 code (my first time using an F6 code).  On the bright side, that means it will work with all regions.  Unfortunately, that also means that it won't work with the outdated code handler in GeckoOS Mod; a recent Neogamma is necessary.  (Hopefully a new version of GeckoOS Mod will come out at some point to fix this issue.)

In theory, this technique could be applied to any 60fps game for which the camera data is findable.  That said, I'm guessing that not all games will look as compellingly immersive as F-Zero GX.  Amusement Vision put a huge amount of effort into the graphics in F-Zero, and that's why they look so good... something like Mario Kart would probably look less good simply because the graphics are less detailed.

James0x57



dcx2

Instead of the Stereoscopic Player, have you tried iZ3D's driver and media player?

http://www.iz3d.com/driver

They offer 100% free anaglyph.  I don't know if it supports TV capture cards, though.

I actually have an iZ3D monitor, so if we can get this to work on a game I own, I might try to do 3D without the anaglyph.  (anaglyph is so hard to type, lol)

biolizard89

Quote from: dcx2 on October 04, 2011, 05:29:51 PM
Instead of the Stereoscopic Player, have you tried iZ3D's driver and media player?

http://www.iz3d.com/driver

They offer 100% free anaglyph.  I don't know if it supports TV capture cards, though.

I actually have an iZ3D monitor, so if we can get this to work on a game I own, I might try to do 3D without the anaglyph.  (anaglyph is so hard to type, lol)
I'm familiar with the iZ3D media player.  I didn't use it because my 3D display is Nvidia (which Stereoscopic Player supports, so I only briefly tested anaglyph mode), but it might work okay.  It does accept capture cards, but the question is whether it lags the video (Stereoscopic Player is very low-lag).  My brother has an iZ3D monitor, so I'll try it with iZ3D's player and I'll report back on whether it works.

As an aside, Stereoscopic Player will work with 480i or 480p; iZ3D's player will only work with 480i (field-sequential) because it doesn't support frame-sequential 3D which is what 480p mode uses.  This isn't a big deal, because 480p capture cards that don't lag cost $300+, and if you're willing to spend that much money, you might as well just buy a Dolphin-capable CPU and get 1080p.

biolizard89

I've released the code in both the USA and PAL threads for F-Zero GX in the GameCube codes forum.  Hope you all like it!  :-)

@dcx2 I haven't yet had a chance to try out the iZ3D player; I'll try to do that ASAP.  Sorry for the delay in checking that.

James0x57



biolizard89

Quote from: James0x57 on October 10, 2011, 02:46:04 PM
Put 'em on the database!! :D
Just requested access to the database; once I have access I'll happily post it there.  :)