From 4b259648a16191d61133218f20907956f1e9f4db Mon Sep 17 00:00:00 2001 From: Peter Li Date: Wed, 7 May 2025 16:01:12 -0700 Subject: [PATCH] fixed normal rotations --- engine/rend/shaders/meshes.vert.hlsl | 26 +++++++++++++++++- engine/rend/shaders/meshes.vert.json | 12 ++++---- engine/rend/shaders/postProc.frag.hlsl | 2 ++ .../content/_shaders/dxil/meshes.vert.dxil | Bin 6408 -> 6796 bytes projects/content/_shaders/msl/meshes.vert.msl | 12 ++++---- projects/content/_shaders/spv/meshes.vert.spv | Bin 2332 -> 3280 bytes 6 files changed, 39 insertions(+), 13 deletions(-) diff --git a/engine/rend/shaders/meshes.vert.hlsl b/engine/rend/shaders/meshes.vert.hlsl index 8e86d2c..1aff330 100644 --- a/engine/rend/shaders/meshes.vert.hlsl +++ b/engine/rend/shaders/meshes.vert.hlsl @@ -44,6 +44,28 @@ cbuffer Uniforms : register(b0, space1) float time; }; +float4x4 ExtractRotation(float4x4 m) +{ + // Extract basis vectors + float3 x = float3(m._11, m._12, m._13); + float3 y = float3(m._21, m._22, m._23); + float3 z = float3(m._31, m._32, m._33); + + // Remove scale by normalizing each axis + x = normalize(x); + y = normalize(y); + z = normalize(z); + + // Reconstruct rotation matrix + float3x3 m2 = float3x3(x, y, z); + + return float4x4( + float4(m2[0][0], m2[0][1], m2[0][2], 0.0), + float4(m2[1][0], m2[1][1], m2[1][2], 0.0), + float4(m2[2][0], m2[2][1], m2[2][2], 0.0), + float4(0.0, 0.0, 0.0, 1.0) + );} + Output main(Input input) { Output output; @@ -57,8 +79,10 @@ Output main(Input input) float4 WorldPos = mul(scene[input.Instance].Model, pos); output.Position = mul(ViewProjection, mul(scene[input.Instance].Model, pos)); output.WorldPos = WorldPos.xyz; + + float4x4 noTranslate = ExtractRotation(scene[input.Instance].Model); // output.Normal = mul(scene[input.Instance].Model, float4(input.Normal, 1.0)).xyz; - output.Normal = input.Normal; + output.Normal = mul(noTranslate, input.Normal); output.DirectionalShadowFragPos = mul(ShadowMapProjection, WorldPos); output.Instance = input.Instance; diff --git a/engine/rend/shaders/meshes.vert.json b/engine/rend/shaders/meshes.vert.json index 78f7a09..ab8acfa 100644 --- a/engine/rend/shaders/meshes.vert.json +++ b/engine/rend/shaders/meshes.vert.json @@ -6,7 +6,7 @@ } ], "types" : { - "_13" : { + "_14" : { "name" : "Scene", "members" : [ { @@ -38,12 +38,12 @@ } ] }, - "_12" : { + "_13" : { "name" : "type.StructuredBuffer.Scene", "members" : [ { "name" : "_m0", - "type" : "_13", + "type" : "_14", "array" : [ 0 ], @@ -55,7 +55,7 @@ } ] }, - "_15" : { + "_16" : { "name" : "type.Uniforms", "members" : [ { @@ -126,7 +126,7 @@ ], "ssbos" : [ { - "type" : "_12", + "type" : "_13", "name" : "scene", "readonly" : true, "block_size" : 0, @@ -136,7 +136,7 @@ ], "ubos" : [ { - "type" : "_15", + "type" : "_16", "name" : "type.Uniforms", "block_size" : 132, "set" : 1, diff --git a/engine/rend/shaders/postProc.frag.hlsl b/engine/rend/shaders/postProc.frag.hlsl index 0f6fb0b..ddc5c71 100644 --- a/engine/rend/shaders/postProc.frag.hlsl +++ b/engine/rend/shaders/postProc.frag.hlsl @@ -90,6 +90,8 @@ float4 main(float2 UV : TEXCOORD0) : SV_Target0 float exposure = 1.0; c *= exposure;//= exposure(c, 1.0, 0.3); + // c = c * c ; + // c = e; // c = float3(uv.x, uv.y, 0.0); diff --git a/projects/content/_shaders/dxil/meshes.vert.dxil b/projects/content/_shaders/dxil/meshes.vert.dxil index 3e1902c54dccac8ee0029988a0370893601452d8..5b76d0bed35923c4fd96ff856e24483f41527157 100644 GIT binary patch delta 4004 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 W-(2I=$C-V5)F+sI3;w0zYsh~g2G6Ac literal 2332 zcmZYATXR!Y6bJA_n+7k4B663Sw%);rihv>tibEe{TCF;~X4=y+4sALi6@B9)_;Gz< z#{cgm8;)^zR`&X@``T;o)5V3gqg8dJs;cAFt^8Uis)d-{=5 zo$8g?Op&-t4UVX~Kia7uX7A>Yjd~{apMp?5vsK%{VCPDva^xOy!n`c&7OGo2ZTaWT7^$?4rwzI^E4%1%!X z_hxunf2X;ZVio;rcvw94W(4aUetU-bpG=l_vaiJA-RyWa?`4-?A2);b>CKSAdUD4L z)&u@Xh#r=+U_ChZf_ve8FA81>?;i8vzna}WYGZG_;I;7Hc)@z|#tWwRy@9VKlfLA# z^!ZP!eLwrH