i think the lighting works now
parent
4b36860b62
commit
0ea3484ec3
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
Binary file not shown.
26
Importer.cs
26
Importer.cs
|
@ -231,24 +231,24 @@ namespace Smuggler
|
|||
effect.AO = 1f;
|
||||
|
||||
effect.Lights[0] = new PBRLight(
|
||||
new Vector3(-10f, 10f, 10f),
|
||||
new Vector3(-10f, 10f, -10f),
|
||||
new Vector3(300f, 300f, 300f)
|
||||
);
|
||||
|
||||
effect.Lights[1] = new PBRLight(
|
||||
new Vector3(10f, 10f, 10f),
|
||||
new Vector3(300f, 300f, 300f)
|
||||
);
|
||||
// effect.Lights[1] = new PBRLight(
|
||||
// new Vector3(10f, 10f, 10f),
|
||||
// new Vector3(300f, 300f, 300f)
|
||||
// );
|
||||
|
||||
effect.Lights[2] = new PBRLight(
|
||||
new Vector3(-10f, -10f, 10f),
|
||||
new Vector3(300f, 300f, 300f)
|
||||
);
|
||||
// effect.Lights[2] = new PBRLight(
|
||||
// new Vector3(-10f, -10f, 10f),
|
||||
// new Vector3(300f, 300f, 300f)
|
||||
// );
|
||||
|
||||
effect.Lights[3] = new PBRLight(
|
||||
new Vector3(10f, -10f, 10f),
|
||||
new Vector3(300f, 300f, 300f)
|
||||
);
|
||||
// effect.Lights[3] = new PBRLight(
|
||||
// new Vector3(10f, -10f, 10f),
|
||||
// new Vector3(300f, 300f, 300f)
|
||||
// );
|
||||
|
||||
/* FIXME: how to load cube maps from GLTF? */
|
||||
/*
|
||||
|
|
Loading…
Reference in New Issue