From 0ea3484ec3f0942f4fc45de806a20d9461af049a Mon Sep 17 00:00:00 2001 From: Evan Hemsley Date: Sat, 1 Aug 2020 13:43:04 -0700 Subject: [PATCH] i think the lighting works now --- Effects/PBREffect.cs | 24 +++++++++++++++++++----- Effects/PBREffect.fx | 12 ++++++------ Effects/PBREffect.fxb | Bin 8852 -> 8844 bytes Importer.cs | 26 +++++++++++++------------- 4 files changed, 38 insertions(+), 24 deletions(-) diff --git a/Effects/PBREffect.cs b/Effects/PBREffect.cs index ba73003..852bde2 100644 --- a/Effects/PBREffect.cs +++ b/Effects/PBREffect.cs @@ -88,8 +88,14 @@ namespace Smuggler { world = value; worldParam.SetValue(world); - worldViewProjectionParam.SetValue(world * view * projection); - worldInverseTransposeParam.SetValue(Matrix.Transpose(Matrix.Invert(world))); + + Matrix.Multiply(ref world, ref view, out Matrix worldView); + Matrix.Multiply(ref worldView, ref projection, out Matrix worldViewProj); + worldViewProjectionParam.SetValue(worldViewProj); + + Matrix.Invert(ref world, out Matrix worldInverse); + Matrix.Transpose(ref worldInverse, out Matrix worldInverseTranspose); + worldInverseTransposeParam.SetValue(worldInverseTranspose); } } @@ -100,8 +106,13 @@ namespace Smuggler { view = value; viewParam.SetValue(view); - worldViewProjectionParam.SetValue(world * view * projection); - eyePositionParam.SetValue(Matrix.Invert(view).Translation); + + Matrix.Multiply(ref world, ref view, out Matrix worldView); + Matrix.Multiply(ref worldView, ref projection, out Matrix worldViewProj); + worldViewProjectionParam.SetValue(worldViewProj); + + Matrix.Invert(ref view, out Matrix inverseView); + eyePositionParam.SetValue(inverseView.Translation); } } @@ -112,7 +123,10 @@ namespace Smuggler { projection = value; projectionParam.SetValue(projection); - worldViewProjectionParam.SetValue(world * view * projection); + + Matrix.Multiply(ref world, ref view, out Matrix worldView); + Matrix.Multiply(ref worldView, ref projection, out Matrix worldViewProj); + worldViewProjectionParam.SetValue(worldViewProj); } } diff --git a/Effects/PBREffect.fx b/Effects/PBREffect.fx index e26bd49..28dd3b5 100644 --- a/Effects/PBREffect.fx +++ b/Effects/PBREffect.fx @@ -52,10 +52,10 @@ struct PixelShaderInput PixelShaderInput main_vs(VertexShaderInput input) { PixelShaderInput output; - + output.PositionWS = mul(input.Position, World).xyz; output.TexCoord = input.TexCoord; - output.NormalWS = normalize(mul(WorldInverseTranspose, input.Normal)); + output.NormalWS = normalize(mul(input.Normal, (float3x3)WorldInverseTranspose)); output.Position = mul(input.Position, WorldViewProjection); return output; @@ -107,6 +107,9 @@ float4 None(PixelShaderInput input) : SV_TARGET float3 N = normalize(input.NormalWS); float3 V = normalize(EyePosition - input.PositionWS); + float3 F0 = float3(0.04, 0.04, 0.04); + F0 = lerp(F0, Albedo, Metallic); + float3 Lo = float3(0.0, 0.0, 0.0); for (int i = 0; i < 4; i++) @@ -119,12 +122,9 @@ float4 None(PixelShaderInput input) : SV_TARGET float attenuation = 1.0 / (distance * distance); float3 radiance = LightColors[i] * attenuation; - float3 F0 = float3(0.04, 0.04, 0.04); - F0 = lerp(F0, Albedo, Metallic); - float3 F = FresnelSchlick(max(dot(H, V), 0.0), F0); - float NDF = DistributionGGX(N, H, Roughness); float G = GeometrySmith(N, V, L, Roughness); + float3 F = FresnelSchlick(max(dot(H, V), 0.0), F0); float3 numerator = NDF * G * F; float denominator = 4.0 * max(dot(N, V), 0.0) * max(dot(N, L), 0.0); diff --git a/Effects/PBREffect.fxb b/Effects/PBREffect.fxb index bcc23fa9549d9cd0d2f7e549485601743026db86..2a7a43f902c350f774e6f67a1944209a06d98c3f 100644 GIT binary patch delta 773 zcmcgpJxF6g5T1G2XCj(pUp5IzGcD|YK`*ybHHs?B1nchQi-|Y;|W+rGQ zyOGYtH=yKCm)T+3&uY?IqoJDK!xRO9p>^G#Hm{KVRL>f+nGR|>F?LlOy4JINst4bC z1ZroZ{a^&^(Dnfm2r28qgIfsT`QX_cgl*yKPg_TwH%?mdEb777~g%SVK!R zExyvkgrbwy@{~mh_&xeLbbZHP60TdGlBcniT6|5mqOI$;s3L=JMNXqW*CdJis9K5Na9xtb%CoqJ_^7_A+2r|z z^U(QzGS4e%Rw4?SDlVW4f0!sJ5xXg(45&u$*x!-XO4$xLlyy7TPcyA0)FSU|5qb=W zaYnZ7!fNEm_l{fzJb-f{jZuH@CJ~3gCfWs8dfBh{7szShS>;J)(4?7QdGRZ!$Bz0Y``^