From 0ed2a94cb6fad8d513096315f0fff242a0d4f360 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tur=C3=A1nszki=20J=C3=A1nos?= Date: Sat, 28 Sep 2024 12:04:49 +0200 Subject: [PATCH] view vector ortho projection fix --- WickedEngine/shaders/objectHF.hlsli | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/WickedEngine/shaders/objectHF.hlsli b/WickedEngine/shaders/objectHF.hlsli index 196d0973d..bbca0d51d 100644 --- a/WickedEngine/shaders/objectHF.hlsli +++ b/WickedEngine/shaders/objectHF.hlsli @@ -543,8 +543,12 @@ float4 main(PixelInput input, in bool is_frontface : SV_IsFrontFace) : SV_Target #endif // OBJECTSHADER_USE_AO #ifdef OBJECTSHADER_USE_POSITION3D + float2 clipspace = uv_to_clipspace(ScreenCoord); + float4 unprojectedNEAR = mul(GetCamera().inverse_view_projection, float4(clipspace, 1, 1)); + unprojectedNEAR.xyz /= unprojectedNEAR.w; + surface.P = input.pos3D; - surface.V = GetCamera().position - surface.P; + surface.V = unprojectedNEAR.xyz - surface.P; // instead of camera.position - surface.P, unprojectedNEAR is used because it will also work correctly for orthographic projection! float dist = length(surface.V); surface.V /= dist; #endif // OBJECTSHADER_USE_POSITION3D