I'm not using the values in the depthbuffer just for outputting depth in a pre-pass so I cannot say how it behaves when using it as a depthbuffer value. Did you try to change the ZFunc-state in the geometry pass? Thats pretty unlikely but I will also have a look into my depth texture with pix maybe the values are reversed
Top of the line vs Old crap
You don't need to keep view space position for the logarithmic depth. You can use the value of w, since it contains the view space depth after projection:
output.Position.z = log(0.001 * output.Position.w + 1) / log(0.001 * FarPlane + 1) * output.Position.w;
That's because the projection matrix (D3DXMatrixPerspectiveFovLH) is:
w 0 0 0
0 h 0 0
0 0 zf/(zf-zn) 1
0 0 -zn*zf/(zf-zn) 0
And thus w ? z, w ends up with the view space depth.
I dont get it. It's always the same, using output.Position.z or output.Position.w makes no difference. The light is only visible from inside the volume. I'm pretty sure I just missing a additional math operation but I dont see it and I need fresh view. So I will look into it later that evening (it's about 1pm here) so hopefully I get more for you tonight or tomorrow.
Ok here is my next try. I knew I missed something and I hope I finally got it.
First of all I'm using the output.Position.w value for the depth now so it looks like this:
output.Position.z = log(output.Position.w*0.001f + 1) / log(0.001f*FarPlane +1) * output.Position.w;
And here is the reconstruction code:
float4 mapValue = tex2D(DepthMapSampler, PSIn.texCoord + dimensionOffset);
float depth = mapValue.x;
depth = ((pow((0.001 * FarPlane) + 1, depth) - 1) / 0.001);
depth /= (NearPlane*FarPlane/(FarPlane-NearPlane));
PSIn.ProjPos.xy *= depth;
float4 invProjPos = mul(PSIn.ProjPos ,xInvProjection);
invProjPos.z = -depth;
float4 worldPos = mul(invProjPos, xInvView);
worldPos /= worldPos.w;
The thing I missed was the division. Cameni gave me the hint when he said the w-component contains the view space depth and he is right it contains it but is not equal to it due to the projection matrix multiplication so you need to extract it before you can use it. Be careful with the signs. I'm using a right handed projection Matrix and I think you need to change them when using a lefthanded. It should be enough to add a negativ sign to the division.
Hmm strange, for me it's not lighting anything without that line but however I'm glad it's finally working.