Dark Souls internal rendering resolution fix (DSfix)

I have to say, this game in 3D is unbelievably fantastic. I have tried many games in 3D just to see, and always end up back normal. But man .... I think I about 10 times better too. Being able to actually gauge the distance between me and something I am trying to swing at .... I can see how much room I have to roll and how much room I have to swing my weapon!

Its fantastic!
 
Not really, in my experience (at least since windows 7). In fact, in some games "window vsync" seems slightly more responsive than when you force it using d3doverrider.

The one thing about borderless windowed mode I have notice in some games is worse SLI scaling.

Not sure if I am alone in this
 
I don't know if anyone will want this or not, but, I said I'd post it. If anyone would like to use it or make further improvements etc.

I've made some improvements/changes to the current OBGE VSSAO implementation for Dark Souls.

  • Accurate AO Distance Checking
  • Dynamic Positional Occlusion Offsets
  • Positional Depth
  • BT.709 & sRBG luma coefficient weights for HD LCD
  • The Combine Function was compiling for SM 1.1, now amended to 3.0
  • 32 Samples, Instead of 9
  • Higher Quality AO Sampling
  • Improved Finite AO Noise
  • Denser, more refined AO Texturing.
  • On my system this version nets about 25%+ increased performance vs the default implementation (2560x1440, native, not downsampled)

Download: http://www.mediafire.com/?fg33oqyqz1ot65f (place in your DS binary folder, same place as dsfix. I've included my DSFix ini file as a reference)


Here's the code: (Don't use this, it's only for reference. Use the download link provided, as it has include folders, and a noise texture)
Code:
/*
	 -Volumetric SSAO-
	Implemented by Tomerk for OBGE
	Adapted and tweaked for Dark Souls by Durante
	Modified by Asmodean, for accurate surface occlusion, distance, and dynamic positional depth offsets, for Dark Souls
*/

/***User-controlled variables***/

#define N_SAMPLES 32 //number of samples, currently do not change.
#define M_PI 3.14159265358979323846

extern float aoRadiusMultiplier = 0.25; //Linearly multiplies the radius of the AO Sampling
extern float ThicknessModel = 50.0; //units in space the AO assumes objects' thicknesses are
extern float FOV = 75; //Field of View in Degrees
extern float luminosity_threshold = 0.5;

#ifdef SSAO_STRENGTH_LOW
extern float aoClamp = 0.35;
extern float aoStrengthMultiplier = 0.8;
#endif

#ifdef SSAO_STRENGTH_MEDIUM
extern float aoClamp = 0.25;
extern float aoStrengthMultiplier = 0.9;
#endif

#ifdef SSAO_STRENGTH_HIGH
extern float aoClamp = 0.1;
extern float aoStrengthMultiplier = 1.0;
#endif

#define LUMINANCE_CONSIDERATION //comment this line to not take pixel brightness into account

/***End Of User-controlled Variables***/
static float2 rcpres = PIXEL_SIZE;
static float aspect = rcpres.y/rcpres.x;
static const float nearZ = 1.0f;
static const float farZ = 3000.0f;
static const float2 g_InvFocalLen = { tan(0.5f*radians(FOV)) / rcpres.y * rcpres.x, tan(0.5f*radians(FOV)) };
static const float depthRange = nearZ-farZ;

Buffer<float4>g_Buffer;

texture2D sampleTex2D;
sampler sampleSampler = sampler_state
{
	Texture   = <sampleTex2D>;
	MinFilter = ANISOTROPIC;
	MagFilter = ANISOTROPIC;
	MipFilter = ANISOTROPIC;
	AddressU  = Clamp;
	AddressV  = Clamp;
	SRGBTexture=FALSE;
	MaxMipLevel=0;
	MipMapLodBias=0;
	MaxAnisotropy = 16;
};

texture2D depthTex2D;
sampler depthSampler = sampler_state
{
	texture = <depthTex2D>;
	MinFilter = POINT;
	MagFilter = POINT;
	MipFilter = POINT;
	AddressU  = Clamp;
	AddressV  = Clamp;
	SRGBTexture=FALSE;
	MaxMipLevel=0;
	MipMapLodBias=0;
	MaxAnisotropy = 16;
};

texture2D AOTex2D;
sampler AOSampler = sampler_state
{
	texture = <AOTex2D>;
	MinFilter = POINT;
	MagFilter = POINT;
	MipFilter = POINT;
	AddressU  = Clamp;
	AddressV  = Clamp;
	SRGBTexture=FALSE;
	MaxMipLevel=0;
	MipMapLodBias=0;
	MaxAnisotropy = 16;
};

texture2D cust_NoiseTexture < string filename = "ssao/RandomNoiseB.dds"; >;
sampler noiseSampler = sampler_state
{
	Texture   = <cust_NoiseTexture>;
	MinFilter = POINT;
	MagFilter = POINT;
	MipFilter = POINT;
	AddressU  = Wrap;
	AddressV  = Wrap;
	SRGBTexture=FALSE;
	MaxMipLevel=0;
	MipMapLodBias=0;
	MaxAnisotropy = 16;
};

texture2D frameTex2D;
sampler frameSampler = sampler_state
{
	texture = <frameTex2D>;
	MinFilter = ANISOTROPIC;
	MagFilter = ANISOTROPIC;
	MipFilter = ANISOTROPIC;
	AddressU  = Clamp;
	AddressV  = Clamp;
	SRGBTexture=FALSE;
	MaxMipLevel=0;
	MipMapLodBias=0;
	MaxAnisotropy = 16;
};

texture2D prevPassTex2D;
sampler passSampler = sampler_state
{
	texture = <prevPassTex2D>;
	MinFilter = ANISOTROPIC;
	MagFilter = ANISOTROPIC;
	MipFilter = ANISOTROPIC;
	AddressU  = Clamp;
	AddressV  = Clamp;
	SRGBTexture=FALSE;
	MaxMipLevel=0;
	MipMapLodBias=0;
	MaxAnisotropy = 16;
};

texture2D focusTex2D;
sampler focusSampler = sampler_state
{
	Texture   = <focusTex2D>;
	MinFilter = ANISOTROPIC;
	MagFilter = ANISOTROPIC;
	MipFilter = ANISOTROPIC;
	AddressU  = Clamp;
	AddressV  = Clamp;
	SRGBTexture=FALSE;
	MaxMipLevel=0;
	MipMapLodBias=0;
	MaxAnisotropy = 16;
};

texture2D normalTex2D;
sampler normalSampler = sampler_state
{
	Texture   = <normalTex2D>;
	MinFilter = POINT;
	MagFilter = POINT;
	MipFilter = POINT;
	AddressU  = Clamp;
	AddressV  = Clamp;
	SRGBTexture=FALSE;
	MaxMipLevel=0;
	MipMapLodBias=0;
	MaxAnisotropy = 16;
};


struct VSOUT
{
	float4 vertPos : POSITION;
	float2 UVCoord : TEXCOORD0;
};

struct VSIN
{
	float4 vertPos : POSITION;
	float2 UVCoord : TEXCOORD0;
};


VSOUT FrameVS(VSIN IN)
{
	/*VSOUT OUT;
	float4 pos=float4(IN.vertPos.x, IN.vertPos.y, IN.vertPos.z, 1.0f);
	OUT.vertPos=pos;
	float2 coord=float2(IN.UVCoord.x, IN.UVCoord.y);
	OUT.UVCoord=coord;
	return OUT;*/
	
	VSOUT OUT;
	OUT.vertPos = IN.vertPos;
	OUT.UVCoord = IN.UVCoord;
	return OUT;
}

static float2 sample_offset[N_SAMPLES] =
{
	 float2(1.00f, 1.00f),
	 float2(-1.00f, -1.00f),
	 float2(-1.00f, 1.00f),
	 float2(1.00f, -1.00f),

	 float2(1.00f, 0.00f),
	 float2(-1.00f, 0.00f),
	 float2(0.00f, 1.00f),
	 float2(0.00f, -1.00f),

	 float2(1.00f, 0.00f),
	 float2(-1.00f, 0.00f),
	 float2(0.00f, 1.00f),
	 float2(0.00f, -1.00f),

	 float2(1.00f, 1.00f),
	 float2(-1.00f, -1.00f),
	 float2(-1.00f, 1.00f),
	 float2(1.00f, -1.00f),
	 
	 float2(1.00f, 0.00f),
	 float2(-1.00f, 0.00f),
	 float2(0.00f, 1.00f),
	 float2(0.00f, -1.00f),

	 float2(1.00f, 0.00f),
	 float2(-1.00f, 0.00f),
	 float2(0.00f, 1.00f),
	 float2(0.00f, -1.00f),

	 float2(1.00f, 1.00f),
	 float2(-1.00f, -1.00f),
	 float2(-1.00f, 1.00f),
	 float2(1.00f, -1.00f),

	 float2(1.00f, 0.00f),
	 float2(-1.00f, 0.00f),
	 float2(0.00f, 1.00f),
	 float2(0.00f, -1.00f)
};

static float sample_radius[N_SAMPLES] =
{
	0.30f, 0.30f,
	0.30f, 0.30f,
	0.30f, 0.30f,
	0.30f, 0.30f,
	
	0.30f, 0.30f,
	0.30f, 0.30f,
	0.30f, 0.30f,
	0.30f, 0.30f,
	
	0.30f, 0.30f,
	0.30f, 0.30f,
	0.30f, 0.30f,
	0.30f, 0.30f,
	
	0.30f, 0.30f,
	0.30f, 0.30f,
	0.30f, 0.30f,
	0.30f, 0.30f
};

float4 ExpandRGBE( float4 RGBE )
{
	return float4( ldexp( RGBE.xyz, 255.0 * RGBE.w - 128.0 ), 1.0 );
}

float3 decode(float3 enc)
{
	return (2.0f * enc.xyz- 1.0f);
}

float2 rand(in float2 uv : TEXCOORD0) {
	
	//float noise = tex2Dlod(noiseSampler, uv);
	float noise = normalize(tex2Dlod(noiseSampler, float4(uv, 0, 0)).xyz * 2 - 1);
	float noiseX = noise+(abs(frac(sin(dot(uv, float2(12.9898, 78.233) * M_PI)) * 43758.5453)));
	float noiseY = sqrt(1.0f-noiseX*noiseX);
	return float2(noiseX, noiseY);
}

float readDepth(in float2 coord : TEXCOORD0) {
	float4 col = tex2Dlod(depthSampler, float4(coord, 0, 0));
	float posZ = ((1.0-col.z) + (1.0-col.y)*256.0 + (1.0-col.x)*(256.0*256.0));
	return (posZ-nearZ)/farZ;
}

float3 getPosition(in float2 uv : TEXCOORD0, in float eye_z) {
   uv = (uv * float2(2.0, -2.0) - float2(1.0, -1.0));
   float3 pos = float3(uv * g_InvFocalLen * eye_z, eye_z );
   return pos;
}


