Intro

Another blast from the past, This time we will be looking into the improving the graphics of the God of War titles on PlayStation 3.

Specifically the things you would find when playing a PC game like running at any resolution and optional motion blur and depth of field to name a few.

Part 1 - Brightness Options Came To The Rescue

Starting with God of War 3, I went into the game display options to look for clues.

In-Game Brightness Menu

Moving this silder around and searching for values I narrowed it down to 4 byte int.

In-Game Brightness Menu

Max of 100 and Min of 0.

Peeking into memory reveals something interesting.

Highlighted is Brightness Value

There is a toggle, in 4 byte int. 0x52BF2C

Setting it to 0 gives us this.

Strange colors.

Hmm, it gives strange results. Let’s try patching this to 0 at startup.

- [ byte, 0x52BF2F, 0 ]

2560x1440 Internal Resolution

Woah, a crisp clean image. How about in-game?

Right Click and View Image to see detailed image.

Absolutely Stunning!

How about God of War Ascension?

In-Game Settings Menu

Oh, a value number next to the brightness setting, how curious.

GOWA Memory View

No toggle next to brightness, there is some toggle at the bottom.

GOWA Mysterious toggle disabled

Another one with strange graphical issues.

- [ byte, 0x83ce77, 0 ]

Let’s try the same method I used for God of War 3.

Right Click and View Image to see detailed image.

2560x1440 Internal Resolution

This seem to be MLAA as well, job done right?

Part 2 - More Graphics Improvemnts

After a few weeks of letting my friend ZEROx know about my findings, he decided to look into the more of the game internal Grahpics Options.

First was that he was able to improve more of the game performance by looking at the code.

00390724 4b ff fc b5     bl         FUN_003903d8
00390728 3c 60 00 9b     lis        param_1,0x9b
...
00390750 38 c0 00 00     li         param_4,0x0
00390754 4b ff fc 85     bl         FUN_003903d8
00390758 3c 60 00 84     lis        param_1,0x84
0039075c 80 63 ce 74     lwz        param_1,-0x318c(param_1)=>DAT_0083ce74

Nop on branch link to call the functions skipped it.

- [ be32, 0x00390724, 0x60000000 ]
- [ be32, 0x00390754, 0x60000000 ]

Searching for the text DepthOfField leads us here.

00433ef8 93 fd 00 08     stw        r31=>s_DepthOfField_0067b638,0x8(r29)
...
00434080 41 82 01 98     beq        LAB_00434218
...
00434250 41 82 00 50     beq        LAB_004342a0
...
                     LAB_004342a0 XREF[1]:     00434250(j)  
004342a0 3b c0 00 01     li         r30,0x1
004342a4 30 7f 00 10     addic      r3,r31,0x10
004342a8 78 63 00 20     rldicl     r3,r3,0x0,0x20
004342ac 4b f7 b6 dd     bl         FUN_003af988
004342b0 60 00 00 00     ori        r0,r0,0x0
004342b4 80 9f 00 1c     lwz        r4,0x1c(r31)
004342b8 38 60 00 00     li         r3,0x0
004342bc 80 bf 00 20     lwz        r5,0x20(r31)

Following the branching leads to the last one in the list.

A few testing with li and register of 0 comes down to lwz r5,0x20(r31)

Depth of Field: Enabled
Depth of Field: Disabled

Same can be done for Motion Blur.

Part 3 - Backporting to God of War 3

MLAA Patch Performance Improvement

0023128c 80 1e 00 00     lwz        r0,0x0(r30)=>DAT_0052bf2c
002312b4 4b ff f9 99     bl         FUN_00230c4c
002312c8 4b ff f9 85     bl         FUN_00230c4c
...
0023137c 4b ff f8 d1     bl         FUN_00230c4c

A few nop to the call 0x230c4c narrowed down to 0x0023137c.

However, Graphics Options is a little more involed.

String refernce and a reverse branch. Hmm.

Setting a breakpoint on 001c65b8 bl FUN_001b61e0 lead us somewhere.

Take notice of Register 3

Setting byte 0x321ACA6B to 0 disables motion blur.

This method can also be used for Depth of field.

Results

Patch

Patch was made available back in August 2020. You can download through the emulator built-in Patch Manager.

Supporters

Thanks to the patrons who supported me on various platforms! You guys are awesome!

Patreon:

  • ac2pic
  • alessaro92
  • faith
  • Ioritree
  • Jeff Eberlin
  • YveltalGriffin

Github Sponsors:

  • Asinine
  • superpic31
  • regal.

BuyMeACoffee and Ko-fi:

  • John
  • InquisitionImplied
  • YveltalGriffin