What is Voodoo?
The Voodoo Shader Framework is a system designed to add special effects and enhanced graphics to a variety of games. It improves the look, and sometimes speed, of old and new games. The goal of Voodoo is to provide a unified, uniform and consistent target for adding shaders to almost any game.
At this time, Voodoo has been internally tested in Morrowind, Oblivion and Neverwinter Nights 2. Screenshots from each can be found toward the end of this post.
The entire Voodoo project, including all game adapters, is open-source. If any programmers or shader artists have questions or comments as to the specifics, please get in touch with me.
What is Voodoo/Gem?
Gem is the adapter for Morrowind. It handles the details of using Voodoo shaders in the game.
At the moment, Gem is set up to use a single shader for testing purposes. Once I’ve made sure everything works properly, a user-configurable list will be used. Gem will also support advanced materials (shaders applied to objects in-game, providing current generation rendering effects).
What features does/will Gem have?
Voodoo and Gem provide a comprehensive system for postprocessing and material shaders, including automatic parameter and texture linking and shader render-to-texture features. In simpler terms, that means fullscreen and per-object effects are possible, as well as shaders using or creating textures used in-game.
Gem will provide a distant land system comparable to MGE’s. If possible, they will use identical files (to make transitioning between the systems easier).
Gem will not break Morrowind’s water shaders and will allow players to keep using them, although it will provide optional enhanced water effects of its own.
Thanks to a few tips from Hrnchamd, Gem will support shadows from distant land and, if all goes well, near objects as well.
Gem will be integrated with MWSE, v0.9.4a or better, to provide script access to the shaders, land, water and other effects. Script commands will, if at all possible, be byte-by-byte identical to MGE’s MWSE commands, so that scripts won’t have to be recompiled. Additional script commands, to handle material shaders, dynamic parameters and textures and other Gem-specific features, will be added.
What’s the difference between MGE and Voodoo/Gem?
MGE was designed as a Morrowind-specific shader system, and has been developed over the course of several years by a number of developers (myself included). While an excellent and innovative project, the code has suffered over time, as most does.
Gem is intended as a faster, more stable and cleaner re-imagining of the MGE concept.
Without MGE, I wouldn’t be involved in this and Voodoo would not exist. It certainly deserves a tip of the hat. :foodndrink:
Voodoo/Gem is faster than MGE. It will be more configurable, and turning a feature off will actually mean it gets turned off and has no FPS hit (something not guaranteed in recent MGE builds).
Gem provides a powerful shader system, taking advantage of the full syntax of the Cg language. MGE uses a subset of the HLSL language (there is no practical difference between Cg and HLSL, except that HLSL is DirectX-specific). Gem does not make use of archaic magic names, like MGE’s “texture thisframe;” and similar; instead it uses proper annotations to allow shaders to reference textures as needed. This allows shaders to access not only Gem’s textures, but to use game-loaded texture or create their own.
Gem will use a two-target rendering system to provide depth information to shaders (the color and depth buffers will be drawn simultaneously by a single shader). MGE caches renders and redraws them, causing a significant speed hit and memory increase. On systems not capable of using multiple render-targets (very old cards), Gem will fall back to a two-pass render method.
Gem uses a shader system spanning multiple games, and even graphics APIs (Voodoo works with both DirectX and OpenGL). A single target is provided to developers and artists; this means any shader written for Voodoo/Gem will function in all Voodoo-supported games. Having more games supports means a bit more work, but it also means more people testing the system and writing shaders for it. There’s no reason for MGE, OBGE and NWShader to all use different systems for the same thing (the Voodoo project was born from the fact that I was fed up with the little incompatibilities).
Voodoo also opens a new family of effects, using the shader-based render-to-texture system. Shaders can create or modify game textures on the fly, making overlays or reactive environments a very real possibility. I’ve only started playing with some of these effects, but they allow for such things as dynamic raindrops on the screen, world textures reacting to the player or scripts, or even letting the player paint a picture ingame.
Screenshots
Most of these are little things so far, just test shaders and patterns to demonstrate the system works. As I get more code together and things more complete, fancier screens will be available.
Morrowind:
A delayed picture-in-picture with a color shift:
http://i4.photobucket.com/albums/y145/peachykeen000/Voodoo/Voodoo_GEM_16.png
http://i4.photobucket.com/albums/y145/peachykeen000/Voodoo/Voodoo_GEM_15.png
Fullscreen:
http://i4.photobucket.com/albums/y145/peachykeen000/Voodoo/CopyofGEM_2.png
Oblivion:
http://i4.photobucket.com/albums/y145/peachykeen000/Voodoo/ScreenShot8.jpg
http://i4.photobucket.com/albums/y145/peachykeen000/Voodoo/ScreenShot15.jpg
http://i4.photobucket.com/albums/y145/peachykeen000/Voodoo/ScreenShot16.jpg
Neverwinter Nights 2:
http://i4.photobucket.com/albums/y145/peachykeen000/Voodoo/nwn2.jpg
(the NWN module isn't ready yet, as it takes a bit more infrastructure)
How can you help?
At this point, I need people willing to help test. You should have a semi-functioning computer and Morrowind. Testing pretty much consists of downloading the latest files, running Morrowind and telling me if anything goes horribly wrong.
Having a variety of systems to test on is important for stability. Everything from Windows 2000 to 64-bit editions of 7 can help make sure there are no nasty little bugs in Voodoo.
I am setting up a bug-tracker and merging my MGE shader forum into a larger forum, both will be used to support Voodoo.
There may be some issues with the Steam releases of Morrowind, I’m unable to test those myself but will be trying to get in touch with the folks at Steam to see what I can find out about their setup.
If you are a code or shader developer with any interest in contributing, or just questions, please get in touch.
If you don’t fall into any of the above, cheering on, suggestions, comments and general encouragement are also welcome.