2020-10-01 19:46:25 +00:00
|
|
|
using Microsoft.Xna.Framework;
|
|
|
|
using Microsoft.Xna.Framework.Graphics;
|
|
|
|
|
|
|
|
namespace Kav
|
|
|
|
{
|
2020-10-02 19:28:28 +00:00
|
|
|
public class DeferredPBR_DirectionalLightEffect : Effect, ShadowCascadeEffect
|
2020-10-01 19:46:25 +00:00
|
|
|
{
|
|
|
|
EffectParameter gPositionParam;
|
|
|
|
EffectParameter gAlbedoParam;
|
|
|
|
EffectParameter gNormalParam;
|
|
|
|
EffectParameter gMetallicRoughnessParam;
|
|
|
|
|
|
|
|
EffectParameter shadowMapOneParam;
|
|
|
|
EffectParameter shadowMapTwoParam;
|
|
|
|
EffectParameter shadowMapThreeParam;
|
|
|
|
EffectParameter shadowMapFourParam;
|
|
|
|
|
|
|
|
EffectParameter eyePositionParam;
|
|
|
|
|
|
|
|
EffectParameter directionalLightColorParam;
|
|
|
|
EffectParameter directionalLightDirectionParam;
|
|
|
|
|
|
|
|
EffectParameter cascadeFarPlanesParam;
|
|
|
|
|
|
|
|
EffectParameter shadowMapSizeParam;
|
|
|
|
|
|
|
|
EffectParameter lightSpaceMatrixOneParam;
|
|
|
|
EffectParameter lightSpaceMatrixTwoParam;
|
|
|
|
EffectParameter lightSpaceMatrixThreeParam;
|
|
|
|
EffectParameter lightSpaceMatrixFourParam;
|
|
|
|
|
|
|
|
EffectParameter viewMatrixParam;
|
|
|
|
|
|
|
|
public Texture2D GPosition { get; set; }
|
|
|
|
public Texture2D GAlbedo { get; set; }
|
|
|
|
public Texture2D GNormal { get; set; }
|
|
|
|
public Texture2D GMetallicRoughness { get; set; }
|
|
|
|
|
|
|
|
public Texture2D ShadowMapOne { get; set; }
|
|
|
|
public Texture2D ShadowMapTwo { get; set; }
|
|
|
|
public Texture2D ShadowMapThree { get; set; }
|
|
|
|
public Texture2D ShadowMapFour { get; set; }
|
|
|
|
|
|
|
|
public Vector3 EyePosition { get; set; }
|
|
|
|
|
|
|
|
public Vector3 DirectionalLightDirection { get; set; }
|
|
|
|
public Vector3 DirectionalLightColor { get; set; }
|
|
|
|
|
2020-10-02 19:28:28 +00:00
|
|
|
public float[] CascadeFarPlanes { get; }
|
2020-10-01 19:46:25 +00:00
|
|
|
|
|
|
|
public int ShadowMapSize { get; set; }
|
|
|
|
|
|
|
|
public Matrix LightSpaceMatrixOne { get; set; }
|
|
|
|
public Matrix LightSpaceMatrixTwo { get; set; }
|
|
|
|
public Matrix LightSpaceMatrixThree { get; set; }
|
|
|
|
public Matrix LightSpaceMatrixFour { get; set; }
|
|
|
|
|
|
|
|
public Matrix ViewMatrix { get; set; }
|
|
|
|
|
|
|
|
public DeferredPBR_DirectionalLightEffect(GraphicsDevice graphicsDevice) : base(graphicsDevice, Resources.DeferredPBR_DirectionalLightEffect)
|
|
|
|
{
|
|
|
|
CascadeFarPlanes = new float[4];
|
|
|
|
CacheEffectParameters();
|
|
|
|
}
|
|
|
|
|
|
|
|
public DeferredPBR_DirectionalLightEffect(DeferredPBR_DirectionalLightEffect cloneSource) : base(cloneSource)
|
|
|
|
{
|
|
|
|
GPosition = cloneSource.GPosition;
|
|
|
|
GAlbedo = cloneSource.GAlbedo;
|
|
|
|
GNormal = cloneSource.GNormal;
|
|
|
|
GMetallicRoughness = cloneSource.GMetallicRoughness;
|
|
|
|
|
|
|
|
ShadowMapOne = cloneSource.ShadowMapOne;
|
|
|
|
ShadowMapTwo = cloneSource.ShadowMapTwo;
|
|
|
|
ShadowMapThree = cloneSource.ShadowMapThree;
|
|
|
|
ShadowMapFour = cloneSource.ShadowMapFour;
|
|
|
|
|
|
|
|
EyePosition = cloneSource.EyePosition;
|
|
|
|
|
|
|
|
DirectionalLightDirection = cloneSource.DirectionalLightDirection;
|
|
|
|
DirectionalLightColor = cloneSource.DirectionalLightColor;
|
|
|
|
|
|
|
|
CascadeFarPlanes = new float[4];
|
|
|
|
for (int i = 0 ; i < 4; i++)
|
|
|
|
{
|
|
|
|
CascadeFarPlanes[i] = cloneSource.CascadeFarPlanes[i];
|
|
|
|
}
|
|
|
|
|
|
|
|
ShadowMapSize = cloneSource.ShadowMapSize;
|
|
|
|
|
|
|
|
LightSpaceMatrixOne = cloneSource.LightSpaceMatrixOne;
|
|
|
|
LightSpaceMatrixTwo = cloneSource.LightSpaceMatrixTwo;
|
|
|
|
LightSpaceMatrixThree = cloneSource.LightSpaceMatrixThree;
|
|
|
|
LightSpaceMatrixFour = cloneSource.LightSpaceMatrixFour;
|
|
|
|
|
|
|
|
ViewMatrix = cloneSource.ViewMatrix;
|
|
|
|
}
|
|
|
|
|
|
|
|
public override Effect Clone()
|
|
|
|
{
|
|
|
|
return new DeferredPBR_DirectionalLightEffect(this);
|
|
|
|
}
|
|
|
|
|
|
|
|
protected override void OnApply()
|
|
|
|
{
|
|
|
|
gPositionParam.SetValue(GPosition);
|
|
|
|
gAlbedoParam.SetValue(GAlbedo);
|
|
|
|
gNormalParam.SetValue(GNormal);
|
|
|
|
gMetallicRoughnessParam.SetValue(GMetallicRoughness);
|
|
|
|
|
|
|
|
shadowMapOneParam.SetValue(ShadowMapOne);
|
|
|
|
shadowMapTwoParam.SetValue(ShadowMapTwo);
|
|
|
|
shadowMapThreeParam.SetValue(ShadowMapThree);
|
|
|
|
shadowMapFourParam.SetValue(ShadowMapFour);
|
|
|
|
|
|
|
|
eyePositionParam.SetValue(EyePosition);
|
|
|
|
|
|
|
|
directionalLightDirectionParam.SetValue(DirectionalLightDirection);
|
|
|
|
directionalLightColorParam.SetValue(DirectionalLightColor);
|
|
|
|
|
|
|
|
cascadeFarPlanesParam.SetValue(CascadeFarPlanes);
|
|
|
|
shadowMapSizeParam.SetValue(ShadowMapSize);
|
|
|
|
|
|
|
|
lightSpaceMatrixOneParam.SetValue(LightSpaceMatrixOne);
|
|
|
|
lightSpaceMatrixTwoParam.SetValue(LightSpaceMatrixTwo);
|
|
|
|
lightSpaceMatrixThreeParam.SetValue(LightSpaceMatrixThree);
|
|
|
|
lightSpaceMatrixFourParam.SetValue(LightSpaceMatrixFour);
|
|
|
|
|
|
|
|
viewMatrixParam.SetValue(ViewMatrix);
|
|
|
|
}
|
|
|
|
|
|
|
|
void CacheEffectParameters()
|
|
|
|
{
|
|
|
|
gPositionParam = Parameters["gPosition"];
|
|
|
|
gAlbedoParam = Parameters["gAlbedo"];
|
|
|
|
gNormalParam = Parameters["gNormal"];
|
|
|
|
gMetallicRoughnessParam = Parameters["gMetallicRoughness"];
|
|
|
|
|
|
|
|
shadowMapOneParam = Parameters["shadowMapOne"];
|
|
|
|
shadowMapTwoParam = Parameters["shadowMapTwo"];
|
|
|
|
shadowMapThreeParam = Parameters["shadowMapThree"];
|
|
|
|
shadowMapFourParam = Parameters["shadowMapFour"];
|
|
|
|
|
|
|
|
eyePositionParam = Parameters["EyePosition"];
|
|
|
|
|
|
|
|
directionalLightDirectionParam = Parameters["DirectionalLightDirection"];
|
|
|
|
directionalLightColorParam = Parameters["DirectionalLightColor"];
|
|
|
|
|
|
|
|
cascadeFarPlanesParam = Parameters["CascadeFarPlanes"];
|
|
|
|
shadowMapSizeParam = Parameters["ShadowMapSize"];
|
|
|
|
|
|
|
|
lightSpaceMatrixOneParam = Parameters["LightSpaceMatrixOne"];
|
|
|
|
lightSpaceMatrixTwoParam = Parameters["LightSpaceMatrixTwo"];
|
|
|
|
lightSpaceMatrixThreeParam = Parameters["LightSpaceMatrixThree"];
|
|
|
|
lightSpaceMatrixFourParam = Parameters["LightSpaceMatrixFour"];
|
|
|
|
|
|
|
|
viewMatrixParam = Parameters["ViewMatrix"];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|