Metal gear solid V: The panthom pain
  5 / 15    
I don't trust the output of the disassembler on these files. It feels like a new disassembler is needed. I know enough about binary asm to believe it's possible. It's not something I will do unless people want this game fixed. PM me if you want to vote with your wallet.
I don't trust the output of the disassembler on these files.

It feels like a new disassembler is needed.

I know enough about binary asm to believe it's possible.
It's not something I will do unless people want this game fixed.

PM me if you want to vote with your wallet.

Thanks to everybody using my assembler it warms my heart.
To have a critical piece of code that everyone can enjoy!
What more can you ask for?

donations: ulfjalmbrant@hotmail.com

#61
Posted 09/15/2015 09:54 AM   
I wasn't considering this game, but the review I just watched on Good Game perked my interest... but reports of this DRM getting in our way just lost it again. [quote="Flugan"]This is how the game looks for me, I have hunted both VS and PS not finding anything causing it. Dumped shaders and found 5 compute shaders I have yet to play around with. No fixes applied and can't say the game looks good. [img]http://www.flugan.net/mgsvtpp01_50.jpg[/img][/quote] [quote="bo3b"]That image looks like a fairly common halo fix, where the texture for a given surface has not been stereoized by 3D Vision Automatic properly. Might be possible to improve that with profile bits. You should be able to narrow down the VertexShader for the doctor for example. The halo happens because the texture for his face and coat is misaligned with the actual vertices in the model. So, the normal fix is to stereoize (Prime Directive) the texture output in the VS. When hunting, are you seeing the doctor wink out? For normal style hunting, you'll want to SetVertexShader(null).[/quote] That reminds me a lot of how Unity 4 games look before we fix them... In Unity 4 it was due to a combination of halos on every surface shader as well as broken lights/shadows - to the point where both problems almost cancelled out each other for some effects (like directional shadows), so only fixing one would improve some of the frame and make other parts worse. Also of note, in Unity 4 hunting the surface shaders was not obvious at first - each surface would typically be drawn in two passes. The shader that made the surface disappear while hunting was rarely the one that needed to be adjusted, rather a second shader had to be found that only made the surface change to a solid colour. Just something to keep in mind, I have no idea if the same thing would happen here.
I wasn't considering this game, but the review I just watched on Good Game perked my interest... but reports of this DRM getting in our way just lost it again.

Flugan said:This is how the game looks for me, I have hunted both VS and PS not finding anything causing it. Dumped shaders and found 5 compute shaders I have yet to play around with. No fixes applied and can't say the game looks good.

Image

bo3b said:That image looks like a fairly common halo fix, where the texture for a given surface has not been stereoized by 3D Vision Automatic properly. Might be possible to improve that with profile bits.

You should be able to narrow down the VertexShader for the doctor for example. The halo happens because the texture for his face and coat is misaligned with the actual vertices in the model. So, the normal fix is to stereoize (Prime Directive) the texture output in the VS.

When hunting, are you seeing the doctor wink out?

For normal style hunting, you'll want to SetVertexShader(null).


That reminds me a lot of how Unity 4 games look before we fix them... In Unity 4 it was due to a combination of halos on every surface shader as well as broken lights/shadows - to the point where both problems almost cancelled out each other for some effects (like directional shadows), so only fixing one would improve some of the frame and make other parts worse.

Also of note, in Unity 4 hunting the surface shaders was not obvious at first - each surface would typically be drawn in two passes. The shader that made the surface disappear while hunting was rarely the one that needed to be adjusted, rather a second shader had to be found that only made the surface change to a solid colour. Just something to keep in mind, I have no idea if the same thing would happen here.

2x Geforce GTX 980 in SLI provided by NVIDIA, i7 6700K 4GHz CPU, Asus 27" VG278HE 144Hz 3D Monitor, BenQ W1070 3D Projector, 120" Elite Screens YardMaster 2, 32GB Corsair DDR4 3200MHz RAM, Samsung 850 EVO 500G SSD, 4x750GB HDD in RAID5, Gigabyte Z170X-Gaming 7 Motherboard, Corsair Obsidian 750D Airflow Edition Case, Corsair RM850i PSU, HTC Vive, Win 10 64bit

Alienware M17x R4 w/ built in 3D, Intel i7 3740QM, GTX 680m 2GB, 16GB DDR3 1600MHz RAM, Win7 64bit, 1TB SSD, 1TB HDD, 750GB HDD

Pre-release 3D fixes, shadertool.py and other goodies: http://github.com/DarkStarSword/3d-fixes
Support me on Patreon: https://www.patreon.com/DarkStarSword or PayPal: https://www.paypal.me/DarkStarSword

#62
Posted 09/15/2015 12:02 PM   
Real progress is slow. I've disabled the blur effect making 3d errors clearly visible. Did some work making debug assembler through the compiler. Improved the HLSL compiler slightly to add the nop instruction to get more files go successfully up to HLSL. Far from all shaders can go to HLSL without error. Finally got around to adding a log file for D3D_Shaders.exe. Updated package on flugan.net with latest versions and blur disable. Spent 6 hours so far getting almost nowhere in the actual game. I lack the experience to fix these halos quickly. It's not like we have lots of experience with Fox Engine. If I were to decide to actually play the game right now I would play in 2D.
Real progress is slow. I've disabled the blur effect making 3d errors clearly visible.

Did some work making debug assembler through the compiler. Improved the HLSL compiler slightly to add the nop instruction to get more files go successfully up to HLSL. Far from all shaders can go to HLSL without error. Finally got around to adding a log file for D3D_Shaders.exe.

Updated package on flugan.net with latest versions and blur disable.

Spent 6 hours so far getting almost nowhere in the actual game.
I lack the experience to fix these halos quickly.

It's not like we have lots of experience with Fox Engine.

If I were to decide to actually play the game right now I would play in 2D.

Thanks to everybody using my assembler it warms my heart.
To have a critical piece of code that everyone can enjoy!
What more can you ask for?

donations: ulfjalmbrant@hotmail.com

