Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions com.unity.render-pipelines.high-definition/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
- Fixed issue with automatic exposure settings not updating scene view.
- Fixed issue with velocity rejection in post-DoF TAA. Fixing this reduces ghosting (case 1304381).
- Fixed missing option to use POM on emissive for tessellated shaders.
- Fixed ability to override AlphaToMask FrameSetting while camera in deferred lit shader mode

### Changed
- Changed Window/Render Pipeline/HD Render Pipeline Wizard to Window/Rendering/HDRP Wizard
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -183,59 +183,26 @@ static void Drawer_SectionRenderingSettings(SerializedFrameSettings serialized,
bool msaaEnablable = hdrpSettings.supportMSAA && ((hdrpAssetSupportForward && (frameSettingsOverrideToForward || defaultForwardUsed)) || hdrpAssetIsForward) && !hdrpSettings.supportRayTracing;
area.AmmendInfo(FrameSettingsField.MSAA,
overrideable: () => msaaEnablable,
overridedDefaultValue: msaaEnablable && defaultFrameSettings.IsEnabled(FrameSettingsField.MSAA),
customOverrideable: () =>
{
switch (hdrpSettings.supportedLitShaderMode)
{
case RenderPipelineSettings.SupportedLitShaderMode.ForwardOnly:
return false; //negative dependency
case RenderPipelineSettings.SupportedLitShaderMode.DeferredOnly:
return true; //negative dependency
case RenderPipelineSettings.SupportedLitShaderMode.Both:
return !(frameSettingsOverrideToForward || defaultForwardUsed); //negative dependency
default:
throw new System.ArgumentOutOfRangeException("Unknown ShaderLitMode");
}
});
ignoreDependencies: true,
overridedDefaultValue: msaaEnablable && defaultFrameSettings.IsEnabled(FrameSettingsField.MSAA));

bool msaaIsOff = (msaaEnablable && serialized.GetOverrides(FrameSettingsField.MSAA)) ? !(serialized.IsEnabled(FrameSettingsField.MSAA) ?? false) : !defaultFrameSettings.IsEnabled(FrameSettingsField.MSAA);
area.AmmendInfo(FrameSettingsField.AlphaToMask,
overrideable: () => msaaEnablable && !msaaIsOff,
ignoreDependencies: true,
overridedDefaultValue: msaaEnablable && defaultFrameSettings.IsEnabled(FrameSettingsField.AlphaToMask) && !msaaIsOff);

bool depthPrepassEnablable = (hdrpAssetSupportDeferred && (defaultDeferredUsed || frameSettingsOverrideToDeferred)) || (hdrpAssetIsDeferred);
area.AmmendInfo(FrameSettingsField.DepthPrepassWithDeferredRendering,
overrideable: () => depthPrepassEnablable,
overridedDefaultValue: depthPrepassEnablable && defaultFrameSettings.IsEnabled(FrameSettingsField.DepthPrepassWithDeferredRendering),
customOverrideable: () =>
{
switch (hdrpSettings.supportedLitShaderMode)
{
case RenderPipelineSettings.SupportedLitShaderMode.ForwardOnly:
return false;
case RenderPipelineSettings.SupportedLitShaderMode.DeferredOnly:
return true;
case RenderPipelineSettings.SupportedLitShaderMode.Both:
return frameSettingsOverrideToDeferred || defaultDeferredUsed;
default:
throw new System.ArgumentOutOfRangeException("Unknown ShaderLitMode");
}
});
ignoreDependencies: true,
overridedDefaultValue: depthPrepassEnablable && defaultFrameSettings.IsEnabled(FrameSettingsField.DepthPrepassWithDeferredRendering));

bool clearGBufferEnablable = (hdrpAssetSupportDeferred && (defaultDeferredUsed || frameSettingsOverrideToDeferred)) || (hdrpAssetIsDeferred);
area.AmmendInfo(FrameSettingsField.ClearGBuffers,
overrideable: () => clearGBufferEnablable,
overridedDefaultValue: clearGBufferEnablable && defaultFrameSettings.IsEnabled(FrameSettingsField.ClearGBuffers),
customOverrideable: () =>
{
switch (hdrpSettings.supportedLitShaderMode)
{
case RenderPipelineSettings.SupportedLitShaderMode.ForwardOnly:
return false;
case RenderPipelineSettings.SupportedLitShaderMode.DeferredOnly:
return true;
case RenderPipelineSettings.SupportedLitShaderMode.Both:
return frameSettingsOverrideToDeferred || defaultDeferredUsed;
default:
throw new System.ArgumentOutOfRangeException("Unknown ShaderLitMode");
}
});
ignoreDependencies: true,
overridedDefaultValue: clearGBufferEnablable && defaultFrameSettings.IsEnabled(FrameSettingsField.ClearGBuffers));