float4 ssao_Main(VSOUT IN) : COLOR0
{
	clip(1/SCALE-IN.UVCoord.x);
	clip(1/SCALE-IN.UVCoord.y);	
	IN.UVCoord.xy *= SCALE;
	
	float4 bufferData = g_Buffer.Load(IN.UVCoord);
	float depth = readDepth(IN.UVCoord);
	float3 pos = getPosition(IN.UVCoord, depth);
	float3 dx = ddx(pos);
	float3 dy = ddy(pos);
	float3 normal = normalize(cross(dx,dy));
	normal.y *= -1;
	float sample_depth = tex2D(depthSampler, IN.UVCoord);

	float ao=tex2D(AOSampler, IN.UVCoord);
	float s=tex2D(sampleSampler, IN.UVCoord);

	float2 rand_vec = rand(IN.UVCoord);
	float2 sample_vec_divisor = g_InvFocalLen*depth*depthRange/(aoRadiusMultiplier*5000*rcpres);
	float2 sample_center = IN.UVCoord + normal.xy/sample_vec_divisor*float2(1.0f,aspect);
	float sample_center_depth = depth*depthRange + normal.z*aoRadiusMultiplier*7;
	
	
	for(int i = 0; i < N_SAMPLES; i++)
	{	
		float2 sample_vec = reflect(sample_offset[i], rand_vec);
		sample_vec /= sample_vec_divisor;
		float2 sample_coords = sample_center + sample_vec*float2(1.0f,aspect);
		
		float curr_sample_radius = sample_radius[i]*aoRadiusMultiplier*7;
		float curr_sample_depth = depthRange*readDepth(sample_coords);
		
		ao += clamp(0,curr_sample_radius+sample_center_depth-curr_sample_depth,2*curr_sample_radius);
		ao -= clamp(0,curr_sample_radius+sample_center_depth-curr_sample_depth-ThicknessModel,2*curr_sample_radius);
		s += 2.0*curr_sample_radius;
	}

	ao /= s;
	
	// adjust for close and far away
	if(depth<0.065f)
	{
		ao = lerp(ao, 0.0f, (0.065f-depth)*13.3);
	}

	ao = 1.0f-ao*aoStrengthMultiplier;
	
	return float4(ao,ao,ao, 1.0f);
}

float4 HBlur( VSOUT IN ) : COLOR0 {
	float color = tex2D(passSampler, IN.UVCoord);

	float blurred = color*0.2270270270;
	blurred += tex2D(passSampler, IN.UVCoord + float2(rcpres.x*1.3846153846, 0)) * 0.3162162162;
	blurred += tex2D(passSampler, IN.UVCoord - float2(rcpres.x*1.3846153846, 0)) * 0.3162162162;
	blurred += tex2D(passSampler, IN.UVCoord + float2(rcpres.x*3.2307692308, 0)) * 0.0702702703;
	blurred += tex2D(passSampler, IN.UVCoord - float2(rcpres.x*3.2307692308, 0)) * 0.0702702703;
	
	return blurred;
}

float4 VBlur( VSOUT IN ) : COLOR0 {
	float color = tex2D(passSampler, IN.UVCoord);

	float blurred = color*0.2270270270;
	blurred += tex2D(passSampler, IN.UVCoord + float2(0, rcpres.y*1.3846153846)) * 0.3162162162;
	blurred += tex2D(passSampler, IN.UVCoord - float2(0, rcpres.y*1.3846153846)) * 0.3162162162;
	blurred += tex2D(passSampler, IN.UVCoord + float2(0, rcpres.y*3.2307692308)) * 0.0702702703;
	blurred += tex2D(passSampler, IN.UVCoord - float2(0, rcpres.y*3.2307692308)) * 0.0702702703;
	
	return blurred;
}

float4 Combine( VSOUT IN ) : COLOR0 {
	float3 color = tex2D(frameSampler, IN.UVCoord).rgb;
	float ao = tex2D(passSampler, IN.UVCoord/SCALE);
	ao = clamp(ao, aoClamp, 1.0f);

	#ifdef LUMINANCE_CONSIDERATION
	float luminance = (color.r*0.2125f)+(color.g*0.7154f)+(color.b*0.0721f);
	float white = 1.0f;
	float black = 0.0f;

	luminance = clamp(max(black,luminance-luminosity_threshold)+max(black,luminance-luminosity_threshold)+max(black,luminance-luminosity_threshold), 0.0f, 1.0f);
	ao = lerp(ao, white, luminance);
	#endif

	color *= 1.05f;
	color *= ao;

	return float4(color, 1.0f);
}

technique VSSAO
{
	pass p0
	{
		VertexShader = compile vs_3_0 FrameVS();
		PixelShader = compile ps_3_0 ssao_Main();	
	}
	pass p1
	{
		VertexShader = compile vs_3_0 FrameVS();
		PixelShader = compile ps_3_0 HBlur();
	}
	pass p2
	{
		VertexShader = compile vs_3_0 FrameVS();
		PixelShader = compile ps_3_0 VBlur();
	}
	pass p3
	{
		VertexShader = compile vs_3_0 FrameVS();
		PixelShader = compile ps_3_0 Combine();
	}
}

DSfix.ini

Code:
###############################################################################
# Graphics Options
###############################################################################

# internal rendering resolution of the game
# higher values will decrease performance
renderWidth 2560
renderHeight 1440

# The display width/height
# 0 means use the same resolution as renderWidth/Height
# (use for downscaling - if in doubt, leave at 0)
presentWidth 2560
presentHeight 1440

############# Anti Aliasing

# AA toggle and quality setting
# 0 = off (best performance, worst IQ)
# 1 = low 
# 2 = medium
# 3 = high
# 4 = ultra (worst performance, best IQ)
aaQuality 4

# AA type
# either "SMAA" or "FXAA"
aaType SMAA

############# Ambient Occlusion

# Enable and set the strength of the SSAO effect (all 3 settings have the same performance impact!)
# 0 = off
# 1 = low
# 2 = medium
# 3 = high
ssaoStrength 3

# Set SSAO scale
# 1 = high quality (default)
# 2 = lower quality, lower impact on performance
# 3 = lowest quality, lowest impact on performance
ssaoScale 1

# Determine the type of AO used
# "VSSAO" = Volumetric SSAO (default, suggested)
# "HBAO" = Horizon-Based Ambient Occlusion
# "SCAO" = VSSAO + HBAO
# VSSAO and  HBAO types have a different effect and similar performance
# SCAO combines both, with a higher performance impact
ssaoType VSSAO

############# Depth of field

# Depth of Field resolution override, possible values:
# 0 = no change from default (DoF pyramid starts at 512x360)
# 540 = DoF pyramid starts at 960x540
# 810 = DoF pyramid starts at 1440x810
# 1080 = DoF pyramid starts at 1920x1080
# 2160 = DoF pyramid starts at 3840x2160
# higher values will decrease performance
# do NOT set this to the same value as your vertical rendering resolution!
dofOverrideResolution 1080

# Depth of Field scaling override (NOT RECOMMENDED)
# 0 = DoF scaling enabled (default, recommended)
# 1 = DoF scaling disabled (sharper, worse performance, not as originally intended)
disableDofScaling 0

# Depth of field additional blur
# allows you to use high DoF resolutions and still get the originally intended effect
# suggested values:
# o (off) at default DoF resolution
# 0 or 1 at 540 DoF resolution
# 1 or 2 above that
# 3 or 4 at 2160 DoF resolution (if you're running a 680+)
dofBlurAmount 0

############# Framerate

# Enable variable framerate (up to 60)
# NOTE:
# - this requires in-memory modification of game code, and may get you banned from GFWL
# - there may be unintended side-effects in terms of gameplay
# - you need a very powerful system (especially CPU) in order to maintain 60 FPS
# - in some  instances, collision detection may fail. Avoid sliding down ladders
# Use this at your own risk!
# 0 = no changes to game code
# 1 = unlock the frame rate
unlockFPS 1

# FPS limit, only used with unlocked framerate
# do not set this much higher than 60, this will lead to various issues with the engine
FPSlimit 60

# FPS threshold
# DSfix will dynamically disable AA if your framerate drops below this value 
#  and re-enable it once it has normalized (with a bit of hysteresis thresholding)
FPSthreshold 0

############# Filtering

# texture filtering override
# 0 = no change 
# 1 = enable some bilinear filtering (use only if you need it!)
# 2 = full AF override (may degrade performance)
# if in doubt, leave this at 0
filteringOverride 2

###############################################################################
# HUD options
###############################################################################

# Enable HUD modifications
# 0 = off (default) - none of the options below will do anything!
# 1 = on
enableHudMod 1

# Remove the weapon icons from the HUD 
# (you can see which weapons you have equipped from your character model)
enableMinimalHud 0

# Scale down HuD, examples:
# 1.0 = original scale
# 0.75 = 75% of the original size
hudScaleFactor 0.75f

# Set opacity for different elements of the HUD
# 1.0 = fully opaque
# 0.0 = fully transparent
# Top left: health bars, stamina bar, humanity counter, status indicators
hudTopLeftOpacity 0.75f
# Bottom left: item indicators & counts
hudBottomLeftOpacity 0.75f
# Bottom right: soul count 
hudBottomRightOpacity 0.5f

###############################################################################
# Window & Mouse Cursor Options
###############################################################################

# borderless fullscreen mode 
# make sure to select windowed mode in the game settings for this to work!
# 0 = disable
# 1 = enable
borderlessFullscreen 0

# disable cursor at startup
# 0 = no change
# 1 = off at start
disableCursor 1

# capture cursor (do not allow it to leave the window)
# 0 = don't capture
# 1 = capture
# (this also works if the cursor is not visible)
captureCursor 1

###############################################################################
# Save Game Backup Options
###############################################################################

# enables save game backups
# 0 = no backups
# 1 = backups enabled
# backups are stored in the save folder, as "[timestamp]_[original name].bak"
enableBackups 0

# backup interval in seconds (1500 = 25 minutes)
# (minimum setting 600)
backupInterval 1500

# maximum amount of backups, older ones will be deleted
maxBackups 2

###############################################################################
# Texture Override Options
###############################################################################

# enables texture dumping
# you *only* need this if you want to create your own override textures
# textures will be dumped to "dsfix\tex_override\[hash].tga"
enableTextureDumping 0

# enables texture override
# textures in "dsfix\tex_override\[hash].png" will replace the corresponding originals
# will cause a small slowdown during texture loading!
enableTextureOverride 1

###############################################################################
# Other Options
###############################################################################

# skip the intro logos
# this should now be slightly more stable, but should still be
# the first thing to disable in case you experience any problems
skipIntro 0

# change the screenshot directory
# default: . (current directory)
# example: C:\Users\Peter\Pictures
# directory must exist!
screenshotDir .

# override the in-game language
# none = no override
# en-GB = English, fr = French, it = Italian, de = German, es = Spanish
# ko = Korean, zh-tw = Chinese, pl = Polish, ru = Russian
# this does not work in Windows XP!
overrideLanguage none

# Dinput dll chaining
# if you want to use another dinput8.dll wrapper together
# with DSfix, rename it (e.g. "dinputwrapper.dll") and put the new name here
dinput8dllWrapper none
# dsmfix.dll