#63
Posted 09/15/2015 07:20 PM   
I'm currently limiting myself to fixing the main startup screen. I can stay on the screen hunting without worrying about things attacking me. The main screen is normally very blured so the point of fixing it is not really there. But remove the blur and increase depth to 100% on 27" and things break apart. As soon as I render anything I get a halo but if I skip rendering nothing appears. Quite a number of shaders involved in rendering solid snake. [img]https://forums.geforce.com/cmd/default/download-comment-attachment/66044/[/img] [img]https://forums.geforce.com/cmd/default/download-comment-attachment/66045/[/img] [img]https://forums.geforce.com/cmd/default/download-comment-attachment/66046/[/img] [code] cbuffer cVSScene : register(b2) { struct { float4x4 m_projectionView; float4x4 m_projection; float4x4 m_view; float4x4 m_shadowProjection; float4x4 m_shadowProjection2; float4 m_eyepos; float4 m_projectionParam; float4 m_viewportSize; float4 m_exposure; float4 m_fogParam[3]; float4 m_fogColor; float4 m_cameraCenterOffset; float4 m_shadowMapResolutions; } g_vsScene : packoffset(c0); } cbuffer cVSObject : register(b5) { struct { float4x4 m_viewWorld; float4x4 m_world; float4 m_useWeightCount; float4 m_localParam[4]; } g_vsObject : packoffset(c0); } cbuffer VSBones : register(b6) { struct { float4x3 m_boneMatrices[32]; } g_vsBone : packoffset(c0); struct { float4x3 m_boneMatrices[32]; } g_vsPrevBone : packoffset(c96); } Texture2D<float4> StereoParams : register(t125); Texture1D<float4> IniParams : register(t120); void main( float4 v0 : POSITION0, float4 v1 : NORMAL0, float4 v2 : TANGENT0, uint4 v3 : BLENDINDICES0, float4 v4 : BLENDWEIGHT0, float4 v5 : TEXCOORD0, float4 v6 : TEXCOORD1, float4 v7 : TEXCOORD2, float2 v8 : TEXCOORD3, out float4 o0 : SV_Position0, out float4 o1 : COLOR0, out float4 o2 : TEXCOORD0, out float4 o3 : TEXCOORD5, out float4 o4 : TEXCOORD6, out float3 o5 : TEXCOORD7) { float4 r0,r1,r2,r3,r4,r5,r6,r7,r8,r9; uint4 bitmask, uiDest; float4 fDest; float4 x0[3]; r0.xyz = v0.xyz; r1.xyz = v1.xyz; r2.xyzw = v2.xyzw; r3.xyzw = v4.xyzw; nop; r0.xyz = r0.xyz; r1.xyz = r1.xyz; r2.xyzw = r2.xyzw; r3.xyzw = r3.xyzw; r0.xyz = r0.xyz; r4.x = g_vsObject.m_useWeightCount.x != 0.000000; if (r4.x != 0) { nop; r3.xyzw = r3.xyzw; r4.x = (int)v3.x * 3; r5.xyzw = g_vsBone.m_boneMatrices[v3.x]._m00_m10_m20_m30 * r3.xxxx; r6.xyzw = g_vsBone.m_boneMatrices[v3.x]._m01_m11_m21_m31 * r3.xxxx; r4.xyzw = g_vsBone.m_boneMatrices[v3.x]._m02_m12_m22_m32 * r3.xxxx; r3.x = (int)v3.y * 3; r7.xyzw = g_vsBone.m_boneMatrices[v3.y]._m00_m10_m20_m30 * r3.yyyy; r8.xyzw = g_vsBone.m_boneMatrices[v3.y]._m01_m11_m21_m31 * r3.yyyy; r9.xyzw = g_vsBone.m_boneMatrices[v3.y]._m02_m12_m22_m32 * r3.yyyy; r5.xyzw = r7.xyzw + r5.xyzw; r6.xyzw = r8.xyzw + r6.xyzw; r4.xyzw = r9.xyzw + r4.xyzw; r3.x = (int)v3.z * 3; r7.xyzw = g_vsBone.m_boneMatrices[v3.y]._m00_m10_m20_m30 * r3.zzzz; r8.xyzw = g_vsBone.m_boneMatrices[v3.y]._m01_m11_m21_m31 * r3.zzzz; r9.xyzw = g_vsBone.m_boneMatrices[v3.y]._m02_m12_m22_m32 * r3.zzzz; r5.xyzw = r7.xyzw + r5.xyzw; r6.xyzw = r8.xyzw + r6.xyzw; r4.xyzw = r9.xyzw + r4.xyzw; r3.x = (int)v3.w * 3; r7.xyzw = g_vsBone.m_boneMatrices[v3.y]._m00_m10_m20_m30 * r3.wwww; r8.xyzw = g_vsBone.m_boneMatrices[v3.y]._m01_m11_m21_m31 * r3.wwww; r3.xyzw = g_vsBone.m_boneMatrices[v3.y]._m02_m12_m22_m32 * r3.wwww; r5.xyzw = r7.xyzw + r5.xyzw; r6.xyzw = r8.xyzw + r6.xyzw; r3.xyzw = r4.xyzw + r3.xyzw; nop; r0.x = dot(v0.xyzw, r5.xyzw); r0.y = dot(v0.xyzw, r6.xyzw); r0.z = dot(v0.xyzw, r3.xyzw); r0.xyz = r0.xyz; nop; r4.w = 0; r4.xyz = v1.xyz; r1.x = dot(r4.xyzw, r5.xyzw); r1.y = dot(r4.xyzw, r6.xyzw); r1.z = dot(r4.xyzw, r3.xyzw); r1.xyz = r1.xyz; nop; r4.w = 0; r4.xyz = v2.xyz; r5.x = dot(r4.xyzw, r5.xyzw); r5.y = dot(r4.xyzw, r6.xyzw); r5.z = dot(r4.xyzw, r3.xyzw); r5.xyz = r5.xyz; r0.xyz = r0.xyz; r1.xyz = r1.xyz; r5.xyz = r5.xyz; } else { r5.xyz = r2.xyz; } nop; nop; r0.w = v0.w; r3.x = dot(r0.xyzw, g_vsObject.m_viewWorld._m00_m10_m20_m30); r3.y = dot(r0.xyzw, g_vsObject.m_viewWorld._m01_m11_m21_m31); r3.z = dot(r0.xyzw, g_vsObject.m_viewWorld._m02_m12_m22_m32); r3.w = dot(r0.xyzw, g_vsObject.m_viewWorld._m03_m13_m23_m33); nop; r0.x = dot(r3.xyzw, g_vsScene.m_projection._m00_m10_m20_m30); r0.y = dot(r3.xyzw, g_vsScene.m_projection._m01_m11_m21_m31); r0.z = dot(r3.xyzw, g_vsScene.m_projection._m02_m12_m22_m32); r0.w = dot(r3.xyzw, g_vsScene.m_projection._m03_m13_m23_m33); r0.xyzw = r0.xyzw; nop; r0.xyzw = r0.xyzw; nop; nop; nop; nop; nop; r1.w = 0; r2.x = dot(r1.xyzw, g_vsObject.m_viewWorld._m00_m10_m20_m30); r2.y = dot(r1.xyzw, g_vsObject.m_viewWorld._m01_m11_m21_m31); r2.z = dot(r1.xyzw, g_vsObject.m_viewWorld._m02_m12_m22_m32); r1.x = dot(r2.xyz, r2.xyz); r1.x = rsqrt(r1.x); r1.xyz = r2.xyz * r1.xxx; nop; r5.w = 0; r2.x = dot(r5.xyzw, g_vsObject.m_viewWorld._m00_m10_m20_m30); r2.y = dot(r5.xyzw, g_vsObject.m_viewWorld._m01_m11_m21_m31); r2.z = dot(r5.xyzw, g_vsObject.m_viewWorld._m02_m12_m22_m32); r1.w = dot(r2.xyz, r2.xyz); r1.w = rsqrt(r1.w); r2.xyz = r2.xyz * r1.www; r3.xyz = r2.zxy * r1.yzx; r4.xyz = r2.yzx * r1.zxy; r4.xyz = -r4.xyz; r3.xyz = r4.xyz + r3.xyz; r1.w = dot(r3.xyz, r3.xyz); r1.w = rsqrt(r1.w); r3.xyz = r3.xyz * r1.www; r3.xyz = r3.xyz * r2.www; r0.xyzw = r0.xyzw; r4.xy = v5.xy; nop; r4.xy = r4.xy; r4.xy = r4.xy; r4.xy = r4.xy; o0.xyzw = r0.xyzw; o2.xy = r4.xy; x0[0].xyz = r2.xyz; x0[1].xyz = r3.xyz; x0[2].xyz = r1.xyz; o1.xyz = float3(1,1,1); o1.w = g_vsObject.m_useWeightCount.w; r0.xyz = x0[0].xyz; r1.xyz = x0[1].xyz; r2.xyz = x0[2].xyz; o3.xyz = r0.xyz; o4.xyz = r1.xyz; o5.xyz = r2.xyz; return; }[/code] Tinyest shader Next small shader [code] cbuffer cVSScene : register(b2) { struct { float4x4 m_projectionView; float4x4 m_projection; float4x4 m_view; float4x4 m_shadowProjection; float4x4 m_shadowProjection2; float4 m_eyepos; float4 m_projectionParam; float4 m_viewportSize; float4 m_exposure; float4 m_fogParam[3]; float4 m_fogColor; float4 m_cameraCenterOffset; float4 m_shadowMapResolutions; } g_vsScene : packoffset(c0); } cbuffer cVSObject : register(b5) { struct { float4x4 m_viewWorld; float4x4 m_world; float4 m_useWeightCount; float4 m_localParam[4]; } g_vsObject : packoffset(c0); } cbuffer VSBones : register(b6) { struct { float4x3 m_boneMatrices[32]; } g_vsBone : packoffset(c0); struct { float4x3 m_boneMatrices[32]; } g_vsPrevBone : packoffset(c96); } Texture2D<float4> StereoParams : register(t125); Texture1D<float4> IniParams : register(t120); void main( float4 v0 : POSITION0, float4 v1 : NORMAL0, float4 v2 : TANGENT0, uint4 v3 : BLENDINDICES0, float4 v4 : BLENDWEIGHT0, float4 v5 : TEXCOORD0, float4 v6 : TEXCOORD1, float4 v7 : TEXCOORD2, float2 v8 : TEXCOORD3, out float4 o0 : SV_Position0, out float4 o1 : COLOR0, out float4 o2 : TEXCOORD0, out float4 o3 : TEXCOORD4, out float4 o4 : TEXCOORD5, out float4 o5 : TEXCOORD6, out float3 o6 : TEXCOORD7) { float4 r0,r1,r2,r3,r4,r5,r6,r7,r8,r9; uint4 bitmask, uiDest; float4 fDest; float4 x0[3]; r0.xyz = v0.xyz; r1.xyz = v1.xyz; r2.xyzw = v2.xyzw; r3.xyzw = v4.xyzw; nop; r0.xyz = r0.xyz; r1.xyz = r1.xyz; r2.xyzw = r2.xyzw; r3.xyzw = r3.xyzw; r0.xyz = r0.xyz; r4.x = g_vsObject.m_useWeightCount.x != 0.000000; if (r4.x != 0) { nop; r3.xyzw = r3.xyzw; r4.x = (int)v3.x * 3; r5.xyzw = g_vsBone.m_boneMatrices[v3.x]._m00_m10_m20_m30 * r3.xxxx; r6.xyzw = g_vsBone.m_boneMatrices[v3.x]._m01_m11_m21_m31 * r3.xxxx; r4.xyzw = g_vsBone.m_boneMatrices[v3.x]._m02_m12_m22_m32 * r3.xxxx; r3.x = (int)v3.y * 3; r7.xyzw = g_vsBone.m_boneMatrices[v3.y]._m00_m10_m20_m30 * r3.yyyy; r8.xyzw = g_vsBone.m_boneMatrices[v3.y]._m01_m11_m21_m31 * r3.yyyy; r9.xyzw = g_vsBone.m_boneMatrices[v3.y]._m02_m12_m22_m32 * r3.yyyy; r5.xyzw = r7.xyzw + r5.xyzw; r6.xyzw = r8.xyzw + r6.xyzw; r4.xyzw = r9.xyzw + r4.xyzw; r3.x = (int)v3.z * 3; r7.xyzw = g_vsBone.m_boneMatrices[v3.y]._m00_m10_m20_m30 * r3.zzzz; r8.xyzw = g_vsBone.m_boneMatrices[v3.y]._m01_m11_m21_m31 * r3.zzzz; r9.xyzw = g_vsBone.m_boneMatrices[v3.y]._m02_m12_m22_m32 * r3.zzzz; r5.xyzw = r7.xyzw + r5.xyzw; r6.xyzw = r8.xyzw + r6.xyzw; r4.xyzw = r9.xyzw + r4.xyzw; r3.x = (int)v3.w * 3; r7.xyzw = g_vsBone.m_boneMatrices[v3.y]._m00_m10_m20_m30 * r3.wwww; r8.xyzw = g_vsBone.m_boneMatrices[v3.y]._m01_m11_m21_m31 * r3.wwww; r3.xyzw = g_vsBone.m_boneMatrices[v3.y]._m02_m12_m22_m32 * r3.wwww; r5.xyzw = r7.xyzw + r5.xyzw; r6.xyzw = r8.xyzw + r6.xyzw; r3.xyzw = r4.xyzw + r3.xyzw; nop; r0.x = dot(v0.xyzw, r5.xyzw); r0.y = dot(v0.xyzw, r6.xyzw); r0.z = dot(v0.xyzw, r3.xyzw); r0.xyz = r0.xyz; nop; r4.w = 0; r4.xyz = v1.xyz; r1.x = dot(r4.xyzw, r5.xyzw); r1.y = dot(r4.xyzw, r6.xyzw); r1.z = dot(r4.xyzw, r3.xyzw); r1.xyz = r1.xyz; nop; r4.w = 0; r4.xyz = v2.xyz; r5.x = dot(r4.xyzw, r5.xyzw); r5.y = dot(r4.xyzw, r6.xyzw); r5.z = dot(r4.xyzw, r3.xyzw); r5.xyz = r5.xyz; r0.xyz = r0.xyz; r1.xyz = r1.xyz; r5.xyz = r5.xyz; } else { r5.xyz = r2.xyz; } nop; nop; r0.w = v0.w; r3.x = dot(r0.xyzw, g_vsObject.m_viewWorld._m00_m10_m20_m30); r3.y = dot(r0.xyzw, g_vsObject.m_viewWorld._m01_m11_m21_m31); r3.z = dot(r0.xyzw, g_vsObject.m_viewWorld._m02_m12_m22_m32); r3.w = dot(r0.xyzw, g_vsObject.m_viewWorld._m03_m13_m23_m33); r0.x = r3.x; r0.y = r3.y; r0.z = r3.z; r0.xyz = r0.xyz; nop; r4.x = dot(r3.xyzw, g_vsScene.m_projection._m00_m10_m20_m30); r4.y = dot(r3.xyzw, g_vsScene.m_projection._m01_m11_m21_m31); r4.z = dot(r3.xyzw, g_vsScene.m_projection._m02_m12_m22_m32); r4.w = dot(r3.xyzw, g_vsScene.m_projection._m03_m13_m23_m33); r4.xyzw = r4.xyzw; nop; r0.xyz = r0.xyz; r4.xyzw = r4.xyzw; r0.xyz = r0.xyz; nop; nop; r0.w = dot(r0.xyz, r0.xyz); r0.w = rsqrt(r0.w); r0.xyz = r0.xyz * r0.www; nop; nop; nop; r1.w = 0; r2.x = dot(r1.xyzw, g_vsObject.m_viewWorld._m00_m10_m20_m30); r2.y = dot(r1.xyzw, g_vsObject.m_viewWorld._m01_m11_m21_m31); r2.z = dot(r1.xyzw, g_vsObject.m_viewWorld._m02_m12_m22_m32); r0.w = dot(r2.xyz, r2.xyz); r0.w = rsqrt(r0.w); r1.xyz = r2.xyz * r0.www; nop; r5.w = 0; r2.x = dot(r5.xyzw, g_vsObject.m_viewWorld._m00_m10_m20_m30); r2.y = dot(r5.xyzw, g_vsObject.m_viewWorld._m01_m11_m21_m31); r2.z = dot(r5.xyzw, g_vsObject.m_viewWorld._m02_m12_m22_m32); r0.w = dot(r2.xyz, r2.xyz); r0.w = rsqrt(r0.w); r2.xyz = r2.xyz * r0.www; r3.xyz = r2.zxy * r1.yzx; r5.xyz = r2.yzx * r1.zxy; r5.xyz = -r5.xyz; r3.xyz = r5.xyz + r3.xyz; r0.w = dot(r3.xyz, r3.xyz); r0.w = rsqrt(r0.w); r3.xyz = r3.xyz * r0.www; r3.xyz = r3.xyz * r2.www; r4.xyzw = r4.xyzw; r0.xyz = r0.xyz; r5.xy = v5.xy; nop; r5.xy = r5.xy; r5.xy = r5.xy; r5.xy = r5.xy; o0.xyzw = r4.xyzw; o2.xy = r5.xy; o3.xyz = -r0.xyz; x0[0].xyz = r2.xyz; x0[1].xyz = r3.xyz; x0[2].xyz = r1.xyz; o1.xyz = float3(1,1,1); o1.w = g_vsObject.m_useWeightCount.w; r0.xyz = x0[0].xyz; r1.xyz = x0[1].xyz; r2.xyz = x0[2].xyz; o4.xyz = r0.xyz; o5.xyz = r1.xyz; o6.xyz = r2.xyz; return; }[/code] Wish me luck
I'm currently limiting myself to fixing the main startup screen.

