God of War. Red line rendering explained.
#11
I made interesting progress. Here a picture of gow when depth is correctly loaded as a texture (step1 and step2). It remains to find a solution for step3.


Attached Files Thumbnail(s)
   
Reply

Sponsored links

#12
Now the red lines are gone replacing with blue and green ones, how did you make this progress ? Explanation will be nice. Smile
We're supposed to be working as a team, if we aren't helping and suggesting things to each other, we aren't working as a team.
- Refraction
Reply
#13
1/ accurate color clipping behavior => check
2/ correct handling of alpha for 24 bits format => check
3/ Allow texture cache to search in depth texture => check (note it will potentially break various games)
4/ Implement a shader to convert the depth texture into a color texture => check
5/ support of 16 bits format => not check Tongue2

It is hard to see but the color of the line depends on the depth of the object.

Edit: actually the texture cache pick wrong data. I need to find a way to invalidate RT used as a depth buffer.
Reply
#14
This also affects Dragonball Budokai Tenkaichi 3, when CRC hacks are off. Seems to be a glow effect here too Smile

Screens:
CRC hacks on
   

CRC hacks off, Auto skip depth off
   

CRC hacks off, Auto skip depth on, half pixel offset on (fixes double image, breaks shadows)
   

CRC hacks off, Auto skip depth on, half pixel offset off
   
[Image: newsig.jpg]
Reply
#15
Actually it seems to affect various game. Here a grep of 0x3FFF on the hack.
Quote:bool GSC_GodOfWar(const GSFrameInfo& fi, int& skip)
if(fi.TME && fi.FBP == 0x00000 && fi.FPSM == PSM_PSMCT16 && fi.TBP0 == 0x00000 && fi.TPSM == PSM_PSMCT16 && fi.FBMSK == 0x03FFF)
--
bool GSC_ValkyrieProfile2(const GSFrameInfo& fi, int& skip)
if(fi.TME && fi.FPSM == fi.TPSM && fi.TPSM == PSM_PSMCT16 && fi.FBMSK == 0x03FFF)
bool GSC_RadiataStories(const GSFrameInfo& fi, int& skip)
if(fi.TME && fi.FPSM == fi.TPSM && fi.TPSM == PSM_PSMCT16 && fi.FBMSK == 0x03FFF)
bool GSC_HauntingGround(const GSFrameInfo& fi, int& skip)
if(fi.TME && fi.FPSM == fi.TPSM && fi.TPSM == PSM_PSMCT16S && fi.FBMSK == 0x03FFF)
--
bool GSC_Tenchu(const GSFrameInfo& fi, int& skip)
if(fi.TME && fi.TPSM == PSM_PSMZ16 && fi.FPSM == PSM_PSMCT16 && fi.FBMSK == 0x03FFF)
bool GSC_Sly3(const GSFrameInfo& fi, int& skip)
if(fi.TME && fi.FPSM == fi.TPSM && fi.TPSM == PSM_PSMCT16 && fi.FBMSK == 0x03FFF)
bool GSC_Sly2(const GSFrameInfo& fi, int& skip)
if(fi.TME && (fi.FBP == 0x00000 || fi.FBP == 0x00700 || fi.FBP == 0x00800) && fi.FPSM == fi.TPSM && fi.TPSM == PSM_PSMCT16 && fi.FBMSK == 0x03FFF)
if(fi.TME && fi.FPSM == fi.TPSM && fi.TPSM == PSM_PSMCT16 && fi.FBMSK == 0x03FFF)
--
bool GSC_LordOfTheRingsTwoTowers(const GSFrameInfo& fi, int& skip)
else if(fi.TME && fi.TPSM == PSM_PSMZ16 && fi.TBP0 == 0x01400 && fi.FPSM == PSM_PSMCT16 && fi.FBMSK == 0x03FFF)
--
bool GSC_ZettaiZetsumeiToshi2(const GSFrameInfo& fi, int& skip)
else if((fi.FBP | fi.TBP0)&& fi.FPSM == fi.TPSM && fi.TPSM == PSM_PSMCT16 && fi.FBMSK == 0x3FFF)
As you can see the pattern is mostly the same. 16 bits format RT with the special mask 0x3FFF. It is always the same, copy of the depth in the alpha channel. It likely breaks various effects.
Reply
#16
Some really popular games there too Smile
[Image: ref-sig-anim.gif]

Reply
#17
Screenshot of the latest status.

Now the color is aligned on the depth of field effect.

Remains to merge it properly (to avoid those silly band)


Attached Files Thumbnail(s)
   
Reply
#18
!!!!! It works !!!!!!

Depth is now correctly translated to the depth. There is a still minor glitch and I need to check the value correctness (rounding stuff). But it is a nice progress


Attached Files Thumbnail(s)
   
Reply
#19
did you find a way to invalidate the render target ? nice progress Smile
We're supposed to be working as a team, if we aren't helping and suggesting things to each other, we aren't working as a team.
- Refraction
Reply
#20
I kinds of enhance the texture cache. It was a nightmare, now it is worst than hell Tongue2
Reply




Users browsing this thread: 1 Guest(s)