• Create Account

## Top of the line vs Old crap

Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

32 replies to this topic

Posted 16 January 2013 - 04:27 AM

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

### #22cameni  Members

Posted 16 January 2013 - 04:29 AM

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.

### #23Telanor  Members

Posted 16 January 2013 - 05:04 AM

Hmm. Well if I change it to output.Position.w, I can see the terrain again, but it's back to rendering the light weirdly. The strange thing I notice is when I debug the pixel shader, the reconstructed position always seems to be behind me. So for example the Y value of the light (which is in front of me) is 570 and the pixel I'm debugging is past that when I'm looking down, so you'd expect a Y < 570 but instead it comes out as 608. This happens regardless of whether I use -depth or depth in the invProjPos calculation.

Posted 16 January 2013 - 05:46 AM

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.

### #25riuthamus  Moderators

Posted 17 January 2013 - 11:03 PM

Any luck my friend?

Posted 18 January 2013 - 03:16 AM

Not yet but I'm still on it

Posted 18 January 2013 - 08:19 AM

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.

### #28Telanor  Members

Posted 18 January 2013 - 04:27 PM

Wow, it actually works. I think that last line, the worldPos /= worldPos.w was the key. The depth /= (NearPlane*FarPlane/(FarPlane-NearPlane)) line doesn't seem to have any effect that I can notice though. Thanks for you help!

Posted 18 January 2013 - 04:35 PM

Hmm strange, for me it's not lighting anything without that line but however I'm glad it's finally working.

### #30riuthamus  Moderators

Posted 18 January 2013 - 04:37 PM

Indeed, good to have it working. Now to get it to work and make it all sexy like!

### #31riuthamus  Moderators

Posted 18 January 2013 - 05:18 PM

So, how would we get something to look like this:

Their lights seem to... have a brighter center. How would we go about doing this? This is what ours looks like:

We attempted to boost up the bloom to amplify it but our bloom either sucks or.... its just not working right. The bloom is MAXED btw. ( not ideal for getting the effect we might need in some locations )

### #32riuthamus  Moderators

Posted 18 January 2013 - 06:23 PM

Actually, i made a new post, since it is kinda off topic with this one. Thanks

### #33riuthamus  Moderators

Posted 19 January 2013 - 07:14 PM

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.

Kinda off topic, i just saw your video of your engine. Fucking amazing! A job well done and thank you for the help with this. qui and you certainly have been a huge help.

Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.