I can stay on the screen hunting without worrying about things attacking me.

The main screen is normally very blured so the point of fixing it is not really there.

But remove the blur and increase depth to 100% on 27" and things break apart.

As soon as I render anything I get a halo but if I skip rendering nothing appears.
Quite a number of shaders involved in rendering solid snake.

Image
Image
Image

cbuffer cVSScene : register(b2)
{

struct
{
float4x4 m_projectionView;
float4x4 m_projection;
float4x4 m_view;
float4x4 m_shadowProjection;
float4x4 m_shadowProjection2;
float4 m_eyepos;
float4 m_projectionParam;
float4 m_viewportSize;
float4 m_exposure;
float4 m_fogParam[3];
float4 m_fogColor;
float4 m_cameraCenterOffset;
float4 m_shadowMapResolutions;
} g_vsScene : packoffset(c0);

}

cbuffer cVSObject : register(b5)
{

struct
{
float4x4 m_viewWorld;
float4x4 m_world;
float4 m_useWeightCount;
float4 m_localParam[4];
} g_vsObject : packoffset(c0);

}

cbuffer VSBones : register(b6)
{

struct
{
float4x3 m_boneMatrices[32];
} g_vsBone : packoffset(c0);


struct
{
float4x3 m_boneMatrices[32];
} g_vsPrevBone : packoffset(c96);

}

