using System; using UnityEngine.Serialization; namespace UnityEngine.Rendering.HighDefinition { [Obsolete("For data migration")] enum ObsoleteLitShaderMode { Forward, Deferred } [Flags, Obsolete("For data migration")] enum ObsoleteLightLoopSettingsOverrides { FptlForForwardOpaque = 1 << 0, BigTilePrepass = 1 << 1, ComputeLightEvaluation = 1 << 2, ComputeLightVariants = 1 << 3, ComputeMaterialVariants = 1 << 4, TileAndCluster = 1 << 5, //Fptl = 1 << 6, //isFptlEnabled set up by system } [Flags, Obsolete("For data migration")] enum ObsoleteFrameSettingsOverrides { //lighting settings Shadow = 1 << 0, ContactShadow = 1 << 1, ShadowMask = 1 << 2, SSR = 1 << 3, SSAO = 1 << 4, SubsurfaceScattering = 1 << 5, Transmission = 1 << 6, AtmosphericScaterring = 1 << 7, Volumetrics = 1 << 8, ReprojectionForVolumetrics = 1 << 9, LightLayers = 1 << 10, MSAA = 1 << 11, ExposureControl = 1 << 12, //rendering pass TransparentPrepass = 1 << 13, TransparentPostpass = 1 << 14, MotionVectors = 1 << 15, ObjectMotionVectors = 1 << 16, Decals = 1 << 17, RoughRefraction = 1 << 18, Distortion = 1 << 19, Postprocess = 1 << 20, //rendering settings ShaderLitMode = 1 << 21, DepthPrepassWithDeferredRendering = 1 << 22, OpaqueObjects = 1 << 24, TransparentObjects = 1 << 25, // Async settings AsyncCompute = 1 << 23, LightListAsync = 1 << 27, SSRAsync = 1 << 28, SSAOAsync = 1 << 29, ContactShadowsAsync = 1 << 30, VolumeVoxelizationsAsync = 1 << 31, } [Serializable, Obsolete("For data migration")] class ObsoleteLightLoopSettings { public ObsoleteLightLoopSettingsOverrides overrides; [FormerlySerializedAs("enableTileAndCluster")] public bool enableDeferredTileAndCluster; public bool enableComputeLightEvaluation; public bool enableComputeLightVariants; public bool enableComputeMaterialVariants; public bool enableFptlForForwardOpaque; public bool enableBigTilePrepass; public bool isFptlEnabled; } // The settings here are per frame settings. // Each camera must have its own per frame settings [Serializable] [System.Diagnostics.DebuggerDisplay("FrameSettings overriding {overrides.ToString(\"X\")}")] [Obsolete("For data migration")] class ObsoleteFrameSettings { public ObsoleteFrameSettingsOverrides overrides; public bool enableShadow; public bool enableContactShadows; public bool enableShadowMask; public bool enableSSR; public bool enableSSAO; public bool enableSubsurfaceScattering; public bool enableTransmission; public bool enableAtmosphericScattering; public bool enableVolumetrics; public bool enableReprojectionForVolumetrics; public bool enableLightLayers; public bool enableExposureControl = true; public float diffuseGlobalDimmer; public float specularGlobalDimmer; public ObsoleteLitShaderMode shaderLitMode; public bool enableDepthPrepassWithDeferredRendering; public bool enableTransparentPrepass; public bool enableMotionVectors; // Enable/disable whole motion vectors pass (Camera + Object). public bool enableObjectMotionVectors; [FormerlySerializedAs("enableDBuffer")] public bool enableDecals; public bool enableRoughRefraction; // Depends on DepthPyramid - If not enable, just do a copy of the scene color (?) - how to disable rough refraction ? public bool enableTransparentPostpass; public bool enableDistortion; public bool enablePostprocess; public bool enableOpaqueObjects; public bool enableTransparentObjects; public bool enableRealtimePlanarReflection; public bool enableMSAA; public bool enableAsyncCompute; public bool runLightListAsync; public bool runSSRAsync; public bool runSSAOAsync; public bool runContactShadowsAsync; public bool runVolumeVoxelizationAsync; public ObsoleteLightLoopSettings lightLoopSettings; } public partial struct FrameSettings { #pragma warning disable 618 // Type or member is obsolete internal static void MigrateFromClassVersion(ref ObsoleteFrameSettings oldFrameSettingsFormat, ref FrameSettings newFrameSettingsFormat, ref FrameSettingsOverrideMask newFrameSettingsOverrideMask) { if (oldFrameSettingsFormat == null) return; // no need to migrate those computed at frame value //newFrameSettingsFormat.diffuseGlobalDimmer = oldFrameSettingsFormat.diffuseGlobalDimmer; //newFrameSettingsFormat.specularGlobalDimmer = oldFrameSettingsFormat.specularGlobalDimmer; // Data switch (oldFrameSettingsFormat.shaderLitMode) { case ObsoleteLitShaderMode.Forward: newFrameSettingsFormat.litShaderMode = LitShaderMode.Forward; break; case ObsoleteLitShaderMode.Deferred: newFrameSettingsFormat.litShaderMode = LitShaderMode.Deferred; break; default: throw new ArgumentException("Unknown ObsoleteLitShaderMode"); } newFrameSettingsFormat.SetEnabled(FrameSettingsField.ShadowMaps, oldFrameSettingsFormat.enableShadow); newFrameSettingsFormat.SetEnabled(FrameSettingsField.ContactShadows, oldFrameSettingsFormat.enableContactShadows); newFrameSettingsFormat.SetEnabled(FrameSettingsField.Shadowmask, oldFrameSettingsFormat.enableShadowMask); newFrameSettingsFormat.SetEnabled(FrameSettingsField.SSR, oldFrameSettingsFormat.enableSSR); newFrameSettingsFormat.SetEnabled(FrameSettingsField.SSAO, oldFrameSettingsFormat.enableSSAO); newFrameSettingsFormat.SetEnabled(FrameSettingsField.SubsurfaceScattering, oldFrameSettingsFormat.enableSubsurfaceScattering); newFrameSettingsFormat.SetEnabled(FrameSettingsField.Transmission, oldFrameSettingsFormat.enableTransmission); newFrameSettingsFormat.SetEnabled(FrameSettingsField.AtmosphericScattering, oldFrameSettingsFormat.enableAtmosphericScattering); newFrameSettingsFormat.SetEnabled(FrameSettingsField.Volumetrics, oldFrameSettingsFormat.enableVolumetrics); newFrameSettingsFormat.SetEnabled(FrameSettingsField.ReprojectionForVolumetrics, oldFrameSettingsFormat.enableReprojectionForVolumetrics); newFrameSettingsFormat.SetEnabled(FrameSettingsField.LightLayers, oldFrameSettingsFormat.enableLightLayers); newFrameSettingsFormat.SetEnabled(FrameSettingsField.DepthPrepassWithDeferredRendering, oldFrameSettingsFormat.enableDepthPrepassWithDeferredRendering); newFrameSettingsFormat.SetEnabled(FrameSettingsField.TransparentPrepass, oldFrameSettingsFormat.enableTransparentPrepass); newFrameSettingsFormat.SetEnabled(FrameSettingsField.MotionVectors, oldFrameSettingsFormat.enableMotionVectors); newFrameSettingsFormat.SetEnabled(FrameSettingsField.ObjectMotionVectors, oldFrameSettingsFormat.enableObjectMotionVectors); newFrameSettingsFormat.SetEnabled(FrameSettingsField.Decals, oldFrameSettingsFormat.enableDecals); newFrameSettingsFormat.SetEnabled(FrameSettingsField.Refraction, oldFrameSettingsFormat.enableRoughRefraction); newFrameSettingsFormat.SetEnabled(FrameSettingsField.TransparentPostpass, oldFrameSettingsFormat.enableTransparentPostpass); newFrameSettingsFormat.SetEnabled(FrameSettingsField.Distortion, oldFrameSettingsFormat.enableDistortion); newFrameSettingsFormat.SetEnabled(FrameSettingsField.Postprocess, oldFrameSettingsFormat.enablePostprocess); newFrameSettingsFormat.SetEnabled(FrameSettingsField.OpaqueObjects, oldFrameSettingsFormat.enableOpaqueObjects); newFrameSettingsFormat.SetEnabled(FrameSettingsField.TransparentObjects, oldFrameSettingsFormat.enableTransparentObjects); newFrameSettingsFormat.SetEnabled(FrameSettingsField.MSAA, oldFrameSettingsFormat.enableMSAA); newFrameSettingsFormat.SetEnabled(FrameSettingsField.ExposureControl, oldFrameSettingsFormat.enableExposureControl); newFrameSettingsFormat.SetEnabled(FrameSettingsField.AsyncCompute, oldFrameSettingsFormat.enableAsyncCompute); newFrameSettingsFormat.SetEnabled(FrameSettingsField.LightListAsync, oldFrameSettingsFormat.runLightListAsync); newFrameSettingsFormat.SetEnabled(FrameSettingsField.SSRAsync, oldFrameSettingsFormat.runSSRAsync); newFrameSettingsFormat.SetEnabled(FrameSettingsField.SSAOAsync, oldFrameSettingsFormat.runSSAOAsync); newFrameSettingsFormat.SetEnabled(FrameSettingsField.ContactShadowsAsync, oldFrameSettingsFormat.runContactShadowsAsync); newFrameSettingsFormat.SetEnabled(FrameSettingsField.VolumeVoxelizationsAsync, oldFrameSettingsFormat.runVolumeVoxelizationAsync); if (oldFrameSettingsFormat.lightLoopSettings != null) { newFrameSettingsFormat.SetEnabled(FrameSettingsField.DeferredTile, oldFrameSettingsFormat.lightLoopSettings.enableDeferredTileAndCluster); newFrameSettingsFormat.SetEnabled(FrameSettingsField.ComputeLightEvaluation, oldFrameSettingsFormat.lightLoopSettings.enableComputeLightEvaluation); newFrameSettingsFormat.SetEnabled(FrameSettingsField.ComputeLightVariants, oldFrameSettingsFormat.lightLoopSettings.enableComputeLightVariants); newFrameSettingsFormat.SetEnabled(FrameSettingsField.ComputeMaterialVariants, oldFrameSettingsFormat.lightLoopSettings.enableComputeMaterialVariants); newFrameSettingsFormat.SetEnabled(FrameSettingsField.FPTLForForwardOpaque, oldFrameSettingsFormat.lightLoopSettings.enableFptlForForwardOpaque); newFrameSettingsFormat.SetEnabled(FrameSettingsField.BigTilePrepass, oldFrameSettingsFormat.lightLoopSettings.enableBigTilePrepass); } // OverrideMask newFrameSettingsOverrideMask.mask = new BitArray128(); Array values = Enum.GetValues(typeof(ObsoleteFrameSettingsOverrides)); foreach (ObsoleteFrameSettingsOverrides val in values) { if ((val & oldFrameSettingsFormat.overrides) > 0) { switch (val) { case ObsoleteFrameSettingsOverrides.Shadow: newFrameSettingsOverrideMask.mask[(int)FrameSettingsField.ShadowMaps] = true; break; case ObsoleteFrameSettingsOverrides.ContactShadow: newFrameSettingsOverrideMask.mask[(int)FrameSettingsField.ContactShadows] = true; break; case ObsoleteFrameSettingsOverrides.ShadowMask: newFrameSettingsOverrideMask.mask[(int)FrameSettingsField.Shadowmask] = true; break; case ObsoleteFrameSettingsOverrides.SSR: newFrameSettingsOverrideMask.mask[(int)FrameSettingsField.SSR] = true; break; case ObsoleteFrameSettingsOverrides.SSAO: newFrameSettingsOverrideMask.mask[(int)FrameSettingsField.SSAO] = true; break; case ObsoleteFrameSettingsOverrides.SubsurfaceScattering: newFrameSettingsOverrideMask.mask[(int)FrameSettingsField.SubsurfaceScattering] = true; break; case ObsoleteFrameSettingsOverrides.Transmission: newFrameSettingsOverrideMask.mask[(int)FrameSettingsField.Transmission] = true; break; case ObsoleteFrameSettingsOverrides.AtmosphericScaterring: newFrameSettingsOverrideMask.mask[(int)FrameSettingsField.AtmosphericScattering] = true; break; case ObsoleteFrameSettingsOverrides.Volumetrics: newFrameSettingsOverrideMask.mask[(int)FrameSettingsField.Volumetrics] = true; break; case ObsoleteFrameSettingsOverrides.ReprojectionForVolumetrics: newFrameSettingsOverrideMask.mask[(int)FrameSettingsField.ReprojectionForVolumetrics] = true; break; case ObsoleteFrameSettingsOverrides.LightLayers: newFrameSettingsOverrideMask.mask[(int)FrameSettingsField.LightLayers] = true; break; case ObsoleteFrameSettingsOverrides.ShaderLitMode: newFrameSettingsOverrideMask.mask[(int)FrameSettingsField.LitShaderMode] = true; break; case ObsoleteFrameSettingsOverrides.DepthPrepassWithDeferredRendering: newFrameSettingsOverrideMask.mask[(int)FrameSettingsField.DepthPrepassWithDeferredRendering] = true; break; case ObsoleteFrameSettingsOverrides.TransparentPrepass: newFrameSettingsOverrideMask.mask[(int)FrameSettingsField.TransparentPrepass] = true; break; case ObsoleteFrameSettingsOverrides.MotionVectors: newFrameSettingsOverrideMask.mask[(int)FrameSettingsField.MotionVectors] = true; break; case ObsoleteFrameSettingsOverrides.ObjectMotionVectors: newFrameSettingsOverrideMask.mask[(int)FrameSettingsField.ObjectMotionVectors] = true; break; case ObsoleteFrameSettingsOverrides.Decals: newFrameSettingsOverrideMask.mask[(int)FrameSettingsField.Decals] = true; break; case ObsoleteFrameSettingsOverrides.RoughRefraction: newFrameSettingsOverrideMask.mask[(int)FrameSettingsField.Refraction] = true; break; case ObsoleteFrameSettingsOverrides.TransparentPostpass: newFrameSettingsOverrideMask.mask[(int)FrameSettingsField.TransparentPostpass] = true; break; case ObsoleteFrameSettingsOverrides.Distortion: newFrameSettingsOverrideMask.mask[(int)FrameSettingsField.Distortion] = true; break; case ObsoleteFrameSettingsOverrides.Postprocess: newFrameSettingsOverrideMask.mask[(int)FrameSettingsField.Postprocess] = true; break; case ObsoleteFrameSettingsOverrides.OpaqueObjects: newFrameSettingsOverrideMask.mask[(int)FrameSettingsField.OpaqueObjects] = true; break; case ObsoleteFrameSettingsOverrides.TransparentObjects: newFrameSettingsOverrideMask.mask[(int)FrameSettingsField.TransparentObjects] = true; break; case ObsoleteFrameSettingsOverrides.MSAA: newFrameSettingsOverrideMask.mask[(int)FrameSettingsField.MSAA] = true; break; case ObsoleteFrameSettingsOverrides.ExposureControl: newFrameSettingsOverrideMask.mask[(int)FrameSettingsField.ExposureControl] = true; break; case ObsoleteFrameSettingsOverrides.AsyncCompute: newFrameSettingsOverrideMask.mask[(int)FrameSettingsField.AsyncCompute] = true; break; case ObsoleteFrameSettingsOverrides.LightListAsync: newFrameSettingsOverrideMask.mask[(int)FrameSettingsField.LightListAsync] = true; break; case ObsoleteFrameSettingsOverrides.SSRAsync: newFrameSettingsOverrideMask.mask[(int)FrameSettingsField.SSRAsync] = true; break; case ObsoleteFrameSettingsOverrides.SSAOAsync: newFrameSettingsOverrideMask.mask[(int)FrameSettingsField.SSAOAsync] = true; break; case ObsoleteFrameSettingsOverrides.ContactShadowsAsync: newFrameSettingsOverrideMask.mask[(int)FrameSettingsField.ContactShadowsAsync] = true; break; case ObsoleteFrameSettingsOverrides.VolumeVoxelizationsAsync: newFrameSettingsOverrideMask.mask[(int)FrameSettingsField.VolumeVoxelizationsAsync] = true; break; default: throw new ArgumentException("Unknown ObsoleteFrameSettingsOverride, was " + val); } } } if (oldFrameSettingsFormat.lightLoopSettings != null) { values = Enum.GetValues(typeof(ObsoleteLightLoopSettingsOverrides)); foreach (ObsoleteLightLoopSettingsOverrides val in values) { if ((val & oldFrameSettingsFormat.lightLoopSettings.overrides) > 0) { switch (val) { case ObsoleteLightLoopSettingsOverrides.TileAndCluster: newFrameSettingsOverrideMask.mask[(int)FrameSettingsField.DeferredTile] = true; break; case ObsoleteLightLoopSettingsOverrides.BigTilePrepass: newFrameSettingsOverrideMask.mask[(int)FrameSettingsField.BigTilePrepass] = true; break; case ObsoleteLightLoopSettingsOverrides.ComputeLightEvaluation: newFrameSettingsOverrideMask.mask[(int)FrameSettingsField.ComputeLightEvaluation] = true; break; case ObsoleteLightLoopSettingsOverrides.ComputeLightVariants: newFrameSettingsOverrideMask.mask[(int)FrameSettingsField.ComputeLightVariants] = true; break; case ObsoleteLightLoopSettingsOverrides.ComputeMaterialVariants: newFrameSettingsOverrideMask.mask[(int)FrameSettingsField.ComputeMaterialVariants] = true; break; case ObsoleteLightLoopSettingsOverrides.FptlForForwardOpaque: newFrameSettingsOverrideMask.mask[(int)FrameSettingsField.FPTLForForwardOpaque] = true; break; default: throw new ArgumentException("Unknown ObsoleteLightLoopSettingsOverrides"); } } } } //free space: oldFrameSettingsFormat = null; } #pragma warning restore 618 // Type or member is obsolete internal static void MigrateToCustomPostprocessAndCustomPass(ref FrameSettings cameraFrameSettings) { cameraFrameSettings.SetEnabled(FrameSettingsField.CustomPass, true); cameraFrameSettings.SetEnabled(FrameSettingsField.CustomPostProcess, true); } internal static void MigrateToAfterPostprocess(ref FrameSettings cameraFrameSettings) { cameraFrameSettings.SetEnabled(FrameSettingsField.AfterPostprocess, true); } internal static void MigrateToDefaultReflectionSettings(ref FrameSettings cameraFrameSettings) { cameraFrameSettings.SetEnabled(FrameSettingsField.ReflectionProbe, true); cameraFrameSettings.SetEnabled(FrameSettingsField.PlanarProbe, true); cameraFrameSettings.SetEnabled(FrameSettingsField.ReplaceDiffuseForIndirect, false); cameraFrameSettings.SetEnabled(FrameSettingsField.SkyReflection, true); } internal static void MigrateToNoReflectionRealtimeSettings(ref FrameSettings cameraFrameSettings) { cameraFrameSettings.SetEnabled(FrameSettingsField.ReflectionProbe, true); cameraFrameSettings.SetEnabled(FrameSettingsField.PlanarProbe, false); cameraFrameSettings.SetEnabled(FrameSettingsField.ReplaceDiffuseForIndirect, false); cameraFrameSettings.SetEnabled(FrameSettingsField.SkyReflection, true); } internal static void MigrateToNoReflectionSettings(ref FrameSettings cameraFrameSettings) { cameraFrameSettings.SetEnabled(FrameSettingsField.ReflectionProbe, false); cameraFrameSettings.SetEnabled(FrameSettingsField.PlanarProbe, false); cameraFrameSettings.SetEnabled(FrameSettingsField.ReplaceDiffuseForIndirect, true); cameraFrameSettings.SetEnabled(FrameSettingsField.SkyReflection, false); } internal static void MigrateToPostProcess(ref FrameSettings cameraFrameSettings) { cameraFrameSettings.SetEnabled(FrameSettingsField.StopNaN, true); cameraFrameSettings.SetEnabled(FrameSettingsField.DepthOfField, true); cameraFrameSettings.SetEnabled(FrameSettingsField.MotionBlur, true); cameraFrameSettings.SetEnabled(FrameSettingsField.PaniniProjection, true); cameraFrameSettings.SetEnabled(FrameSettingsField.Bloom, true); cameraFrameSettings.SetEnabled(FrameSettingsField.LensDistortion, true); cameraFrameSettings.SetEnabled(FrameSettingsField.ChromaticAberration, true); cameraFrameSettings.SetEnabled(FrameSettingsField.Vignette, true); cameraFrameSettings.SetEnabled(FrameSettingsField.ColorGrading, true); cameraFrameSettings.SetEnabled(FrameSettingsField.FilmGrain, true); cameraFrameSettings.SetEnabled(FrameSettingsField.Dithering, true); cameraFrameSettings.SetEnabled(FrameSettingsField.Antialiasing, true); } internal static void MigrateToDirectSpecularLighting(ref FrameSettings cameraFrameSettings) { cameraFrameSettings.SetEnabled(FrameSettingsField.DirectSpecularLighting, true); } internal static void MigrateToNoDirectSpecularLighting(ref FrameSettings cameraFrameSettings) { cameraFrameSettings.SetEnabled(FrameSettingsField.DirectSpecularLighting, false); } internal static void MigrateToRayTracing(ref FrameSettings cameraFrameSettings) { cameraFrameSettings.SetEnabled(FrameSettingsField.RayTracing, true); } internal static void MigrateToSeparateColorGradingAndTonemapping(ref FrameSettings cameraFrameSettings) { cameraFrameSettings.SetEnabled(FrameSettingsField.Tonemapping, true); } internal static void MigrateSubsurfaceParams(ref FrameSettings fs, bool previouslyHighQuality) { // SSS moved from 25 to 46. fs.SetEnabled(FrameSettingsField.SubsurfaceScattering, fs.bitDatas[25]); // Set the defaults. fs.sssQualityMode = previouslyHighQuality ? SssQualityMode.OverrideQualitySettings : SssQualityMode.FromQualitySettings; fs.sssQualityLevel = 0; fs.sssCustomSampleBudget = previouslyHighQuality ? 55 : (int)DefaultSssSampleBudgetForQualityLevel.Low; } internal static void MigrateRoughDistortion(ref FrameSettings cameraFrameSettings) { cameraFrameSettings.SetEnabled(FrameSettingsField.RoughDistortion, true); } internal static void MigrateVirtualTexturing(ref FrameSettings cameraFrameSettings) { cameraFrameSettings.SetEnabled(FrameSettingsField.VirtualTexturing, true); } } }