# D3D adapter override
# -1 = no override
# N = use adapter N
# this setting is for multiple (non-SLI/crossfire) GPUs
# everyone else should leave it at -1
d3dAdapterOverride -1

# Log level - 0 to 11, higher numbers mean more logging
# only enable for debugging
logLevel 0

###############################################################################
# The settings below are not yet ready to use!!               
###############################################################################

# You can only set either forceFullscreen or forceWindowed (or neither)
# 0 = off, 1 = on
forceWindowed 0
forceFullscreen 0

# turn on/off Vsync
enableVsync 0
# adjust display refresh rate in fullscreen mode - this is NOT linked to FPS!
fullscreenHz 60

I've also done custom shaders for SweetFX, if anyone was interested in them, but seeing as this isn't the appropriate place to post them, I've left them out.

I had more screens uploaded, but they are a bit pointless, as you can't see the difference properly in them, So I just left 3 comparisons below. You may want to right-click and save them to view in full screen.

You'll need to actually see it in-game to clearly see the difference though.

OFF

off3_zps20819cf5.jpg



MINE

mine3_zpsb2d05b60.jpg



DEFAULT

default3_zpsdf930e17.jpg


Apologies for the long post.

My system
i7 3770k @4.4ghz
GTX 680
8GB 2133 CL9 1T
 
Yo Durante, just dropping in to say thanks for this. I finally got around to getting Dark Souls on PC and thanks to you, the experience is that much better.
 
My account just now got approved, so I finally get to say thank you to Durante!

After playing the 360 version for countless hours, finally being able to play DS in 1080p (and especially in 60 fps!) makes a huge, huge difference.

A big hello to everyone else as well!
 
Hey guys, just started with the fix and it's awesome. I encountered a small graphical glitch and not sure if anyone else has experienced the same thing. Anytime I move my toon around, there's a line moving up and is continuous unless I stop. Any way to fix this?

Edit: also for some reason I can't see my equipped items on the bottom left.
 
My account just now got approved, so I finally get to say thank you to Durante!

After playing the 360 version for countless hours, finally being able to play DS in 1080p (and especially in 60 fps!) makes a huge, huge difference.

A big hello to everyone else as well!

Welcome to the mad house, SirNinja. Enjoy your stay, and yes, dsfix really, really makes an okay port into the definitive version of the game. Will be enjoyed for generations to come thanks to its availability on the PC.
 
Just tried to start playing Dark Souls again but I'm having some issues. DSFix has been updated to the latest version.

My monitor is 1600 x 900 but when I render the game at that resolution, it is a lot more blurry than I remember it being (this mostly affects my character). I tried to render the game at 2048×1152. This improved how it looked, but my character still looked noticeably blurry. Any idea why? Also, my framerate is definitely a bit lower than it used to be when rendering at 1600 x 900. I have been using borderless windowed mode as well.

Any ideas would be greatly appreciated. I can post my DSFix code if needed.
 
Just tried to start playing Dark Souls again but I'm having some issues. DSFix has been updated to the latest version.

My monitor is 1600 x 900 but when I render the game at that resolution, it is a lot more blurry than I remember it being (this mostly affects my character). I tried to render the game at 2048×1152. This improved how it looked, but my character still looked noticeably blurry. Any idea why? Also, my framerate is definitely a bit lower than it used to be when rendering at 1600 x 900. I have been using borderless windowed mode as well.

Any ideas would be greatly appreciated. I can post my DSFix code if needed.

What are you DOF settings? I'd also make sure the in game resolution is set to 1600x900, and try regular fullscreen mode as well
 
Browsed the thread a little bit but haven't seen anyone mention a problem where the game is fine until you actually start a character, then the screen becomes a quarter of the monitor in the upper left. The HUD still stretches like normal along the whole screen but the actual game screen is just that quarter box. So strange lol.

edit: ignore me, I went back more pages and I'm finding references that this has been asked 100000000 times. I'll find the answer.. Sorry! :)

Consider this a bump of appreciation then!
 
Browsed the thread a little bit but haven't seen anyone mention a problem where the game is fine until you actually start a character, then the screen becomes a quarter of the monitor in the upper left. The HUD still stretches like normal along the whole screen but the actual game screen is just that quarter box. So strange lol.

edit: ignore me, I went back more pages and I'm finding references that this has been asked 100000000 times. I'll find the answer.. Sorry! :)

Consider this a bump of appreciation then!

someone post the thing
 
Browsed the thread a little bit but haven't seen anyone mention a problem where the game is fine until you actually start a character, then the screen becomes a quarter of the monitor in the upper left. The HUD still stretches like normal along the whole screen but the actual game screen is just that quarter box. So strange lol.

edit: ignore me, I went back more pages and I'm finding references that this has been asked 100000000 times. I'll find the answer.. Sorry! :)

Consider this a bump of appreciation then!








I think it should be the responsibility of whoever makes the first on a new page to quote these 3 images.
 
I have a weird issue. See this screenshot :
Before today nothing wrong, I played in fullscreen mode (1920*1200), no "fuck?" black bars or rendering artefacts.

What changed is that I toyed with my GPU settings according to the downsampling topic from yesterday for other games and now it seems I fucked up something. The rendering window size is supposed to be good (1920*1200) as my GFWL interface is showing properly at the display borders. There is also tearing, which I never experienced ingame before ( played 100+ hours ). I tried to go back but I can't find the mistake I made. I also checked and AA is disabled ingame :D

I guess it could be my GPU (gtx670) having some overheating issue but Dishonored plays just fine, fullscreen and all.

Help me DSfix GAF!
 
Played like three hours in the vanilla DS, and now finally installed the Durante fix.
Great Scott.
And I already thought it looked pretty good! Awesome job Durante, you truly are a bloody hero.

The lack of VSync is annoying though, a bit more then with the vanilla version.
Experienced a lot of graphical glitches while in borderless mode, so that's no option. Forcing it with Nvidia doesn't seem to work either.
Ah well, minor complaint. One against DS, not this wonderull fix. :)
 
Played like three hours in the vanilla DS, and now finally installed the Durante fix.
Great Scott.
And I already thought it looked pretty good! Awesome job Durante, you truly are a bloody hero.

The lack of VSync is annoying though, a bit more then with the vanilla version.
Experienced a lot of graphical glitches while in borderless mode, so that's no option. Forcing it with Nvidia doesn't seem to work either.
Ah well, minor complaint. One against DS, not this wonderull fix. :)

Get D3DOverrider
 
[Asmodean];46428272 said:
I don't know if anyone will want this or not, but, I said I'd post it. If anyone would like to use it or make further improvements etc.

I've made some improvements/changes to the current OBGE VSSAO implementation for Dark Souls.

  • Accurate AO Distance Checking
  • Dynamic Positional Occlusion Offsets
  • Positional Depth
  • BT.709 & sRBG luma coefficient weights for HD LCD
  • The Combine Function was compiling for SM 1.1, now amended to 3.0
  • 32 Samples, Instead of 9
  • Higher Quality AO Sampling
  • Denser, more refined AO Texturing.
  • On my system this version nets about 25%+ increased performance vs the default implementation (2560x1440, native, not downsampled)

Here's the code:
Code:
/*
	 -Volumetric SSAO-
	Implemented by Tomerk for OBGE
	Adapted and tweaked for Dark Souls by Durante
	Modified by Asmodean, for accurate occlusion distance, and dynamic positional depth offsets, for Dark Souls
*/

/***User-controlled variables***/

#define N_SAMPLES 32 //number of samples, currently do not change.
#define M_PI 3.14159265358979323846

extern float aoRadiusMultiplier = 0.25; //Linearly multiplies the radius of the AO Sampling
extern float ThicknessModel = 50.0; //units in space the AO assumes objects' thicknesses are
extern float FOV = 75; //Field of View in Degrees
extern float luminosity_threshold = 0.5;

#ifdef SSAO_STRENGTH_LOW
extern float aoClamp = 0.5;
extern float aoStrengthMultiplier = 0.6;
#endif

#ifdef SSAO_STRENGTH_MEDIUM
extern float aoClamp = 0.3;
extern float aoStrengthMultiplier = 0.9;
#endif

#ifdef SSAO_STRENGTH_HIGH
extern float aoClamp = 0.1;
extern float aoStrengthMultiplier = 1.0;
#endif

#define LUMINANCE_CONSIDERATION //comment this line to not take pixel brightness into account

/***End Of User-controlled Variables***/
static float2 rcpres = PIXEL_SIZE;
static float aspect = rcpres.y/rcpres.x;
static const float nearZ = 1.0f;
static const float farZ = 3000.0f;
static const float2 g_InvFocalLen = { tan(0.5f*radians(FOV)) / rcpres.y * rcpres.x, tan(0.5f*radians(FOV)) };
static const float depthRange = nearZ-farZ;

Buffer<float4>g_Buffer;

texture2D sampleTex2D;
sampler sampleSampler = sampler_state
{
	Texture   = <sampleTex2D>;
	MinFilter = ANISOTROPIC;
	MagFilter = ANISOTROPIC;
	MipFilter = ANISOTROPIC;
	AddressU  = Clamp;
	AddressV  = Clamp;
	SRGBTexture=FALSE;
	MaxMipLevel=0;
	MipMapLodBias=0;
	MaxAnisotropy = 16;
};

texture2D depthTex2D;
sampler depthSampler = sampler_state
{
	texture = <depthTex2D>;
	MinFilter = POINT;
	MagFilter = POINT;
	MipFilter = POINT;
	AddressU  = Clamp;
	AddressV  = Clamp;
	SRGBTexture=FALSE;
	MaxMipLevel=0;
	MipMapLodBias=0;
	MaxAnisotropy = 16;
};

texture2D AOTex2D;
sampler AOSampler = sampler_state
{
	texture = <AOTex2D>;
	MinFilter = POINT;
	MagFilter = POINT;
	MipFilter = POINT;
	AddressU  = Clamp;
	AddressV  = Clamp;
	SRGBTexture=FALSE;
	MaxMipLevel=0;
	MipMapLodBias=0;
	MaxAnisotropy = 16;
};

texture2D noiseTex2D;
sampler noiseSampler = sampler_state
{
	Texture   = <noiseTex2D>;
	MinFilter = POINT;
	MagFilter = POINT;
	MipFilter = POINT;
	AddressU  = Wrap;
	AddressV  = Wrap;
	SRGBTexture=FALSE;
	MaxMipLevel=0;
	MipMapLodBias=0;
	MaxAnisotropy = 16;
};

texture2D frameTex2D;
sampler frameSampler = sampler_state
{
	texture = <frameTex2D>;
	MinFilter = ANISOTROPIC;
	MagFilter = ANISOTROPIC;
	MipFilter = ANISOTROPIC;
	AddressU  = Clamp;
	AddressV  = Clamp;
	SRGBTexture=FALSE;
	MaxMipLevel=0;
	MipMapLodBias=0;
	MaxAnisotropy = 16;
};