Texture2D<float4> StereoParams : register(t125);
Texture1D<float4> IniParams : register(t120);

void main(
float4 v0 : POSITION0,
float4 v1 : NORMAL0,
float4 v2 : TANGENT0,
uint4 v3 : BLENDINDICES0,
float4 v4 : BLENDWEIGHT0,
float4 v5 : TEXCOORD0,
float4 v6 : TEXCOORD1,
float4 v7 : TEXCOORD2,
float2 v8 : TEXCOORD3,
out float4 o0 : SV_Position0,
out float4 o1 : COLOR0,
out float4 o2 : TEXCOORD0,
out float4 o3 : TEXCOORD5,
out float4 o4 : TEXCOORD6,
out float3 o5 : TEXCOORD7)
{
float4 r0,r1,r2,r3,r4,r5,r6,r7,r8,r9;
uint4 bitmask, uiDest;
float4 fDest;

float4 x0[3];
r0.xyz = v0.xyz;
r1.xyz = v1.xyz;
r2.xyzw = v2.xyzw;
r3.xyzw = v4.xyzw;
nop;
r0.xyz = r0.xyz;
r1.xyz = r1.xyz;
r2.xyzw = r2.xyzw;
r3.xyzw = r3.xyzw;
r0.xyz = r0.xyz;
r4.x = g_vsObject.m_useWeightCount.x != 0.000000;
if (r4.x != 0) {
nop;
r3.xyzw = r3.xyzw;
r4.x = (int)v3.x * 3;
r5.xyzw = g_vsBone.m_boneMatrices[v3.x]._m00_m10_m20_m30 * r3.xxxx;
r6.xyzw = g_vsBone.m_boneMatrices[v3.x]._m01_m11_m21_m31 * r3.xxxx;
r4.xyzw = g_vsBone.m_boneMatrices[v3.x]._m02_m12_m22_m32 * r3.xxxx;
r3.x = (int)v3.y * 3;
r7.xyzw = g_vsBone.m_boneMatrices[v3.y]._m00_m10_m20_m30 * r3.yyyy;
r8.xyzw = g_vsBone.m_boneMatrices[v3.y]._m01_m11_m21_m31 * r3.yyyy;
r9.xyzw = g_vsBone.m_boneMatrices[v3.y]._m02_m12_m22_m32 * r3.yyyy;
r5.xyzw = r7.xyzw + r5.xyzw;
r6.xyzw = r8.xyzw + r6.xyzw;
r4.xyzw = r9.xyzw + r4.xyzw;
r3.x = (int)v3.z * 3;
r7.xyzw = g_vsBone.m_boneMatrices[v3.y]._m00_m10_m20_m30 * r3.zzzz;
r8.xyzw = g_vsBone.m_boneMatrices[v3.y]._m01_m11_m21_m31 * r3.zzzz;
r9.xyzw = g_vsBone.m_boneMatrices[v3.y]._m02_m12_m22_m32 * r3.zzzz;
r5.xyzw = r7.xyzw + r5.xyzw;
r6.xyzw = r8.xyzw + r6.xyzw;
r4.xyzw = r9.xyzw + r4.xyzw;
r3.x = (int)v3.w * 3;
r7.xyzw = g_vsBone.m_boneMatrices[v3.y]._m00_m10_m20_m30 * r3.wwww;
r8.xyzw = g_vsBone.m_boneMatrices[v3.y]._m01_m11_m21_m31 * r3.wwww;
r3.xyzw = g_vsBone.m_boneMatrices[v3.y]._m02_m12_m22_m32 * r3.wwww;
r5.xyzw = r7.xyzw + r5.xyzw;
r6.xyzw = r8.xyzw + r6.xyzw;
r3.xyzw = r4.xyzw + r3.xyzw;
nop;
r0.x = dot(v0.xyzw, r5.xyzw);
r0.y = dot(v0.xyzw, r6.xyzw);
r0.z = dot(v0.xyzw, r3.xyzw);
r0.xyz = r0.xyz;
nop;
r4.w = 0;
r4.xyz = v1.xyz;
r1.x = dot(r4.xyzw, r5.xyzw);
r1.y = dot(r4.xyzw, r6.xyzw);
r1.z = dot(r4.xyzw, r3.xyzw);
r1.xyz = r1.xyz;
nop;
r4.w = 0;
r4.xyz = v2.xyz;
r5.x = dot(r4.xyzw, r5.xyzw);
r5.y = dot(r4.xyzw, r6.xyzw);
r5.z = dot(r4.xyzw, r3.xyzw);
r5.xyz = r5.xyz;
r0.xyz = r0.xyz;
r1.xyz = r1.xyz;
r5.xyz = r5.xyz;
} else {
r5.xyz = r2.xyz;
}
nop;
nop;
r0.w = v0.w;
r3.x = dot(r0.xyzw, g_vsObject.m_viewWorld._m00_m10_m20_m30);
r3.y = dot(r0.xyzw, g_vsObject.m_viewWorld._m01_m11_m21_m31);
r3.z = dot(r0.xyzw, g_vsObject.m_viewWorld._m02_m12_m22_m32);
r3.w = dot(r0.xyzw, g_vsObject.m_viewWorld._m03_m13_m23_m33);
nop;
r0.x = dot(r3.xyzw, g_vsScene.m_projection._m00_m10_m20_m30);
r0.y = dot(r3.xyzw, g_vsScene.m_projection._m01_m11_m21_m31);
r0.z = dot(r3.xyzw, g_vsScene.m_projection._m02_m12_m22_m32);
r0.w = dot(r3.xyzw, g_vsScene.m_projection._m03_m13_m23_m33);
r0.xyzw = r0.xyzw;
nop;
r0.xyzw = r0.xyzw;
nop;
nop;
nop;
nop;
nop;
r1.w = 0;
r2.x = dot(r1.xyzw, g_vsObject.m_viewWorld._m00_m10_m20_m30);
r2.y = dot(r1.xyzw, g_vsObject.m_viewWorld._m01_m11_m21_m31);
r2.z = dot(r1.xyzw, g_vsObject.m_viewWorld._m02_m12_m22_m32);
r1.x = dot(r2.xyz, r2.xyz);
r1.x = rsqrt(r1.x);
r1.xyz = r2.xyz * r1.xxx;
nop;
r5.w = 0;
r2.x = dot(r5.xyzw, g_vsObject.m_viewWorld._m00_m10_m20_m30);
r2.y = dot(r5.xyzw, g_vsObject.m_viewWorld._m01_m11_m21_m31);
r2.z = dot(r5.xyzw, g_vsObject.m_viewWorld._m02_m12_m22_m32);
r1.w = dot(r2.xyz, r2.xyz);
r1.w = rsqrt(r1.w);
r2.xyz = r2.xyz * r1.www;
r3.xyz = r2.zxy * r1.yzx;
r4.xyz = r2.yzx * r1.zxy;
r4.xyz = -r4.xyz;
r3.xyz = r4.xyz + r3.xyz;
r1.w = dot(r3.xyz, r3.xyz);
r1.w = rsqrt(r1.w);
r3.xyz = r3.xyz * r1.www;
r3.xyz = r3.xyz * r2.www;
r0.xyzw = r0.xyzw;
r4.xy = v5.xy;
nop;
r4.xy = r4.xy;
r4.xy = r4.xy;
r4.xy = r4.xy;
o0.xyzw = r0.xyzw;
o2.xy = r4.xy;
x0[0].xyz = r2.xyz;
x0[1].xyz = r3.xyz;
x0[2].xyz = r1.xyz;
o1.xyz = float3(1,1,1);
o1.w = g_vsObject.m_useWeightCount.w;
r0.xyz = x0[0].xyz;
r1.xyz = x0[1].xyz;
r2.xyz = x0[2].xyz;
o3.xyz = r0.xyz;
o4.xyz = r1.xyz;
o5.xyz = r2.xyz;
return;
}

