Oblivion Graphics Extender v3 ReadMe
Note: This documentation is part of a beta release and is itself a work-in-progress. The latest information can always be found at the OBGE Wiki.

Contents
  1. History & Introduction
  2. Installation
  3. Uninstallation
  4. Troubleshooting
  5. FAQs
  6. Quick Links
  7. INI File Settings
  8. Version History


History & Introduction

Timeslip's Oblivion Graphics Extender

The Oblivion Graphics Extender is an OBSE plugin created by Timeslip that adds extra functionality to Oblivion's scripting language, focussed on the implementation and manipulation of graphics effects. It adds support for fullscreen shaders and extra HUD elements, provides information about graphics memory and screen resolution and allows you to clear some of oblivions textures from graphics memory.

Without Timeslip's original version Scanti probably wouldn't of known where to start in writing this project, so kudos to him. You can find Timeslip's Oblivion Graphics Extender here.

A number of mods take advantage of OBGE for their effects. These include:



The Oblivion Visual Effects Project

This was a project started by IlmrynAkios that was dedicated to making Oblivion look better using various filters and low-level DirectX tricks, utilising OBGE for its effects. It spurred the discussion on the improvement of various areas of Oblivion's graphics, leading to a few released mods and some affiliated mods, proposed as part of the project but developed separately, being released. These are:

The project is currently on haitus as various difficulties in its progression occurred, and IlmrynAkios found that his time available for work on it was becoming very limited.



Oblivion Graphics Extender v2

A continuation of both Timeslip's work on expanding the functionality to Oblivion's scripting language regarding the implementation and manipulation of graphics effects and OVEP's work in making Oblivion looking better using a variety of graphical effects, OBGEv2 is the name of Scanti's rewrite of the OBGE OBSE plugin and the accompanying project that is focussed on the creation of various post-processing effects to improve Oblivion's graphics.

A few mods take advantage of OBGEv2 for their effects. These include:



Oblivion Graphics Extender v3

Continuing with Scanti's work, Ethatron greatly enhanced OBGEv2's capabilities, forming OBGEv3. Among his achievments are the translation of all Oblivion's vanilla shaders and allowing them to be replaced, removing many of the limitations that OBGEv2 had.

The modders that make up this project work hard to bring you the effects they create, so please respect them for taking the time to do so. If you would like to contribute, please feel free to participate in the sharing of knowledge and ideas to help us strive to complete our goal. If you are able to find useful resources that can benefit the project, please feel free to share them as well. This project is in a Beta Phase and will probably be in that state forever as add new things are added to it. Expect bugs when using newly created shaders, or when using/tweaking the shaders on your own.

OBGEv3 should not be used alongside previous versions of OBGE, and is backwards-compatible with mods made for older versions of OBGE.



Installation

There are a few prerequisites that must be installed prior to installing and using OBGEv3. These are:

Make sure that you have first downloaded and installed the prerequisites. This readme assumes that you are only interested in installing the OBGEv3 Core package for the OBGEv3 OBSE plugin. If you are also interested in using the OBGEv3 project shaders, download the OBGEv3 Shaders package from the project TES Nexus page and follow the instructions in its ReadMe.

In addition to installing the presquisites, a few mods must be removed if installed, before OBGEv3 is installed. These are:

It is recommended that you use Wrye Bash's BAIN to install the OBGEv3 Core package as its resource tracking features make it far easier to uninstall if you ever need to. You can also create an OMOD from it, although no OMOD Conversion Data is supplied. The instructions for installing OBGEv3 Core are as follows:



Uninstallation

Safe uninstallation of OBGEv3 should be as simple as deleting the files that you installed, the most important being Data\OBSE\Plugins\OBGEv2.dll. If you installed OBGEv3 Core using Wrye Bash's BAIN feature, uninstalling it only requires you to right-click its package in the package list and select "Uninstall".

However, if that causes problems for you, then below is a more thorough uninstallation procedure:

  1. Set bSaveData=0 in your OBGE.ini, found in your My Documents\My Games\Oblivion folder.
  2. Load your saved game in Oblivion, and then save in a new slot.
  3. Uninstall OBGEv3 Core and delete any files in the 'Extras' folder you installed.

You should now be able to run Oblivion without OBGEv3 and avoid any problems. If you are still experiencing problems after following this procedure, seek further assistance in the official forum thread.



Troubleshooting

How To Report Bugs Helpfully

Read this readme fully, as well as the Bethesda forum thread, especially the FAQs. If your problem is not answered there, do the following:

