void DrawDilationSettings(SerializedProperty dilationSettings) { var enableDilation = dilationSettings.FindPropertyRelative("enableDilation"); var maxDilationSampleDistance = dilationSettings.FindPropertyRelative("dilationDistance"); var dilationValidityThreshold = dilationSettings.FindPropertyRelative("dilationValidityThreshold"); float dilationValidityThresholdInverted = 1f - dilationValidityThreshold.floatValue; var dilationIterations = dilationSettings.FindPropertyRelative("dilationIterations"); var dilationInvSquaredWeight = dilationSettings.FindPropertyRelative("squaredDistWeighting"); EditorGUILayout.LabelField(Styles.dilationSettingsTitle, EditorStyles.boldLabel); EditorGUI.indentLevel++; enableDilation.boolValue = EditorGUILayout.Toggle(Styles.enableDilation, enableDilation.boolValue); EditorGUI.BeginDisabledGroup(!enableDilation.boolValue); maxDilationSampleDistance.floatValue = Mathf.Max(EditorGUILayout.FloatField(Styles.dilationDistance, maxDilationSampleDistance.floatValue), 0); dilationValidityThresholdInverted = EditorGUILayout.Slider(Styles.dilationValidity, dilationValidityThresholdInverted, 0f, 0.95f); dilationValidityThreshold.floatValue = Mathf.Max(0.05f, 1.0f - dilationValidityThresholdInverted); dilationIterations.intValue = EditorGUILayout.IntSlider(Styles.dilationIterationCount, dilationIterations.intValue, 1, 5); dilationInvSquaredWeight.boolValue = EditorGUILayout.Toggle(Styles.dilationSquaredDistanceWeighting, dilationInvSquaredWeight.boolValue); EditorGUI.indentLevel--; EditorGUI.EndDisabledGroup(); if (Unsupported.IsDeveloperMode()) { if (GUILayout.Button(EditorGUIUtility.TrTextContent("Refresh dilation"), EditorStyles.miniButton)) { ProbeGIBaking.RevertDilation(); ProbeGIBaking.PerformDilation(); } } }
public override void OnInspectorGUI() { var renderPipelineAsset = GraphicsSettings.renderPipelineAsset; if (renderPipelineAsset != null && renderPipelineAsset.GetType().Name == "HDRenderPipelineAsset") { serializedObject.Update(); if (!ProbeReferenceVolume.instance.isInitialized) { EditorGUILayout.HelpBox("The probe volumes feature is disabled. The feature needs to be enabled in the HDRP Settings and on the used HDRP asset.", MessageType.Warning, wide: true); return; } var probeReferenceVolumes = FindObjectsOfType <ProbeReferenceVolumeAuthoring>(); bool mismatchedProfile = false; if (probeReferenceVolumes.Length > 1) { foreach (var o1 in probeReferenceVolumes) { foreach (var o2 in probeReferenceVolumes) { if (!o1.profile.IsEquivalent(o2.profile)) { mismatchedProfile = true; } } } if (mismatchedProfile) { EditorGUILayout.HelpBox("Multiple Probe Reference Volume components are loaded, but they have different profiles. " + "This is unsupported, please make sure all loaded Probe Reference Volume have the same profile or profiles with equal values.", MessageType.Error, wide: true); } } EditorGUI.BeginChangeCheck(); // The layout system breaks alignment when mixing inspector fields with custom layout'd // fields, do the layout manually instead int buttonWidth = 60; float indentOffset = EditorGUI.indentLevel * 15f; var lineRect = EditorGUILayout.GetControlRect(); var labelRect = new Rect(lineRect.x, lineRect.y, EditorGUIUtility.labelWidth - indentOffset, lineRect.height); var fieldRect = new Rect(labelRect.xMax, lineRect.y, lineRect.width - labelRect.width - buttonWidth, lineRect.height); var buttonNewRect = new Rect(fieldRect.xMax, lineRect.y, buttonWidth, lineRect.height); GUIContent guiContent = EditorGUIUtility.TrTextContent("Profile", "A reference to a profile asset."); EditorGUI.PrefixLabel(labelRect, guiContent); using (var scope = new EditorGUI.ChangeCheckScope()) { EditorGUI.BeginProperty(fieldRect, GUIContent.none, m_Profile); m_Profile.objectReferenceValue = (ProbeReferenceVolumeProfile)EditorGUI.ObjectField(fieldRect, m_Profile.objectReferenceValue, typeof(ProbeReferenceVolumeProfile), false); EditorGUI.EndProperty(); } if (GUI.Button(buttonNewRect, EditorGUIUtility.TrTextContent("New", "Create a new profile."), EditorStyles.miniButton)) { // By default, try to put assets in a folder next to the currently active // scene file. If the user isn't a scene, put them in root instead. var targetName = actualTarget.name; var scene = actualTarget.gameObject.scene; var asset = ProbeReferenceVolumeAuthoring.CreateReferenceVolumeProfile(scene, targetName); m_Profile.objectReferenceValue = asset; } m_VolumeAsset.objectReferenceValue = EditorGUILayout.ObjectField(s_DataAssetLabel, m_VolumeAsset.objectReferenceValue, typeof(ProbeVolumeAsset), false); DilationGroupEnabled = EditorGUILayout.BeginFoldoutHeaderGroup(DilationGroupEnabled, "Dilation"); if (DilationGroupEnabled) { GUIContent dilateGUI = EditorGUIUtility.TrTextContent("Dilate", "Enable probe dilation. Disable only for debug purposes."); m_Dilate.boolValue = EditorGUILayout.Toggle(dilateGUI, m_Dilate.boolValue); EditorGUI.BeginDisabledGroup(!m_Dilate.boolValue); m_MaxDilationSampleDistance.floatValue = EditorGUILayout.FloatField("Dilation Distance", m_MaxDilationSampleDistance.floatValue); DilationValidityThresholdInverted = EditorGUILayout.Slider("Dilation Validity Threshold", DilationValidityThresholdInverted, 0f, 1f); EditorGUILayout.LabelField("Advanced", EditorStyles.boldLabel); EditorGUI.indentLevel++; m_DilationIterations.intValue = EditorGUILayout.IntSlider("Dilation Iteration Count", m_DilationIterations.intValue, 1, 5); m_DilationInvSquaredWeight.boolValue = EditorGUILayout.Toggle("Squared Distance Weighting", m_DilationInvSquaredWeight.boolValue); EditorGUI.indentLevel--; if (GUILayout.Button(EditorGUIUtility.TrTextContent("Refresh dilation"), EditorStyles.miniButton)) { ProbeGIBaking.RevertDilation(); ProbeGIBaking.PerformDilation(); } EditorGUI.EndDisabledGroup(); } EditorGUILayout.EndFoldoutHeaderGroup(); if (EditorGUI.EndChangeCheck()) { Constrain(); serializedObject.ApplyModifiedProperties(); } } else { EditorGUILayout.HelpBox("Probe Volume is not a supported feature by this SRP.", MessageType.Error, wide: true); } }