Tinyest shader

Next small shader
cbuffer cVSScene : register(b2)
{

struct
{
float4x4 m_projectionView;
float4x4 m_projection;
float4x4 m_view;
float4x4 m_shadowProjection;
float4x4 m_shadowProjection2;
float4 m_eyepos;
float4 m_projectionParam;
float4 m_viewportSize;
float4 m_exposure;
float4 m_fogParam[3];
float4 m_fogColor;
float4 m_cameraCenterOffset;
float4 m_shadowMapResolutions;
} g_vsScene : packoffset(c0);

}

cbuffer cVSObject : register(b5)
{

struct
{
float4x4 m_viewWorld;
float4x4 m_world;
float4 m_useWeightCount;
float4 m_localParam[4];
} g_vsObject : packoffset(c0);

}

cbuffer VSBones : register(b6)
{

struct
{
float4x3 m_boneMatrices[32];
} g_vsBone : packoffset(c0);


struct
{
float4x3 m_boneMatrices[32];
} g_vsPrevBone : packoffset(c96);

}

Texture2D<float4> StereoParams : register(t125);
Texture1D<float4> IniParams : register(t120);

void main(
float4 v0 : POSITION0,
float4 v1 : NORMAL0,
float4 v2 : TANGENT0,
uint4 v3 : BLENDINDICES0,
float4 v4 : BLENDWEIGHT0,
float4 v5 : TEXCOORD0,
float4 v6 : TEXCOORD1,
float4 v7 : TEXCOORD2,
float2 v8 : TEXCOORD3,
out float4 o0 : SV_Position0,
out float4 o1 : COLOR0,
out float4 o2 : TEXCOORD0,
out float4 o3 : TEXCOORD4,
out float4 o4 : TEXCOORD5,
out float4 o5 : TEXCOORD6,
out float3 o6 : TEXCOORD7)
{
float4 r0,r1,r2,r3,r4,r5,r6,r7,r8,r9;
uint4 bitmask, uiDest;
float4 fDest;

float4 x0[3];
r0.xyz = v0.xyz;
r1.xyz = v1.xyz;
r2.xyzw = v2.xyzw;
r3.xyzw = v4.xyzw;
nop;
r0.xyz = r0.xyz;
r1.xyz = r1.xyz;
r2.xyzw = r2.xyzw;
r3.xyzw = r3.xyzw;
r0.xyz = r0.xyz;
r4.x = g_vsObject.m_useWeightCount.x != 0.000000;
if (r4.x != 0) {
nop;
r3.xyzw = r3.xyzw;
r4.x = (int)v3.x * 3;
r5.xyzw = g_vsBone.m_boneMatrices[v3.x]._m00_m10_m20_m30 * r3.xxxx;
r6.xyzw = g_vsBone.m_boneMatrices[v3.x]._m01_m11_m21_m31 * r3.xxxx;
r4.xyzw = g_vsBone.m_boneMatrices[v3.x]._m02_m12_m22_m32 * r3.xxxx;
r3.x = (int)v3.y * 3;
r7.xyzw = g_vsBone.m_boneMatrices[v3.y]._m00_m10_m20_m30 * r3.yyyy;
r8.xyzw = g_vsBone.m_boneMatrices[v3.y]._m01_m11_m21_m31 * r3.yyyy;
r9.xyzw = g_vsBone.m_boneMatrices[v3.y]._m02_m12_m22_m32 * r3.yyyy;
r5.xyzw = r7.xyzw + r5.xyzw;
r6.xyzw = r8.xyzw + r6.xyzw;
r4.xyzw = r9.xyzw + r4.xyzw;
r3.x = (int)v3.z * 3;
r7.xyzw = g_vsBone.m_boneMatrices[v3.y]._m00_m10_m20_m30 * r3.zzzz;
r8.xyzw = g_vsBone.m_boneMatrices[v3.y]._m01_m11_m21_m31 * r3.zzzz;
r9.xyzw = g_vsBone.m_boneMatrices[v3.y]._m02_m12_m22_m32 * r3.zzzz;
r5.xyzw = r7.xyzw + r5.xyzw;
r6.xyzw = r8.xyzw + r6.xyzw;
r4.xyzw = r9.xyzw + r4.xyzw;
r3.x = (int)v3.w * 3;
r7.xyzw = g_vsBone.m_boneMatrices[v3.y]._m00_m10_m20_m30 * r3.wwww;
r8.xyzw = g_vsBone.m_boneMatrices[v3.y]._m01_m11_m21_m31 * r3.wwww;
r3.xyzw = g_vsBone.m_boneMatrices[v3.y]._m02_m12_m22_m32 * r3.wwww;
r5.xyzw = r7.xyzw + r5.xyzw;
r6.xyzw = r8.xyzw + r6.xyzw;
r3.xyzw = r4.xyzw + r3.xyzw;
nop;
r0.x = dot(v0.xyzw, r5.xyzw);
r0.y = dot(v0.xyzw, r6.xyzw);
r0.z = dot(v0.xyzw, r3.xyzw);
r0.xyz = r0.xyz;
nop;
r4.w = 0;
r4.xyz = v1.xyz;
r1.x = dot(r4.xyzw, r5.xyzw);
r1.y = dot(r4.xyzw, r6.xyzw);
r1.z = dot(r4.xyzw, r3.xyzw);
r1.xyz = r1.xyz;
nop;
r4.w = 0;
r4.xyz = v2.xyz;
r5.x = dot(r4.xyzw, r5.xyzw);
r5.y = dot(r4.xyzw, r6.xyzw);
r5.z = dot(r4.xyzw, r3.xyzw);
r5.xyz = r5.xyz;
r0.xyz = r0.xyz;
r1.xyz = r1.xyz;
r5.xyz = r5.xyz;
} else {
r5.xyz = r2.xyz;
}
nop;
nop;
r0.w = v0.w;
r3.x = dot(r0.xyzw, g_vsObject.m_viewWorld._m00_m10_m20_m30);
r3.y = dot(r0.xyzw, g_vsObject.m_viewWorld._m01_m11_m21_m31);
r3.z = dot(r0.xyzw, g_vsObject.m_viewWorld._m02_m12_m22_m32);
r3.w = dot(r0.xyzw, g_vsObject.m_viewWorld._m03_m13_m23_m33);
r0.x = r3.x;
r0.y = r3.y;
r0.z = r3.z;
r0.xyz = r0.xyz;
nop;
r4.x = dot(r3.xyzw, g_vsScene.m_projection._m00_m10_m20_m30);
r4.y = dot(r3.xyzw, g_vsScene.m_projection._m01_m11_m21_m31);
r4.z = dot(r3.xyzw, g_vsScene.m_projection._m02_m12_m22_m32);
r4.w = dot(r3.xyzw, g_vsScene.m_projection._m03_m13_m23_m33);
r4.xyzw = r4.xyzw;
nop;
r0.xyz = r0.xyz;
r4.xyzw = r4.xyzw;
r0.xyz = r0.xyz;
nop;
nop;
r0.w = dot(r0.xyz, r0.xyz);
r0.w = rsqrt(r0.w);
r0.xyz = r0.xyz * r0.www;
nop;
nop;
nop;
r1.w = 0;
r2.x = dot(r1.xyzw, g_vsObject.m_viewWorld._m00_m10_m20_m30);
r2.y = dot(r1.xyzw, g_vsObject.m_viewWorld._m01_m11_m21_m31);
r2.z = dot(r1.xyzw, g_vsObject.m_viewWorld._m02_m12_m22_m32);
r0.w = dot(r2.xyz, r2.xyz);
r0.w = rsqrt(r0.w);
r1.xyz = r2.xyz * r0.www;
nop;
r5.w = 0;
r2.x = dot(r5.xyzw, g_vsObject.m_viewWorld._m00_m10_m20_m30);
r2.y = dot(r5.xyzw, g_vsObject.m_viewWorld._m01_m11_m21_m31);
r2.z = dot(r5.xyzw, g_vsObject.m_viewWorld._m02_m12_m22_m32);
r0.w = dot(r2.xyz, r2.xyz);
r0.w = rsqrt(r0.w);
r2.xyz = r2.xyz * r0.www;
r3.xyz = r2.zxy * r1.yzx;
r5.xyz = r2.yzx * r1.zxy;
r5.xyz = -r5.xyz;
r3.xyz = r5.xyz + r3.xyz;
r0.w = dot(r3.xyz, r3.xyz);
r0.w = rsqrt(r0.w);
r3.xyz = r3.xyz * r0.www;
r3.xyz = r3.xyz * r2.www;
r4.xyzw = r4.xyzw;
r0.xyz = r0.xyz;
r5.xy = v5.xy;
nop;
r5.xy = r5.xy;
r5.xy = r5.xy;
r5.xy = r5.xy;
o0.xyzw = r4.xyzw;
o2.xy = r5.xy;
o3.xyz = -r0.xyz;
x0[0].xyz = r2.xyz;
x0[1].xyz = r3.xyz;
x0[2].xyz = r1.xyz;
o1.xyz = float3(1,1,1);
o1.w = g_vsObject.m_useWeightCount.w;
r0.xyz = x0[0].xyz;
r1.xyz = x0[1].xyz;
r2.xyz = x0[2].xyz;
o4.xyz = r0.xyz;
o5.xyz = r1.xyz;
o6.xyz = r2.xyz;
return;
}


