From cd4f00a4f0363b934018bb81509ea1bcb57abf5d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tur=C3=A1nszki=20J=C3=A1nos?= Date: Sat, 28 Sep 2024 12:15:57 +0200 Subject: [PATCH] envmap rendering doesn't support ortho proj --- WickedEngine/shaders/objectHF.hlsli | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/WickedEngine/shaders/objectHF.hlsli b/WickedEngine/shaders/objectHF.hlsli index bbca0d51d..b5889eab4 100644 --- a/WickedEngine/shaders/objectHF.hlsli +++ b/WickedEngine/shaders/objectHF.hlsli @@ -543,12 +543,19 @@ float4 main(PixelInput input, in bool is_frontface : SV_IsFrontFace) : SV_Target #endif // OBJECTSHADER_USE_AO #ifdef OBJECTSHADER_USE_POSITION3D + surface.P = input.pos3D; + +#ifdef ENVMAPRENDERING + surface.V = GetCamera().position - surface.P; +#else + // Non-envmap rendering: support for ortho projection, cannot use camera position! 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 = unprojectedNEAR.xyz - surface.P; // instead of camera.position - surface.P, unprojectedNEAR is used because it will also work correctly for orthographic projection! + surface.V = unprojectedNEAR.xyz - surface.P; +#endif // ENVMAPRENDERING + float dist = length(surface.V); surface.V /= dist; #endif // OBJECTSHADER_USE_POSITION3D