texture2D prevPassTex2D;
sampler passSampler = sampler_state
{
	texture = <prevPassTex2D>;
	MinFilter = ANISOTROPIC;
	MagFilter = ANISOTROPIC;
	MipFilter = ANISOTROPIC;
	AddressU  = Clamp;
	AddressV  = Clamp;
	SRGBTexture=FALSE;
	MaxMipLevel=0;
	MipMapLodBias=0;
	MaxAnisotropy = 16;
};

texture2D focusTex2D;
sampler focusSampler = sampler_state
{
	Texture   = <focusTex2D>;
	MinFilter = ANISOTROPIC;
	MagFilter = ANISOTROPIC;
	MipFilter = ANISOTROPIC;
	AddressU  = Clamp;
	AddressV  = Clamp;
	SRGBTexture=FALSE;
	MaxMipLevel=0;
	MipMapLodBias=0;
	MaxAnisotropy = 16;
};

texture2D normalTex2D;
sampler normalSampler = sampler_state
{
	Texture   = <normalTex2D>;
	MinFilter = POINT;
	MagFilter = POINT;
	MipFilter = POINT;
	AddressU  = Clamp;
	AddressV  = Clamp;
	SRGBTexture=FALSE;
	MaxMipLevel=0;
	MipMapLodBias=0;
	MaxAnisotropy = 16;
};


struct VSOUT
{
	float4 vertPos : POSITION;
	float2 UVCoord : TEXCOORD0;
};

struct VSIN
{
	float4 vertPos : POSITION;
	float2 UVCoord : TEXCOORD0;
};


VSOUT FrameVS(VSIN IN)
{
	VSOUT OUT;
	float4 pos=float4(IN.vertPos.x, IN.vertPos.y, IN.vertPos.z, 1.0f);
	OUT.vertPos=pos;
	float2 coord=float2(IN.UVCoord.x, IN.UVCoord.y);
	OUT.UVCoord=coord;
	return OUT;
}

static float2 sample_offset[N_SAMPLES] =
{
	 float2(1.00f, 1.00f),
	 float2(-1.00f, -1.00f),
	 float2(-1.00f, 1.00f),
	 float2(1.00f, -1.00f),

	 float2(1.00f, 0.00f),
	 float2(-1.00f, 0.00f),
	 float2(0.00f, 1.00f),
	 float2(0.00f, -1.00f),

	 float2(1.00f, 0.00f),
	 float2(-1.00f, 0.00f),
	 float2(0.00f, 1.00f),
	 float2(0.00f, -1.00f),

	 float2(1.00f, 1.00f),
	 float2(-1.00f, -1.00f),
	 float2(-1.00f, 1.00f),
	 float2(1.00f, -1.00f),
	 
	 float2(1.00f, 0.00f),
	 float2(-1.00f, 0.00f),
	 float2(0.00f, 1.00f),
	 float2(0.00f, -1.00f),

	 float2(1.00f, 0.00f),
	 float2(-1.00f, 0.00f),
	 float2(0.00f, 1.00f),
	 float2(0.00f, -1.00f),

	 float2(1.00f, 1.00f),
	 float2(-1.00f, -1.00f),
	 float2(-1.00f, 1.00f),
	 float2(1.00f, -1.00f),
	 
	 float2(1.00f, 1.00f),
	 float2(-1.00f, -1.00f),
	 float2(-1.00f, 1.00f),
	 float2(1.00f, -1.00f)
};

static float sample_radius[N_SAMPLES] =
{
	0.30f, 0.30f,
	0.30f, 0.30f,
	0.30f, 0.30f,
	0.30f, 0.30f,
	
	0.30f, 0.30f,
	0.30f, 0.30f,
	0.30f, 0.30f,
	0.30f, 0.30f,
	
	0.30f, 0.30f,
	0.30f, 0.30f,
	0.30f, 0.30f,
	0.30f, 0.30f,
	
	0.30f, 0.30f,
	0.30f, 0.30f,
	0.30f, 0.30f,
	0.30f, 0.30f
};

float3 decode(float3 enc)
{
	return (2.0f * enc.xyz- 1.0f);
}

float2 rand(in float2 uv : TEXCOORD0) {
	
	float noise = tex2D(noiseSampler, uv);
	float noiseX = noise+(frac(sin(dot(uv, float2(12.9898,78.233) * M_PI)) * 43758.5453));
	float noiseY = sqrt(1-noiseX*noiseX);
	return float2(noiseX, noiseY);
}

float readDepth(in float2 coord : TEXCOORD0) {
	float4 col = tex2D(depthSampler, coord);
	float posZ = ((1.0-col.z) + (1.0-col.y)*256.0 + (1.0-col.x)*(256.0*256.0));
	return (posZ-nearZ)/farZ;
}

float3 getPosition(in float2 uv : TEXCOORD0, in float eye_z : TEXCOORD1) {
   uv = (uv * float2(2.0, -2.0) - float2(1.0, -1.0));
   float3 pos = float3(uv * g_InvFocalLen * eye_z, eye_z );
   return pos;
}


float4 ssao_Main(VSOUT IN) : COLOR0
{
	clip(1/SCALE-IN.UVCoord.x);
	clip(1/SCALE-IN.UVCoord.y);	
	IN.UVCoord.xy *= SCALE;
	
	float4 bufferData = g_Buffer.Load(IN.UVCoord);
	float depth = readDepth(IN.UVCoord);
	float3 pos = getPosition(IN.UVCoord, depth);
	float3 dx = ddx(pos);
	float3 dy = ddy(pos);
	float3 normal = normalize(cross(dx,dy));
	normal.y *= -1;
	float sample_depth;

	float ao=tex2D(AOSampler, IN.UVCoord);
	float s=tex2D(sampleSampler, IN.UVCoord);

	float2 rand_vec = rand(IN.UVCoord);
	float2 sample_vec_divisor = g_InvFocalLen*depth*depthRange/(aoRadiusMultiplier*5000*rcpres);
	float2 sample_center = IN.UVCoord + normal.xy/sample_vec_divisor*float2(1.0f,aspect);
	float sample_center_depth = depth*depthRange + normal.z*aoRadiusMultiplier*7;
	
	
	for(int i = 0; i < N_SAMPLES; i++)
	{	
		float2 sample_vec = reflect(sample_offset[i], rand_vec);
		sample_vec /= sample_vec_divisor;
		float2 sample_coords = sample_center + sample_vec*float2(1.0f,aspect);
		
		float curr_sample_radius = sample_radius[i]*aoRadiusMultiplier*7;
		float curr_sample_depth = depthRange*readDepth(sample_coords);
		
		ao += clamp(0,curr_sample_radius+sample_center_depth-curr_sample_depth,2*curr_sample_radius);
		ao -= clamp(0,curr_sample_radius+sample_center_depth-curr_sample_depth-ThicknessModel,2*curr_sample_radius);
		s += 2.0*curr_sample_radius;
	}

	ao /= s;
	
	// adjust for close and far away
	if(depth<0.065f) ao = lerp(ao, 0.0f, (0.065f-depth)*13.3);

	ao = 1.0f-ao*aoStrengthMultiplier;
	
	return float4(ao,ao,ao, 1.0f);
}

float4 HBlur( VSOUT IN ) : COLOR0 {
	float color = tex2D(passSampler, IN.UVCoord);

	float blurred = color*0.2270270270;
	blurred += tex2D(passSampler, IN.UVCoord + float2(rcpres.x*1.3846153846, 0)) * 0.3162162162;
	blurred += tex2D(passSampler, IN.UVCoord - float2(rcpres.x*1.3846153846, 0)) * 0.3162162162;
	blurred += tex2D(passSampler, IN.UVCoord + float2(rcpres.x*3.2307692308, 0)) * 0.0702702703;
	blurred += tex2D(passSampler, IN.UVCoord - float2(rcpres.x*3.2307692308, 0)) * 0.0702702703;
	
	return blurred;
}

float4 VBlur( VSOUT IN ) : COLOR0 {
	float color = tex2D(passSampler, IN.UVCoord);

	float blurred = color*0.2270270270;
	blurred += tex2D(passSampler, IN.UVCoord + float2(0, rcpres.y*1.3846153846)) * 0.3162162162;
	blurred += tex2D(passSampler, IN.UVCoord - float2(0, rcpres.y*1.3846153846)) * 0.3162162162;
	blurred += tex2D(passSampler, IN.UVCoord + float2(0, rcpres.y*3.2307692308)) * 0.0702702703;
	blurred += tex2D(passSampler, IN.UVCoord - float2(0, rcpres.y*3.2307692308)) * 0.0702702703;
	
	return blurred;
}

float4 Combine( VSOUT IN ) : COLOR0 {
	float3 color = tex2D(frameSampler, IN.UVCoord).rgb;
	float ao = tex2D(passSampler, IN.UVCoord/SCALE);
	ao = clamp(ao, aoClamp, 1.0f);

	#ifdef LUMINANCE_CONSIDERATION
	float luminance = (color.r*0.2125f)+(color.g*0.7154f)+(color.b*0.0721f);
	float white = 1.0f;
	float black = 0.0f;

	luminance = clamp(max(black,luminance-luminosity_threshold)+max(black,luminance-luminosity_threshold)+max(black,luminance-luminosity_threshold), 0.0f, 1.0f);
	ao = lerp(ao, white, luminance);
	#endif

	color *= 1.05f;
	color *= ao;

	return float4(color, 1.0f);
}

technique VSSAO
{
	pass p0
	{
		VertexShader = compile vs_3_0 FrameVS();
		PixelShader = compile ps_3_0 ssao_Main();	
	}
	pass p1
	{
		VertexShader = compile vs_3_0 FrameVS();
		PixelShader = compile ps_3_0 HBlur();
	}
	pass p2
	{
		VertexShader = compile vs_3_0 FrameVS();
		PixelShader = compile ps_3_0 VBlur();
	}
	pass p3
	{
		VertexShader = compile vs_3_0 FrameVS();
		PixelShader = compile ps_3_0 Combine();
	}
}

DSfix.ini

Code:
###############################################################################
# Graphics Options
###############################################################################

# internal rendering resolution of the game
# higher values will decrease performance
renderWidth 2560
renderHeight 1440

# The display width/height
# 0 means use the same resolution as renderWidth/Height
# (use for downscaling - if in doubt, leave at 0)
presentWidth 2560
presentHeight 1440

############# Anti Aliasing

# AA toggle and quality setting
# 0 = off (best performance, worst IQ)
# 1 = low 
# 2 = medium
# 3 = high
# 4 = ultra (worst performance, best IQ)
aaQuality 4

# AA type
# either "SMAA" or "FXAA"
aaType SMAA

############# Ambient Occlusion

# Enable and set the strength of the SSAO effect (all 3 settings have the same performance impact!)
# 0 = off
# 1 = low
# 2 = medium
# 3 = high
ssaoStrength 3

# Set SSAO scale
# 1 = high quality (default)
# 2 = lower quality, lower impact on performance
# 3 = lowest quality, lowest impact on performance
ssaoScale 1