Wish me luck

Thanks to everybody using my assembler it warms my heart.
To have a critical piece of code that everyone can enjoy!
What more can you ask for?

donations: ulfjalmbrant@hotmail.com

#64
Posted 09/18/2015 12:05 AM   
Best of luck! Cool that you're putting the effort in. Fwiw, whenever you get around to playing it you're in for a real treat. Its an absolute blast
Best of luck! Cool that you're putting the effort in. Fwiw, whenever you get around to playing it you're in for a real treat. Its an absolute blast

#65
Posted 09/18/2015 02:53 AM   
FWIW I can't see any patterns in those shaders that would indicate a halo type problem. Those look like shaders for actors (they have bones), which usually haven't needed a fix. What object/effect are they for?
FWIW I can't see any patterns in those shaders that would indicate a halo type problem. Those look like shaders for actors (they have bones), which usually haven't needed a fix. What object/effect are they for?

2x Geforce GTX 980 in SLI provided by NVIDIA, i7 6700K 4GHz CPU, Asus 27" VG278HE 144Hz 3D Monitor, BenQ W1070 3D Projector, 120" Elite Screens YardMaster 2, 32GB Corsair DDR4 3200MHz RAM, Samsung 850 EVO 500G SSD, 4x750GB HDD in RAID5, Gigabyte Z170X-Gaming 7 Motherboard, Corsair Obsidian 750D Airflow Edition Case, Corsair RM850i PSU, HTC Vive, Win 10 64bit

