public void DeployCoreGameEffectSettings(CoreGameEffectSettingsGroups groups)
        {
            // Get layer
            if (!postProcessLayer)
            {
                postProcessLayer = GameManager.Instance.MainCamera.GetComponent <PostProcessLayer>();
                if (!postProcessLayer)
                {
                    Debug.LogError("Could not locate PostProcessLayer on MainCamera");
                    return;
                }
            }

            // Get volume
            if (!postProcessVolume)
            {
                postProcessVolume = GameManager.Instance.PostProcessVolume;
                if (!postProcessVolume)
                {
                    Debug.LogError("Could not locate PostProcessVolume in scene");
                    return;
                }
            }

            // Antialiasing
            if (groups.HasFlag(CoreGameEffectSettingsGroups.Antialiasing))
            {
                switch ((AntiAliasingMethods)DaggerfallUnity.Settings.AntialiasingMethod)
                {
                case AntiAliasingMethods.None:
                    postProcessLayer.antialiasingMode = PostProcessLayer.Antialiasing.None;
                    break;

                case AntiAliasingMethods.FXAA:
                    postProcessLayer.antialiasingMode = PostProcessLayer.Antialiasing.FastApproximateAntialiasing;
                    postProcessLayer.fastApproximateAntialiasing.fastMode = DaggerfallUnity.Settings.AntialiasingFXAAFastMode;
                    break;

                case AntiAliasingMethods.SMAA:
                    postProcessLayer.antialiasingMode = PostProcessLayer.Antialiasing.SubpixelMorphologicalAntialiasing;
                    postProcessLayer.subpixelMorphologicalAntialiasing.quality = (SubpixelMorphologicalAntialiasing.Quality)DaggerfallUnity.Settings.AntialiasingSMAAQuality;
                    break;

                case AntiAliasingMethods.TAA:
                    postProcessLayer.antialiasingMode = PostProcessLayer.Antialiasing.TemporalAntialiasing;
                    postProcessLayer.temporalAntialiasing.sharpness = DaggerfallUnity.Settings.AntialiasingTAASharpness;
                    break;
                }
            }

            // Ambient Occlusion
            if (groups.HasFlag(CoreGameEffectSettingsGroups.AmbientOcclusion))
            {
                AmbientOcclusion ambientOcclusionSettings;
                if (postProcessVolume.profile.TryGetSettings <AmbientOcclusion>(out ambientOcclusionSettings))
                {
                    ambientOcclusionSettings.enabled.value                   = DaggerfallUnity.Settings.AmbientOcclusionEnable;
                    ambientOcclusionSettings.mode.overrideState              = true;
                    ambientOcclusionSettings.mode.value                      = (AmbientOcclusionMode)DaggerfallUnity.Settings.AmbientOcclusionMethod;
                    ambientOcclusionSettings.intensity.overrideState         = true;
                    ambientOcclusionSettings.intensity.value                 = DaggerfallUnity.Settings.AmbientOcclusionIntensity;
                    ambientOcclusionSettings.radius.overrideState            = true;
                    ambientOcclusionSettings.radius.value                    = DaggerfallUnity.Settings.AmbientOcclusionRadius;
                    ambientOcclusionSettings.quality.overrideState           = true;
                    ambientOcclusionSettings.quality.value                   = (AmbientOcclusionQuality)DaggerfallUnity.Settings.AmbientOcclusionQuality;
                    ambientOcclusionSettings.thicknessModifier.overrideState = true;
                    ambientOcclusionSettings.thicknessModifier.value         = DaggerfallUnity.Settings.AmbientOcclusionThickness;
                }
            }

            // Bloom
            if (groups.HasFlag(CoreGameEffectSettingsGroups.Bloom))
            {
                Bloom bloomSettings;
                if (postProcessVolume.profile.TryGetSettings <Bloom>(out bloomSettings))
                {
                    bloomSettings.enabled.value           = DaggerfallUnity.Settings.BloomEnable;
                    bloomSettings.intensity.overrideState = true;
                    bloomSettings.intensity.value         = DaggerfallUnity.Settings.BloomIntensity;
                    bloomSettings.threshold.overrideState = true;
                    bloomSettings.threshold.value         = DaggerfallUnity.Settings.BloomThreshold;
                    bloomSettings.diffusion.overrideState = true;
                    bloomSettings.diffusion.value         = DaggerfallUnity.Settings.BloomDiffusion;
                    bloomSettings.fastMode.overrideState  = true;
                    bloomSettings.fastMode.value          = DaggerfallUnity.Settings.BloomFastMode;
                }
            }
        }
        public void DeployCoreGameEffectSettings(CoreGameEffectSettingsGroups groups)
        {
            // Get layer
            if (!postProcessLayer)
            {
                postProcessLayer = GameManager.Instance.MainCamera.GetComponent <PostProcessLayer>();
                if (!postProcessLayer)
                {
                    Debug.LogError("Could not locate PostProcessLayer on MainCamera");
                    return;
                }
            }

            // Get volume
            if (!postProcessVolume)
            {
                postProcessVolume = GameManager.Instance.PostProcessVolume;
                if (!postProcessVolume)
                {
                    Debug.LogError("Could not locate PostProcessVolume in scene");
                    return;
                }
            }

            // Antialiasing
            if (groups.HasFlag(CoreGameEffectSettingsGroups.Antialiasing))
            {
                switch ((AntiAliasingMethods)DaggerfallUnity.Settings.AntialiasingMethod)
                {
                case AntiAliasingMethods.None:
                    postProcessLayer.antialiasingMode = PostProcessLayer.Antialiasing.None;
                    break;

                case AntiAliasingMethods.FXAA:
                    postProcessLayer.antialiasingMode = PostProcessLayer.Antialiasing.FastApproximateAntialiasing;
                    postProcessLayer.fastApproximateAntialiasing.fastMode = DaggerfallUnity.Settings.AntialiasingFXAAFastMode;
                    break;

                case AntiAliasingMethods.SMAA:
                    postProcessLayer.antialiasingMode = PostProcessLayer.Antialiasing.SubpixelMorphologicalAntialiasing;
                    postProcessLayer.subpixelMorphologicalAntialiasing.quality = (SubpixelMorphologicalAntialiasing.Quality)DaggerfallUnity.Settings.AntialiasingSMAAQuality;
                    break;

                case AntiAliasingMethods.TAA:
                    postProcessLayer.antialiasingMode = PostProcessLayer.Antialiasing.TemporalAntialiasing;
                    postProcessLayer.temporalAntialiasing.sharpness = DaggerfallUnity.Settings.AntialiasingTAASharpness;
                    break;
                }
            }

            // Ambient Occlusion
            if (groups.HasFlag(CoreGameEffectSettingsGroups.AmbientOcclusion))
            {
                AmbientOcclusion ambientOcclusionSettings;
                if (postProcessVolume.profile.TryGetSettings <AmbientOcclusion>(out ambientOcclusionSettings))
                {
                    ambientOcclusionSettings.enabled.value                   = DaggerfallUnity.Settings.AmbientOcclusionEnable;
                    ambientOcclusionSettings.mode.overrideState              = true;
                    ambientOcclusionSettings.mode.value                      = (AmbientOcclusionMode)DaggerfallUnity.Settings.AmbientOcclusionMethod;
                    ambientOcclusionSettings.intensity.overrideState         = true;
                    ambientOcclusionSettings.intensity.value                 = DaggerfallUnity.Settings.AmbientOcclusionIntensity;
                    ambientOcclusionSettings.radius.overrideState            = true;
                    ambientOcclusionSettings.radius.value                    = DaggerfallUnity.Settings.AmbientOcclusionRadius;
                    ambientOcclusionSettings.quality.overrideState           = true;
                    ambientOcclusionSettings.quality.value                   = (AmbientOcclusionQuality)DaggerfallUnity.Settings.AmbientOcclusionQuality;
                    ambientOcclusionSettings.thicknessModifier.overrideState = true;
                    ambientOcclusionSettings.thicknessModifier.value         = DaggerfallUnity.Settings.AmbientOcclusionThickness;
                }
            }

            // Bloom
            if (groups.HasFlag(CoreGameEffectSettingsGroups.Bloom))
            {
                Bloom bloomSettings;
                if (postProcessVolume.profile.TryGetSettings <Bloom>(out bloomSettings))
                {
                    bloomSettings.enabled.value           = DaggerfallUnity.Settings.BloomEnable;
                    bloomSettings.intensity.overrideState = true;
                    bloomSettings.intensity.value         = DaggerfallUnity.Settings.BloomIntensity;
                    bloomSettings.threshold.overrideState = true;
                    bloomSettings.threshold.value         = DaggerfallUnity.Settings.BloomThreshold;
                    bloomSettings.diffusion.overrideState = true;
                    bloomSettings.diffusion.value         = DaggerfallUnity.Settings.BloomDiffusion;
                    bloomSettings.fastMode.overrideState  = true;
                    bloomSettings.fastMode.value          = DaggerfallUnity.Settings.BloomFastMode;
                }
            }

            // Motion Blur
            if (groups.HasFlag(CoreGameEffectSettingsGroups.MotionBlur))
            {
                MotionBlur motionBlurSettings;
                if (postProcessVolume.profile.TryGetSettings <MotionBlur>(out motionBlurSettings))
                {
                    motionBlurSettings.enabled.value = DaggerfallUnity.Settings.MotionBlurEnable;
                    motionBlurSettings.shutterAngle.overrideState = true;
                    motionBlurSettings.shutterAngle.value         = DaggerfallUnity.Settings.MotionBlurShutterAngle;
                    motionBlurSettings.sampleCount.overrideState  = true;
                    motionBlurSettings.sampleCount.value          = DaggerfallUnity.Settings.MotionBlurSampleCount;
                }
            }

            // Vignette
            if (groups.HasFlag(CoreGameEffectSettingsGroups.Vignette))
            {
                Vignette vignetteSettings;
                if (postProcessVolume.profile.TryGetSettings <Vignette>(out vignetteSettings))
                {
                    vignetteSettings.enabled.value            = DaggerfallUnity.Settings.VignetteEnable;
                    vignetteSettings.intensity.overrideState  = true;
                    vignetteSettings.intensity.value          = DaggerfallUnity.Settings.VignetteIntensity;
                    vignetteSettings.smoothness.overrideState = true;
                    vignetteSettings.smoothness.value         = DaggerfallUnity.Settings.VignetteSmoothness;
                    vignetteSettings.roundness.overrideState  = true;
                    vignetteSettings.roundness.value          = DaggerfallUnity.Settings.VignetteRoundness;
                    vignetteSettings.rounded.overrideState    = true;
                    vignetteSettings.rounded.value            = DaggerfallUnity.Settings.VignetteRounded;
                }
            }

            // Depth of Field
            if (groups.HasFlag(CoreGameEffectSettingsGroups.DepthOfField))
            {
                DepthOfField depthOfFieldSettings;
                if (postProcessVolume.profile.TryGetSettings <DepthOfField>(out depthOfFieldSettings))
                {
                    depthOfFieldSettings.enabled.value = DaggerfallUnity.Settings.DepthOfFieldEnable;
                    depthOfFieldSettings.focusDistance.overrideState = true;
                    depthOfFieldSettings.focusDistance.value         = DaggerfallUnity.Settings.DepthOfFieldFocusDistance;
                    depthOfFieldSettings.aperture.overrideState      = true;
                    depthOfFieldSettings.aperture.value            = DaggerfallUnity.Settings.DepthOfFieldAperture;
                    depthOfFieldSettings.focalLength.overrideState = true;
                    depthOfFieldSettings.focalLength.value         = DaggerfallUnity.Settings.DepthOfFieldFocalLength;
                    depthOfFieldSettings.kernelSize.overrideState  = true;
                    depthOfFieldSettings.kernelSize.value          = (KernelSize)DaggerfallUnity.Settings.DepthOfFieldMaxBlurSize;
                }
            }

            // Dither
            if (groups.HasFlag(CoreGameEffectSettingsGroups.Dither))
            {
                const string ditherKeyword = "_PPV2_DITHER_ON";
                if (DaggerfallUnity.Settings.DitherEnable)
                {
                    Shader.EnableKeyword(ditherKeyword);
                }
                else
                {
                    Shader.DisableKeyword(ditherKeyword);
                }
            }

            // ColorBoost
            if (groups.HasFlag(CoreGameEffectSettingsGroups.ColorBoost))
            {
                ColorBoost colorBoostSettings;
                if (postProcessVolume.profile.TryGetSettings <ColorBoost>(out colorBoostSettings))
                {
                    colorBoostSettings.enabled.value                 = DaggerfallUnity.Settings.ColorBoostEnable;
                    colorBoostSettings.radius.overrideState          = true;
                    colorBoostSettings.radius.value                  = DaggerfallUnity.Settings.ColorBoostRadius;
                    colorBoostSettings.globalIntensity.overrideState = true;
                    colorBoostSettings.globalIntensity.value         = DaggerfallUnity.Settings.ColorBoostIntensity;
                    colorBoostSettings.dungeonScale.overrideState    = true;
                    colorBoostSettings.dungeonScale.value            = DaggerfallUnity.Settings.ColorBoostDungeonScale;
                    colorBoostSettings.interiorScale.overrideState   = true;
                    colorBoostSettings.interiorScale.value           = DaggerfallUnity.Settings.ColorBoostInteriorScale;
                    colorBoostSettings.exteriorScale.overrideState   = true;
                    colorBoostSettings.exteriorScale.value           = DaggerfallUnity.Settings.ColorBoostExteriorScale;
                    colorBoostSettings.dungeonFalloff.overrideState  = true;
                    colorBoostSettings.dungeonFalloff.value          = DaggerfallUnity.Settings.ColorBoostDungeonFalloff;
                }
            }

            // Retro Mode
            if (groups.HasFlag(CoreGameEffectSettingsGroups.RetroMode))
            {
                GameManager.Instance.RetroRenderer.UpdateSettings();
            }
        }