You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

168 lines
11 KiB

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<HDAdditionalCameraData>(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();
}
/// <summary>
/// Updates the internal serialized objects
/// </summary>
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;
}
/// <summary>
/// Applies the modified properties to the serialized objects
/// </summary>
public void Apply()
{
serializedObject.ApplyModifiedProperties();
serializedAdditionalDataObject.ApplyModifiedProperties();
}
/// <summary>
/// Refreshes the serialized properties from the serialized objects
/// </summary>
public void Refresh()
{
}
}
}