Alienware M17x R4 w/ built in 3D, Intel i7 3740QM, GTX 680m 2GB, 16GB DDR3 1600MHz RAM, Win7 64bit, 1TB SSD, 1TB HDD, 750GB HDD

Pre-release 3D fixes, shadertool.py and other goodies: http://github.com/DarkStarSword/3d-fixes
Support me on Patreon: https://www.patreon.com/DarkStarSword or PayPal: https://www.paypal.me/DarkStarSword

#66
Posted 09/18/2015 06:58 PM   
Game is getting RAVE reviews, surprised more people on this forum weren't excited for it. I guess it is kind of a console game series but this one looks to be on par with games like Witcher 3, etc. Goodluck on getting it to work. That would be a nice early Christmas present. Thanks guys.
Game is getting RAVE reviews, surprised more people on this forum weren't excited for it. I guess it is kind of a console game series but this one looks to be on par with games like Witcher 3, etc.

Goodluck on getting it to work. That would be a nice early Christmas present.

Thanks guys.

#67
Posted 09/18/2015 07:12 PM   
I also hope that the rest of the creative team working on Mad Max fix (very interesting, complex work trying to reverse engineer developer shader projection mathematics) can find time to help create a good fix for this game. Great reviews, end of a franchise...
I also hope that the rest of the creative team working on Mad Max fix (very interesting, complex work trying to reverse engineer developer shader projection mathematics) can find time to help create a good fix for this game. Great reviews, end of a franchise...

#68
Posted 09/18/2015 09:29 PM   
[quote="whyme466"]Great reviews, end of a franchise...[/quote] Speaking of which:) What other games are on the PC? (I remember a WHILE ago picking one up for PS2 can't remember the exact name) I played about 50% of the game. I was really enjoying it but decided to stop to pick up all the previous ones (which I didn't)... Can someone list all the games in the franchise? (I have the last 2 on the PC but didn't bother to play them since I know I will understand about 20% of what is really going on...)
whyme466 said:Great reviews, end of a franchise...


Speaking of which:)
What other games are on the PC? (I remember a WHILE ago picking one up for PS2 can't remember the exact name) I played about 50% of the game. I was really enjoying it but decided to stop to pick up all the previous ones (which I didn't)...