Supply the following:

The above documents should be posted exactly how they appear in the file, in spoiler (ie. [spoiler]content[/spoiler]) tags.

In addition, if what you are experiencing is a graphical bug of some kind, you should supply screenshots. It has been noted that Oblivion's screenshot function may not work with OBGEv3 installed, so in that case use FRAPS or some other 3rd party screenshot tool. You can convert the image from .bmp to .jpg in Wrye Bash. Upload the screenshot and post a link to it, so we can see what your problem actually looks like.

If your bug is with a shader effect, and you have altered any variables within the shader, also post the lines on which you changed anything, exactly how they are in the shader, again in spoiler tags.

We can't really help all that well without the above information, as especially with graphical errors, it can hard to describe them in writing in a way that we will be able to understand what's going on.



FAQs

Q: Is this a RELz? Should I download this?

A: This is a Beta (and hopefully stable) release. It will always be a work in progress and could contain bugs from time to time. If the thought of this scares you then this probably isn't the mod for you.

In addition, because this deals with the details of how graphics are displayed on your screen, results vary with people's hardware. Most people have no trouble using it, but occasionally someone finds that OBGEv3 does not work with their hardware.

Q: Does this require OBSE? If so, any specific version?

A: Yes, it does require OBSE, and you must use at least v0020, however you are advised to use the latest version available.

Q: Does OBGEv3 require any specific hardware to run?

A: No. Although it may not work correctly with some hardware, this is a bug, but we do not possess enough information on it to say which precise hardware experiences problems. In addition, some OBGEv3 shaders do require a Shader Model 3 compliant graphics card. Any NVIDIA graphics card that is GeForce 6 Series (released 2004) or newer supports Shader Model 3.0. Any ATI graphics card that is Radeon X1000 Series (released 2005) or newer supports Shader Model 3.0. More details on that are given in the OBGEv3 Shaders package's readme.

Q: How do I get involved with this project?

A: There are a few ways that you can get involved:

If you can write shader code, then you can get stuck in making your own effects right away. The shaders can be written in either HLSL or ASM.

If you can write in C/C++, then perhaps you would be able to help Scanti, shadeMe and Ethatron in their work on the OBSE plugin. The project has a source respository so you can fairly easily create a fork and add your own changes, and a wiki that you can contribute to.

It would also be beneficial if you know anything about low-level DirectX and the OBSE plugin system.

If you can't do either of these things, you can still contribute support, articles and papers on graphical effects that could be implemented in Oblivion, and whatever else you can bring to the project. Especially cake or ice cream.

Q: I found a bug...

A: Good for you. If you find a bug, please report it as detailed in the 'How To Report Bugs Helpfully' section above. We can help you more when you explain the problem better.

Q: I cannot see an effect I have installed, and my OBGEv3 log has the line "Failed to load" after the line "Loading shader ()". How do I fix this?

A: This results from OBGEv3's inability to compile the shader effects you are trying to load. Make sure that you have the DirectX update linked to above installed, and if using a shaderlist, that you have spelled the names of the shaders in your shaderlist.txt exactly as they should be, with the .fx extension. In the case of some effects, you must also have a graphics card that is Shader Model 3 compliant.

Q: ScreenEffects/Realistic Health/OVEP Motion Blur/OVEP Forward Motion Blur or setting bUseLegacyCompiler to 1 causes OBGEv3 to crash. How do I fix this?

A: If your shader uses the half variable type then OBGEv3 will try to use the legacy compiler. If you are missing the d3dx9_31.dll file then OBGEv3 will crash. You will need to copy over the d3dx9_31.dll from the Extras folder into your Oblivion game folder to fix the problem.

Q: The ordering of the objects on the screen is messed up or the game menu has no buttons! Why is this happening?
Q: Once I got the effects to work, my AA disappeared? WHY?!?

A: The method used to expose the information used to read the depth buffer is incompatible with Anti-Aliasing. This is reported to be the case on both ATI and NVIDIA graphics cards, although owners of ATI graphics cards can force AA through ATI Tray Tools without problems. The only solution is to edit the OBGE.ini file in your My Documents\My Games\Oblivion folder and change this line:

[DepthBuffer]
bUseDepthBuffer=1
to:
[DepthBuffer]
bUseDepthBuffer=0
This will however cause any shader effect that uses the depth buffer to stop working properly. From the OBGEv3 shaders, this currently includes all the Ambient Occlusion and Depth of Field shaders and the Godrays, NormalFilterAA and CelShader+EdgeAA shaders.