area.AmmendInfo(FrameSettingsField.RayTracing, overrideable: () => hdrpSettings.supportRayTracing);
#if !ENABLE_VIRTUALTEXTURES
Expand All @@ -262,14 +229,16 @@ static void Drawer_SectionRenderingSettings(SerializedFrameSettings serialized,
overridedDefaultValue: ScalableLevel3ForFrameSettingsUIOnly.Low,
customGetter: () => (ScalableLevel3ForFrameSettingsUIOnly)serialized.lodBiasQualityLevel.intValue,
customSetter: v => serialized.lodBiasQualityLevel.intValue = (int)v,
customOverrideable: () => serialized.lodBiasMode.GetEnumValue<LODBiasMode>() != LODBiasMode.OverrideQualitySettings,
overrideable: () => serialized.lodBiasMode.GetEnumValue<LODBiasMode>() != LODBiasMode.OverrideQualitySettings,
ignoreDependencies: true,
hasMixedValues: serialized.lodBiasQualityLevel.hasMultipleDifferentValues);

area.AmmendInfo(FrameSettingsField.LODBias,
overridedDefaultValue: hdrpSettings.lodBias[serialized.lodBiasQualityLevel.intValue],
customGetter: () => serialized.lodBias.floatValue,
customSetter: v => serialized.lodBias.floatValue = (float)v,
customOverrideable: () => serialized.lodBiasMode.GetEnumValue<LODBiasMode>() != LODBiasMode.FromQualitySettings,
overrideable: () => serialized.lodBiasMode.GetEnumValue<LODBiasMode>() != LODBiasMode.FromQualitySettings,
ignoreDependencies: true,
labelOverride: serialized.lodBiasMode.GetEnumValue<LODBiasMode>() == LODBiasMode.ScaleQualitySettings ? "Scale Factor" : "LOD Bias",
hasMixedValues: serialized.lodBias.hasMultipleDifferentValues);

Expand All @@ -284,14 +253,16 @@ static void Drawer_SectionRenderingSettings(SerializedFrameSettings serialized,
overridedDefaultValue: ScalableLevel3ForFrameSettingsUIOnly.Low,
customGetter: () => (ScalableLevel3ForFrameSettingsUIOnly)serialized.maximumLODLevelQualityLevel.intValue,
customSetter: v => serialized.maximumLODLevelQualityLevel.intValue = (int)v,
customOverrideable: () => serialized.maximumLODLevelMode.GetEnumValue<MaximumLODLevelMode>() != MaximumLODLevelMode.OverrideQualitySettings,
overrideable: () => serialized.maximumLODLevelMode.GetEnumValue<MaximumLODLevelMode>() != MaximumLODLevelMode.OverrideQualitySettings,
ignoreDependencies: true,
hasMixedValues: serialized.maximumLODLevelQualityLevel.hasMultipleDifferentValues);

area.AmmendInfo(FrameSettingsField.MaximumLODLevel,
overridedDefaultValue: hdrpSettings.maximumLODLevel[serialized.maximumLODLevelQualityLevel.intValue],
customGetter: () => serialized.maximumLODLevel.intValue,
customSetter: v => serialized.maximumLODLevel.intValue = (int)v,
customOverrideable: () => serialized.maximumLODLevelMode.GetEnumValue<MaximumLODLevelMode>() != MaximumLODLevelMode.FromQualitySettings,
overrideable: () => serialized.maximumLODLevelMode.GetEnumValue<MaximumLODLevelMode>() != MaximumLODLevelMode.FromQualitySettings,
ignoreDependencies: true,
labelOverride: serialized.maximumLODLevelMode.GetEnumValue<MaximumLODLevelMode>() == MaximumLODLevelMode.OffsetQualitySettings ? "Offset Factor" : "Maximum LOD Level",
hasMixedValues: serialized.maximumLODLevel.hasMultipleDifferentValues);