# Determine the type of AO used
# "VSSAO" = Volumetric SSAO (default, suggested)
# "HBAO" = Horizon-Based Ambient Occlusion
# "SCAO" = VSSAO + HBAO
# VSSAO and  HBAO types have a different effect and similar performance
# SCAO combines both, with a higher performance impact
ssaoType VSSAO

############# Depth of field

# Depth of Field resolution override, possible values:
# 0 = no change from default (DoF pyramid starts at 512x360)
# 540 = DoF pyramid starts at 960x540
# 810 = DoF pyramid starts at 1440x810
# 1080 = DoF pyramid starts at 1920x1080
# 2160 = DoF pyramid starts at 3840x2160
# higher values will decrease performance
# do NOT set this to the same value as your vertical rendering resolution!
dofOverrideResolution 1080

# Depth of Field scaling override (NOT RECOMMENDED)
# 0 = DoF scaling enabled (default, recommended)
# 1 = DoF scaling disabled (sharper, worse performance, not as originally intended)
disableDofScaling 0

# Depth of field additional blur
# allows you to use high DoF resolutions and still get the originally intended effect
# suggested values:
# o (off) at default DoF resolution
# 0 or 1 at 540 DoF resolution
# 1 or 2 above that
# 3 or 4 at 2160 DoF resolution (if you're running a 680+)
dofBlurAmount 0

############# Framerate

# Enable variable framerate (up to 60)
# NOTE:
# - this requires in-memory modification of game code, and may get you banned from GFWL
# - there may be unintended side-effects in terms of gameplay
# - you need a very powerful system (especially CPU) in order to maintain 60 FPS
# - in some  instances, collision detection may fail. Avoid sliding down ladders
# Use this at your own risk!
# 0 = no changes to game code
# 1 = unlock the frame rate
unlockFPS 1

# FPS limit, only used with unlocked framerate
# do not set this much higher than 60, this will lead to various issues with the engine
FPSlimit 60

# FPS threshold
# DSfix will dynamically disable AA if your framerate drops below this value 
#  and re-enable it once it has normalized (with a bit of hysteresis thresholding)
FPSthreshold 0

############# Filtering

# texture filtering override
# 0 = no change 
# 1 = enable some bilinear filtering (use only if you need it!)
# 2 = full AF override (may degrade performance)
# if in doubt, leave this at 0
filteringOverride 2

###############################################################################
# HUD options
###############################################################################

# Enable HUD modifications
# 0 = off (default) - none of the options below will do anything!
# 1 = on
enableHudMod 1

# Remove the weapon icons from the HUD 
# (you can see which weapons you have equipped from your character model)
enableMinimalHud 0

# Scale down HuD, examples:
# 1.0 = original scale
# 0.75 = 75% of the original size
hudScaleFactor 0.75f

# Set opacity for different elements of the HUD
# 1.0 = fully opaque
# 0.0 = fully transparent
# Top left: health bars, stamina bar, humanity counter, status indicators
hudTopLeftOpacity 0.75f
# Bottom left: item indicators & counts
hudBottomLeftOpacity 0.75f
# Bottom right: soul count 
hudBottomRightOpacity 0.5f

###############################################################################
# Window & Mouse Cursor Options
###############################################################################

# borderless fullscreen mode 
# make sure to select windowed mode in the game settings for this to work!
# 0 = disable
# 1 = enable
borderlessFullscreen 0

# disable cursor at startup
# 0 = no change
# 1 = off at start
disableCursor 1

# capture cursor (do not allow it to leave the window)
# 0 = don't capture
# 1 = capture
# (this also works if the cursor is not visible)
captureCursor 1

###############################################################################
# Save Game Backup Options
###############################################################################

# enables save game backups
# 0 = no backups
# 1 = backups enabled
# backups are stored in the save folder, as "[timestamp]_[original name].bak"
enableBackups 0

# backup interval in seconds (1500 = 25 minutes)
# (minimum setting 600)
backupInterval 1500

# maximum amount of backups, older ones will be deleted
maxBackups 2

###############################################################################
# Texture Override Options
###############################################################################

# enables texture dumping
# you *only* need this if you want to create your own override textures
# textures will be dumped to "dsfix\tex_override\[hash].tga"
enableTextureDumping 0

# enables texture override
# textures in "dsfix\tex_override\[hash].png" will replace the corresponding originals
# will cause a small slowdown during texture loading!
enableTextureOverride 1

###############################################################################
# Other Options
###############################################################################

# skip the intro logos
# this should now be slightly more stable, but should still be
# the first thing to disable in case you experience any problems
skipIntro 0

# change the screenshot directory
# default: . (current directory)
# example: C:\Users\Peter\Pictures
# directory must exist!
screenshotDir .

# override the in-game language
# none = no override
# en-GB = English, fr = French, it = Italian, de = German, es = Spanish
# ko = Korean, zh-tw = Chinese, pl = Polish, ru = Russian
# this does not work in Windows XP!
overrideLanguage none

# Dinput dll chaining
# if you want to use another dinput8.dll wrapper together
# with DSfix, rename it (e.g. "dinputwrapper.dll") and put the new name here
dinput8dllWrapper none
# dsmfix.dll

# D3D adapter override
# -1 = no override
# N = use adapter N
# this setting is for multiple (non-SLI/crossfire) GPUs
# everyone else should leave it at -1
d3dAdapterOverride -1

# Log level - 0 to 11, higher numbers mean more logging
# only enable for debugging
logLevel 0

###############################################################################
# The settings below are not yet ready to use!!               
###############################################################################

# You can only set either forceFullscreen or forceWindowed (or neither)
# 0 = off, 1 = on
forceWindowed 0
forceFullscreen 0

# turn on/off Vsync
enableVsync 0
# adjust display refresh rate in fullscreen mode - this is NOT linked to FPS!
fullscreenHz 60

I've also done custom shaders for SweetFX, if anyone was interested in them, but seeing as this isn't the appropriate place to post them, I've left them out.

I had more screens uploaded, but they are a bit pointless, as you can't see the difference properly in them, So I just left 3 comparisons below. You may want to right-click and save them to view in full screen.

You'll need to actually see it in-game to clearly see the difference though.

OFF

off3_zps20819cf5.jpg



MINE

mine3_zpsb2d05b60.jpg



DEFAULT

default3_zpsdf930e17.jpg


Apologies for the long post.

My system
i7 3770k @4.4ghz
GTX 680
8GB 2133 CL9 1T

I'm sorry but those example pictures are terrible.

Don't post lossy JPEGs if you're trying to show us the difference.

DSFix lets you take lossless screenshots. Take some lossless shots, convert them to .png files, upload to minus.com or another website that hosts lossless images, then post them here.
 
How about you get your lazy ass, and copy/paste the code and see it for yourself in-game?

I'm not here to spoon feed you screenshots.
 
I have a weird issue. See this screenshot :

Before today nothing wrong, I played in fullscreen mode (1920*1200), no "fuck?" black bars or rendering artefacts.

What changed is that I toyed with my GPU settings according to the downsampling topic from yesterday for other games and now it seems I fucked up something. The rendering window size is supposed to be good (1920*1200) as my GFWL interface is showing properly at the display borders. There is also tearing, which I never experienced ingame before ( played 100+ hours ). I tried to go back but I can't find the mistake I made. I also checked and AA is disabled ingame :D

I guess it could be my GPU (gtx670) having some overheating issue but Dishonored plays just fine, fullscreen and all.

Help me DSfix GAF!

Bad texturing by From.
Don't worry, your card is fine : ).
 
[Asmodean];46765841 said:
How about you get your lazy ass, and copy/paste the code and see it for yourself in-game?

I'm not here to spoon feed you screenshots.

How was this response in any way shape or form called for?

It's your mod, the burden of proof that it works is on you. No one is going to do your work for you.
 
How was this response in any way shape or form called for?

It's your mod, the burden of proof that it works is on you.

Simply because, people are too used of modders bending over backwards to appease demanding users.

You will not see an accurate representation of AO from a screenshot, regardless.

No one is going to do your work for you.

You're kidding right?, the modder might spend hours/days working on something, yet you can't be expected to select some code and paste it into the VSSAO shader?

Don't like it for whatever reason?, Ctrl+Z and go about your business.

You can even alt-tab in and out of the game and update shader source while the game is running...
 
[Asmodean];46777443 said:
Simply because, people are too used of modders bending over backwards to appease demanding users.

You will not see an accurate representation of AO from a screenshot, regardless.



You're kidding right?, the modder might spend hours/days working on something, yet you can't be expected to select some code and paste it into the VSSAO shader?

Don't like it for whatever reason?, Ctrl+Z and go about your business.

You can even alt-tab in and out of the game and update shader source while the game is running...

You don't see Durante telling people to "Do their own work", buddy. He was more than happy to oblidge people with screenshots showing the benefits of his mod and the others followed suit trying different things. No one is going to respect an asshole. It's your mod, you came up with the code for it? Great! But you have to sell people on your product or no one is going to give a shit, just like they don't give a shit right now.

There's no "Bending over backwards", people are genuinely interested in the results but your poor showing and awfully compressed screenshots have only hurt your mod. Clean up your act and try again.
 
[Asmodean];46777443 said:
Simply because, people are too used of modders bending over backwards to appease demanding users.

You will not see an accurate representation of AO from a screenshot, regardless.



You're kidding right?, the modder might spend hours/days working on something, yet you can't be expected to select some code and paste it into the VSSAO

This must be the most backwards thinking I've seen all week on GAF, and that's saying something.
You worked hours on something you wanted to and because of that Star Creator has to be expected to kickstart the popularity of your mod by researching proper screenshot material to appease other users?
Did anyone demand you to make this mod, or even to make it public?
You come in here to show it off and share your code, cool, we let you notice that your screens aren't appealing and you'd be better off choosing an instance/camera angle in the game that'd be a better fit for the purpose of demoing the results of your code and to avoid crappy looking lossy jpgs.
In response, you acted like an arrogant prick, totally uncalled for.
You can't be bothered to use something that DSfix has implemented (lossless screencapping) and post it in png form but go aggro when somone comments on horribly compressed no-good for anything screens?
You're really something my friend.

[Asmodean];46765841 said:
How about you get your lazy ass, and copy/paste the code and see it for yourself in-game?

I'm not here to spoon feed you screenshots.

Wow. What a class act.
 
Games run better in actual full screen.

I find that isn't true in many cases. There are many games that have an irritating stutter that only goes away in windowed mode. It's bizarre but I've learned to deal with it. I use a borderless window utility for those games (if they don't support the feature natively).
 
I have a weird issue. See this screenshot :

Before today nothing wrong, I played in fullscreen mode (1920*1200), no "fuck?" black bars or rendering artefacts.

What changed is that I toyed with my GPU settings according to the downsampling topic from yesterday for other games and now it seems I fucked up something. The rendering window size is supposed to be good (1920*1200) as my GFWL interface is showing properly at the display borders. There is also tearing, which I never experienced ingame before ( played 100+ hours ). I tried to go back but I can't find the mistake I made. I also checked and AA is disabled ingame :D

