I'm trying to implement deferred rendering and I'm stuck with this problem. I do all calculations in view space, I set the light position for testing to (0,0,0) - camera position. But the problem is when I look up or down the lighting changes to brighter or darker. It sounds like I have something wrong with matrices but I checked that many times and still no luck. I'm not sure if my reconstruction from depth is right because it's a new thing to me and I may be doing something wrong here. But on the other hand lighting doesn't change when I move backward or forward and keep the angle (so I guess position is correct?). Anyway I'm posting some pictures, maybe someone can figure out where I go wrong. For now I'm trying to compute lighting with geometry normals and then move with bump maps. To me my normals look too bright, pinkish, dull etc. when I compare them to normals from Killzone paper or other tutorials. Maybe this is the case?
Thanks for watching
Edit: I consider simplest scenario for now - only diffuse lighting, no attenuation, no specular and no ambient
This is how I recreate position from depth in light pass:
float z = f1tex2D(depth_map, texCoord);
float x = texCoord.x * 2 - 1;
float y = (1 - texCoord.y) * 2 - 1;
float4 vProjectedPos = float4(x, y, z, 1.0f);
//unproject the position from clip space to view space using inv. proj. matrix
float4 vPositionVS = mul(invProj, vProjectedPos);
float3 vsPos = vPositionVS.xyz / vPositionVS.w;
I use depth buffer to get depth or I can use depth encoded as color which is:
in vertex program:
outPosition = mul(ModelViewProj, position);
vDepthCS.xy = outPosition.zw;
and in fragment program I do division z/w and pack it as color but the result is the same as with depth buffer.