/// <summary> /// Draws the fields required for a TransformParameters object /// </summary> /// <param name="transformProperty">The related serialized property</param> public static void DrawTransformField(ref SerializedProperty transformProperty) { EditorGUILayout.BeginHorizontal(); SerializedProperty positionProperty = transformProperty.FindPropertyRelative("position"); GUILayout.Label("Position", GuiStyles.Label, GUILayout.MaxWidth(160)); GuiHelpers.DrawVector3Field(ref positionProperty); EditorGUILayout.EndHorizontal(); EditorGUILayout.Separator(); EditorGUILayout.BeginHorizontal(); SerializedProperty rotationProperty = transformProperty.FindPropertyRelative("rotation"); GUILayout.Label("Rotation", GuiStyles.Label, GUILayout.MaxWidth(160)); GuiHelpers.DrawVector3Field(ref rotationProperty); EditorGUILayout.EndHorizontal(); EditorGUILayout.Separator(); EditorGUILayout.BeginHorizontal(); SerializedProperty scaleProperty = transformProperty.FindPropertyRelative("scale"); GUILayout.Label("Scale ", GuiStyles.Label, GUILayout.MaxWidth(160)); GuiHelpers.DrawVector3Field(ref scaleProperty); EditorGUILayout.EndHorizontal(); EditorGUILayout.Separator(); SerializedProperty spaceProperty = transformProperty.FindPropertyRelative("space"); GuiHelpers.DrawSpaceField(ref spaceProperty, "Space"); }
/// <summary> /// Displays Texture3D Mask Area /// </summary> private void DisplayTexture3DMaskArea() { EditorGUILayout.BeginVertical(GuiStyles.Background); GuiHelpers.DrawToggleChecker(ref _texture3DMaskBoolProperty, new GUIContent("Texture3D Mask", Aura.ResourcesCollection.texture3DIconTexture, "The \"Texture Mask\" allows to assign a texture mask to the volume.\nRGB -> Will multiply the \"Strength\" parameter of the Color Injection.\nA -> Will multiply the \"Strength\" parameter of the Density and Scattering Injection"), true, true); if (_texture3DMaskBoolProperty.boolValue) { //EditorGUI.BeginDisabledGroup(!_texture3DMaskBoolProperty.boolValue); EditorGUILayout.BeginVertical(GuiStyles.EmptyMiddleAligned); GUILayout.Label(new GUIContent(" Experimental Feature (PREVIEW)", Aura.ResourcesCollection.experimentalIconTexture), GuiStyles.LabelBoldCentered); EditorGUILayout.BeginHorizontal(); GUILayout.Label("Texture3D Mask", GuiStyles.Label, GUILayout.MaxWidth(100)); EditorGUILayout.PropertyField(_texture3DMaskTextureProperty, new GUIContent("")); EditorGUILayout.EndHorizontal(); Texture3D textureMask = (Texture3D)_texture3DMaskTextureProperty.objectReferenceValue; if (textureMask != null) { if (textureMask.width != VolumesCommonDataManager.texture3DMaskSize || textureMask.height != VolumesCommonDataManager.texture3DMaskSize || textureMask.depth != VolumesCommonDataManager.texture3DMaskSize) { GuiHelpers.DrawHelpBox("The Texture3D mask \"" + textureMask.name + "\" of \"" + _currentVolume.name + "\" volume is not of the required size, which is " + VolumesCommonDataManager.texture3DMaskSize + "³", HelpBoxType.Warning); } } EditorGUILayout.Separator(); EditorGUILayout.Separator(); GuiHelpers.DrawTransformField(ref _texture3DMaskTransformProperty); EditorGUILayout.EndVertical(); //EditorGUI.EndDisabledGroup(); } EditorGUILayout.EndVertical(); }
/// <summary> /// Draws the fields required for a LevelsParameters object /// </summary> /// <param name="levelsProperty">The related serialized property</param> public static void DrawLevelsField(ref SerializedProperty levelsProperty) { GuiHelpers.DrawContextualHelpBox("The \"Levels\" parameter will filter the input value.\n\nKeeps the value between the \"Level Thresholds\" and remaps the range from 0 to 1.\""); EditorGUILayout.BeginHorizontal(); GUILayout.Label("Filter Range", GuiStyles.Label, GUILayout.MaxWidth(160)); SerializedProperty levelLowThresholdProperty = levelsProperty.FindPropertyRelative("levelLowThreshold"); SerializedProperty levelHiThresholdProperty = levelsProperty.FindPropertyRelative("levelHiThreshold"); GuiHelpers.DrawMinMaxSlider(ref levelLowThresholdProperty, ref levelHiThresholdProperty, 0, 1); EditorGUILayout.EndHorizontal(); EditorGUILayout.Separator(); SerializedProperty contrastProperty = levelsProperty.FindPropertyRelative("contrast"); DrawFloatField(ref contrastProperty, new GUIContent("Contrast", "Contrast the input mask")); EditorGUILayout.Separator(); GuiHelpers.DrawContextualHelpBox("The \"Output\" parameters will rescale this new range\n\n0 will now equal the lower \"Output Value\" and 1 will now equal the higher."); SerializedProperty outputLowValueProperty = levelsProperty.FindPropertyRelative("outputLowValue"); DrawFloatField(ref outputLowValueProperty, new GUIContent("Output Min", "Output minimum value")); SerializedProperty outputHiValueProperty = levelsProperty.FindPropertyRelative("outputHiValue"); DrawFloatField(ref outputHiValueProperty, new GUIContent("Output Max", "Output maximum value")); }
/// <summary> /// Displays the additional parameters for directional lights /// </summary> private void DisplayDirectionalLightAdditionalSettingsArea() { EditorGUILayout.BeginVertical(); EditorGUILayout.Separator(); GUILayout.Label(_directionalLightSettingsTitleContent, new GUIStyle(GuiStyles.LabelBoldCenteredBig) { fontSize = 15 }); EditorGUILayout.Separator(); GuiHelpers.DrawContextualHelpBox("The \"Enable Out-Of-Phase Color\" parameter allows you to use a color when the view angle is not towards the directional light (the decay is controlled by the scattering factor."); GuiHelpers.DrawToggleChecker(ref _enableOutOfPhaseColorProperty, "Enable Out-Of-Phase Color"); if (_enableOutOfPhaseColorProperty.boolValue) { //EditorGUI.BeginDisabledGroup(!_enableOutOfPhaseColorProperty.boolValue); EditorGUILayout.BeginVertical(); GuiHelpers.DrawContextualHelpBox("The color when the view direction is not towards the directional light."); EditorGUILayout.PropertyField(_outOfPhaseColorProperty); GuiHelpers.DrawFloatField(ref _outOfPhaseColorStrengthProperty, new GUIContent("Strength", "Multiplies the intensity of the color")); EditorGUILayout.EndVertical(); //EditorGUI.EndDisabledGroup(); } EditorGUILayout.Separator(); EditorGUILayout.EndVertical(); }
/// <summary> /// Draws the editor /// </summary> /// <param name="serializedObject"></param> /// <param name="auraComponent"></param> public static void DrawCustomEditor(SerializedObject serializedObject, AuraCamera auraComponent) { serializedObject.Update(); if (auraComponent == null) { EditorGUILayout.BeginVertical(GuiStyles.ButtonNoHover); //GuiHelpers.DrawHeader(Aura.ResourcesCollection.logoTexture); EditorGUILayout.LabelField(new GUIContent(" Aura <b>Base Settings</b>", Aura.ResourcesCollection.baseSettingsPresetIconTexture), new GUIStyle(GuiStyles.LabelCenteredBigBackground) { fontSize = 24 }); EditorGUILayout.Separator(); } else { Initialize(serializedObject); } DisplayBaseSettingsArea(); if (auraComponent == null) { EditorGUILayout.Separator(); GuiHelpers.DisplayHelpToShowHelpBox(); EditorGUILayout.EndVertical(); EditorGUILayout.Separator(); EditorGUILayout.Separator(); } serializedObject.ApplyModifiedProperties(); }
/// <summary> /// Displays distance fadein parameters for spot/point lights' cookies /// </summary> private void DisplayCookieDistanceAttenuationParameters() { EditorGUILayout.BeginVertical(); GUILayout.Label("Cookie Fade-In Attenuation", GuiStyles.LabelCenteredBig); EditorGUILayout.Separator(); EditorGUILayout.Separator(); GuiHelpers.DrawContextualHelpBox("The \"Thresholds\" parameters are the normalized range where the cookie will fade in."); EditorGUILayout.BeginHorizontal(); GUILayout.Label("Fade-In Thresholds", GuiStyles.Label, GUILayout.MaxWidth(160)); GuiHelpers.DrawMinMaxSlider(ref _customCookieDistanceFalloffLowThresholdProperty, ref _customCookieDistanceFalloffHiThresholdProperty, 0.0f, 1.0f); EditorGUILayout.EndHorizontal(); EditorGUILayout.Separator(); GuiHelpers.DrawPositiveOnlyFloatField(ref _customCookieDistanceFalloffPowerProperty, new GUIContent("Strength", "The curve of the fading")); EditorGUILayout.Separator(); EditorGUILayout.Separator(); GuiHelpers.DrawContextualHelpBox("Allows to reset to Unity's default values."); if (GUILayout.Button("Reset", GuiStyles.Button)) { _customCookieDistanceFalloffLowThresholdProperty.floatValue = 0.1f; _customCookieDistanceFalloffHiThresholdProperty.floatValue = 0.25f; _customAngularFalloffPowerProperty.floatValue = 2.0f; } EditorGUILayout.EndVertical(); }
/// <summary> /// Displays distance fadeout parameters for spot/point lights /// </summary> private void DisplayLightDistanceAttenuationParameters() { EditorGUILayout.BeginVertical(); GUILayout.Label("Distance Attenuation", GuiStyles.LabelCenteredBig); EditorGUILayout.Separator(); EditorGUILayout.Separator(); GuiHelpers.DrawContextualHelpBox("The \"Threshold\" parameter is the normalized distance when the fade will start, until 1."); EditorGUILayout.BeginHorizontal(); GUILayout.Label("Threshold", GuiStyles.Label, GUILayout.MaxWidth(160)); GuiHelpers.DrawSlider(ref _customDistanceFalloffThresholdProperty, 0.0f, 1.0f); EditorGUILayout.EndHorizontal(); EditorGUILayout.Separator(); GuiHelpers.DrawPositiveOnlyFloatField(ref _customDistanceFalloffPowerProperty, new GUIContent("Strength", "The curve of the fading")); EditorGUILayout.Separator(); EditorGUILayout.Separator(); GuiHelpers.DrawContextualHelpBox("Allows to reset to Unity's default values."); if (GUILayout.Button("Reset", GuiStyles.Button)) { _customDistanceFalloffThresholdProperty.floatValue = 0.5f; _customDistanceFalloffPowerProperty.floatValue = 2.0f; } EditorGUILayout.EndVertical(); }
/// <summary> /// Displays the common parameters tab /// </summary> private void DisplayCommonSettingsArea() { EditorGUILayout.BeginVertical(GuiStyles.ButtonNoHover); EditorGUILayout.Separator(); GUILayout.Label(_commonSettingsTitleContent, new GUIStyle(GuiStyles.LabelBoldCenteredBig) { fontSize = 15 }); EditorGUILayout.Separator(); GuiHelpers.DrawFloatField(ref _strengthProperty, new GUIContent("Strength", "Multiplies the intensity of the light source in the system")); EditorGUILayout.Separator(); EditorGUILayout.Separator(); GuiHelpers.DrawContextualHelpBox("The \"Enable Shadows\" parameter allows you to compute the light's shadows (if enabled) in the system."); GuiHelpers.DrawToggleChecker(ref _useShadowsProperty, "Enable Shadows"); EditorGUILayout.Separator(); EditorGUILayout.Separator(); GuiHelpers.DrawContextualHelpBox("The \"Enable Cookie\" parameter allows you to compute the light's cookie (if enabled) in the system."); //EditorGUI.BeginDisabledGroup(!_component.CastsCookie); GuiHelpers.DrawToggleChecker(ref _useCookieProperty, "Enable Cookie"); //EditorGUI.EndDisabledGroup(); EditorGUILayout.Separator(); EditorGUILayout.Separator(); GuiHelpers.DrawContextualHelpBox("The \"Override Color\" parameter allows you to replace the light's color in the system."); GuiHelpers.DrawToggleChecker(ref _overrideColorProperty, "Override Color"); if (_overrideColorProperty.boolValue) { //EditorGUI.BeginDisabledGroup(!_overrideColorProperty.boolValue); EditorGUILayout.BeginVertical(); GuiHelpers.DrawContextualHelpBox("The \"Overriding Color\" is the color that will replace the light's color in the system."); EditorGUILayout.PropertyField(_overridingColorProperty); EditorGUILayout.EndVertical(); //EditorGUI.EndDisabledGroup(); } EditorGUILayout.Separator(); GuiHelpers.DrawContextualHelpBox("The \"Scattering Bias\" parameter allows to have more control of how the light will scatter in the environment."); EditorGUILayout.BeginHorizontal(); GUILayout.Label("Scattering Bias", GuiStyles.Label, GUILayout.MaxWidth(160)); GuiHelpers.DrawSlider(ref _scatteringBiasProperty, -1.0f, 1.0f); EditorGUILayout.EndHorizontal(); EditorGUILayout.Separator(); EditorGUILayout.EndVertical(); }
/// <summary> /// Displays the common parameters tab /// </summary> private void DisplaySettingsArea() { EditorGUILayout.BeginVertical(GuiStyles.ButtonNoHover); EditorGUILayout.Separator(); GUILayout.Label(_settingsTitleContent, new GUIStyle(GuiStyles.LabelBoldCenteredBig) { fontSize = 15 }); EditorGUILayout.Separator(); ShadowCastingMode shadowCastingMode = (ShadowCastingMode)_shadowCastingModeProperty.enumValueIndex; bool castShadow = shadowCastingMode != ShadowCastingMode.Off; EditorGUI.BeginChangeCheck(); castShadow = GuiHelpers.DrawToggleChecker(castShadow, "Cast Shadows"); if (EditorGUI.EndChangeCheck()) { if (castShadow) { _shadowCastingModeProperty.enumValueIndex = (int)ShadowCastingMode.TwoSided; } else { _shadowCastingModeProperty.enumValueIndex = (int)ShadowCastingMode.Off; } } EditorGUILayout.Separator(); EditorGUILayout.Separator(); GuiHelpers.DrawToggleChecker(ref _receiveShadowsProperty, "Receive Shadows"); EditorGUILayout.Separator(); EditorGUILayout.Separator(); if (GUILayout.Button("Set Lit Shader", GuiStyles.Button)) { _component.SetLitShader(); } EditorGUILayout.Separator(); if (GUILayout.Button("Set Unlit Shader", GuiStyles.Button)) { _component.SetUnlitShader(); } EditorGUILayout.Separator(); EditorGUILayout.EndVertical(); }
/// <summary> /// Displays Ambient Lighting Injection area /// </summary> private void DisplayAmbientInjectionArea() { EditorGUILayout.BeginVertical(GuiStyles.Background); GuiHelpers.DrawToggleChecker(ref _ambientInjectionBoolProperty, _ambientInjectionTitleContent, true, true); if (_ambientInjectionBoolProperty.boolValue) { EditorGUILayout.BeginVertical(GuiStyles.EmptyMiddleAligned); GuiHelpers.DrawInjectionField(ref _ambientInjectionParametersProperty, _noiseMaskBoolProperty.boolValue, _currentVolume.UsesTexture2DMasking, _currentVolume.UsesTexture3DMasking); EditorGUILayout.Separator(); EditorGUILayout.EndVertical(); } EditorGUILayout.EndVertical(); }
/// <summary> /// Displays Tint Injection area /// </summary> private void DisplayTintInjectionArea() { EditorGUILayout.BeginVertical(GuiStyles.Background); GuiHelpers.DrawToggleChecker(ref _tintInjectionBoolProperty, _tintInjectionTitleContent, true, true); if (_tintInjectionBoolProperty.boolValue) { EditorGUILayout.BeginVertical(GuiStyles.EmptyMiddleAligned); EditorGUILayout.PropertyField(_tintInjectionColorProperty); GuiHelpers.DrawInjectionField(ref _tintInjectionParametersProperty, _noiseMaskBoolProperty.boolValue, _currentVolume.UsesTexture2DMasking, _currentVolume.UsesTexture3DMasking, true, 0, 1, true, "Brightness", "Brightness of the tinting color"); EditorGUILayout.Separator(); EditorGUILayout.EndVertical(); } EditorGUILayout.EndVertical(); }
/// <summary> /// Displays Light Probes settings area /// </summary> private void DisplayLightProbesLightingInjectionArea() { EditorGUILayout.BeginVertical(GuiStyles.Background); GuiHelpers.DrawContextualHelpBox("These parameters allow to enable the volume to inject the baked light probes illumination and tweak the strength of the injection."); GuiHelpers.DrawToggleChecker(ref _useAsLightProbesProxyVolumeProperty, new GUIContent("Light Probes Lighting", Aura.ResourcesCollection.lightProbesIconTexture), true, true); if (_useAsLightProbesProxyVolumeProperty.boolValue) { GUILayout.Label(new GUIContent(" Experimental Feature (PREVIEW)", Aura.ResourcesCollection.experimentalIconTexture), GuiStyles.LabelBoldCentered); //EditorGUI.BeginDisabledGroup(!_useAsLightProbesProxyVolumeProperty.boolValue); EditorGUILayout.BeginVertical(GuiStyles.EmptyMiddleAligned); GuiHelpers.DrawPositiveOnlyFloatField(ref _lightProbesMultiplierProperty, new GUIContent("Strength", "Multiplies the injected lighting")); EditorGUILayout.EndVertical(); //EditorGUI.EndDisabledGroup(); } EditorGUILayout.EndVertical(); }
/// <summary> /// Displays Scattering Injection area /// </summary> private void DisplayScatteringInjectionArea() { EditorGUILayout.BeginVertical(GuiStyles.Background); GuiHelpers.DrawContextualHelpBox("The \"Scattering Injection\" parameters allows you to add/remove scattering inside the system.\n\nIn other words, you will be able to modify how light from light sources will bounce inside the micro particles and will be deviated by them. Typically, how \"wet\" the micro particles are.\n TIP :The \"Strength\" parameter will accept negative values. Meaning that you will be able to remove scattering as well."); GuiHelpers.DrawToggleChecker(ref _scatteringInjectionBoolProperty, _scatteringInjectionTitleContent, true, true); if (_scatteringInjectionBoolProperty.boolValue) { //EditorGUI.BeginDisabledGroup(!_scatteringInjectionBoolProperty.boolValue); EditorGUILayout.BeginVertical(GuiStyles.EmptyMiddleAligned); GuiHelpers.DrawInjectionField(ref _scatteringInjectionParametersProperty, _noiseMaskBoolProperty.boolValue, _currentVolume.UsesTexture2DMasking, _currentVolume.UsesTexture3DMasking); EditorGUILayout.Separator(); EditorGUILayout.EndVertical(); //EditorGUI.EndDisabledGroup(); } EditorGUILayout.EndVertical(); }
/// <summary> /// Displays Light Injection area /// </summary> private void DisplayLightInjectionArea() { EditorGUILayout.BeginVertical(GuiStyles.Background); GuiHelpers.DrawContextualHelpBox("The \"Light Injection\" parameters allows you to add/remove color inside the system.\n\nIn other words, you will be able to add/remove light inside a defined area.\n TIP :The \"Strength\" parameter will accept negative values. Meaning that you will be able to remove Color."); GuiHelpers.DrawToggleChecker(ref _lightInjectionBoolProperty, _lightInjectionTitleContent, true, true); if (_lightInjectionBoolProperty.boolValue) { //EditorGUI.BeginDisabledGroup(!_lightInjectionBoolProperty.boolValue); EditorGUILayout.BeginVertical(GuiStyles.EmptyMiddleAligned); EditorGUILayout.PropertyField(_lightInjectionColorProperty); GuiHelpers.DrawInjectionField(ref _lightInjectionParametersProperty, _noiseMaskBoolProperty.boolValue, _currentVolume.UsesTexture2DMasking, _currentVolume.UsesTexture3DMasking); EditorGUILayout.Separator(); EditorGUILayout.EndVertical(); //EditorGUI.EndDisabledGroup(); } EditorGUILayout.EndVertical(); }
/// <summary> /// Draws the inspector /// </summary> public static void DrawCustomEditor(SerializedObject serializedObject, AuraCamera auraComponent, bool displayHeaderAndHelpBox, bool forceDisplayEditionSettings) { serializedObject.Update(); if (displayHeaderAndHelpBox) { EditorGUILayout.BeginVertical(GuiStyles.ButtonNoHover); EditorGUILayout.BeginHorizontal(GuiStyles.BackgroundNoBorder); EditorGUILayout.LabelField(new GUIContent(" Aura <b>Quality Settings</b>", Aura.ResourcesCollection.qualitySettingsPresetIconTexture), new GUIStyle(GuiStyles.LabelCenteredBigBackground) { fontSize = 24 }); EditorGUILayout.EndHorizontal(); EditorGUILayout.Separator(); } Initialize(serializedObject); if (IsEditionQualitySettings && !forceDisplayEditionSettings) { EditorGUILayout.Separator(); EditorGUILayout.BeginHorizontal(GuiStyles.Background); EditorGUILayout.Separator(); GUILayout.Label(new GUIContent(" DO NOT DELETE THIS FILE!", Aura.ResourcesCollection.settingsIconTexture), GuiStyles.LabelBoldCenteredBig); EditorGUILayout.Separator(); EditorGUILayout.EndHorizontal(); } else { DisplaySettingsArea(serializedObject, auraComponent); if (displayHeaderAndHelpBox) { EditorGUILayout.Separator(); GuiHelpers.DisplayHelpToShowHelpBox(); EditorGUILayout.EndVertical(); EditorGUILayout.Separator(); EditorGUILayout.Separator(); } } serializedObject.ApplyModifiedProperties(); }
/// <summary> /// Draws a Vector3 field /// </summary> /// <param name="vector3Property">The related serialized property</param> /// <param name="label">The label to write</param> public static void DrawVector3Field(ref SerializedProperty vector3Property, string label) { SerializedProperty xTmpProperty = vector3Property.FindPropertyRelative("x"); SerializedProperty yTmpProperty = vector3Property.FindPropertyRelative("y"); SerializedProperty zTmpProperty = vector3Property.FindPropertyRelative("z"); EditorGUILayout.BeginHorizontal(); GUILayout.Label("X", GuiStyles.Label, GUILayout.Width(14)); GuiHelpers.DrawFloatField(ref xTmpProperty); GUILayout.Label("Y", GuiStyles.Label, GUILayout.Width(14)); GuiHelpers.DrawFloatField(ref yTmpProperty); GUILayout.Label("Z", GuiStyles.Label, GUILayout.Width(14)); GuiHelpers.DrawFloatField(ref zTmpProperty); EditorGUILayout.EndHorizontal(); }
//// TODO : INVESTIGATE TO ACCESS THOSE VARIABLES AS THE DEFAULT INSPECTOR IS UGLY //private SerializedProperty wrapModeProperty; //private SerializedProperty filterModeProperty; //private SerializedProperty anisotropyLevelProperty; #endregion #region Overriden base class functions (https://docs.unity3d.com/ScriptReference/Editor.html) /// <summary> /// Draws the content of the Inspector /// </summary> public override void OnInspectorGUI() { GuiHelpers.DrawHeader(Aura.ResourcesCollection.logoTexture); EditorGUILayout.Separator(); EditorGUILayout.BeginVertical(GuiStyles.Background); GUILayout.Label(new GUIContent(" Texture3D Preview", Aura.ResourcesCollection.texture3DIconTexture), GuiStyles.LabelBoldCenteredBig); EditorGUILayout.EndVertical(); //serializedObject.Update(); //// HAD TO DISABLE THE DEFAULT INSPECTOR AS IT MADE PREVIEW LAG //DrawDefaultInspector(); //serializedObject.ApplyModifiedProperties(); }
public override void OnInspectorGUI() { serializedObject.Update(); EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.BeginVertical(GuiStyles.ButtonNoHover); EditorGUILayout.BeginHorizontal(GuiStyles.BackgroundNoBorder); GUILayout.Space(24); EditorGUILayout.LabelField(new GUIContent(" Aura <b>Light</b>", Aura.ResourcesCollection.lightUiIconTexture), new GUIStyle(GuiStyles.LabelCenteredBig) { fontSize = 24 }); if (GUILayout.Button(new GUIContent(Aura.ResourcesCollection.questionIconTexture, "Show Help"), GuiStyles.ButtonImageOnlyNoBorder, GUILayout.MaxWidth(24), GUILayout.MaxHeight(24))) { AuraEditorPrefs.DisplayLightIntroductionScreen = true; SceneView.RepaintAll(); } EditorGUILayout.EndHorizontal(); EditorGUILayout.Separator(); EditorGUILayout.BeginVertical(GuiStyles.Background); DisplayCommonSettingsArea(); EditorGUILayout.Separator(); EditorGUILayout.Separator(); DisplayLightSettingsArea(); EditorGUILayout.EndVertical(); EditorGUILayout.Separator(); GuiHelpers.DisplayHelpToShowHelpBox(); EditorGUILayout.EndVertical(); EditorGUILayout.Separator(); EditorGUILayout.Separator(); serializedObject.ApplyModifiedProperties(); }
/// <summary> /// Displays Noise Mask Area /// </summary> private void DisplayNoiseMaskArea() { EditorGUILayout.BeginVertical(GuiStyles.Background); GuiHelpers.DrawContextualHelpBox("The \"Noise Mask\" parameter allows you to assign a dynamic morphing noise mask to the volume.\nThis noise will be used for masking the data injected."); GuiHelpers.DrawToggleChecker(ref _noiseMaskBoolProperty, new GUIContent("Noise Mask", Aura.ResourcesCollection.noiseIconTexture), true, true); if (_noiseMaskBoolProperty.boolValue) { //EditorGUI.BeginDisabledGroup(!_noiseMaskBoolProperty.boolValue); EditorGUILayout.BeginVertical(GuiStyles.EmptyMiddleAligned); GuiHelpers.DrawFloatField(ref _noiseMaskSpeedProperty, new GUIContent("Speed", "Speed of the morph")); EditorGUILayout.Separator(); EditorGUILayout.Separator(); GuiHelpers.DrawTransformField(ref _noiseMaskTransformProperty); EditorGUILayout.EndVertical(); //EditorGUI.EndDisabledGroup(); } EditorGUILayout.EndVertical(); }
/// <summary> /// Displays the content of the "World's Primary Injection" tab /// </summary> private static void DisplayBaseSettingsArea() { EditorGUILayout.BeginVertical(GuiStyles.Background); EditorGUILayout.BeginVertical(GuiStyles.ButtonNoHover); EditorGUILayout.Separator(); GUILayout.Label(new GUIContent(" Global Injection", Aura.ResourcesCollection.injectionIconTexture), GuiStyles.LabelBoldCenteredBig); EditorGUILayout.Separator(); GuiHelpers.DrawContextualHelpBox("These parameters are the ambient Density, Lighting and Scattering, set globally for the whole surrounding environment."); EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.BeginVertical(); GuiHelpers.DrawToggleChecker(ref _useDensityProperty, new GUIContent(" Use Global Density", Aura.ResourcesCollection.densityIconTexture, "Injects an ambient density"), true, true); if (_useDensityProperty.boolValue) { //EditorGUI.BeginDisabledGroup(!_useDensityProperty.boolValue); EditorGUILayout.BeginVertical(GuiStyles.EmptyMiddleAligned); GuiHelpers.DrawPositiveOnlyFloatField(ref _baseDensityProperty, "Global Density"); EditorGUILayout.Separator(); EditorGUILayout.EndVertical(); //EditorGUI.EndDisabledGroup(); } EditorGUILayout.Separator(); EditorGUILayout.Separator(); GuiHelpers.DrawToggleChecker(ref _useScatteringProperty, new GUIContent(" Use Global Scattering", Aura.ResourcesCollection.scatteringIconTexture, "Injects an ambient scattering"), true, true); if (_useScatteringProperty.boolValue) { //EditorGUI.BeginDisabledGroup(!_useScatteringProperty.boolValue); EditorGUILayout.BeginVertical(GuiStyles.EmptyMiddleAligned); GuiHelpers.DrawSlider(ref _baseScatteringProperty, 0, 1, "Global Scattering"); EditorGUILayout.Separator(); EditorGUILayout.EndVertical(); //EditorGUI.EndDisabledGroup(); } EditorGUILayout.Separator(); EditorGUILayout.Separator(); GuiHelpers.DrawToggleChecker(ref _useAmbientLightingProperty, new GUIContent(" Use Ambient Lighting", Aura.ResourcesCollection.illuminationIconTexture, "Injects the \"Environment lighting\" set in the \"Lighting\" window"), true, true); if (_useAmbientLightingProperty.boolValue) { //EditorGUI.BeginDisabledGroup(!_useAmbientLightingProperty.boolValue); EditorGUILayout.BeginVertical(GuiStyles.EmptyMiddleAligned); GuiHelpers.DrawPositiveOnlyFloatField(ref _ambientLightingStrengthProperty, "Ambient Strength"); EditorGUILayout.Separator(); EditorGUILayout.EndVertical(); //EditorGUI.EndDisabledGroup(); } EditorGUILayout.Separator(); EditorGUILayout.Separator(); GuiHelpers.DrawToggleChecker(ref _useColorProperty, new GUIContent(" Use Global Light", Aura.ResourcesCollection.colorIconTexture, "Injects an ambient light"), true, true); if (_useColorProperty.boolValue) { //EditorGUI.BeginDisabledGroup(!_useColorProperty.boolValue); EditorGUILayout.BeginVertical(GuiStyles.EmptyMiddleAligned); EditorGUILayout.PropertyField(_baseColorProperty); GuiHelpers.DrawPositiveOnlyFloatField(ref _baseColorStrengthProperty, "Global Light Strength"); EditorGUILayout.Separator(); EditorGUILayout.EndVertical(); //EditorGUI.EndDisabledGroup(); } EditorGUILayout.Separator(); EditorGUILayout.Separator(); GuiHelpers.DrawToggleChecker(ref _useExtinctionProperty, new GUIContent(" Use Extinction", Aura.ResourcesCollection.extinctionIconTexture, "Simulates the depth related decay of light"), true, true); if (_useExtinctionProperty.boolValue) { //EditorGUI.BeginDisabledGroup(!_useExtinctionProperty.boolValue); EditorGUILayout.BeginVertical(GuiStyles.EmptyMiddleAligned); GuiHelpers.DrawSlider(ref _extinctionProperty, 0, 1, "Global Extinction", true); EditorGUILayout.Separator(); EditorGUILayout.EndVertical(); //EditorGUI.EndDisabledGroup(); } EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.EndVertical(); EditorGUILayout.EndVertical(); EditorGUILayout.EndVertical(); }
/// <summary> /// Draws the field required to draw a VolumeInjectionParameters object /// </summary> /// <param name="injectionProperty">The related serialized property</param> public static void DrawInjectionField(ref SerializedProperty injectionProperty, bool displayNoiseParameters, bool displayTexture2DMaskParameters, bool displayTexture3DMaskParameters, bool clampStrength = false, float clampStrengthMin = 0.0f, float clampStrengthMax = 1.0f, bool saturateLevelOuput = false, string strengthLabel = "Strength", string strengthTooltip = "Strength of the injected data. Can be set negative to remove data.") { SerializedProperty strengthProperty = injectionProperty.FindPropertyRelative("strength"); GUIContent strengthContent = new GUIContent(strengthLabel, strengthTooltip); if (clampStrength) { DrawSlider(ref strengthProperty, clampStrengthMin, clampStrengthMax, strengthContent.text); } else { DrawFloatField(ref strengthProperty, strengthContent); } if (displayNoiseParameters) { //EditorGUI.BeginDisabledGroup(!displayNoiseParameters); EditorGUILayout.Separator(); EditorGUILayout.Separator(); SerializedProperty useNoiseMask = injectionProperty.FindPropertyRelative("useNoiseMask"); GuiHelpers.DrawToggleChecker(ref useNoiseMask, "Use Noise Mask", true); if (useNoiseMask.boolValue) { EditorGUILayout.Separator(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.BeginVertical(GUILayout.Width(4)); GUILayout.Label(""); EditorGUILayout.EndVertical(); EditorGUILayout.BeginVertical(); SerializedProperty useNoiseMaskLevels = injectionProperty.FindPropertyRelative("useNoiseMaskLevels"); GuiHelpers.DrawToggleChecker(ref useNoiseMaskLevels, "Levels"); if (useNoiseMaskLevels.boolValue) { EditorGUILayout.Separator(); //EditorGUI.BeginDisabledGroup(!useNoiseMaskLevels.boolValue); SerializedProperty noiseMaskLevelsProperty = injectionProperty.FindPropertyRelative("noiseMaskLevelParameters"); GuiHelpers.DrawLevelsField(ref noiseMaskLevelsProperty, saturateLevelOuput); //EditorGUI.EndDisabledGroup(); } EditorGUILayout.EndVertical(); EditorGUILayout.EndHorizontal(); } //EditorGUI.EndDisabledGroup(); } if (displayTexture2DMaskParameters) { //EditorGUI.BeginDisabledGroup(!displayTexture2DMaskParameters); EditorGUILayout.Separator(); EditorGUILayout.Separator(); SerializedProperty useTexture2DMask = injectionProperty.FindPropertyRelative("useTexture2DMask"); GuiHelpers.DrawToggleChecker(ref useTexture2DMask, "Use Texture2D Mask", true); if (useTexture2DMask.boolValue) { EditorGUILayout.Separator(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.BeginVertical(GUILayout.Width(4)); GUILayout.Label(""); EditorGUILayout.EndVertical(); EditorGUILayout.BeginVertical(); SerializedProperty useTexture2DMaskLevels = injectionProperty.FindPropertyRelative("useTexture2DMaskLevels"); GuiHelpers.DrawToggleChecker(ref useTexture2DMaskLevels, "Levels"); if (useTexture2DMaskLevels.boolValue) { EditorGUILayout.Separator(); //EditorGUI.BeginDisabledGroup(!useTexture2DMaskLevels.boolValue); SerializedProperty texture2DMaskLevelsProperty = injectionProperty.FindPropertyRelative("texture2DMaskLevelParameters"); GuiHelpers.DrawLevelsField(ref texture2DMaskLevelsProperty, saturateLevelOuput); //EditorGUI.EndDisabledGroup(); } EditorGUILayout.EndVertical(); EditorGUILayout.EndHorizontal(); } //EditorGUI.EndDisabledGroup(); } if (displayTexture3DMaskParameters) { //EditorGUI.BeginDisabledGroup(!displayTexture3DMaskParameters); EditorGUILayout.Separator(); EditorGUILayout.Separator(); SerializedProperty useTexture3DMask = injectionProperty.FindPropertyRelative("useTexture3DMask"); GuiHelpers.DrawToggleChecker(ref useTexture3DMask, "Texture3D Mask Levels", true); if (useTexture3DMask.boolValue) { EditorGUILayout.Separator(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.BeginVertical(GUILayout.Width(4)); GUILayout.Label(""); EditorGUILayout.EndVertical(); EditorGUILayout.BeginVertical(); SerializedProperty useTexture3DMaskLevels = injectionProperty.FindPropertyRelative("useTexture3DMaskLevels"); GuiHelpers.DrawToggleChecker(ref useTexture3DMaskLevels, "Levels"); if (useTexture3DMaskLevels.boolValue) { EditorGUILayout.Separator(); //EditorGUI.BeginDisabledGroup(!useTexture3DMaskLevels.boolValue); SerializedProperty texture3DMaskLevelsProperty = injectionProperty.FindPropertyRelative("texture3DMaskLevelParameters"); GuiHelpers.DrawLevelsField(ref texture3DMaskLevelsProperty, saturateLevelOuput); //EditorGUI.EndDisabledGroup(); } EditorGUILayout.EndVertical(); EditorGUILayout.EndHorizontal(); } //EditorGUI.EndDisabledGroup(); } }
/// <summary> /// Draws the settings area /// </summary> private void DisplayEditionSettingsArea() { EditorGUILayout.BeginVertical(GuiStyles.Background); GUILayout.Label(new GUIContent(" Edition Settings", Aura.ResourcesCollection.settingsIconTexture), GuiStyles.LabelBoldCenteredBig); EditorGUILayout.Separator(); EditorGUI.BeginChangeCheck(); AuraEditorPrefs.DisplayCameraSlicesInEdition = GuiHelpers.DrawToggleChecker(AuraEditorPrefs.DisplayCameraSlicesInEdition, " Show slices on Cameras when selected"); if (EditorGUI.EndChangeCheck()) { SceneView.RepaintAll(); } EditorGUILayout.Separator(); //EditorGUI.BeginChangeCheck(); EditorGUI.BeginDisabledGroup(true); GuiHelpers.DrawToggleChecker(AuraEditorPrefs.DisplayAuraGuiInParentComponents, " Display Aura buttons in Camera/Light components"); EditorGUI.EndDisabledGroup(); //if (EditorGUI.EndChangeCheck()) //{ // AuraEditorPrefs.DisplayAuraGuiInParentComponents = !AuraEditorPrefs.DisplayAuraGuiInParentComponents; //} EditorGUILayout.Separator(); EditorGUI.BeginChangeCheck(); GuiHelpers.DrawToggleChecker(AuraEditorPrefs.DisplayGizmosOnCameras, " Display gizmos on Cameras"); if (EditorGUI.EndChangeCheck()) { AuraEditorPrefs.DisplayGizmosOnCameras = !AuraEditorPrefs.DisplayGizmosOnCameras; } EditorGUILayout.Separator(); EditorGUI.BeginChangeCheck(); GuiHelpers.DrawToggleChecker(AuraEditorPrefs.DisplayGizmosOnLights, " Display gizmos on Lights"); if (EditorGUI.EndChangeCheck()) { AuraEditorPrefs.DisplayGizmosOnLights = !AuraEditorPrefs.DisplayGizmosOnLights; } EditorGUILayout.Separator(); EditorGUI.BeginChangeCheck(); GuiHelpers.DrawToggleChecker(AuraEditorPrefs.DisplayGizmosOnVolumes, " Display gizmos on Volumes"); if (EditorGUI.EndChangeCheck()) { AuraEditorPrefs.DisplayGizmosOnVolumes = !AuraEditorPrefs.DisplayGizmosOnVolumes; } EditorGUILayout.Separator(); EditorGUI.BeginChangeCheck(); GuiHelpers.DrawToggleChecker(AuraEditorPrefs.DisplayGizmosWhenSelected, " Display gizmos when objects are selected"); if (EditorGUI.EndChangeCheck()) { AuraEditorPrefs.DisplayGizmosWhenSelected = !AuraEditorPrefs.DisplayGizmosWhenSelected; } EditorGUILayout.Separator(); EditorGUI.BeginChangeCheck(); GuiHelpers.DrawToggleChecker(AuraEditorPrefs.DisplayGizmosWhenUnselected, " Display gizmos when objects are unselected"); if (EditorGUI.EndChangeCheck()) { AuraEditorPrefs.DisplayGizmosWhenUnselected = !AuraEditorPrefs.DisplayGizmosWhenUnselected; } EditorGUILayout.Separator(); EditorGUI.BeginChangeCheck(); GuiHelpers.DrawToggleChecker(AuraEditorPrefs.DisplayButtonsInHierarchy, " Display buttons in the hierarchy"); if (EditorGUI.EndChangeCheck()) { AuraEditorPrefs.DisplayButtonsInHierarchy = !AuraEditorPrefs.DisplayButtonsInHierarchy; } EditorGUILayout.EndVertical(); EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.BeginVertical(GuiStyles.Background); GUILayout.Label(new GUIContent(" Toolbox Settings", Aura.ResourcesCollection.debugIconTexture), GuiStyles.LabelBoldCenteredBig); EditorGUILayout.Separator(); EditorGUI.BeginChangeCheck(); EditorGUI.BeginChangeCheck(); GuiHelpers.DrawToggleChecker(SceneViewToolbox.IsVisible, " Display Toolbox"); if (EditorGUI.EndChangeCheck()) { SceneViewToolbox.Display(!SceneViewToolbox.IsVisible); } EditorGUILayout.Separator(); EditorGUI.BeginChangeCheck(); GuiHelpers.DrawToggleChecker(SceneViewToolbox.IsExpanded, " Expand Toolbox"); if (EditorGUI.EndChangeCheck()) { SceneViewToolbox.Expand(!SceneViewToolbox.IsExpanded); } EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.BeginHorizontal(); if (GUILayout.Button("Display Toolbox on Left", AuraEditorPrefs.ToolboxPosition == 0 ? GuiStyles.ButtonPressed : GuiStyles.Button)) { AuraEditorPrefs.ToolboxPosition = 0; } if (GUILayout.Button("Display Toolbox on Right", AuraEditorPrefs.ToolboxPosition == 1 ? GuiStyles.ButtonPressed : GuiStyles.Button)) { AuraEditorPrefs.ToolboxPosition = 1; } EditorGUILayout.EndHorizontal(); EditorGUILayout.Separator(); EditorGUILayout.Separator(); AuraEditorPrefs.DisplayDebugPanelInToolbox = GuiHelpers.DrawToggleChecker(AuraEditorPrefs.DisplayDebugPanelInToolbox, " Show DEBUG panel"); EditorGUILayout.Separator(); EditorGUI.BeginChangeCheck(); GuiHelpers.DrawToggleChecker(SceneViewToolbox.DisplayNotifications, " Display Notifications"); if (EditorGUI.EndChangeCheck()) { SceneViewToolbox.DisplayNotifications = !SceneViewToolbox.DisplayNotifications; } EditorGUILayout.Separator(); EditorGUI.BeginChangeCheck(); GuiHelpers.DrawToggleChecker(SceneViewToolbox.EnableAnimations, " Enable Animations"); if (EditorGUI.EndChangeCheck()) { SceneViewToolbox.EnableAnimations = !SceneViewToolbox.EnableAnimations; } EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.BeginVertical(GUILayout.MaxWidth(160)); GUILayout.Space(6); GUILayout.Label("Presets Previews Layout", GuiStyles.Label); EditorGUILayout.EndVertical(); if (GUILayout.Button(new GUIContent("List", Aura.ResourcesCollection.listIconTexture), SceneViewToolbox.PresetsPreviewsPerRow == 1 ? GuiStyles.ButtonPressedNoBorder : GuiStyles.ButtonNoBorder)) { SceneViewToolbox.PresetsPreviewsPerRow = 1; } if (GUILayout.Button(new GUIContent("Grid", Aura.ResourcesCollection.gridIconTexture), SceneViewToolbox.PresetsPreviewsPerRow == 2 ? GuiStyles.ButtonPressedNoBorder : GuiStyles.ButtonNoBorder)) { SceneViewToolbox.PresetsPreviewsPerRow = 2; } EditorGUILayout.EndHorizontal(); if (EditorGUI.EndChangeCheck()) { SceneView.RepaintAll(); } EditorGUILayout.Separator(); EditorGUILayout.EndVertical(); EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.BeginVertical(GuiStyles.Background); GUILayout.Label(new GUIContent(" SceneView Visualization", Aura.ResourcesCollection.cameraIconTexture), GuiStyles.LabelBoldCenteredBig); EditorGUILayout.Separator(); EditorGUI.BeginChangeCheck(); AuraEditorPrefs.EnableAuraInSceneView = GuiHelpers.DrawToggleChecker(AuraEditorPrefs.EnableAuraInSceneView, "Enable visualization in SceneView"); EditorGUILayout.Separator(); GuiHelpers.DrawHelpBox("Enabling Aura in the SceneView may break the SceneView rendering when loading a scene or building player.\n\nTo get the SceneView rendering back, <b>disable then re-enable back</b> post-effects rendering in the toggle dropdown located in the top border of the SceneView.", HelpBoxType.Experimental); EditorGUILayout.Separator(); if (EditorGUI.EndChangeCheck()) { if (AuraEditorPrefs.EnableAuraInSceneView) { SceneViewVisualization.EnableAuraInSceneView(); } else { SceneViewVisualization.DisableAuraInSceneView(); } } EditorGUI.BeginDisabledGroup(!AuraEditorPrefs.EnableAuraInSceneView); AuraQualitySettingsEditor.DrawCustomEditor(EditionCameraQualitySettingsObject, null, false, true); EditorGUI.EndDisabledGroup(); EditorGUILayout.Separator(); EditorGUILayout.EndVertical(); EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.BeginVertical(GuiStyles.Background); GUILayout.Label(new GUIContent(" Introduction Screens", Aura.ResourcesCollection.questionIconTexture), GuiStyles.LabelBoldCenteredBig); EditorGUILayout.Separator(); if (GUILayout.Button("Show Main Introduction Screen", GuiStyles.Button)) { AuraEditorPrefs.DisplayMainIntroductionScreen = true; SceneView.RepaintAll(); } EditorGUILayout.Separator(); EditorGUILayout.Separator(); if (GUILayout.Button("Show Camera Introduction Screen", GuiStyles.Button)) { AuraEditorPrefs.DisplayCameraIntroductionScreen = true; SceneView.RepaintAll(); } EditorGUILayout.Separator(); EditorGUILayout.Separator(); if (GUILayout.Button("Show Light Introduction Screen", GuiStyles.Button)) { AuraEditorPrefs.DisplayLightIntroductionScreen = true; SceneView.RepaintAll(); } EditorGUILayout.Separator(); EditorGUILayout.Separator(); if (GUILayout.Button("Show Volume Introduction Screen", GuiStyles.Button)) { AuraEditorPrefs.DisplayVolumeIntroductionScreen = true; SceneView.RepaintAll(); } EditorGUILayout.Separator(); EditorGUILayout.EndVertical(); }
/// <summary> /// Displays the common parameters tab /// </summary> private void DisplayCommonSettingsArea() { EditorGUILayout.BeginVertical(GuiStyles.ButtonNoHover); EditorGUILayout.Separator(); GUILayout.Label(_commonSettingsTitleContent, new GUIStyle(GuiStyles.LabelBoldCenteredBig) { fontSize = 15 }); EditorGUILayout.Separator(); GuiHelpers.DrawFloatField(ref _strengthProperty, new GUIContent("Strength", "Multiplies the intensity of the light source in the system")); EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.PropertyField(_useScatteringProperty); if ((BooleanChoice)_useScatteringProperty.enumValueIndex == BooleanChoice.Default || (BooleanChoice)_useScatteringProperty.enumValueIndex == BooleanChoice.True) { EditorGUILayout.Separator(); GuiHelpers.DrawToggleChecker(ref _overrideScatteringProperty, "Override Scattering"); if (_overrideScatteringProperty.boolValue) { EditorGUILayout.BeginVertical(); EditorGUILayout.PropertyField(_overridingScatteringProperty); EditorGUILayout.EndVertical(); } } EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.Separator(); GuiHelpers.DrawContextualHelpBox("The \"Enable Shadows\" parameter allows you to compute the light's shadows (if enabled) in the system."); GuiHelpers.DrawToggleChecker(ref _useShadowsProperty, "Enable Shadows"); EditorGUILayout.Separator(); EditorGUILayout.Separator(); GuiHelpers.DrawContextualHelpBox("The \"Enable Cookie\" parameter allows you to compute the light's cookie (if enabled) in the system."); //EditorGUI.BeginDisabledGroup(!_component.CastsCookie); GuiHelpers.DrawToggleChecker(ref _useCookieProperty, "Enable Cookie"); //EditorGUI.EndDisabledGroup(); EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.Separator(); GuiHelpers.DrawContextualHelpBox("The \"Override Color\" parameter allows you to replace the light's color in the system."); GuiHelpers.DrawToggleChecker(ref _overrideColorProperty, "Override Color"); if (_overrideColorProperty.boolValue) { //EditorGUI.BeginDisabledGroup(!_overrideColorProperty.boolValue); EditorGUILayout.BeginVertical(); GuiHelpers.DrawContextualHelpBox("The \"Overriding Color\" is the color that will replace the light's color in the system."); EditorGUILayout.PropertyField(_overridingColorProperty); EditorGUILayout.EndVertical(); //EditorGUI.EndDisabledGroup(); } if (LightHelpers.IsColorTemperatureAvailable) { EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.Separator(); GuiHelpers.DrawHelpBox("Unity currently gives no way to know if the color temperature mode is enabled on the light, therefore you need to manually enable it here under.", HelpBoxType.Warning); EditorGUILayout.Separator(); GuiHelpers.DrawToggleChecker(ref _useColorTemperatureTintProperty, "Use Color Temperature Tint"); } EditorGUILayout.Separator(); EditorGUILayout.EndVertical(); }
/// <summary> /// Draws a Vector3 field /// </summary> /// <param name="vector3Property">The related serialized property</param> public static void DrawVector3Field(ref SerializedProperty vector3Property) { GuiHelpers.DrawVector3Field(ref vector3Property, null); }
/// <summary> /// Draws the main screen /// </summary> private static void DrawMainIntroductionScreen() { Rect drawnArea = new Rect(_margin, _margin, _size.x - _margin * 2, _size.y); //GUIStyle areaStyle = GuiStyles.ButtonNoHoverNoBorder; GUIStyle areaStyle = GuiStyles.Label; if (_mainIntroductionScreenId == 1) { drawnArea.y += 16; GUILayout.BeginArea(drawnArea); GUILayout.BeginVertical(areaStyle); GuiHelpers.DrawHeader(Aura.ResourcesCollection.mainIntroductionScreenTextures[0]); GUILayout.Label(new GUIContent("Thank you for buying Aura 2"), new GUIStyle(GuiStyles.LabelBoldCenteredBig) { fontSize = 20 }); GUILayout.EndVertical(); GUILayout.EndArea(); drawnArea.y += 196; GUILayout.BeginArea(drawnArea); GUILayout.BeginVertical(areaStyle); GUILayout.Label(new GUIContent("Please read the provided documentation."), new GUIStyle(GuiStyles.LabelBold) { fontSize = 15 }); EditorGUILayout.Separator(); GUILayout.Label(new GUIContent("It explains the philosophy behind Aura 2 and contains detailed explanations about all options, components and parameters included in Aura 2."), new GUIStyle(GuiStyles.Label) { fontSize = 15 }); EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.Separator(); GUILayout.Label(new GUIContent("Click Next to continue."), new GUIStyle(GuiStyles.LabelBold) { fontSize = 15 }); GUILayout.EndVertical(); GUILayout.EndArea(); } else if (_mainIntroductionScreenId == 2) { GUILayout.BeginArea(drawnArea); GUILayout.BeginVertical(areaStyle); GuiHelpers.DrawHeader(Aura.ResourcesCollection.logoTexture); GUILayout.Label(new GUIContent(" Aura Components"), new GUIStyle(GuiStyles.LabelBoldCenteredBig) { fontSize = 17 }); GUILayout.EndVertical(); GUILayout.EndArea(); drawnArea.y += Aura.ResourcesCollection.logoTexture.height + 36; GUILayout.BeginArea(drawnArea); GUILayout.BeginVertical(areaStyle); GUILayout.Label(new GUIContent("Aura 2 operates using 3 types of Aura components applied to game objects : "), new GUIStyle(GuiStyles.Label) { fontSize = 15 }); GUILayout.EndVertical(); GUILayout.EndArea(); drawnArea.y += 28; GUILayout.BeginArea(drawnArea); GUILayout.BeginHorizontal(areaStyle); GUILayout.BeginHorizontal(GUILayout.Width(Aura.ResourcesCollection.cameraUiIconTexture.width)); GuiHelpers.DrawHeader(Aura.ResourcesCollection.cameraUiIconTexture); GUILayout.EndHorizontal(); EditorGUILayout.Separator(); GUILayout.BeginVertical(); GUILayout.Space(10); GUILayout.Label(new GUIContent("<b>Aura Camera</b> components are in charge of collecting all the contributing data, processing the Aura system computation and displaying the volumetric lighting."), new GUIStyle(GuiStyles.Label) { fontSize = 15 }); GUILayout.EndVertical(); GUILayout.EndHorizontal(); GUILayout.EndArea(); drawnArea.y += 64; GUILayout.BeginArea(drawnArea); GUILayout.BeginHorizontal(areaStyle); GUILayout.BeginHorizontal(GUILayout.Width(Aura.ResourcesCollection.lightUiIconTexture.width)); GuiHelpers.DrawHeader(Aura.ResourcesCollection.lightUiIconTexture); GUILayout.EndHorizontal(); EditorGUILayout.Separator(); GUILayout.BeginVertical(); GUILayout.Space(10); GUILayout.Label(new GUIContent("<b>Aura Light</b> components are in charge of collecting the light's data/parameters and providing them to the Aura system."), new GUIStyle(GuiStyles.Label) { fontSize = 15 }); GUILayout.EndVertical(); GUILayout.EndHorizontal(); GUILayout.EndArea(); drawnArea.y += 64; GUILayout.BeginArea(drawnArea); GUILayout.BeginHorizontal(areaStyle); GUILayout.BeginHorizontal(GUILayout.Width(Aura.ResourcesCollection.volumeUiIconTexture.width)); GuiHelpers.DrawHeader(Aura.ResourcesCollection.volumeUiIconTexture); GUILayout.EndHorizontal(); EditorGUILayout.Separator(); GUILayout.BeginVertical(); GUILayout.Space(10); GUILayout.Label(new GUIContent("<b>Aura Volume</b> components are in charge of creating an injection volume, collecting its data/parameters and providing them to the Aura system."), new GUIStyle(GuiStyles.Label) { fontSize = 15 }); GUILayout.EndVertical(); GUILayout.EndHorizontal(); GUILayout.EndArea(); drawnArea.y += 64; GUILayout.BeginArea(drawnArea); GUILayout.BeginVertical(areaStyle); GUILayout.Label(new GUIContent("Aura components can be added/created using the <b>\"Add Component\"</b> button, the <b>\"Add Aura\"</b> button (on Cameras and Lights), the <b>\"GameObject -> Aura 2\"</b> menu or the Edition <b>Toolbox</b> integrated in the SceneView."), new GUIStyle(GuiStyles.Label) { fontSize = 15 }); GUILayout.EndVertical(); GUILayout.EndArea(); } else if (_mainIntroductionScreenId == 3) { GUILayout.BeginArea(drawnArea); GUILayout.BeginVertical(areaStyle); GuiHelpers.DrawHeader(Aura.ResourcesCollection.logoTexture); GUILayout.Label(new GUIContent(" Edition Toolbox"), new GUIStyle(GuiStyles.LabelBoldCenteredBig) { fontSize = 17 }); GUILayout.EndVertical(); GUILayout.EndArea(); drawnArea.y += Aura.ResourcesCollection.logoTexture.height + 36; GUILayout.BeginArea(drawnArea); GUILayout.BeginHorizontal(areaStyle); GUILayout.BeginHorizontal(GUILayout.Width(drawnArea.width / 5)); GUILayout.Label(Aura.ResourcesCollection.mainIntroductionScreenTextures[1], GuiStyles.EmptyMiddleAligned); GUILayout.EndHorizontal(); GUILayout.BeginVertical(areaStyle); GUILayout.Space(24); GUILayout.Label(new GUIContent("Aura 2 introduces an <b>Edition Toolbox</b> that contains shortcut buttons."), new GUIStyle(GuiStyles.Label) { fontSize = 15 }); EditorGUILayout.Separator(); GUILayout.Label(new GUIContent("These shortcuts allow to easily and quickly add or edit volumetric lighting into your scenes."), new GUIStyle(GuiStyles.Label) { fontSize = 15 }); EditorGUILayout.Separator(); GUILayout.Label(new GUIContent("The <b>SCENE</b> panel contains buttons to quickly add Aura components on the scene's game objects.\nIt also contains a <b>Display Presets</b> button that will let you choose and apply amongst several <b>Aura Ambience</b> presets."), new GUIStyle(GuiStyles.Label) { fontSize = 15 }); EditorGUILayout.Separator(); GUILayout.Label(new GUIContent("The <b>CREATE</b> panel contains buttons to quickly create Aura objects in the scene."), new GUIStyle(GuiStyles.Label) { fontSize = 15 }); GUILayout.EndVertical(); GUILayout.EndHorizontal(); GUILayout.EndArea(); } else if (_mainIntroductionScreenId == 4) { GUILayout.BeginArea(drawnArea); GUILayout.BeginVertical(areaStyle); GuiHelpers.DrawHeader(Aura.ResourcesCollection.logoTexture); GUILayout.Label(new GUIContent(" Aura Ambience Presets"), new GUIStyle(GuiStyles.LabelBoldCenteredBig) { fontSize = 17 }); GUILayout.EndVertical(); GUILayout.EndArea(); drawnArea.y += Aura.ResourcesCollection.logoTexture.height + 62; GUILayout.BeginArea(drawnArea); GUILayout.BeginHorizontal(areaStyle); GUILayout.BeginHorizontal(GUILayout.Width(drawnArea.width / 2.5f)); GUILayout.Label(Aura.ResourcesCollection.mainIntroductionScreenTextures[4], GuiStyles.EmptyMiddleAligned); GUILayout.EndHorizontal(); GUILayout.BeginVertical(areaStyle); GUILayout.Space(24); GUILayout.Label(new GUIContent("The <b>Display Presets</b> button located in the <b>Toolbox</b> will open a panel containing several pre-established <b>Aura Ambiance</b> presets."), new GUIStyle(GuiStyles.Label) { fontSize = 15 }); EditorGUILayout.Separator(); GUILayout.Label(new GUIContent("In one click, you will be able to apply the desired <b>Aura Ambience</b> preset to your whole scene, giving you the perfect kickstart to integrate volumetric lighting into your project."), new GUIStyle(GuiStyles.Label) { fontSize = 15 }); GUILayout.EndVertical(); GUILayout.EndHorizontal(); GUILayout.EndArea(); } else if (_mainIntroductionScreenId == 5) { GUILayout.BeginArea(drawnArea); GUILayout.BeginVertical(areaStyle); GuiHelpers.DrawHeader(Aura.ResourcesCollection.logoTexture); GUILayout.Label(new GUIContent(" Aura Menu"), new GUIStyle(GuiStyles.LabelBoldCenteredBig) { fontSize = 17 }); GUILayout.EndVertical(); GUILayout.EndArea(); drawnArea.y += Aura.ResourcesCollection.logoTexture.height + 48; GUILayout.BeginArea(drawnArea); GUILayout.BeginVertical(areaStyle); GUILayout.Label(new GUIContent("The <b>Aura 2 menu</b> can be found in \"Window -> Aura 2\"."), new GUIStyle(GuiStyles.Label) { fontSize = 15 }); EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.Separator(); GUILayout.Label(Aura.ResourcesCollection.mainIntroductionScreenTextures[2], GuiStyles.EmptyMiddleAligned); EditorGUILayout.Separator(); EditorGUILayout.Separator(); GUILayout.Label(new GUIContent("This menu contains access to the <b>Aura Edition Settings</b> as well as other useful tools such as the <b>Texture3D Tool</b>."), new GUIStyle(GuiStyles.Label) { fontSize = 15 }); GUILayout.EndVertical(); GUILayout.EndArea(); } else if (_mainIntroductionScreenId == 6) { GUILayout.BeginArea(drawnArea); GUILayout.BeginVertical(areaStyle); GuiHelpers.DrawHeader(Aura.ResourcesCollection.logoTexture); GUILayout.Label(new GUIContent(" Aura Edition Settings"), new GUIStyle(GuiStyles.LabelBoldCenteredBig) { fontSize = 17 }); GUILayout.EndVertical(); GUILayout.EndArea(); drawnArea.y += Aura.ResourcesCollection.logoTexture.height + 36; GUILayout.BeginArea(drawnArea); GUILayout.BeginHorizontal(areaStyle); GUILayout.BeginHorizontal(GUILayout.Width(drawnArea.width / 2)); GUILayout.Label(Aura.ResourcesCollection.mainIntroductionScreenTextures[3], GuiStyles.EmptyMiddleAligned); GUILayout.EndHorizontal(); GUILayout.BeginVertical(areaStyle); GUILayout.Space(56); GUILayout.Label(new GUIContent("The <b>Aura Edition Settings</b> window contains settings related to the edition environment."), new GUIStyle(GuiStyles.Label) { fontSize = 15 }); EditorGUILayout.Separator(); GUILayout.Label(new GUIContent("Settings such as <b>SceneView Toolbox</b> parameters and <b>SceneView Visualization</b> quality settings can be found there."), new GUIStyle(GuiStyles.Label) { fontSize = 15 }); GUILayout.EndVertical(); GUILayout.EndHorizontal(); GUILayout.EndArea(); } Rect buttonsArea = new Rect(_size.x - _margin - 200, _size.y - _margin - 32, 64, 32); if (_mainIntroductionScreenId < 6) { GUILayout.BeginArea(buttonsArea); GUILayout.BeginHorizontal(); if (GUILayout.Button("Close", GuiStyles.Button, GUILayout.Width(64), GUILayout.Height(32))) { _mainIntroductionScreenId = 0; } GUILayout.EndHorizontal(); GUILayout.EndArea(); } buttonsArea.x += 64 + 8; buttonsArea.width = 128; buttonsArea.y -= 8; buttonsArea.height += 8; GUILayout.BeginArea(buttonsArea); GUILayout.BeginHorizontal(); if (GUILayout.Button(_mainIntroductionScreenId == 6 ? "Close" : "Next", new GUIStyle(GuiStyles.ButtonBold) { fontSize = 17 }, GUILayout.Width(128), GUILayout.Height(40))) { ++_mainIntroductionScreenId; _mainIntroductionScreenId %= 7; } GUILayout.EndHorizontal(); GUILayout.EndArea(); if (_mainIntroductionScreenId > 1) { buttonsArea.x = _margin; GUILayout.BeginArea(buttonsArea); GUILayout.BeginHorizontal(); if (GUILayout.Button("Previous", new GUIStyle(GuiStyles.ButtonBold) { fontSize = 17 }, GUILayout.Width(128), GUILayout.Height(40))) { --_mainIntroductionScreenId; } GUILayout.EndHorizontal(); GUILayout.EndArea(); } }
/// <summary> /// Displays Shape Settings Area /// </summary> private void DisplayShapeSettingsArea() { EditorGUILayout.BeginVertical(); GuiHelpers.DrawContextualHelpBox("The \"Shape\" parameter allows you to define the volumetric shape of the volume used for injecting Density, Color or Scattering.\n\nYou will also be able to parameter the fading on the borders of the shape, allowing a smooth transition between the inside and the outside of the volume."); EditorGUILayout.Separator(); EditorGUILayout.BeginHorizontal(); GUILayout.Label("Shape", GuiStyles.Label, GUILayout.MaxWidth(160)); EditorGUILayout.PropertyField(_volumeShapeProperty, new GUIContent("")); EditorGUILayout.EndHorizontal(); if ((VolumeType)_volumeShapeProperty.enumValueIndex != VolumeType.Global) { switch ((VolumeType)_volumeShapeProperty.enumValueIndex) { case VolumeType.Box: { EditorGUILayout.Separator(); EditorGUILayout.BeginHorizontal(); GUILayout.Label("Width Fade", GuiStyles.Label, GUILayout.MaxWidth(160)); GuiHelpers.DrawMinMaxSlider(ref _xNegativeCubeFadeProperty, ref _xPositiveCubeFadeProperty, 0, 1, true); EditorGUILayout.EndHorizontal(); EditorGUILayout.Separator(); EditorGUILayout.BeginHorizontal(); GUILayout.Label("Height Fade", GuiStyles.Label, GUILayout.MaxWidth(160)); GuiHelpers.DrawMinMaxSlider(ref _yNegativeCubeFadeProperty, ref _yPositiveCubeFadeProperty, 0, 1, true); EditorGUILayout.EndHorizontal(); EditorGUILayout.Separator(); EditorGUILayout.BeginHorizontal(); GUILayout.Label("Depth Fade", GuiStyles.Label, GUILayout.MaxWidth(160)); GuiHelpers.DrawMinMaxSlider(ref _zNegativeCubeFadeProperty, ref _zPositiveCubeFadeProperty, 0, 1, true); EditorGUILayout.EndHorizontal(); } break; case VolumeType.Cone: { EditorGUILayout.Separator(); EditorGUILayout.BeginHorizontal(); GUILayout.Label("Angular Fade", GuiStyles.Label, GUILayout.MaxWidth(160)); GuiHelpers.DrawSlider(ref _angularConeFadeProperty, 0, 1, true); EditorGUILayout.EndHorizontal(); EditorGUILayout.Separator(); EditorGUILayout.BeginHorizontal(); GUILayout.Label("Distance Fade", GuiStyles.Label, GUILayout.MaxWidth(160)); GuiHelpers.DrawSlider(ref _distanceConeFadeProperty, 0, 1, true); EditorGUILayout.EndHorizontal(); } break; case VolumeType.Cylinder: { EditorGUILayout.Separator(); EditorGUILayout.BeginHorizontal(); GUILayout.Label("Width Fade", GuiStyles.Label, GUILayout.MaxWidth(160)); GuiHelpers.DrawSlider(ref _widthCylinderFadeProperty, 0, 1, true); EditorGUILayout.EndHorizontal(); EditorGUILayout.Separator(); EditorGUILayout.BeginHorizontal(); GUILayout.Label("Height Fade", GuiStyles.Label, GUILayout.MaxWidth(160)); GuiHelpers.DrawMinMaxSlider(ref _yNegativeCylinderFadeProperty, ref _yPositiveCylinderFadeProperty, 0, 1, true); EditorGUILayout.EndHorizontal(); } break; case VolumeType.Sphere: { EditorGUILayout.Separator(); EditorGUILayout.BeginHorizontal(); GUILayout.Label("Distance Fade", GuiStyles.Label, GUILayout.MaxWidth(160)); GuiHelpers.DrawSlider(ref _distanceSphereFadeProperty, 0, 1, true); EditorGUILayout.EndHorizontal(); } break; } EditorGUILayout.Separator(); GuiHelpers.DrawPositiveOnlyFloatField(ref _falloffFadeProperty, new GUIContent("Fade Falloff", "The curve of the fading")); } EditorGUILayout.EndVertical(); }
/// <summary> /// Draws the field required to draw a VolumeInjectionParameters object /// </summary> /// <param name="injectionProperty">The related serialized property</param> /// <param name="displayMask">Int mask to display texture/noise mask</param> public static void DrawInjectionField(ref SerializedProperty injectionProperty, bool displayNoiseParameters, bool displayTexture2DMaskParameters, bool displayTexture3DMaskParameters) { SerializedProperty strengthProperty = injectionProperty.FindPropertyRelative("strength"); DrawFloatField(ref strengthProperty, new GUIContent("Strength", "Strength of the injected data. Can be set negative to remove data.")); if (displayNoiseParameters) { //EditorGUI.BeginDisabledGroup(!displayNoiseParameters); EditorGUILayout.Separator(); EditorGUILayout.Separator(); SerializedProperty useNoiseMask = injectionProperty.FindPropertyRelative("useNoiseMask"); GuiHelpers.DrawToggleChecker(ref useNoiseMask, "Use Noise Mask", true); if (useNoiseMask.boolValue) { EditorGUILayout.Separator(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.BeginVertical(GUILayout.Width(4)); GUILayout.Label(""); EditorGUILayout.EndVertical(); EditorGUILayout.BeginVertical(); SerializedProperty useNoiseMaskLevels = injectionProperty.FindPropertyRelative("useNoiseMaskLevels"); GuiHelpers.DrawToggleChecker(ref useNoiseMaskLevels, "Levels"); if (useNoiseMaskLevels.boolValue) { EditorGUILayout.Separator(); //EditorGUI.BeginDisabledGroup(!useNoiseMaskLevels.boolValue); SerializedProperty noiseMaskLevelsProperty = injectionProperty.FindPropertyRelative("noiseMaskLevelParameters"); GuiHelpers.DrawLevelsField(ref noiseMaskLevelsProperty); //EditorGUI.EndDisabledGroup(); } EditorGUILayout.EndVertical(); EditorGUILayout.EndHorizontal(); } //EditorGUI.EndDisabledGroup(); } if (displayTexture2DMaskParameters) { //EditorGUI.BeginDisabledGroup(!displayTexture2DMaskParameters); EditorGUILayout.Separator(); EditorGUILayout.Separator(); SerializedProperty useTexture2DMask = injectionProperty.FindPropertyRelative("useTexture2DMask"); GuiHelpers.DrawToggleChecker(ref useTexture2DMask, "Use Texture2D Mask", true); if (useTexture2DMask.boolValue) { EditorGUILayout.Separator(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.BeginVertical(GUILayout.Width(4)); GUILayout.Label(""); EditorGUILayout.EndVertical(); EditorGUILayout.BeginVertical(); SerializedProperty useTexture2DMaskLevels = injectionProperty.FindPropertyRelative("useTexture2DMaskLevels"); GuiHelpers.DrawToggleChecker(ref useTexture2DMaskLevels, "Levels"); if (useTexture2DMaskLevels.boolValue) { EditorGUILayout.Separator(); //EditorGUI.BeginDisabledGroup(!useTexture2DMaskLevels.boolValue); SerializedProperty texture2DMaskLevelsProperty = injectionProperty.FindPropertyRelative("texture2DMaskLevelParameters"); GuiHelpers.DrawLevelsField(ref texture2DMaskLevelsProperty); //EditorGUI.EndDisabledGroup(); } EditorGUILayout.EndVertical(); EditorGUILayout.EndHorizontal(); } //EditorGUI.EndDisabledGroup(); } if (displayTexture3DMaskParameters) { //EditorGUI.BeginDisabledGroup(!displayTexture3DMaskParameters); EditorGUILayout.Separator(); EditorGUILayout.Separator(); SerializedProperty useTexture3DMask = injectionProperty.FindPropertyRelative("useTexture3DMask"); GuiHelpers.DrawToggleChecker(ref useTexture3DMask, "Texture3D Mask Levels", true); if (useTexture3DMask.boolValue) { EditorGUILayout.Separator(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.BeginVertical(GUILayout.Width(4)); GUILayout.Label(""); EditorGUILayout.EndVertical(); EditorGUILayout.BeginVertical(); SerializedProperty useTexture3DMaskLevels = injectionProperty.FindPropertyRelative("useTexture3DMaskLevels"); GuiHelpers.DrawToggleChecker(ref useTexture3DMaskLevels, "Levels"); if (useTexture3DMaskLevels.boolValue) { EditorGUILayout.Separator(); //EditorGUI.BeginDisabledGroup(!useTexture3DMaskLevels.boolValue); SerializedProperty texture3DMaskLevelsProperty = injectionProperty.FindPropertyRelative("texture3DMaskLevelParameters"); GuiHelpers.DrawLevelsField(ref texture3DMaskLevelsProperty); //EditorGUI.EndDisabledGroup(); } EditorGUILayout.EndVertical(); EditorGUILayout.EndHorizontal(); } //EditorGUI.EndDisabledGroup(); } }
/// <summary> /// Draws a header with a logo texture /// </summary> /// <param name="logoTexture">The logo to draw</param> public static void DrawHeader(Texture2D logoTexture) { GuiHelpers.DrawTexture(logoTexture, logoTexture.width); }
/// <summary> /// Displays the content of the settings tab /// </summary> private static void DisplaySettingsArea(SerializedObject serializedObject, AuraCamera auraComponent) { EditorGUILayout.BeginVertical(GuiStyles.Background); EditorGUILayout.BeginVertical(GuiStyles.ButtonNoHover); EditorGUILayout.Separator(); GUILayout.Label(new GUIContent(" Debug", Aura.ResourcesCollection.debugIconTexture), GuiStyles.LabelBoldCenteredBig); EditorGUILayout.Separator(); GuiHelpers.DrawToggleChecker(ref _debugVolumetricLightingProperty, "Display Volumetric Lighting Only"); EditorGUILayout.Separator(); GuiHelpers.DrawToggleChecker(ref _debugOcclusionCullingProperty, "Display Occlusion Miss"); EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.EndVertical(); EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.BeginVertical(GuiStyles.ButtonNoHover); EditorGUILayout.Separator(); GUILayout.Label(new GUIContent(" Grid", Aura.ResourcesCollection.gridIconTexture), GuiStyles.LabelBoldCenteredBig); EditorGUILayout.Separator(); GuiHelpers.DrawContextualHelpBox("The \"Grid\" parameters allow you to determine the density of cells used to compute the volumetric lighting.\n\nThis cubic grid will be remapped on the frustum (the volume visible to the camera) and will range from the camera's near clip distance to the \"Range\" distance parameter (for performance saving and because behind a certain distance, changes are barely noticeable)."); EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.BeginVertical(); if (!IsEditionQualitySettings) { _frustumGridResolutionProperty.FindPropertyRelative("x").intValue = Mathf.Max(8, EditorGUILayout.IntField("Horizontal", _frustumGridResolutionProperty.FindPropertyRelative("x").intValue)); _frustumGridResolutionProperty.FindPropertyRelative("y").intValue = Mathf.Max(8, EditorGUILayout.IntField("Vertical", _frustumGridResolutionProperty.FindPropertyRelative("y").intValue)); _frustumGridResolutionProperty.FindPropertyRelative("z").intValue = Mathf.Max(8, EditorGUILayout.IntField("Depth", _frustumGridResolutionProperty.FindPropertyRelative("z").intValue)); EditorGUILayout.Separator(); if (GUILayout.Button("Set Resolution", GuiStyles.ButtonBold)) { //if (IsEditionQualitySettings) //{ // SceneViewVisualization.SetSceneViewVisualizationFrustumGridResolution(_frustumGridResolutionProperty.vector3IntValue); //} //else { _current.SetFrustumGridResolution(_frustumGridResolutionProperty.vector3IntValue); } } EditorGUILayout.Separator(); EditorGUILayout.Separator(); GuiHelpers.DrawToggleChecker(ref _enableAutomaticStereoResizingProperty, new GUIContent("Resize Automatically In Stereo Mode", "Enables the automatic horizontal resizing of the frustum grid resolution when the camera is running in stereo mode\n(halved size for MultiPass, doubled size for SinglePass)")); EditorGUILayout.Separator(); EditorGUILayout.Separator(); } else { GuiHelpers.DrawHelpBox("Custom grid resolution in SceneView is not currently available", HelpBoxType.Experimental); EditorGUILayout.Separator(); EditorGUILayout.Separator(); } GuiHelpers.DrawPositiveOnlyFloatField(ref _gridSettingsFarPlaneProperty, "Range"); if (auraComponent != null && _gridSettingsFarPlaneProperty.floatValue < auraComponent.CameraComponent.nearClipPlane) { GuiHelpers.DrawHelpBox("Range must be bigger than 0", HelpBoxType.Warning); } EditorGUILayout.Separator(); GuiHelpers.DrawSlider(ref _depthBiasCoefficientProperty, 0, 1, "Depth Bias", true); EditorGUILayout.Separator(); EditorGUILayout.Separator(); GuiHelpers.DrawContextualHelpBox("The \"Occlusion Culling\" allows to compute the maximum visible depth of the frustum grid.\n\nThis leads to avoid computing cells that are invisible to the camera because hidden behind objects."); GuiHelpers.DrawToggleChecker(ref _enableOcclusionCullingProperty, "Enable Occlusion Culling"); EditorGUI.BeginDisabledGroup(!_enableOcclusionCullingProperty.boolValue); EditorGUILayout.BeginVertical(GuiStyles.EmptyMiddleAligned); EditorGUILayout.PropertyField(_occlusionCullingAccuracyProperty, new GUIContent("Accuracy")); EditorGUILayout.EndVertical(); EditorGUI.EndDisabledGroup(); EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.EndVertical(); EditorGUILayout.EndVertical(); EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.BeginVertical(GuiStyles.ButtonNoHover); EditorGUILayout.Separator(); GUILayout.Label(new GUIContent(" Filtering", Aura.ResourcesCollection.cameraIconTexture), GuiStyles.LabelBoldCenteredBig); EditorGUILayout.Separator(); GuiHelpers.DrawContextualHelpBox("These parameters allow to configure the filtering of the volumetric data."); EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.BeginVertical(); GuiHelpers.DrawToggleChecker(ref _enableDitheringProperty, "Enable Color Dithering"); EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.PropertyField(_texture3DFilteringProperty, new GUIContent("Texture3D Filtering")); EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.Separator(); GuiHelpers.DrawContextualHelpBox("The \"Reprojection\" allows to blend the current (jittered) computed frame with the previous one.\n\nThis leads to a smoother volumetric lighting, especially with a low resolution grid."); GuiHelpers.DrawToggleChecker(ref _enableTemporalReprojectionProperty, "Enable Reprojection"); EditorGUI.BeginDisabledGroup(!_enableTemporalReprojectionProperty.boolValue); EditorGUILayout.BeginVertical(GuiStyles.EmptyMiddleAligned); GuiHelpers.DrawSlider(ref _temporalReprojectionFactorProperty, 0, 1, "Reprojector factor"); EditorGUILayout.EndVertical(); EditorGUI.EndDisabledGroup(); EditorGUILayout.Separator(); EditorGUILayout.EndVertical(); EditorGUILayout.EndVertical(); EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.BeginVertical(GuiStyles.ButtonNoHover); EditorGUILayout.Separator(); GUILayout.Label(new GUIContent(" Options", Aura.ResourcesCollection.optionsIconTexture), GuiStyles.LabelBoldCenteredBig); EditorGUILayout.Separator(); GuiHelpers.DrawContextualHelpBox("These parameters allow you to enable/disable some options.\n\nNote that the existence of the different contributions are handled by the system at runtime."); EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.BeginVertical(); GuiHelpers.DrawToggleChecker(ref _enableAmbientLightingProperty, "Enable Ambient Lighting"); EditorGUILayout.Separator(); EditorGUILayout.Separator(); GuiHelpers.DrawToggleChecker(ref _enableVolumesProperty, "Enable Volumes"); EditorGUI.BeginDisabledGroup(!_enableVolumesProperty.boolValue); EditorGUILayout.BeginVertical(GuiStyles.EmptyMiddleAligned); GuiHelpers.DrawToggleChecker(ref _enableVolumesNoiseMaskProperty, "Enable Noise Masks"); EditorGUILayout.Separator(); GuiHelpers.DrawToggleChecker(ref _enableVolumesTexture2DMaskProperty, "Enable Texture2D Masks"); EditorGUILayout.Separator(); GuiHelpers.DrawToggleChecker(ref _enableVolumesTexture3DMaskProperty, "Enable Texture3D Masks"); EditorGUILayout.EndVertical(); EditorGUI.EndDisabledGroup(); EditorGUILayout.Separator(); EditorGUILayout.Separator(); GuiHelpers.DrawToggleChecker(ref _enableDirectionalLightsProperty, "Enable Directional Lights"); EditorGUI.BeginDisabledGroup(!_enableDirectionalLightsProperty.boolValue); EditorGUILayout.BeginVertical(GuiStyles.EmptyMiddleAligned); GuiHelpers.DrawToggleChecker(ref _enableDirectionalLightsShadowsProperty, "Enable Shadows"); EditorGUILayout.EndVertical(); EditorGUI.EndDisabledGroup(); EditorGUILayout.Separator(); EditorGUILayout.Separator(); GuiHelpers.DrawToggleChecker(ref _enableSpotLightsProperty, "Enable Spot Lights"); EditorGUI.BeginDisabledGroup(!_enableSpotLightsProperty.boolValue); EditorGUILayout.BeginVertical(GuiStyles.EmptyMiddleAligned); GuiHelpers.DrawToggleChecker(ref _enableSpotLightsShadowsProperty, "Enable Shadows"); EditorGUILayout.EndVertical(); EditorGUI.EndDisabledGroup(); EditorGUILayout.Separator(); EditorGUILayout.Separator(); GuiHelpers.DrawToggleChecker(ref _enablePointLightsProperty, "Enable Point Lights"); EditorGUI.BeginDisabledGroup(!_enablePointLightsProperty.boolValue); EditorGUILayout.BeginVertical(GuiStyles.EmptyMiddleAligned); GuiHelpers.DrawToggleChecker(ref _enablePointLightsShadowsProperty, "Enable Shadows"); EditorGUILayout.EndVertical(); EditorGUI.EndDisabledGroup(); EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUI.BeginDisabledGroup(!_enableSpotLightsProperty.boolValue && !_enableSpotLightsProperty.boolValue && !_enableDirectionalLightsProperty.boolValue); GuiHelpers.DrawToggleChecker(ref _enableLightsCookiesProperty, "Enable Cookies"); EditorGUI.EndDisabledGroup(); EditorGUILayout.Separator(); EditorGUILayout.EndVertical(); EditorGUILayout.EndVertical(); EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.BeginVertical(GuiStyles.ButtonNoHover); EditorGUILayout.Separator(); GUILayout.Label(new GUIContent(" Experimental Features", Aura.ResourcesCollection.experimentalIconTexture), GuiStyles.LabelBoldCenteredBig); EditorGUILayout.Separator(); GuiHelpers.DrawHelpBox("These features are still under active development.\nThey might currently lead to visual/performance issues.", HelpBoxType.Experimental); EditorGUILayout.Separator(); EditorGUILayout.Separator(); GuiHelpers.DrawToggleChecker(ref _enableDenoisingFilterProperty, "Enable Denoising Filter"); EditorGUI.BeginDisabledGroup(!_enableDenoisingFilterProperty.boolValue); EditorGUILayout.BeginVertical(GuiStyles.EmptyMiddleAligned); EditorGUILayout.PropertyField(_denoisingFilterRangeProperty, new GUIContent("Range")); EditorGUILayout.EndVertical(); EditorGUI.EndDisabledGroup(); EditorGUILayout.Separator(); EditorGUILayout.Separator(); GuiHelpers.DrawToggleChecker(ref _enableBlurFilterProperty, "Enable Blur Filter"); EditorGUI.BeginDisabledGroup(!_enableBlurFilterProperty.boolValue); EditorGUILayout.BeginVertical(GuiStyles.EmptyMiddleAligned); EditorGUILayout.PropertyField(_blurFilterRangeProperty, new GUIContent("Range")); EditorGUILayout.PropertyField(_blurFilterTypeProperty, new GUIContent("Type")); if ((BlurFilterType)_blurFilterTypeProperty.enumValueIndex == BlurFilterType.Gaussian) { GuiHelpers.DrawSlider(ref _blurFilterGaussianDeviationProperty, 0.0f, 0.01f, "Lobe Bulge"); } EditorGUILayout.EndVertical(); EditorGUI.EndDisabledGroup(); EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.BeginVertical(); GuiHelpers.DrawContextualHelpBox("The \"Light Probes\" allows to compute the world space light probes' data and inject it as contributing light in the volumetric lighting system."); GuiHelpers.DrawToggleChecker(ref _enableLightProbesProperty, "Enable Light Probes"); //if(!IsEditionQualitySettings) //{ // EditorGUI.BeginDisabledGroup(!_enableLightProbesProperty.boolValue); // EditorGUILayout.BeginVertical(GuiStyles.EmptyMiddleAligned); // _lightProbesProxyGridResolutionProperty.FindPropertyRelative("x").intValue = Mathf.Max(2, EditorGUILayout.IntField("Horizontal", _lightProbesProxyGridResolutionProperty.FindPropertyRelative("x").intValue)); // _lightProbesProxyGridResolutionProperty.FindPropertyRelative("y").intValue = Mathf.Max(2, EditorGUILayout.IntField("Vertical", _lightProbesProxyGridResolutionProperty.FindPropertyRelative("y").intValue)); // _lightProbesProxyGridResolutionProperty.FindPropertyRelative("z").intValue = Mathf.Max(2, EditorGUILayout.IntField("Depth", _lightProbesProxyGridResolutionProperty.FindPropertyRelative("z").intValue)); // EditorGUILayout.Separator(); // if (GUILayout.Button("Set Resolution", GuiStyles.ButtonNoHover)) // { // _current.SetLightProbesProxyGridResolution(_lightProbesProxyGridResolutionProperty.vector3IntValue); // } // EditorGUILayout.EndVertical(); // EditorGUI.EndDisabledGroup(); //} EditorGUILayout.Separator(); EditorGUILayout.EndVertical(); EditorGUILayout.EndVertical(); EditorGUILayout.EndVertical(); }
/// <summary> /// Draws the quality settings area /// </summary> private void DisplayQualitySettingsArea() { AuraQualitySettings currentQualitySettings = (AuraQualitySettings)_qualitySettingsProperty.objectReferenceValue; if (!ReferenceEquals(_previousQualitySettings, currentQualitySettings)) { _currentAuraComponent.frustumSettings.RaiseOnQualityChanged(); PopulateExistingQualitySettingsPresetsList(); } _previousQualitySettings = currentQualitySettings; EditorGUILayout.BeginVertical(GuiStyles.ButtonNoHover); EditorGUILayout.BeginVertical(GuiStyles.Background); EditorGUILayout.Separator(); GUILayout.Label(new GUIContent("Aura <b>Quality Settings</b>", Aura.ResourcesCollection.qualitySettingsPresetIconTexture), new GUIStyle(GuiStyles.LabelCenteredBig) { fontSize = 15 }); EditorGUILayout.Separator(); GuiHelpers.DrawContextualHelpBox("The \"Quality Settings Preset\" is the asset that holds the quality settings for the data computation."); //if (_foundQualitySettingsPresets.Count != AssetDatabase.FindAssets("t:AuraQualitySettings").Length) //{ // PopulateExistingQualitySettingsPresetsList(); //} if (_foundQualitySettingsPresets.Count > 0) { EditorGUI.BeginChangeCheck(); EditorGUILayout.BeginHorizontal(); GUILayout.Label("Select Existing", GuiStyles.Label, GUILayout.MaxWidth(96)); _selectedQualitySettingsPresetId = EditorGUILayout.Popup(_selectedQualitySettingsPresetId, _foundQualitySettingsPresetsName); EditorGUILayout.EndHorizontal(); if (EditorGUI.EndChangeCheck()) { _currentAuraComponent.frustumSettings.LoadQualitySettings(AssetDatabase.LoadAssetAtPath <AuraQualitySettings>(_foundQualitySettingsPresets[_selectedQualitySettingsPresetId])); PopulateExistingQualitySettingsPresetsList(); } EditorGUILayout.Separator(); EditorGUILayout.Separator(); } EditorGUILayout.BeginHorizontal(); GUILayout.Label("Preset File", GuiStyles.Label, GUILayout.MaxWidth(80)); EditorGUILayout.PropertyField(_qualitySettingsProperty, new GUIContent("")); EditorGUILayout.EndHorizontal(); EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.BeginHorizontal(); //if (GUILayout.Button(new GUIContent("Load Existing", Aura.AuraResourcesCollection.loadIconTexture, "Loads an existing preset file"), GuiStyles.ButtonBigNoBorder)) //{ // _currentAuraComponent.frustumSettings.LoadQualitySettings(); //} //GUILayout.Space(8); if (GUILayout.Button(new GUIContent("Save As New Preset", Aura.ResourcesCollection.saveIconTexture, "Saves the current settings in a new file"), GuiStyles.ButtonBigNoBorder)) { _currentAuraComponent.frustumSettings.SaveQualitySettings(); } EditorGUILayout.EndHorizontal(); EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.EndVertical(); EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.Separator(); SerializedObject qualitySettingsObject = new SerializedObject(_currentAuraComponent.frustumSettings.QualitySettings); AuraQualitySettingsEditor.DrawCustomEditor(qualitySettingsObject, _currentAuraComponent, false, true); EditorGUILayout.EndVertical(); EditorGUILayout.Separator(); }