I guess it could be my GPU (gtx670) having some overheating issue but Dishonored plays just fine, fullscreen and all.

Help me DSfix GAF!

I dont see anything wrong with that screenshot..

From what Ive read Dark Souls only renders in 16:9 aspect ratio so other resolutions such as 1920x1200(16:10) will display black bars.

As for screen tearing Ive been using D3D Overrider with Vsync & Triple buffering forced on both Data.exe & Darksouls.exe and haven't had any tearing issues (GTX 480).

EDIT: Just noticed the funky wall texture to the right of your character, I've seen this happen with textures further in the distance but not that close up. Does it happen in a lot of areas?
 
Vsync works fine for me, got rid of the tearing nicely.

I have it off in game but turned on in nvidia control panel.

I also use the in game full screen. What's the point of force full screen windowed?
 
Sure, I was a bit hard in the response but, I see a quote from myself, so I thought 'Hmm maybe somebody had some feedback regarding the shader, or maybe there was a problem with the code'.

What I saw was "those screens are crap, go and get good ones, and host them somewhere else, then you can upload them here"

If somebody asked for better/more screens, I would have been more than happy to oblige by finding a good spot in game to take them, etc.

I did clearly state in the code OP that the screens were not good, and you would be better off to see the shader for yourself in-game either way, to get a proper look at it.

I posted the code, because I felt it was a good improvement in accuracy, and performance, over the original OBGE version used, so I thought I would share it, in case anyone else would like to use it, simple as that.

---
Regarding the VSync issues, Nvidia Inspector has been working fine for forcing it, on my end. If you have recent drivers, you can also use 8x Sparse Grid SSAA without the AA bit, to force a negative lod bias of your choice (using the lod bias selector) to clean up texture crispness. (without the AA bit so it won't actually try to use the SGSSAA, only the lod bias). Enhance app setting 8x MSAA, 8x SGSSAA = should be no performance loss, and much nicer textures.
---

No offense, but it's a horrible community here, in comparison to other forums, I'll not bother continuing to update the shader here from now on. Seeing as all people seem to care about here, are the screenshots >:
 
Man, some people cannot handle any kind of anger or anything anymore can they. Immediately if some dude gets pissed he is an asshole, has no respect for anything, is a douche, is backwards, is a douche, and cannot be tolerated.

Man, what the hell happened to internet message boards. I feel like I am in fucking police state at times. Oh noes the guy got mad because in his mind somebody was not appreciating his work. Can we just put this up to a communication problem and be done with it.

Guy could have been a lot nicer asking for lossless pics. I would have also told him to fuck off. But I would still post the lossless pics after. :)
 
[Asmodean];46777443 said:
Simply because, people are too used of modders bending over backwards to appease demanding users.

You will not see an accurate representation of AO from a screenshot, regardless.



You're kidding right?, the modder might spend hours/days working on something, yet you can't be expected to select some code and paste it into the VSSAO shader?

Don't like it for whatever reason?, Ctrl+Z and go about your business.

You can even alt-tab in and out of the game and update shader source while the game is running...

You're looking into it way too much. You edited the shader. You're showing it off here, so clearly you're proud of it and want others to try it out. No one know who you are, so if anyone just sees some random schmuck say "Hey my shader edit is suuuuper good go try it look at how good it looks" and all the screenshots look terrible, no ones going to try it. I was trying to help you out so that hopefully if the shader IS good, people will actually get a chance to enjoy something you helped create.

When you react how you did, all that does is make that work you put in and shared not matter, because then people don't want to use it out of principle.

You posted so you could share it with people and they could appreciate what you did, but your response just alienated your work.

[Asmodean];46781575 said:
No offense, but it's a horrible community here, in comparison to other forums, I'll not bother continuing to update the shader here from now on. Seeing as all people seem to care about here, are the screenshots >:

Oh c'mon, don't be childish.

If you don't want to update it here, no one will be the wiser, it's not burden on our backs, but if you're honestly going to not update it because "someone didn't like my screenshots" you've got some growing up to do.
 
Hey guys, I got directed to this thread trough the general DS thread and I guess I can just copypaste the problem soooo here goes:

I'm having some problems when trying to run Dark Souls and for the last couple of hours I've been searching everywhere and tried everything but nothing seems to match the problems I'm having, and it's pretty hard to find a solution if you're not sure what the problem is.
I borrowed DS about a month ago from a friend and everything was going fine for a couple of days until I decided to download the dsfix. At that point the game stopped working, when I booted up DS all I got was a dark screen and I'm still not sure what I did wrong. At the time I didn't really care because I couldn't play DS for long anyways since I had to give it back. I uninstalled everything (or so I think) and went on with my life in blissful ignorance.

Yesterday I decided to buy DS on amazon. I installed it and when I tried to play it the screen was still black, but the Steam and GFWL windows did work. The peculiar thing is that when I boot the game up and delete the DARKSOULS.exe *32 process, it does bring me to the menu sometimes because I can hear the menu sounds when I click enter, but the screen is still black. Since then I tried almost everything the internet told me, I tried to delete every file related with DS through CCleaner and RevoUninstaller, I verified the integrity of the game cache etc., but I still came up with no solution.

I also deleted the NBGI folder with the savefiles etc. several times before playing the game, but after every bootup it keeps making 2 separate folders, one named after my GFWL account and one other map. My graphic card's a GeForce GT 540M and as far as I know my computer matches all the minimum requirements.

Can anyone tell me what the problem might be, or what site I should visit to find out more about this problem? Im looking forward playing DS and these pc issues are really destroying my boner.
 
You should check the integrity of the game with Steam. Right click the game in Steam, Properties, Local Files, Verify Integrity of Game Cache.
 
I tried that, it keeps saying that 1 file isn't validated and that it will be newly installed but after that it just goes back to the Steam menu

Edit: Not sure if this is useful information, but every time I reinstall DS I do get a Firewall-popup stating that it wants to block the DATA.exe file, but I don't see how that can be a problem so I just don't block it
 
What antivir are you running? Whatever it is I would suggest uninstalling it and going with Microsoft Security Essentials. Works great, lightweight, and I never get a false positive that has blocked a game.
 
Hey guys, I just got around to installing this and I can't get the game to work when DINPUT8.dll is present in the same folder with the DARKSOULS.exe . So I guess that means the mod isn't running at all. Any suggestions as to how I should proceed. I played a little of the game without the DINPUT8 file to make sure it worked.

When the DINPUT8 file is there and I try to start the game I just get a white window and an error message that first says DARK SOULS PREPARE TO DIE EDITION executable has stopped working, and a prompt to close the program
 
Hey guys, I just got around to installing this and I can't get the game to work when DINPUT8.dll is present in the same folder with the DARKSOULS.exe . So I guess that means the mod isn't running at all. Any suggestions as to how I should proceed. I played a little of the game without the DINPUT8 file to make sure it worked.

When the DINPUT8 file is there and I try to start the game I just get a white window and an error message that first says DARK SOULS PREPARE TO DIE EDITION executable has stopped working, and a prompt to close the program

You will get that message if you don't extract the 'dsfix' folder into the 'data' folder. When extracting the zip file make sure you're also extracting the subfolder.
 
Hey guys, I just got around to installing this and I can't get the game to work when DINPUT8.dll is present in the same folder with the DARKSOULS.exe . So I guess that means the mod isn't running at all. Any suggestions as to how I should proceed. I played a little of the game without the DINPUT8 file to make sure it worked.

When the DINPUT8 file is there and I try to start the game I just get a white window and an error message that first says DARK SOULS PREPARE TO DIE EDITION executable has stopped working, and a prompt to close the program
You will get that message if you don't extract the 'dsfix' folder into the 'data' folder. When extracting the zip file make sure you're also extracting the subfolder.
Also, please make sure to read the readme before you ask anything else. I don't want you coming back wondering why the game is in a box on the upper left corner of the screen next.
 
I havent been keeping up with the updates since about the time Durante integrated the 60fps fix into his fix. Got caught up in my last semester at Rutgers. Anyways, last I checked there is not a single card on the market that can run Dark Souls with Durante's fix at max settings 1600p. There is word out that NVIDIA is going to be releasing a new video card (GK110) that is going to sell for $899 as a single GPU card. I am not going to have the spare cash until May 1st to buy the card and then delivery time. But I will def post pics of the game at the highest settings the card can reach which should be a considerable amount over what the GTX680 could reach.
 
[Asmodean];46428272 said:
I don't know if anyone will want this or not, but, I said I'd post it. If anyone would like to use it or make further improvements etc.

I've made some improvements/changes to the current OBGE VSSAO implementation for Dark Souls.

  • Accurate AO Distance Checking
  • Dynamic Positional Occlusion Offsets
  • Positional Depth
  • BT.709 & sRBG luma coefficient weights for HD LCD
  • The Combine Function was compiling for SM 1.1, now amended to 3.0
  • 32 Samples, Instead of 9
  • Higher Quality AO Sampling
  • Improved Finite AO Noise
  • Denser, more refined AO Texturing.
  • On my system this version nets about 25%+ increased performance vs the default implementation (2560x1440, native, not downsampled)

Download: http://www.mediafire.com/?fg33oqyqz1ot65f (place in your DS binary folder, same place as dsfix. I've included my DSFix ini file as a reference)


Here's the code: (Don't use this, it's only for reference. Use the download link provided, as it has include folders, and a noise texture)
Code:
/*
	 -Volumetric SSAO-
	Implemented by Tomerk for OBGE
	Adapted and tweaked for Dark Souls by Durante
	Modified by Asmodean, for accurate surface occlusion, distance, and dynamic positional depth offsets, for Dark Souls
*/

/***User-controlled variables***/

#define N_SAMPLES 32 //number of samples, currently do not change.
#define M_PI 3.14159265358979323846

extern float aoRadiusMultiplier = 0.25; //Linearly multiplies the radius of the AO Sampling
extern float ThicknessModel = 50.0; //units in space the AO assumes objects' thicknesses are
extern float FOV = 75; //Field of View in Degrees
extern float luminosity_threshold = 0.5;

#ifdef SSAO_STRENGTH_LOW
extern float aoClamp = 0.35;
extern float aoStrengthMultiplier = 0.8;
#endif

#ifdef SSAO_STRENGTH_MEDIUM
extern float aoClamp = 0.25;
extern float aoStrengthMultiplier = 0.9;
#endif

#ifdef SSAO_STRENGTH_HIGH
extern float aoClamp = 0.1;
extern float aoStrengthMultiplier = 1.0;
#endif

#define LUMINANCE_CONSIDERATION //comment this line to not take pixel brightness into account

/***End Of User-controlled Variables***/
static float2 rcpres = PIXEL_SIZE;
static float aspect = rcpres.y/rcpres.x;
static const float nearZ = 1.0f;
static const float farZ = 3000.0f;
static const float2 g_InvFocalLen = { tan(0.5f*radians(FOV)) / rcpres.y * rcpres.x, tan(0.5f*radians(FOV)) };
static const float depthRange = nearZ-farZ;