Expand Down Expand Up @@ -336,26 +307,29 @@ static void Drawer_SectionLightingSettings(SerializedFrameSettings serialized, E
overridedDefaultValue: SssQualityMode.FromQualitySettings,
customGetter: () => serialized.sssQualityMode.GetEnumValue<SssQualityMode>(),
customSetter: v => serialized.sssQualityMode.SetEnumValue((SssQualityMode)v),
customOverrideable: () => hdrpSettings.supportSubsurfaceScattering
overrideable: () => hdrpSettings.supportSubsurfaceScattering
&& (serialized.IsEnabled(FrameSettingsField.SubsurfaceScattering) ?? false),
ignoreDependencies: true,
hasMixedValues: serialized.sssQualityMode.hasMultipleDifferentValues
);
area.AmmendInfo(FrameSettingsField.SssQualityLevel,
overridedDefaultValue: ScalableLevel3ForFrameSettingsUIOnly.Low,
customGetter: () => (ScalableLevel3ForFrameSettingsUIOnly)serialized.sssQualityLevel.intValue, // 3 levels
customSetter: v => serialized.sssQualityLevel.intValue = Math.Max(0, Math.Min((int)v, 2)), // Levels 0-2
customOverrideable: () => hdrpSettings.supportSubsurfaceScattering
overrideable: () => hdrpSettings.supportSubsurfaceScattering
&& (serialized.IsEnabled(FrameSettingsField.SubsurfaceScattering) ?? false)
&& (serialized.sssQualityMode.GetEnumValue<SssQualityMode>() == SssQualityMode.FromQualitySettings),
ignoreDependencies: true,
hasMixedValues: serialized.sssQualityLevel.hasMultipleDifferentValues
);
area.AmmendInfo(FrameSettingsField.SssCustomSampleBudget,
overridedDefaultValue: (int)DefaultSssSampleBudgetForQualityLevel.Low,
customGetter: () => serialized.sssCustomSampleBudget.intValue,
customSetter: v => serialized.sssCustomSampleBudget.intValue = Math.Max(1, Math.Min((int)v, (int)DefaultSssSampleBudgetForQualityLevel.Max)),
customOverrideable: () => hdrpSettings.supportSubsurfaceScattering
overrideable: () => hdrpSettings.supportSubsurfaceScattering
&& (serialized.IsEnabled(FrameSettingsField.SubsurfaceScattering) ?? false)
&& (serialized.sssQualityMode.GetEnumValue<SssQualityMode>() != SssQualityMode.FromQualitySettings),
ignoreDependencies: true,
hasMixedValues: serialized.sssCustomSampleBudget.hasMultipleDifferentValues
);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ private struct Field
{
public FrameSettingsField field;
public Func<bool> overrideable;
public Func<bool> customOverrideable;
public bool ignoreDependencies;
public Func<object> customGetter;
public Action<object> customSetter;
public object overridedDefaultValue;
Expand All @@ -60,7 +60,7 @@ public bool IsOverrideableWithDependencies(SerializedFrameSettings serialized, F
FrameSettingsFieldAttribute attribute = attributes[field];
bool locallyOverrideable = overrideable == null || overrideable();
FrameSettingsField[] dependencies = attribute.dependencies;
if (dependencies == null || !locallyOverrideable)
if (dependencies == null || ignoreDependencies || !locallyOverrideable)
return locallyOverrideable;

bool dependenciesOverrideable = true;
Expand Down Expand Up @@ -96,7 +96,7 @@ public static OverridableFrameSettingsArea GetGroupContent(int groupIndex, Frame
return area;
}

public void AmmendInfo(FrameSettingsField field, Func<bool> overrideable = null, Func<object> customGetter = null, Action<object> customSetter = null, object overridedDefaultValue = null, Func<bool> customOverrideable = null, string labelOverride = null, bool hasMixedValues = false)
public void AmmendInfo(FrameSettingsField field, Func<bool> overrideable = null, bool ignoreDependencies = false, Func<object> customGetter = null, Action<object> customSetter = null, object overridedDefaultValue = null, string labelOverride = null, bool hasMixedValues = false)
{
var matchIndex = fields.FindIndex(f => f.field == field);

Expand All @@ -106,8 +106,7 @@ public void AmmendInfo(FrameSettingsField field, Func<bool> overrideable = null,
var match = fields[matchIndex];
if (overrideable != null)
match.overrideable = overrideable;
if (customOverrideable != null)
match.customOverrideable = customOverrideable;
match.ignoreDependencies = ignoreDependencies;
if (customGetter != null)
match.customGetter = customGetter;
if (customSetter != null)
Expand All @@ -123,9 +122,6 @@ public void AmmendInfo(FrameSettingsField field, Func<bool> overrideable = null,
static bool EvaluateBoolWithOverride(FrameSettingsField field, Field forField, FrameSettings defaultFrameSettings, SerializedFrameSettings serializedFrameSettings, bool negative)
{
bool value;
if (forField.customOverrideable != null)
return forField.customOverrideable() ^ negative;

if (serializedFrameSettings.GetOverrides(field))
value = serializedFrameSettings.IsEnabled(field) ?? false;
else
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ public enum FrameSettingsField
[FrameSettingsField(0, displayedName: "MSAA within Forward", negativeDependencies: new[] { LitShaderMode }, customOrderInGroup: 3, tooltip: "When enabled, Cameras using these Frame Settings calculate MSAA when they render the Scene. Set Lit Shader Mode to Forward to access this option.")]
MSAA = 31,
/// <summary>When enabled, Cameras using these Frame Settings use Alpha To Mask. Activate MSAA to access this option.</summary>
[FrameSettingsField(0, displayedName: "Alpha To Mask", positiveDependencies: new[] { MSAA }, customOrderInGroup: 3, tooltip: "When enabled, Cameras using these Frame Settings use Alpha To Mask. Activate MSAA to access this option.")]
[FrameSettingsField(0, displayedName: "Alpha To Mask", negativeDependencies: new[] { LitShaderMode }, positiveDependencies: new[] { MSAA }, customOrderInGroup: 3, tooltip: "When enabled, Cameras using these Frame Settings use Alpha To Mask. Activate MSAA to access this option.")]
AlphaToMask = 56,
/// <summary>When enabled, Cameras using these Frame Settings render opaque GameObjects.</summary>
[FrameSettingsField(0, autoName: OpaqueObjects, customOrderInGroup: 4, tooltip: "When enabled, Cameras using these Frame Settings render opaque GameObjects.")]
Expand Down