Can someone list all the games in the franchise? (I have the last 2 on the PC but didn't bother to play them since I know I will understand about 20% of what is really going on...)

1x Palit RTX 2080Ti Pro Gaming OC(watercooled and overclocked to hell)
3x 3D Vision Ready Asus VG278HE monitors (5760x1080).
Intel i9 9900K (overclocked to 5.3 and watercooled ofc).
Asus Maximus XI Hero Mobo.
16 GB Team Group T-Force Dark Pro DDR4 @ 3600.
Lots of Disks:
- Raid 0 - 256GB Sandisk Extreme SSD.
- Raid 0 - WD Black - 2TB.
- SanDisk SSD PLUS 480 GB.
- Intel 760p 256GB M.2 PCIe NVMe SSD.
Creative Sound Blaster Z.
Windows 10 x64 Pro.
etc


My website with my fixes and OpenGL to 3D Vision wrapper:
http://3dsurroundgaming.com

(If you like some of the stuff that I've done and want to donate something, you can do it with PayPal at tavyhome@gmail.com)

#69
Posted 09/18/2015 11:53 PM   
Chronologically, the series goes like this: MGS 3 MGS Peace Walker MGS Ground Zeroes MGS 5 Metal Gear Metal Gear 2 MGS MGS 2 MGS 4 Metal Gear Rising The games that had a PC release were MGS, MGS 2, MGS Ground Zeroes, MGS 5, and Metal Gear Rising. The first 2 are probably pretty hard to track down because I don't think they're available digitally. You can emulate the PS2, GameCube, and PSP to play through the others besides MGS 4. If you have a PS3, you can easily play through all of the old games with the "Legacy Collection". Although, you don't get the updated version of MGS released only on GameCube. To understand the story, you can probably just play through MGS 3, Peace Walker, and then Ground Zeroes.
Chronologically, the series goes like this:

MGS 3
MGS Peace Walker
MGS Ground Zeroes
MGS 5
Metal Gear
Metal Gear 2
MGS
MGS 2
MGS 4
Metal Gear Rising

The games that had a PC release were MGS, MGS 2, MGS Ground Zeroes, MGS 5, and Metal Gear Rising.
The first 2 are probably pretty hard to track down because I don't think they're available digitally.
You can emulate the PS2, GameCube, and PSP to play through the others besides MGS 4.
If you have a PS3, you can easily play through all of the old games with the "Legacy Collection". Although, you don't get the updated version of MGS released only on GameCube.
To understand the story, you can probably just play through MGS 3, Peace Walker, and then Ground Zeroes.

i7-8086k @ 5.2GHz
EVGA GTX 1080Ti
16GB 3800MHz DDR4
Windows 7 x64

#70
Posted 09/19/2015 01:40 AM   
MGS Portable Ops goes between MGS 3 and Peace Walker, but is sometimes considered as "outside of the canon story for a few details"
MGS Portable Ops goes between MGS 3 and Peace Walker, but is sometimes considered as "outside of the canon story for a few details"

#71
Posted 09/19/2015 03:34 AM   
Also, definitely don't play them in chronological order. Play them in order of release. Having the context of the previous games helps immensely. Also, from that list - the essentials I would say are MGS1, 2, 3, 4, Peace walker, Ground Zeroes, V. Peave Walker is essential in a story sense. I really enjoyed the game, but for a lot of people it was a take it or leave it sort of situation. I haven't played the Gamecube Remake for MGS1 called The Twin Snakes, but my understanding is that it doesn't stay fully faithful to the original - including some more over the top action movie type scenes. All of the games are definitely worth playing. I started playing Metal Gear with MGS1 about 2.5 years ago and its become one of my favorite series. The games truly are one of a kind in the experience they offer.
Also, definitely don't play them in chronological order. Play them in order of release.

Having the context of the previous games helps immensely.

Also, from that list - the essentials I would say are

MGS1, 2, 3, 4, Peace walker, Ground Zeroes, V.

Peave Walker is essential in a story sense. I really enjoyed the game, but for a lot of people it was a take it or leave it sort of situation.

I haven't played the Gamecube Remake for MGS1 called The Twin Snakes, but my understanding is that it doesn't stay fully faithful to the original - including some more over the top action movie type scenes.

All of the games are definitely worth playing. I started playing Metal Gear with MGS1 about 2.5 years ago and its become one of my favorite series. The games truly are one of a kind in the experience they offer.

#72
Posted 09/19/2015 04:28 AM   
I find compatibility mode to be pretty decent in this game. Sure it isn't castlevania but it's better than nothing. Since this is my 1st time using CM, why do people suggest high convergence and low depth? I find if I raise the convergence, anything that would pop out of the screen in normal 3D just appears flat. I really don't see haloing getting better or worse with depth adjustment either.
I find compatibility mode to be pretty decent in this game. Sure it isn't castlevania but it's better than nothing. Since this is my 1st time using CM, why do people suggest high convergence and low depth? I find if I raise the convergence, anything that would pop out of the screen in normal 3D just appears flat. I really don't see haloing getting better or worse with depth adjustment either.

Gigabyte Gaming 5 Z170X, i7-6700K @ 4.4ghz, Asus GTX 2080 ti Strix OC , 16gb DDR4 Corsair Vengence 2666, LG 60uh8500 and 49ub8500 passive 4K 3D EDID, Dell S2716DG.

#73
Posted 09/21/2015 02:17 PM   
[quote="CeeJayII"]I find compatibility mode to be pretty decent in this game. Sure it isn't castlevania but it's better than nothing. Since this is my 1st time using CM, why do people suggest high convergence and low depth? I find if I raise the convergence, anything that would pop out of the screen in normal 3D just appears flat. I really don't see haloing getting better or worse with depth adjustment either. [/quote] I think by high convergence they mean far into the screen, to compensate for the lack of pop-out depth.
CeeJayII said:I find compatibility mode to be pretty decent in this game. Sure it isn't castlevania but it's better than nothing. Since this is my 1st time using CM, why do people suggest high convergence and low depth? I find if I raise the convergence, anything that would pop out of the screen in normal 3D just appears flat. I really don't see haloing getting better or worse with depth adjustment either.


I think by high convergence they mean far into the screen, to compensate for the lack of pop-out depth.

#74
Posted 09/21/2015 11:08 PM   
No, for CM, you don't have any real control over convergence. If you turn it up too high, it will flatten things up close to the screen and make it look like posterboard. When people suggest high convergence and low depth, that's for a different hack/technique for broken games, where using true-3D you can align shadows for example at screen depth, and have a reasonable, but not great, experience. We used to do that for broken games, before HelixMod. @Alo81: Please don't use that terminology, it just adds confusion. There's no such thing as convergence being depth. Depth is depth, convergence is pop-out (actually setting where screen depth lies in a scene).
No, for CM, you don't have any real control over convergence. If you turn it up too high, it will flatten things up close to the screen and make it look like posterboard.

When people suggest high convergence and low depth, that's for a different hack/technique for broken games, where using true-3D you can align shadows for example at screen depth, and have a reasonable, but not great, experience. We used to do that for broken games, before HelixMod.

@Alo81: Please don't use that terminology, it just adds confusion. There's no such thing as convergence being depth. Depth is depth, convergence is pop-out (actually setting where screen depth lies in a scene).

Acer H5360 (1280x720@120Hz) - ASUS VG248QE with GSync mod - 3D Vision 1&2 - Driver 372.54
GTX 970 - i5-4670K@4.2GHz - 12GB RAM - Win7x64+evilKB2670838 - 4 Disk X25 RAID
SAGER NP9870-S - GTX 980 - i7-6700K - Win10 Pro 1607
Latest 3Dmigoto Release
Bo3b's School for ShaderHackers

#75
Posted 09/22/2015 06:26 AM   
  5 / 15    
Scroll To Top