Buffer<float4>g_Buffer;

texture2D sampleTex2D;
sampler sampleSampler = sampler_state
{
	Texture   = <sampleTex2D>;
	MinFilter = ANISOTROPIC;
	MagFilter = ANISOTROPIC;
	MipFilter = ANISOTROPIC;
	AddressU  = Clamp;
	AddressV  = Clamp;
	SRGBTexture=FALSE;
	MaxMipLevel=0;
	MipMapLodBias=0;
	MaxAnisotropy = 16;
};

texture2D depthTex2D;
sampler depthSampler = sampler_state
{
	texture = <depthTex2D>;
	MinFilter = POINT;
	MagFilter = POINT;
	MipFilter = POINT;
	AddressU  = Clamp;
	AddressV  = Clamp;
	SRGBTexture=FALSE;
	MaxMipLevel=0;
	MipMapLodBias=0;
	MaxAnisotropy = 16;
};

texture2D AOTex2D;
sampler AOSampler = sampler_state
{
	texture = <AOTex2D>;
	MinFilter = POINT;
	MagFilter = POINT;
	MipFilter = POINT;
	AddressU  = Clamp;
	AddressV  = Clamp;
	SRGBTexture=FALSE;
	MaxMipLevel=0;
	MipMapLodBias=0;
	MaxAnisotropy = 16;
};

texture2D cust_NoiseTexture < string filename = "ssao/RandomNoiseB.dds"; >;
sampler noiseSampler = sampler_state
{
	Texture   = <cust_NoiseTexture>;
	MinFilter = POINT;
	MagFilter = POINT;
	MipFilter = POINT;
	AddressU  = Wrap;
	AddressV  = Wrap;
	SRGBTexture=FALSE;
	MaxMipLevel=0;
	MipMapLodBias=0;
	MaxAnisotropy = 16;
};

texture2D frameTex2D;
sampler frameSampler = sampler_state
{
	texture = <frameTex2D>;
	MinFilter = ANISOTROPIC;
	MagFilter = ANISOTROPIC;
	MipFilter = ANISOTROPIC;
	AddressU  = Clamp;
	AddressV  = Clamp;
	SRGBTexture=FALSE;
	MaxMipLevel=0;
	MipMapLodBias=0;
	MaxAnisotropy = 16;
};

texture2D prevPassTex2D;
sampler passSampler = sampler_state
{
	texture = <prevPassTex2D>;
	MinFilter = ANISOTROPIC;
	MagFilter = ANISOTROPIC;
	MipFilter = ANISOTROPIC;
	AddressU  = Clamp;
	AddressV  = Clamp;
	SRGBTexture=FALSE;
	MaxMipLevel=0;
	MipMapLodBias=0;
	MaxAnisotropy = 16;
};

texture2D focusTex2D;
sampler focusSampler = sampler_state
{
	Texture   = <focusTex2D>;
	MinFilter = ANISOTROPIC;
	MagFilter = ANISOTROPIC;
	MipFilter = ANISOTROPIC;
	AddressU  = Clamp;
	AddressV  = Clamp;
	SRGBTexture=FALSE;
	MaxMipLevel=0;
	MipMapLodBias=0;
	MaxAnisotropy = 16;
};

texture2D normalTex2D;
sampler normalSampler = sampler_state
{
	Texture   = <normalTex2D>;
	MinFilter = POINT;
	MagFilter = POINT;
	MipFilter = POINT;
	AddressU  = Clamp;
	AddressV  = Clamp;
	SRGBTexture=FALSE;
	MaxMipLevel=0;
	MipMapLodBias=0;
	MaxAnisotropy = 16;
};


struct VSOUT
{
	float4 vertPos : POSITION;
	float2 UVCoord : TEXCOORD0;
};

struct VSIN
{
	float4 vertPos : POSITION;
	float2 UVCoord : TEXCOORD0;
};


VSOUT FrameVS(VSIN IN)
{
	/*VSOUT OUT;
	float4 pos=float4(IN.vertPos.x, IN.vertPos.y, IN.vertPos.z, 1.0f);
	OUT.vertPos=pos;
	float2 coord=float2(IN.UVCoord.x, IN.UVCoord.y);
	OUT.UVCoord=coord;
	return OUT;*/
	
	VSOUT OUT;
	OUT.vertPos = IN.vertPos;
	OUT.UVCoord = IN.UVCoord;
	return OUT;
}

static float2 sample_offset[N_SAMPLES] =
{
	 float2(1.00f, 1.00f),
	 float2(-1.00f, -1.00f),
	 float2(-1.00f, 1.00f),
	 float2(1.00f, -1.00f),

	 float2(1.00f, 0.00f),
	 float2(-1.00f, 0.00f),
	 float2(0.00f, 1.00f),
	 float2(0.00f, -1.00f),

	 float2(1.00f, 0.00f),
	 float2(-1.00f, 0.00f),
	 float2(0.00f, 1.00f),
	 float2(0.00f, -1.00f),

	 float2(1.00f, 1.00f),
	 float2(-1.00f, -1.00f),
	 float2(-1.00f, 1.00f),
	 float2(1.00f, -1.00f),
	 
	 float2(1.00f, 0.00f),
	 float2(-1.00f, 0.00f),
	 float2(0.00f, 1.00f),
	 float2(0.00f, -1.00f),

	 float2(1.00f, 0.00f),
	 float2(-1.00f, 0.00f),
	 float2(0.00f, 1.00f),
	 float2(0.00f, -1.00f),

	 float2(1.00f, 1.00f),
	 float2(-1.00f, -1.00f),
	 float2(-1.00f, 1.00f),
	 float2(1.00f, -1.00f),

	 float2(1.00f, 0.00f),
	 float2(-1.00f, 0.00f),
	 float2(0.00f, 1.00f),
	 float2(0.00f, -1.00f)
};

static float sample_radius[N_SAMPLES] =
{
	0.30f, 0.30f,
	0.30f, 0.30f,
	0.30f, 0.30f,
	0.30f, 0.30f,
	
	0.30f, 0.30f,
	0.30f, 0.30f,
	0.30f, 0.30f,
	0.30f, 0.30f,
	
	0.30f, 0.30f,
	0.30f, 0.30f,
	0.30f, 0.30f,
	0.30f, 0.30f,
	
	0.30f, 0.30f,
	0.30f, 0.30f,
	0.30f, 0.30f,
	0.30f, 0.30f
};

float4 ExpandRGBE( float4 RGBE )
{
	return float4( ldexp( RGBE.xyz, 255.0 * RGBE.w - 128.0 ), 1.0 );
}

float3 decode(float3 enc)
{
	return (2.0f * enc.xyz- 1.0f);
}

float2 rand(in float2 uv : TEXCOORD0) {
	
	//float noise = tex2Dlod(noiseSampler, uv);
	float noise = normalize(tex2Dlod(noiseSampler, float4(uv, 0, 0)).xyz * 2 - 1);
	float noiseX = noise+(abs(frac(sin(dot(uv, float2(12.9898, 78.233) * M_PI)) * 43758.5453)));
	float noiseY = sqrt(1.0f-noiseX*noiseX);
	return float2(noiseX, noiseY);
}

float readDepth(in float2 coord : TEXCOORD0) {
	float4 col = tex2Dlod(depthSampler, float4(coord, 0, 0));
	float posZ = ((1.0-col.z) + (1.0-col.y)*256.0 + (1.0-col.x)*(256.0*256.0));
	return (posZ-nearZ)/farZ;
}

float3 getPosition(in float2 uv : TEXCOORD0, in float eye_z) {
   uv = (uv * float2(2.0, -2.0) - float2(1.0, -1.0));
   float3 pos = float3(uv * g_InvFocalLen * eye_z, eye_z );
   return pos;
}


float4 ssao_Main(VSOUT IN) : COLOR0
{
	clip(1/SCALE-IN.UVCoord.x);
	clip(1/SCALE-IN.UVCoord.y);	
	IN.UVCoord.xy *= SCALE;
	
	float4 bufferData = g_Buffer.Load(IN.UVCoord);
	float depth = readDepth(IN.UVCoord);
	float3 pos = getPosition(IN.UVCoord, depth);
	float3 dx = ddx(pos);
	float3 dy = ddy(pos);
	float3 normal = normalize(cross(dx,dy));
	normal.y *= -1;
	float sample_depth = tex2D(depthSampler, IN.UVCoord);

	float ao=tex2D(AOSampler, IN.UVCoord);
	float s=tex2D(sampleSampler, IN.UVCoord);

	float2 rand_vec = rand(IN.UVCoord);
	float2 sample_vec_divisor = g_InvFocalLen*depth*depthRange/(aoRadiusMultiplier*5000*rcpres);
	float2 sample_center = IN.UVCoord + normal.xy/sample_vec_divisor*float2(1.0f,aspect);
	float sample_center_depth = depth*depthRange + normal.z*aoRadiusMultiplier*7;
	
	
	for(int i = 0; i < N_SAMPLES; i++)
	{	
		float2 sample_vec = reflect(sample_offset[i], rand_vec);
		sample_vec /= sample_vec_divisor;
		float2 sample_coords = sample_center + sample_vec*float2(1.0f,aspect);
		
		float curr_sample_radius = sample_radius[i]*aoRadiusMultiplier*7;
		float curr_sample_depth = depthRange*readDepth(sample_coords);
		
		ao += clamp(0,curr_sample_radius+sample_center_depth-curr_sample_depth,2*curr_sample_radius);
		ao -= clamp(0,curr_sample_radius+sample_center_depth-curr_sample_depth-ThicknessModel,2*curr_sample_radius);
		s += 2.0*curr_sample_radius;
	}

	ao /= s;
	
	// adjust for close and far away
	if(depth<0.065f)
	{
		ao = lerp(ao, 0.0f, (0.065f-depth)*13.3);
	}

	ao = 1.0f-ao*aoStrengthMultiplier;
	
	return float4(ao,ao,ao, 1.0f);
}

float4 HBlur( VSOUT IN ) : COLOR0 {
	float color = tex2D(passSampler, IN.UVCoord);

	float blurred = color*0.2270270270;
	blurred += tex2D(passSampler, IN.UVCoord + float2(rcpres.x*1.3846153846, 0)) * 0.3162162162;
	blurred += tex2D(passSampler, IN.UVCoord - float2(rcpres.x*1.3846153846, 0)) * 0.3162162162;
	blurred += tex2D(passSampler, IN.UVCoord + float2(rcpres.x*3.2307692308, 0)) * 0.0702702703;
	blurred += tex2D(passSampler, IN.UVCoord - float2(rcpres.x*3.2307692308, 0)) * 0.0702702703;
	
	return blurred;
}

float4 VBlur( VSOUT IN ) : COLOR0 {
	float color = tex2D(passSampler, IN.UVCoord);

	float blurred = color*0.2270270270;
	blurred += tex2D(passSampler, IN.UVCoord + float2(0, rcpres.y*1.3846153846)) * 0.3162162162;
	blurred += tex2D(passSampler, IN.UVCoord - float2(0, rcpres.y*1.3846153846)) * 0.3162162162;
	blurred += tex2D(passSampler, IN.UVCoord + float2(0, rcpres.y*3.2307692308)) * 0.0702702703;
	blurred += tex2D(passSampler, IN.UVCoord - float2(0, rcpres.y*3.2307692308)) * 0.0702702703;
	
	return blurred;
}

