using UnityEngine; using UnityEngine.Rendering.HighDefinition; namespace UnityEditor.Rendering.HighDefinition { class SerializedHDCamera : ISerializedCamera { public SerializedObject serializedObject { get; } public SerializedObject serializedAdditionalDataObject { get; } public CameraEditor.Settings baseCameraSettings { get; } // This one is internal in UnityEditor for whatever reason... public SerializedProperty projectionMatrixMode { get; } // Common properties public SerializedProperty dithering { get; } public SerializedProperty stopNaNs { get; } public SerializedProperty allowDynamicResolution { get; } public SerializedProperty volumeLayerMask { get; } public SerializedProperty clearDepth { get; } public SerializedProperty antialiasing { get; } // HDRP specific properties public SerializedProperty exposureTarget; public SerializedProperty allowDeepLearningSuperSampling; public SerializedProperty deepLearningSuperSamplingUseCustomQualitySettings; public SerializedProperty deepLearningSuperSamplingQuality; public SerializedProperty deepLearningSuperSamplingUseCustomAttributes; public SerializedProperty deepLearningSuperSamplingUseOptimalSettings; public SerializedProperty deepLearningSuperSamplingSharpening; public SerializedProperty allowFidelityFX2SuperResolution; public SerializedProperty fidelityFX2SuperResolutionUseCustomQualitySettings; public SerializedProperty fidelityFX2SuperResolutionQuality; public SerializedProperty fidelityFX2SuperResolutionUseCustomAttributes; public SerializedProperty fidelityFX2SuperResolutionUseOptimalSettings; public SerializedProperty fidelityFX2SuperResolutionEnableSharpening; public SerializedProperty fidelityFX2SuperResolutionSharpening; public SerializedProperty fsrOverrideSharpness; public SerializedProperty fsrSharpness; public SerializedProperty SMAAQuality; public SerializedProperty taaSharpenMode; public SerializedProperty taaSharpenStrength; public SerializedProperty taaRingingReduction; public SerializedProperty taaHistorySharpening; public SerializedProperty taaAntiFlicker; public SerializedProperty taaMotionVectorRejection; public SerializedProperty taaAntiRinging; public SerializedProperty taaBaseBlendFactor; public SerializedProperty taaJitterScale; public SerializedProperty taaQualityLevel; public SerializedProperty clearColorMode; public SerializedProperty backgroundColorHDR; public SerializedProperty xrRendering; public SerializedProperty passThrough; public SerializedProperty customRenderingSettings; public SerializedProperty volumeAnchorOverride; public SerializedFrameSettings frameSettings; public SerializedProperty probeLayerMask; public SerializedHDCamera(SerializedObject serializedObject) { this.serializedObject = serializedObject; projectionMatrixMode = serializedObject.FindProperty("m_projectionMatrixMode"); var additionals = CoreEditorUtils.GetAdditionalData(serializedObject.targetObjects, HDAdditionalCameraData.InitDefaultHDAdditionalCameraData); serializedAdditionalDataObject = new SerializedObject(additionals); var hideFlags = serializedAdditionalDataObject.FindProperty("m_ObjectHideFlags"); // We don't hide additional camera data anymore on UX team request. To be compatible with already author scene we force to be visible if ((hideFlags.intValue & (int)HideFlags.HideInInspector) > 0) hideFlags.intValue = (int)HideFlags.None; serializedAdditionalDataObject.ApplyModifiedProperties(); // Common properties dithering = serializedAdditionalDataObject.Find((HDAdditionalCameraData d) => d.dithering); stopNaNs = serializedAdditionalDataObject.Find((HDAdditionalCameraData d) => d.stopNaNs); allowDynamicResolution = serializedAdditionalDataObject.Find((HDAdditionalCameraData d) => d.allowDynamicResolution); volumeLayerMask = serializedAdditionalDataObject.Find((HDAdditionalCameraData d) => d.volumeLayerMask); clearDepth = serializedAdditionalDataObject.Find((HDAdditionalCameraData d) => d.clearDepth); antialiasing = serializedAdditionalDataObject.Find((HDAdditionalCameraData d) => d.antialiasing); exposureTarget = serializedAdditionalDataObject.Find((HDAdditionalCameraData d) => d.exposureTarget); allowDeepLearningSuperSampling = serializedAdditionalDataObject.Find((HDAdditionalCameraData d) => d.allowDeepLearningSuperSampling); deepLearningSuperSamplingUseCustomQualitySettings = serializedAdditionalDataObject.Find((HDAdditionalCameraData d) => d.deepLearningSuperSamplingUseCustomQualitySettings); deepLearningSuperSamplingQuality = serializedAdditionalDataObject.Find((HDAdditionalCameraData d) => d.deepLearningSuperSamplingQuality); deepLearningSuperSamplingUseCustomAttributes = serializedAdditionalDataObject.Find((HDAdditionalCameraData d) => d.deepLearningSuperSamplingUseCustomAttributes); deepLearningSuperSamplingUseOptimalSettings = serializedAdditionalDataObject.Find((HDAdditionalCameraData d) => d.deepLearningSuperSamplingUseOptimalSettings); deepLearningSuperSamplingSharpening = serializedAdditionalDataObject.Find((HDAdditionalCameraData d) => d.deepLearningSuperSamplingSharpening); allowFidelityFX2SuperResolution = serializedAdditionalDataObject.Find((HDAdditionalCameraData d) => d.allowFidelityFX2SuperResolution); fidelityFX2SuperResolutionUseCustomQualitySettings = serializedAdditionalDataObject.Find((HDAdditionalCameraData d) => d.fidelityFX2SuperResolutionUseCustomQualitySettings); fidelityFX2SuperResolutionQuality = serializedAdditionalDataObject.Find((HDAdditionalCameraData d) => d.fidelityFX2SuperResolutionQuality); fidelityFX2SuperResolutionUseCustomAttributes = serializedAdditionalDataObject.Find((HDAdditionalCameraData d) => d.fidelityFX2SuperResolutionUseCustomAttributes); fidelityFX2SuperResolutionUseOptimalSettings = serializedAdditionalDataObject.Find((HDAdditionalCameraData d) => d.fidelityFX2SuperResolutionUseOptimalSettings); fidelityFX2SuperResolutionEnableSharpening = serializedAdditionalDataObject.Find((HDAdditionalCameraData d) => d.fidelityFX2SuperResolutionEnableSharpening); fidelityFX2SuperResolutionSharpening = serializedAdditionalDataObject.Find((HDAdditionalCameraData d) => d.fidelityFX2SuperResolutionSharpening); fsrOverrideSharpness = serializedAdditionalDataObject.Find((HDAdditionalCameraData d) => d.fsrOverrideSharpness); fsrSharpness = serializedAdditionalDataObject.Find((HDAdditionalCameraData d) => d.fsrSharpness); SMAAQuality = serializedAdditionalDataObject.Find((HDAdditionalCameraData d) => d.SMAAQuality); taaSharpenMode = serializedAdditionalDataObject.Find((HDAdditionalCameraData d) => d.taaSharpenMode); taaSharpenStrength = serializedAdditionalDataObject.Find((HDAdditionalCameraData d) => d.taaSharpenStrength); taaRingingReduction = serializedAdditionalDataObject.Find((HDAdditionalCameraData d) => d.taaRingingReduction); taaQualityLevel = serializedAdditionalDataObject.Find((HDAdditionalCameraData d) => d.TAAQuality); taaHistorySharpening = serializedAdditionalDataObject.Find((HDAdditionalCameraData d) => d.taaHistorySharpening); taaAntiFlicker = serializedAdditionalDataObject.Find((HDAdditionalCameraData d) => d.taaAntiFlicker); taaMotionVectorRejection = serializedAdditionalDataObject.Find((HDAdditionalCameraData d) => d.taaMotionVectorRejection); taaAntiRinging = serializedAdditionalDataObject.Find((HDAdditionalCameraData d) => d.taaAntiHistoryRinging); taaQualityLevel = serializedAdditionalDataObject.Find((HDAdditionalCameraData d) => d.TAAQuality); taaBaseBlendFactor = serializedAdditionalDataObject.Find((HDAdditionalCameraData d) => d.taaBaseBlendFactor); taaJitterScale = serializedAdditionalDataObject.Find((HDAdditionalCameraData d) => d.taaJitterScale); clearColorMode = serializedAdditionalDataObject.Find((HDAdditionalCameraData d) => d.clearColorMode); backgroundColorHDR = serializedAdditionalDataObject.Find((HDAdditionalCameraData d) => d.backgroundColorHDR); xrRendering = serializedAdditionalDataObject.Find((HDAdditionalCameraData d) => d.xrRendering); passThrough = serializedAdditionalDataObject.Find((HDAdditionalCameraData d) => d.fullscreenPassthrough); customRenderingSettings = serializedAdditionalDataObject.Find((HDAdditionalCameraData d) => d.customRenderingSettings); volumeAnchorOverride = serializedAdditionalDataObject.Find((HDAdditionalCameraData d) => d.volumeAnchorOverride); probeLayerMask = serializedAdditionalDataObject.Find((HDAdditionalCameraData d) => d.probeLayerMask); frameSettings = new SerializedFrameSettings( serializedAdditionalDataObject.FindProperty("m_RenderingPathCustomFrameSettings"), serializedAdditionalDataObject.Find((HDAdditionalCameraData d) => d.renderingPathCustomFrameSettingsOverrideMask) ); baseCameraSettings = new CameraEditor.Settings(serializedObject); baseCameraSettings.OnEnable(); } /// /// Updates the internal serialized objects /// public void Update() { serializedObject.Update(); serializedAdditionalDataObject.Update(); // Be sure legacy HDR option is disable on camera as it cause banding in SceneView. Yes, it is a contradiction, but well, Unity... // When HDR option is enabled, Unity render in FP16 then convert to 8bit with a stretch copy (this cause banding as it should be convert to sRGB (or other color appropriate color space)), then do a final shader with sRGB conversion // When LDR, unity render in 8bitSRGB, then do a final shader with sRGB conversion // What should be done is just in our Post process we convert to sRGB and store in a linear 10bit, but require C++ change... baseCameraSettings.HDR.boolValue = false; } /// /// Applies the modified properties to the serialized objects /// public void Apply() { serializedObject.ApplyModifiedProperties(); serializedAdditionalDataObject.ApplyModifiedProperties(); } /// /// Refreshes the serialized properties from the serialized objects /// public void Refresh() { } } }