From 163a94ca4ead9070f1d933428b9accdbfe7d1dc1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tur=C3=A1nszki=20J=C3=A1nos?= Date: Fri, 13 Dec 2024 10:49:12 +0100 Subject: [PATCH] adjoint matrix fix (#989) --- WickedEngine/shaders/objectHF.hlsli | 4 ++-- WickedEngine/shaders/objectHF_mesh_shading.hlsli | 2 +- WickedEngine/shaders/paintdecalVS.hlsl | 2 +- WickedEngine/shaders/renderlightmapVS.hlsl | 2 +- WickedEngine/shaders/surfaceHF.hlsli | 12 ++++++------ WickedEngine/shaders/wetmap_updateCS.hlsl | 2 +- 6 files changed, 12 insertions(+), 12 deletions(-) diff --git a/WickedEngine/shaders/objectHF.hlsli b/WickedEngine/shaders/objectHF.hlsli index c8b543ff8..503587158 100644 --- a/WickedEngine/shaders/objectHF.hlsli +++ b/WickedEngine/shaders/objectHF.hlsli @@ -250,11 +250,11 @@ struct VertexSurface ao = 1; } - normal = mul(input.GetInstance().transform.GetMatrixAdjoint(), normal); + normal = mul(input.GetInstance().transformRaw.GetMatrixAdjoint(), normal); normal = any(normal) ? normalize(normal) : 0; tangent = input.GetTangent(); - tangent.xyz = mul(input.GetInstance().transform.GetMatrixAdjoint(), tangent.xyz); + tangent.xyz = mul(input.GetInstance().transformRaw.GetMatrixAdjoint(), tangent.xyz); tangent.xyz = any(tangent.xyz) ? normalize(tangent.xyz) : 0; uvsets = input.GetUVSets(); diff --git a/WickedEngine/shaders/objectHF_mesh_shading.hlsli b/WickedEngine/shaders/objectHF_mesh_shading.hlsli index 72c1b1242..a60c0e3c3 100644 --- a/WickedEngine/shaders/objectHF_mesh_shading.hlsli +++ b/WickedEngine/shaders/objectHF_mesh_shading.hlsli @@ -65,7 +65,7 @@ void main(uint3 Gid : SV_GroupID, uint groupIndex : SV_GroupIndex) if((geometry.flags & SHADERMESH_FLAG_DOUBLE_SIDED) == 0 && geometry.vb_pre < 0) // disable cone culling for double sided and skinned { // Cone culling: - bounds.cone_axis = mul(inst.transform.GetMatrixAdjoint(), bounds.cone_axis); + bounds.cone_axis = mul(inst.transformRaw.GetMatrixAdjoint(), bounds.cone_axis); if (camera.IsOrtho()) { visible &= dot(camera.forward, bounds.cone_axis) < bounds.cone_cutoff; diff --git a/WickedEngine/shaders/paintdecalVS.hlsl b/WickedEngine/shaders/paintdecalVS.hlsl index a4aa7d123..af65d2fcf 100644 --- a/WickedEngine/shaders/paintdecalVS.hlsl +++ b/WickedEngine/shaders/paintdecalVS.hlsl @@ -27,7 +27,7 @@ Output main(uint vertexID : SV_VertexID) { nor = bindless_buffers_half4[geometry.vb_nor][vertexID].xyz; } - nor = mul(inst.transform.GetMatrixAdjoint(), nor); + nor = mul(inst.transformRaw.GetMatrixAdjoint(), nor); float2 uv = 0; [branch] diff --git a/WickedEngine/shaders/renderlightmapVS.hlsl b/WickedEngine/shaders/renderlightmapVS.hlsl index 439197f6d..2aff94830 100644 --- a/WickedEngine/shaders/renderlightmapVS.hlsl +++ b/WickedEngine/shaders/renderlightmapVS.hlsl @@ -28,7 +28,7 @@ Output main(uint vertexID : SV_VertexID) output.pos3D = mul(inst.transform.GetMatrix(), float4(pos, 1)).xyz; - output.normal = mul(inst.transform.GetMatrixAdjoint(), nor); + output.normal = mul(inst.transformRaw.GetMatrixAdjoint(), nor); return output; } diff --git a/WickedEngine/shaders/surfaceHF.hlsli b/WickedEngine/shaders/surfaceHF.hlsli index 3e7337191..6cbf54817 100644 --- a/WickedEngine/shaders/surfaceHF.hlsli +++ b/WickedEngine/shaders/surfaceHF.hlsli @@ -376,9 +376,9 @@ struct Surface if (geometry.vb_nor >= 0) { Buffer buf = bindless_buffers_float4[NonUniformResourceIndex(geometry.vb_nor)]; - float3 n0 = mul(inst.transform.GetMatrixAdjoint(), buf[i0].xyz); - float3 n1 = mul(inst.transform.GetMatrixAdjoint(), buf[i1].xyz); - float3 n2 = mul(inst.transform.GetMatrixAdjoint(), buf[i2].xyz); + float3 n0 = mul(inst.transformRaw.GetMatrixAdjoint(), buf[i0].xyz); + float3 n1 = mul(inst.transformRaw.GetMatrixAdjoint(), buf[i1].xyz); + float3 n2 = mul(inst.transformRaw.GetMatrixAdjoint(), buf[i2].xyz); n0 = any(n0) ? normalize(n0) : 0; n1 = any(n1) ? normalize(n1) : 0; n2 = any(n2) ? normalize(n2) : 0; @@ -452,9 +452,9 @@ struct Surface float4 t0 = buf[i0]; float4 t1 = buf[i1]; float4 t2 = buf[i2]; - t0.xyz = mul(inst.transform.GetMatrixAdjoint(), t0.xyz); - t1.xyz = mul(inst.transform.GetMatrixAdjoint(), t1.xyz); - t2.xyz = mul(inst.transform.GetMatrixAdjoint(), t2.xyz); + t0.xyz = mul(inst.transformRaw.GetMatrixAdjoint(), t0.xyz); + t1.xyz = mul(inst.transformRaw.GetMatrixAdjoint(), t1.xyz); + t2.xyz = mul(inst.transformRaw.GetMatrixAdjoint(), t2.xyz); t0.xyz = any(t0.xyz) ? normalize(t0.xyz) : 0; t1.xyz = any(t1.xyz) ? normalize(t1.xyz) : 0; t2.xyz = any(t2.xyz) ? normalize(t2.xyz) : 0; diff --git a/WickedEngine/shaders/wetmap_updateCS.hlsl b/WickedEngine/shaders/wetmap_updateCS.hlsl index 2e8617dc6..0ca0be749 100644 --- a/WickedEngine/shaders/wetmap_updateCS.hlsl +++ b/WickedEngine/shaders/wetmap_updateCS.hlsl @@ -20,7 +20,7 @@ void main(uint DTid : SV_DispatchThreadID) { Buffer vb_nor = bindless_buffers_half4[geometry.vb_nor]; half3 normal = vb_nor[DTid].xyz; - normal = mul(meshinstance.transform.GetMatrixAdjoint(), normal); + normal = mul(meshinstance.transformRaw.GetMatrixAdjoint(), normal); normal = normalize(normal); drying *= lerp(4, 1, pow8(saturate(normal.y))); // modulate drying speed based on surface slope }