Q: After installing this I am getting mouse lag; how can I fix this?

A: Try lowering the value of the iBufferTexturesNumBits settinng in your OBGE.ini. Some users have reported that doing so eliminates mouse lag.

Q: Where is the src folder with the source code?

A: The source is not included in the package. Instead, it is available on the source code repository. That means you will always have access to the latest version of the code and people can contribute their own code to the project.





INI File Settings

When you first run OBGEv3 it will create a file called OBGE.ini in your My Documents\My Games\Oblivion folder. You can edit this file to change the behaviour of OBGEv3. Below is the default ini, with comments for the settings.

[Serialization]
bSaveData=1			# Remembers the shaders loaded in by mods when you save the game.
bLoadData=1			# Loads in the shaders previously saved in a save game.

[PluginInterOp]
bEnableInterOp=0		# This setting current doesn't do anything. However in the future it will allow other OBSE plug-ins to access OBGEv3.

[Shaders]
bUseShaderOverride=1
bSaveShaderOverride=1
sShaderOverrideDirectory=data\shaders\override\
bCompileSources=1
bOptimize=1			# compiler option to enable optimization, may save an instruction or two
bMaximumSM=0
bUpgradeSM1X=0
bRuntimeSources=1
bUseLegacyCompiler=1

[Effects]
bNoShadersInMenus=0             # Turns off the shader system whenever a menu is displayed.
bUseEffectList=1
sEffectListFile=data\shaders\shaderlist.txt
sEffectDirectory=data\shaders\
bUseLegacyCompiler=0            # Use the old version of Microsoft's HLSL compiler. It may give a speed increase for older graphics cards. If the game crashes when using this setting then copy the d3dx9_31.dll from the extras folder into your oblivion game folder (the one with oblivion.exe in it).
bRenderHalfScreen=0             # Only renders the shaders to the right hand side of the screen. This is useful for comparing the shader with the normal rendered screen.
bOptimize=1			# compiler option to enable optimization, may save an instruction or two
bPurgeOnNewGame=0		# re-compile shader when a game is loaded, this may be usefull if you edit the effects and you don't want to use the SD
bTailEffects=0			# put effect-list at the end of the pipline, effects run after HDR/Blur, may improve performance, this was the OBGEv2-method

[General]
bEnabled=1			# Setting this to 0 will disable the plug-in but still process the script commands (they just won't do anything).
bEnabledDW=1			# Enabled the use of the shader-developer (DW==DeveloperWindow). The window will pop up automatically if you are in window-mode. The SD will not function in fullscreen-mode regardless.

[DepthBuffer]
bUseDepthBuffer=1		# Turns on and off the availability of a readable depth buffer.
bUseRAWZfix=0			# Activates a fix for graphics cards that use the RAWZ depth buffer format.

[ScreenBuffers]
iBufferTexturesNumBits=0	# This allows you to set the bit depth of the frame buffers used by the shaders. Different bit depths may increase the accuracy and speed of some shaders. Valid settings are any positive or negative integer describing the bit-depth you want. Positive numbers correspond to fp-bitdepth and negative to int-bitdepth. If your card doesn't support a certain bit depth then the next lowest is tried. Some users that have had issues with input lag when using OBGEv2 have reported that lowering this value solves their issues.
iBufferZDepthNumBits=0
iBufferRawZDepthNumBits=0
iReflectionMapSize=0		# The absolute or relative size of the reflection-map. Integers correspond to an absolute square dimension, a real number between 0.0 and 1.0 corresponds to a fraction of the current game-resolution. 0 will take the current width of the game.
iWaterDisplacementSize=0	# The square dimension of the displacement-maps for water.
iWaterHeightmapSize=0		# The square dimension of the height-maps for water.
iAutoGenerateMipMaps=2		# Generate mip-maps for rendertarget automatically. Some effects needs this to speed up processing. Also the reflection-map can be correctly accessed with reduced LOD per higher distance. The number is the ID of the filtering method. 1 is POINT, 2 is LINEAR.
	


Version History

Only updates to the OBGEv2.dll OBSE plugin are recorded here. For updates to the files contained within the OBGEv3 Shaders package, see that package's readme. The 2.x series of versions denote releases of OBGEv2. The 3.x series of versions denote releases of OBGEv3.

Version 3.0

Version 2.4

Version 2.3

Version 2.2

Version 2.1

Initial pre-alpha test release.