public override LightShadowType GetShadowType(LightShadowMap shadowMapArg) { var shadowMap = (LightDirectionalShadowMap)shadowMapArg; var shadowType = base.GetShadowType(shadowMapArg); if (shadowMap.DepthRange.IsAutomatic) { shadowType |= LightShadowType.DepthRangeAuto; } else if (shadowMap.DepthRange.IsBlendingCascades) { shadowType |= LightShadowType.BlendCascade; } return shadowType; }
public virtual LightShadowType GetShadowType(LightShadowMap shadowMap) { // TODO: MOVE THIS TO BASE TYPE var shadowType = (LightShadowType)0; switch (shadowMap.GetCascadeCount()) { case 1: shadowType |= LightShadowType.Cascade1; break; case 2: shadowType |= LightShadowType.Cascade2; break; case 4: shadowType |= LightShadowType.Cascade4; break; } var pcfFilter = shadowMap.Filter as LightShadowMapFilterTypePcf; if (pcfFilter != null) { switch (pcfFilter.FilterSize) { case LightShadowMapFilterTypePcfSize.Filter3x3: shadowType |= LightShadowType.PCF3x3; break; case LightShadowMapFilterTypePcfSize.Filter5x5: shadowType |= LightShadowType.PCF5x5; break; case LightShadowMapFilterTypePcfSize.Filter7x7: shadowType |= LightShadowType.PCF7x7; break; } } if (shadowMap.Debug) { shadowType |= LightShadowType.Debug; } return shadowType; }
public void Initialize(LightComponent lightComponent, IDirectLight light, LightShadowMap shadowMap, int size, ILightShadowMapRenderer renderer) { if (lightComponent == null) throw new ArgumentNullException("lightComponent"); if (light == null) throw new ArgumentNullException("light"); if (shadowMap == null) throw new ArgumentNullException("shadowMap"); if (renderer == null) throw new ArgumentNullException("renderer"); LightComponent = lightComponent; Light = light; Shadow = shadowMap; Size = size; FilterType = Shadow.Filter == null || !Shadow.Filter.RequiresCustomBuffer() ? null : Shadow.Filter.GetType(); Renderer = renderer; Atlas = null; // Reset the atlas, It will be setup after ShadowType = renderer.GetShadowType(Shadow); }