float4 Combine( VSOUT IN ) : COLOR0 {
	float3 color = tex2D(frameSampler, IN.UVCoord).rgb;
	float ao = tex2D(passSampler, IN.UVCoord/SCALE);
	ao = clamp(ao, aoClamp, 1.0f);

	#ifdef LUMINANCE_CONSIDERATION
	float luminance = (color.r*0.2125f)+(color.g*0.7154f)+(color.b*0.0721f);
	float white = 1.0f;
	float black = 0.0f;

	luminance = clamp(max(black,luminance-luminosity_threshold)+max(black,luminance-luminosity_threshold)+max(black,luminance-luminosity_threshold), 0.0f, 1.0f);
	ao = lerp(ao, white, luminance);
	#endif

	color *= 1.05f;
	color *= ao;

	return float4(color, 1.0f);
}

technique VSSAO
{
	pass p0
	{
		VertexShader = compile vs_3_0 FrameVS();
		PixelShader = compile ps_3_0 ssao_Main();	
	}
	pass p1
	{
		VertexShader = compile vs_3_0 FrameVS();
		PixelShader = compile ps_3_0 HBlur();
	}
	pass p2
	{
		VertexShader = compile vs_3_0 FrameVS();
		PixelShader = compile ps_3_0 VBlur();
	}
	pass p3
	{
		VertexShader = compile vs_3_0 FrameVS();
		PixelShader = compile ps_3_0 Combine();
	}
}

DSfix.ini

Code:
###############################################################################
# Graphics Options
###############################################################################

# internal rendering resolution of the game
# higher values will decrease performance
renderWidth 2560
renderHeight 1440

# The display width/height
# 0 means use the same resolution as renderWidth/Height
# (use for downscaling - if in doubt, leave at 0)
presentWidth 2560
presentHeight 1440

############# Anti Aliasing

# AA toggle and quality setting
# 0 = off (best performance, worst IQ)
# 1 = low 
# 2 = medium
# 3 = high
# 4 = ultra (worst performance, best IQ)
aaQuality 4

# AA type
# either "SMAA" or "FXAA"
aaType SMAA

############# Ambient Occlusion

# Enable and set the strength of the SSAO effect (all 3 settings have the same performance impact!)
# 0 = off
# 1 = low
# 2 = medium
# 3 = high
ssaoStrength 3

# Set SSAO scale
# 1 = high quality (default)
# 2 = lower quality, lower impact on performance
# 3 = lowest quality, lowest impact on performance
ssaoScale 1

# Determine the type of AO used
# "VSSAO" = Volumetric SSAO (default, suggested)
# "HBAO" = Horizon-Based Ambient Occlusion
# "SCAO" = VSSAO + HBAO
# VSSAO and  HBAO types have a different effect and similar performance
# SCAO combines both, with a higher performance impact
ssaoType VSSAO

############# Depth of field

# Depth of Field resolution override, possible values:
# 0 = no change from default (DoF pyramid starts at 512x360)
# 540 = DoF pyramid starts at 960x540
# 810 = DoF pyramid starts at 1440x810
# 1080 = DoF pyramid starts at 1920x1080
# 2160 = DoF pyramid starts at 3840x2160
# higher values will decrease performance
# do NOT set this to the same value as your vertical rendering resolution!
dofOverrideResolution 1080

# Depth of Field scaling override (NOT RECOMMENDED)
# 0 = DoF scaling enabled (default, recommended)
# 1 = DoF scaling disabled (sharper, worse performance, not as originally intended)
disableDofScaling 0

# Depth of field additional blur
# allows you to use high DoF resolutions and still get the originally intended effect
# suggested values:
# o (off) at default DoF resolution
# 0 or 1 at 540 DoF resolution
# 1 or 2 above that
# 3 or 4 at 2160 DoF resolution (if you're running a 680+)
dofBlurAmount 0

############# Framerate

# Enable variable framerate (up to 60)
# NOTE:
# - this requires in-memory modification of game code, and may get you banned from GFWL
# - there may be unintended side-effects in terms of gameplay
# - you need a very powerful system (especially CPU) in order to maintain 60 FPS
# - in some  instances, collision detection may fail. Avoid sliding down ladders
# Use this at your own risk!
# 0 = no changes to game code
# 1 = unlock the frame rate
unlockFPS 1

# FPS limit, only used with unlocked framerate
# do not set this much higher than 60, this will lead to various issues with the engine
FPSlimit 60

# FPS threshold
# DSfix will dynamically disable AA if your framerate drops below this value 
#  and re-enable it once it has normalized (with a bit of hysteresis thresholding)
FPSthreshold 0

############# Filtering

# texture filtering override
# 0 = no change 
# 1 = enable some bilinear filtering (use only if you need it!)
# 2 = full AF override (may degrade performance)
# if in doubt, leave this at 0
filteringOverride 2

###############################################################################
# HUD options
###############################################################################

# Enable HUD modifications
# 0 = off (default) - none of the options below will do anything!
# 1 = on
enableHudMod 1

# Remove the weapon icons from the HUD 
# (you can see which weapons you have equipped from your character model)
enableMinimalHud 0

# Scale down HuD, examples:
# 1.0 = original scale
# 0.75 = 75% of the original size
hudScaleFactor 0.75f

# Set opacity for different elements of the HUD
# 1.0 = fully opaque
# 0.0 = fully transparent
# Top left: health bars, stamina bar, humanity counter, status indicators
hudTopLeftOpacity 0.75f
# Bottom left: item indicators & counts
hudBottomLeftOpacity 0.75f
# Bottom right: soul count 
hudBottomRightOpacity 0.5f

###############################################################################
# Window & Mouse Cursor Options
###############################################################################

# borderless fullscreen mode 
# make sure to select windowed mode in the game settings for this to work!
# 0 = disable
# 1 = enable
borderlessFullscreen 0

# disable cursor at startup
# 0 = no change
# 1 = off at start
disableCursor 1

# capture cursor (do not allow it to leave the window)
# 0 = don't capture
# 1 = capture
# (this also works if the cursor is not visible)
captureCursor 1

###############################################################################
# Save Game Backup Options
###############################################################################

# enables save game backups
# 0 = no backups
# 1 = backups enabled
# backups are stored in the save folder, as "[timestamp]_[original name].bak"
enableBackups 0

# backup interval in seconds (1500 = 25 minutes)
# (minimum setting 600)
backupInterval 1500

# maximum amount of backups, older ones will be deleted
maxBackups 2

###############################################################################
# Texture Override Options
###############################################################################

# enables texture dumping
# you *only* need this if you want to create your own override textures
# textures will be dumped to "dsfix\tex_override\[hash].tga"
enableTextureDumping 0

# enables texture override
# textures in "dsfix\tex_override\[hash].png" will replace the corresponding originals
# will cause a small slowdown during texture loading!
enableTextureOverride 1

###############################################################################
# Other Options
###############################################################################

# skip the intro logos
# this should now be slightly more stable, but should still be
# the first thing to disable in case you experience any problems
skipIntro 0

# change the screenshot directory
# default: . (current directory)
# example: C:\Users\Peter\Pictures
# directory must exist!
screenshotDir .

# override the in-game language
# none = no override
# en-GB = English, fr = French, it = Italian, de = German, es = Spanish
# ko = Korean, zh-tw = Chinese, pl = Polish, ru = Russian
# this does not work in Windows XP!
overrideLanguage none

# Dinput dll chaining
# if you want to use another dinput8.dll wrapper together
# with DSfix, rename it (e.g. "dinputwrapper.dll") and put the new name here
dinput8dllWrapper none
# dsmfix.dll

# D3D adapter override
# -1 = no override
# N = use adapter N
# this setting is for multiple (non-SLI/crossfire) GPUs
# everyone else should leave it at -1
d3dAdapterOverride -1

# Log level - 0 to 11, higher numbers mean more logging
# only enable for debugging
logLevel 0

###############################################################################
# The settings below are not yet ready to use!!               
###############################################################################

# You can only set either forceFullscreen or forceWindowed (or neither)
# 0 = off, 1 = on
forceWindowed 0
forceFullscreen 0

# turn on/off Vsync
enableVsync 0
# adjust display refresh rate in fullscreen mode - this is NOT linked to FPS!
fullscreenHz 60

I've also done custom shaders for SweetFX, if anyone was interested in them, but seeing as this isn't the appropriate place to post them, I've left them out.

I had more screens uploaded, but they are a bit pointless, as you can't see the difference properly in them, So I just left 3 comparisons below. You may want to right-click and save them to view in full screen.

You'll need to actually see it in-game to clearly see the difference though.

OFF

off3_zps20819cf5.jpg



MINE

mine3_zpsb2d05b60.jpg



DEFAULT

default3_zpsdf930e17.jpg


Apologies for the long post.

My system
i7 3770k @4.4ghz
GTX 680
8GB 2133 CL9 1T

From the pics this looks like a worthy improvement. Can this be implemented without messing up Durante's fix? Or maybe I should be asking which version of Durante's fix was this developed for?
 
Also, please make sure to read the readme before you ask anything else. I don't want you coming back wondering why the game is in a box on the upper left corner of the screen next.
Lol I have read this dilemma many times in my search for an answer. Don't worry, I have read the readme thoroughly.

You will get that message if you don't extract the 'dsfix' folder into the 'data' folder. When extracting the zip file make sure you're also extracting the subfolder.


OK Yeah I extracted it wrong. Instead of telling Winzip to extract into the Data folder I just dragged everything from Winzip into the data folder-a bad habit that I need to break. It seems to be working now.
 
If this is gonna be a mega bump, then I apoligise but I wanted to see if I can get this question asked.

I just bought Dark Souls off GMG for half price and have just finished installing DSfix and changing my settings. The only thing I'm wary of is the FPS unlock. How big is the risk of reprieve from GFWL exactly? I have games on my PC like Arkam Asylum linked to that account, that's the only reason I care about getting banned otherwise I wouldn't give a toss.
 
If this is gonna be a mega bump, then I apoligise but I wanted to see if I can get this question asked.

I just bought Dark Souls off GMG for half price and have just finished installing DSfix and changing my settings. The only thing I'm wary of is the FPS unlock. How big is the risk of reprieve from GFWL exactly? I have games on my PC like Arkam Asylum linked to that account, that's the only reason I care about getting banned otherwise I wouldn't give a toss.

While you could, in theory, be banned for using the FPS fix. Not a single person has been, risk is very low.
 
Finally got the game and the fix is incredible. However the hud occassionally popups back up to 100% size (from my 75% selection) and I still see the icon background effects when selecting a sword or whatever where those icons used to be (I have weapon icons set to 0). What is the best way to go about fixing that?
 
Top Bottom