Jump to content

Another Doom 3 Tweak


Vampire

Recommended Posts

I found this here. I hope this hasnt been posted yet...

 

It seems to look good for some of us ATI users post your results here if you do try it.

 

 

 

Heres what was said at the above link.

 

Quick guide for those who don't want to read the full thread.

 

Download this file:

http://esprit.campus.luth.se/~humus/temp/d...rmanceTweak.rar

 

Extract so that the shader file goes under doom3\base\glprogs. This replaces a dependent texture read with equivalent math, which runs better on ATI cards, but seems to run slower on NV boards, so only apply this if you got an ATI card.

 

 

------------------------------------------------------------------------------------

 

 

 

I picked up Doom3 today and let be begin by saying it's a kickass game so far.  A few minuses like weapon reload (which I find add nothing to a game, except annoyance, so I don't know why many devs keep adding it to their games), but overall much above my expectations.

 

Anyway, to the fun part, exploring the technology. 

I think I've found the source of why this game runs comparably slow on ATI hardware vs. nVidia at the moment, and found a solution to the problem.

 

First, open your doom3\base folder. Doubleclick on the pak000.pk4 file. In the "window can't open this file .. .bla bla" dialog, go on and associate the file with an app like WinRar. With this file open in WinRar, go to the glprogs directory in the file. In there you'll find the shaders. The interaction.vfp file seems to be the main rendering shader. Altering this shader to output a constant color turns most objects into that constant color, except for stuff like computer screens etc.

 

So doubleclick the interaction.vfp file to open it (you may have to associate the .vfp extension with a text editor like notepad or wordpad first since we're going to edit the file). Scroll down to the fragment shader. You'll find these rows:

 

Code:

 

PARAM  subOne = { -1, -1, -1, -1 };

PARAM  scaleTwo = { 2, 2, 2, 2 };

 

 

 

Add this right below them:

 

PARAM specExp = { 16, 0, 0, 0 };

 

Now scroll down to this:

 

 

# perform a dependent table read for the specular falloff 
TEX   R1, specular, texture[6], 2D;

 

Comment out that line by adding a "#" to it, and add another line that will do the same thing with math instead, so it should look like this:

 

# perform a dependent table read for the specular falloff 
# TEX   R1, specular, texture[6], 2D; 
POW   R1, specular.x, specExp.x;

 

Save the file and close your text editor. WinRar will ask if you want to update the file in the archive, select yes. Close WinRar and enjoy about 40% higher performance in Doom3. Haven't done extensive testing yet, but my performance went from 34fps in 1280x1024 to 48fps.

 

Conclusion and discussion:

I don't want to complain about Carmack's work, I still consider him to be the industry leader in graphics engines. Though when I read the shader it striked me how many texture accesses it did compared to the relatively short shader, even for stuff that could just as well be done with math for a small cost in instructions. Using a dependent texture lookup for POW evaluation makes a lot of sense for R200 level hardware due to instruction set limits, but for R300 and up it's much better to just spend the three cycles it takes to evaluate POW with math instead of risking texture cache trashing with a dependent texture read, which may be much more costly, especially since the access pattern in this case will be far from linear. Also, using math improves the quality too, even though it may not be very noticable in this game.

 

I should point out though that I'm not sure if the constant specular factor 16 that I chose is the one that the game uses, so output may be slightly different, but if this solution will be worked into the game in a future patch, then this is easily configurable by the game so that there won't be a difference, except a lot faster.

 

An interesting follow-up discussion may be why this dependent texture lookup is much slower on our hardware than on nVidia. Maybe there's an architectural difference that's to blame, or maybe something else? The main point here though is that this should be good enough proof that ATI hardware can run Doom3 just as good if not better than nVidia, and that we can pass on all the "ATI suck in OpenGL", "ATI's drivers suck" etc. into the trashcan where it belongs.

Share this post


Link to post
Share on other sites

It worked wonders on my 9600 Pro. Thanks for the post!

;) Cool

 

 

It didnt exactly work wonders for me, but it did give me a slight increase with my 9800 pro, high settings, 1280x1024. 3 FPS higher in timedemo demo1 benchmark, and in game it seems smoother... slightly B)

Share this post


Link to post
Share on other sites

Wow, that actually did work lol, i got an increase of around 5fps, doesn't sound like much but i'm noticing no lag when going through doors now.

 

i'm running my 9600xt on 1024x768 on high settings and everything on accept from verticalsnc & antialiasing. aa & af are set to 2x in my 3d options tho.

 

i'm getting 35fps(from 25-30),loadsa enemies on screen will drop it way down to about 15(from 10). around the 50-60 mark when nothing is happening n theres not many lights.

 

thanks for the tip!!!

Share this post


Link to post
Share on other sites

  • 3 weeks later...

Humus,

 

THANK you very much for the tweak!

 

My pitful Radeon 9600 Pro has gone from a mere 18.1 frames per second all the way to 36.4 frames per second (TIMEDEMO DEMO1 USECACHE). That's an amazing 50% jump in performance. 1024x768 Medium with all effects turned on including shadows and specular. Athlon XP 2800 with 512MB RAM.

 

I do have triplebuffering turned on, and the 9600 benefits more from this ATI tweak so that's part of the reason of so HUGE a performance boost. I did not make other tweaks. (Triple buffering amplifies the performance improvement this tweak makes.)

 

The 18.1 frames per second was with using existing tweaks to DoomConfig.cfg .... 8X anisotropic filtering, high quality ansio/mipmaps. No changes to these settings, and I got 36.4 frames per second with these tweaks with all the proper visual effects.

 

I get well over 40 frames per second if I ease up on some details, but I like full detail including 8X ansio and full shadows/specular. And this is a mere 9600 Pro, not even a 9800.

 

No overclocking at all!

 

Mark

Edited by Mark Rejhon

Share this post


Link to post
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
×
×
  • Create New...