public static void DrawPackageVersion() { string versionText; SCPE_GUI.Status versionStatus; if (PackageVersionCheck.queryStatus == PackageVersionCheck.QueryStatus.Fetching) { versionStatus = SCPE_GUI.Status.Warning; versionText = "Checking update server..."; } else { versionStatus = (PackageVersionCheck.IS_UPDATED) ? SCPE_GUI.Status.Ok : SCPE_GUI.Status.Warning; versionText = (PackageVersionCheck.IS_UPDATED) ? "Latest version" : "New version available"; } SCPE_GUI.DrawStatusBox(new GUIContent("Package version " + SCPE.INSTALLED_VERSION, EditorGUIUtility.IconContent("cs Script Icon").image), versionText, versionStatus); if (!PackageVersionCheck.IS_UPDATED) { using (new EditorGUILayout.HorizontalScope()) { if (SCPE_GUI.DrawActionBox("Update to " + PackageVersionCheck.fetchedVersionString, EditorGUIUtility.IconContent("BuildSettings.Standalone.Small").image)) { SCPE.OpenStorePage(); } } } }
//Check if SC Post Effects folder is placed inside PostProcessing folder public static void CheckRootFolder() { //For the package manager PPS version, asset folder can sit anywhere if (PostProcessingInstallation.Config == PostProcessingInstallation.Configuration.PackageManager) { IS_CORRECT_BASE_FOLDER = true; return; } SCPE.PACKAGE_ROOT_FOLDER = SCPE.GetRootFolder(); PostProcessingInstallation.FindInstallationDir(); //When already installed, root folder may be in PPS installation dir if (PostProcessingInstallation.IS_INSTALLED) { IS_CORRECT_BASE_FOLDER = (SCPE.PACKAGE_PARENT_FOLDER == PostProcessingInstallation.PPS_INSTALLATION_DIR); //Debug.Log(SCPE.PACKAGE_PARENT_FOLDER + " == " + PostProcessingInstallation.PPS_INSTALLATION_DIR); } //When not installed, installation will be in "Assets/PostProcessing/" else { IS_CORRECT_BASE_FOLDER = (SCPE.PACKAGE_PARENT_FOLDER == "Assets/PostProcessing/"); } #if SCPE_DEV && !PACKAGE_MANAGER Debug.Log("<b>Installer</b> Correct folder location: " + IS_CORRECT_BASE_FOLDER); #endif }
public static void FindPackages() { string packageDir = SCPE.GetRootFolder(); CheckInstallation(); string[] assets = AssetDatabase.FindAssets("_DemoContent", new[] { packageDir }); if (assets.Length > 0) { SCENES_PACKAGE_PATH = AssetDatabase.GUIDToAssetPath(assets[0]); HAS_SCENE_PACKAGE = true; } else { Settings.installDemoContent = false; HAS_SCENE_PACKAGE = false; } assets = null; assets = AssetDatabase.FindAssets("_Samples", new[] { packageDir }); if (assets.Length > 0) { SAMPLES_PACKAGE_PATH = AssetDatabase.GUIDToAssetPath(assets[0]); HAS_SAMPLES_PACKAGE = true; } else { Settings.installSampleContent = false; HAS_SAMPLES_PACKAGE = false; } }
//Create a global post processing volume and assign the correct layer and default profile public static void SetupGlobalVolume() { #if SCPE //Avoid missing PostProcessing scripts GameObject volumeObject = new GameObject("Global Post-process Volume"); UnityEngine.Rendering.PostProcessing.PostProcessVolume volume = volumeObject.AddComponent<UnityEngine.Rendering.PostProcessing.PostProcessVolume>(); volumeObject.layer = SCPE.GetLayerID(); volume.isGlobal = true; //Find default profile string[] assets = AssetDatabase.FindAssets("SC Default Profile"); if (assets.Length > 0) { string assetPath = AssetDatabase.GUIDToAssetPath(assets[0]); UnityEngine.Rendering.PostProcessing.PostProcessProfile defaultProfile = (UnityEngine.Rendering.PostProcessing.PostProcessProfile)AssetDatabase.LoadAssetAtPath(assetPath, typeof(UnityEngine.Rendering.PostProcessing.PostProcessProfile)); volume.sharedProfile = defaultProfile; } else { Debug.Log("The default \"SC Post Effects\" profile could not be found. Add a new profile to the volume to get started."); } Selection.objects = new[] { volumeObject }; EditorUtility.SetDirty(volumeObject); #endif }
public static void SetupCamera() { #if SCPE //Avoid missing PostProcessing scripts Camera cam = (Camera.main) ? Camera.main : GameObject.FindObjectOfType<Camera>(); GameObject mainCamera = cam.gameObject; if (!mainCamera) { Debug.LogError("<b>SC Post Effects</b> No camera found in scene to configure"); return; } //Add PostProcessLayer component if not already present if (mainCamera.GetComponent<UnityEngine.Rendering.PostProcessing.PostProcessLayer>() == false) { UnityEngine.Rendering.PostProcessing.PostProcessLayer ppLayer = mainCamera.AddComponent<UnityEngine.Rendering.PostProcessing.PostProcessLayer>(); ppLayer.volumeLayer = LayerMask.GetMask(LayerMask.LayerToName(SCPE.GetLayerID())); ppLayer.fog.enabled = false; Debug.Log("<b>PostProcessLayer</b> component was added to <b>" + mainCamera.name + "</b>"); cam.allowMSAA = false; cam.allowHDR = true; //Enable AA by default ppLayer.antialiasingMode = UnityEngine.Rendering.PostProcessing.PostProcessLayer.Antialiasing.FastApproximateAntialiasing; Selection.objects = new[] { mainCamera }; EditorUtility.SetDirty(mainCamera); } #endif }
private static List <string> GetShaderFilePaths() { string packageDir = SCPE.GetRootFolder(); //Currently not needed! /* * List<string> filePaths = new List<string>(); * * string effectShaderDir = packageDir + "/Runtime"; * * //Find all shaders in the package folder * string[] GUIDs = AssetDatabase.FindAssets("*Shader t:Shader", new string[] { effectShaderDir }); * for (int i = 0; i < GUIDs.Length; i++) * { * //filePaths.Add(AssetDatabase.GUIDToAssetPath(GUIDs[i])); * } */ string pipelineLibrary = packageDir + "/Shaders/Pipeline/Pipeline.hlsl"; filePaths.Add(pipelineLibrary); #if SCPE_DEV Debug.Log("<b>ConfigureShaderPaths</b> found " + filePaths.Count + " shaders/libraries to reconfigure"); #endif return(filePaths); }
public static void Initialize() { if (EditorApplication.isPlaying) return; #if PPS SCPE.GetRenderPipeline(); #endif }
public static void GetLatestVersionPopup() { CheckForUpdate(); if (!IS_UPDATED) { if (EditorUtility.DisplayDialog(SCPE.ASSET_NAME + ", version " + SCPE.INSTALLED_VERSION, "A new version is available: " + fetchedVersionString, "Open store page", "Close")) { SCPE.OpenStorePage(); } } else { if (EditorUtility.DisplayDialog(SCPE.ASSET_NAME + ", version " + SCPE.INSTALLED_VERSION, "Installed version is up-to-date!", "Close")) { } } }
public static void SetupCamera() { Camera cam = (Camera.main) ? Camera.main : GameObject.FindObjectOfType<Camera>(); GameObject mainCamera = cam.gameObject; if (!mainCamera) { Debug.LogError("<b>SC Post Effects</b> No camera found in scene to configure"); return; } #if URP UniversalAdditionalCameraData data = mainCamera.GetComponent<UniversalAdditionalCameraData>(); if (data) { data.renderPostProcessing = true; data.volumeTrigger = mainCamera.transform; EditorUtility.SetDirty(data); } #endif #if PPS //Avoid missing PostProcessing scripts //Add PostProcessLayer component if not already present if (mainCamera.GetComponent<UnityEngine.Rendering.PostProcessing.PostProcessLayer>() == false) { UnityEngine.Rendering.PostProcessing.PostProcessLayer ppLayer = mainCamera.AddComponent<UnityEngine.Rendering.PostProcessing.PostProcessLayer>(); ppLayer.volumeLayer = LayerMask.GetMask(LayerMask.LayerToName(SCPE.GetLayerID())); ppLayer.fog.enabled = false; Debug.Log("<b>PostProcessLayer</b> component was added to <b>" + mainCamera.name + "</b>"); cam.allowMSAA = false; cam.allowHDR = true; //Enable AA by default #if UNITY_2019_1_OR_NEWER ppLayer.antialiasingMode = UnityEngine.Rendering.PostProcessing.PostProcessLayer.Antialiasing.SubpixelMorphologicalAntialiasing; #else ppLayer.antialiasingMode = UnityEngine.Rendering.PostProcessing.PostProcessLayer.Antialiasing.FastApproximateAntialiasing; #endif Selection.objects = new[] { mainCamera }; EditorUtility.SetDirty(mainCamera); } #endif }
public static void ConfigureForCurrentPipeline() { SCPE.GetRenderPipeline(); switch (SCPE.pipeline) { case SCPE.RenderPipeline.Legacy: ConfigureForStandardRP(); break; case SCPE.RenderPipeline.Universal: ConfigureForURP(); break; } Installer.Log.Write("Activated " + SCPE.pipeline + " render pipeline shader library"); }
//TODO: Implement after Beta private void DrawActionButtons() { EditorGUILayout.Space(); EditorGUILayout.BeginHorizontal(); if (GUILayout.Button("<size=12>Rate</size>", SCPE_GUI.Button)) { SCPE.OpenStorePage(); } if (GUILayout.Button("<size=12>Review</size>", SCPE_GUI.Button)) { SCPE.OpenStorePage(); } EditorGUILayout.EndHorizontal(); EditorGUILayout.Space(); }
//TODO: Implement after Beta private void DrawActionButtons() { EditorGUILayout.Space(); EditorGUILayout.BeginHorizontal(); if (GUILayout.Button(new GUIContent("<size=12> Rate</size>", EditorGUIUtility.IconContent("d_Favorite").image), SCPE_GUI.Button)) { SCPE.OpenStorePage(); } if (GUILayout.Button(new GUIContent("<size=12> Review</size>", EditorGUIUtility.IconContent("d_FilterByLabel").image), SCPE_GUI.Button)) { SCPE.OpenStorePage(); } EditorGUILayout.EndHorizontal(); EditorGUILayout.Space(); }
public static void ConfigureShaderPaths(PostProcessingInstallation.Configuration configuration = PostProcessingInstallation.Configuration.Auto) { string packageDir = SCPE.GetRootFolder() + "/Effects"; //Find all shaders in the package folder string[] GUIDs = AssetDatabase.FindAssets("*Shader t:Shader", new string[] { packageDir }); #if SCPE_DEV Debug.Log("<b>ConfigureShaderPaths</b> found " + GUIDs.Length + " shaders to reconfigure"); #endif configuration = (configuration == PostProcessingInstallation.Configuration.Auto) ? PostProcessingInstallation.CheckInstallation() : configuration; for (int i = 0; i < GUIDs.Length; i++) { string assetPath = AssetDatabase.GUIDToAssetPath(GUIDs[i]); Shader shaderFile = (Shader)AssetDatabase.LoadAssetAtPath(assetPath, typeof(Shader)); string shaderName = shaderFile.name.Replace("Hidden/SC Post Effects/", string.Empty); EditorUtility.DisplayProgressBar("Configuring shaders for " + configuration + " installation...", shaderName + " (" + i + "/" + GUIDs.Length + ")", (float)i / GUIDs.Length); string fileContents = File.ReadAllText(assetPath); if (configuration == PostProcessingInstallation.Configuration.GitHub) { fileContents = fileContents.Replace("PostProcessing", "../../../.."); } else if (configuration == PostProcessingInstallation.Configuration.PackageManager) { fileContents = fileContents.Replace("../../../..", "PostProcessing"); } File.WriteAllText(assetPath, fileContents); AssetDatabase.ImportAsset(assetPath); } EditorUtility.ClearProgressBar(); Installer.Log.Write("Modified shaders for " + configuration + " configuration..."); }
private static void RefreshShaders() { if (SCPE.PACKAGE_ROOT_FOLDER == string.Empty) { SCPE.GetRootFolder(); } //Very much required, despite the warning AssetDatabase.Refresh(); //Re-import shaders so libraries references nudge into place string[] guids = AssetDatabase.FindAssets("t: Shader", new string[] { SCPE.PACKAGE_ROOT_FOLDER }); #if SCPE_DEV Debug.Log("<b>RefreshShaders</b> refreshing " + guids.Length + " shaders."); #endif EditorUtility.DisplayProgressBar("SC Post Effects", "Reimporting shaders...", 1f); for (int i = 0; i < guids.Length; i++) { AssetDatabase.ImportAsset(AssetDatabase.GUIDToAssetPath(guids[i])); } EditorUtility.ClearProgressBar(); }
void DrawInstallation() { SetWindowHeight(350f); using (new EditorGUILayout.VerticalScope()) { EditorGUILayout.Space(); //Package Version { string versionText = null; versionText = (PackageVersionCheck.IS_UPDATED) ? "Latest version" : "New version available"; SCPE_GUI.Status versionStatus; versionStatus = (PackageVersionCheck.IS_UPDATED) ? SCPE_GUI.Status.Ok : SCPE_GUI.Status.Warning; SCPE_GUI.DrawStatusBox(new GUIContent(SCPE.INSTALLED_VERSION, EditorGUIUtility.IconContent("cs Script Icon").image), versionText, versionStatus); } if (!PackageVersionCheck.IS_UPDATED) { using (new EditorGUILayout.HorizontalScope()) { if (SCPE_GUI.DrawActionBox("Update", EditorGUIUtility.IconContent("BuildSettings.Standalone.Small").image)) { SCPE.OpenStorePage(); this.Close(); } } } //Unity Version { string versionText = null; versionText = (UnityVersionCheck.COMPATIBLE) ? "Compatible" : "Not compatible"; versionText = (UnityVersionCheck.UNTESTED) ? "Untested!" : versionText; SCPE_GUI.Status versionStatus; versionStatus = (UnityVersionCheck.COMPATIBLE) ? SCPE_GUI.Status.Ok : SCPE_GUI.Status.Error; versionStatus = (UnityVersionCheck.UNTESTED) ? SCPE_GUI.Status.Warning : versionStatus; SCPE_GUI.DrawStatusBox(new GUIContent("Unity " + UnityVersionCheck.UnityVersion, EditorGUIUtility.IconContent("UnityLogo").image), versionText, versionStatus); } /* * //Folder * { * if (PostProcessingInstallation.Config == PostProcessingInstallation.Configuration.GitHub) * { * string folderText = (Installer.IS_CORRECT_BASE_FOLDER) ? "Correct location" : "Outside \"PostProcessing/\""; * SCPE_GUI.Status folderStatus = (Installer.IS_CORRECT_BASE_FOLDER) ? SCPE_GUI.Status.Ok : SCPE_GUI.Status.Error; * * SCPE_GUI.DrawStatusBox(new GUIContent("SC Post Effects folder", EditorGUIUtility.IconContent("FolderEmpty Icon").image), folderText, folderStatus); * * if (!Installer.IS_CORRECT_BASE_FOLDER) * { * if (!Installer.IS_CORRECT_BASE_FOLDER) * { * EditorGUILayout.HelpBox("Please move the SC Post Effects folder to where you've installed the Post Processing Stack", MessageType.Error); * } * } * } * * } */ //Color space { string colorText = (UnityEditor.PlayerSettings.colorSpace == ColorSpace.Linear) ? "Linear" : "Linear is recommended"; SCPE_GUI.Status folderStatus = (UnityEditor.PlayerSettings.colorSpace == ColorSpace.Linear) ? SCPE_GUI.Status.Ok : SCPE_GUI.Status.Warning; SCPE_GUI.DrawStatusBox(new GUIContent("Color space", EditorGUIUtility.IconContent("d_PreTextureRGB").image), colorText, folderStatus); } //Post Processing Stack string ppsText = (PostProcessingInstallation.IS_INSTALLED) ? (PostProcessingInstallation.Config == PostProcessingInstallation.Configuration.GitHub) ? "Installed (GitHub)" : "Installed (Package Manager)" : "Not installed"; SCPE_GUI.Status ppsStatus = (PostProcessingInstallation.IS_INSTALLED) ? SCPE_GUI.Status.Ok : SCPE_GUI.Status.Error; string ppsLabel = "Post Processing Stack v2"; #if PACKAGE_MANAGER ppsLabel = "Post Processing"; #endif SCPE_GUI.DrawStatusBox(new GUIContent(ppsLabel, EditorGUIUtility.IconContent("Camera Gizmo").image), ppsText, ppsStatus); /* * using (new EditorGUILayout.HorizontalScope(EditorStyles.label)) * { * EditorGUILayout.LabelField("Change shader configuration", EditorStyles.label); * * if (GUILayout.Button(new GUIContent("GitHub"), SCPE_GUI.ToggleButtonLeftNormal)) * { * Installer.ConfigureShaderPaths(PostProcessingInstallation.Configuration.GitHub); * } * if (GUILayout.Button(new GUIContent("Package Manager"), SCPE_GUI.ToggleButtonRightNormal)) * { * Installer.ConfigureShaderPaths(PostProcessingInstallation.Configuration.PackageManager); * } * } */ } }
private void StartScreen() { EditorGUILayout.HelpBox("\nThis wizard will guide you through the installation of the SC Post Effects package\n\nPress \"Next\" to continue...\n", MessageType.Info); EditorGUILayout.Space(); EditorGUILayout.LabelField("Pre-install checks", SCPE_GUI.Header); EditorGUILayout.Space(); using (new EditorGUILayout.VerticalScope(EditorStyles.textArea)) { EditorGUILayout.Space(); //Package Version { string versionText = null; versionText = (PackageVersionCheck.IS_UPDATED) ? "Latest version" : "New version available"; SCPE_GUI.Status versionStatus; versionStatus = (PackageVersionCheck.IS_UPDATED) ? SCPE_GUI.Status.Ok : SCPE_GUI.Status.Warning; SCPE_GUI.DrawStatusBox(new GUIContent(SCPE.INSTALLED_VERSION, EditorGUIUtility.IconContent("cs Script Icon").image), versionText, versionStatus); } if (!PackageVersionCheck.IS_UPDATED) { using (new EditorGUILayout.HorizontalScope()) { if (SCPE_GUI.DrawActionBox("Update", EditorGUIUtility.IconContent("BuildSettings.Standalone.Small").image)) { SCPE.OpenStorePage(); } } } //Unity Version { string versionText = null; versionText = (UnityVersionCheck.COMPATIBLE) ? "Compatible" : "Not compatible"; versionText = (UnityVersionCheck.UNTESTED) ? "Untested!" : versionText; SCPE_GUI.Status versionStatus; versionStatus = (UnityVersionCheck.COMPATIBLE) ? SCPE_GUI.Status.Ok : SCPE_GUI.Status.Error; versionStatus = (UnityVersionCheck.UNTESTED) ? SCPE_GUI.Status.Warning : versionStatus; SCPE_GUI.DrawStatusBox(new GUIContent("Unity " + UnityVersionCheck.UnityVersion, EditorGUIUtility.IconContent("UnityLogo").image), versionText, versionStatus); } //Folder /* * { #if !PACKAGE_MANAGER * string folderText = (Installer.IS_CORRECT_BASE_FOLDER) ? "Correct location" : "Outside \"PostProcessing/\""; * SCPE_GUI.Status folderStatus = (Installer.IS_CORRECT_BASE_FOLDER) ? SCPE_GUI.Status.Ok : SCPE_GUI.Status.Error; * * SCPE_GUI.DrawStatusBox(new GUIContent("SC Post Effects folder", EditorGUIUtility.IconContent("FolderEmpty Icon").image), folderText, folderStatus); * * if (!Installer.IS_CORRECT_BASE_FOLDER && (PostProcessingInstallation.IS_INSTALLED)) * { * EditorGUILayout.HelpBox("Please move the SC Post Effects folder to where you've installed the Post Processing Stack", MessageType.Error); * } #endif * } */ //Color space { string colorText = (UnityEditor.PlayerSettings.colorSpace == ColorSpace.Linear) ? "Linear" : "Linear is recommended"; SCPE_GUI.Status folderStatus = (UnityEditor.PlayerSettings.colorSpace == ColorSpace.Linear) ? SCPE_GUI.Status.Ok : SCPE_GUI.Status.Warning; SCPE_GUI.DrawStatusBox(new GUIContent("Color space", EditorGUIUtility.IconContent("d_PreTextureRGB").image), colorText, folderStatus); } //Post Processing Stack string ppsText = (PostProcessingInstallation.IS_INSTALLED) ? (PostProcessingInstallation.Config == PostProcessingInstallation.Configuration.GitHub) ? "Installed (GitHub)" : "Installed (Package Manager)" : "Not installed"; SCPE_GUI.Status ppsStatus = (PostProcessingInstallation.IS_INSTALLED) ? SCPE_GUI.Status.Ok : SCPE_GUI.Status.Error; string ppsLabel = "Post Processing Stack v2"; #if PACKAGE_MANAGER ppsLabel = "Post Processing"; #endif SCPE_GUI.DrawStatusBox(new GUIContent(ppsLabel, EditorGUIUtility.IconContent("Camera Gizmo").image), ppsText, ppsStatus); if (PostProcessingInstallation.IS_INSTALLED == false) { #if PACKAGE_MANAGER using (new EditorGUILayout.HorizontalScope()) { EditorGUILayout.LabelField(" Installation source", EditorStyles.label); if (GUILayout.Button(new GUIContent("GitHub"), PostProcessingInstallation.Config == PostProcessingInstallation.Configuration.GitHub ? SCPE_GUI.ToggleButtonLeftToggled : SCPE_GUI.ToggleButtonLeftNormal)) { PostProcessingInstallation.Config = PostProcessingInstallation.Configuration.GitHub; } if (GUILayout.Button(new GUIContent("Package Manager"), PostProcessingInstallation.Config == PostProcessingInstallation.Configuration.PackageManager ? SCPE_GUI.ToggleButtonRightToggled : SCPE_GUI.ToggleButtonRightNormal)) { PostProcessingInstallation.Config = PostProcessingInstallation.Configuration.PackageManager; } } #else PostProcessingInstallation.Config = PostProcessingInstallation.Configuration.GitHub; #endif using (new EditorGUILayout.HorizontalScope()) { if (PostProcessingInstallation.Config == PostProcessingInstallation.Configuration.GitHub) { if (SCPE_GUI.DrawActionBox(string.IsNullOrEmpty(PostProcessingInstallation.PACKAGE_PATH) ? "Download" : "Install", EditorGUIUtility.IconContent("BuildSettings.Standalone.Small").image)) { //Download if (PostProcessingInstallation.PACKAGE_PATH.Contains(".unitypackage") == false) { Application.OpenURL(PostProcessingInstallation.PP_DOWNLOAD_URL); if (EditorUtility.DisplayDialog("Post Processing Stack download", "Once the file has been downloaded, locate the file path and install it", "Browse")) { PostProcessingInstallation.PACKAGE_PATH = EditorUtility.OpenFilePanel("Package download location", "", "unitypackage"); } } //Install else { PostProcessingInstallation.InstallPackage(); } } } else { if (SCPE_GUI.DrawActionBox("Install", EditorGUIUtility.IconContent("BuildSettings.Standalone.Small").image)) { PostProcessingInstallation.InstallPackage(); } } } EditorGUILayout.Space(); if (PostProcessingInstallation.Config == PostProcessingInstallation.Configuration.GitHub) { using (new EditorGUILayout.HorizontalScope()) { EditorGUILayout.LabelField(new GUIContent(" Package location", EditorGUIUtility.IconContent("d_UnityLogo").image)); EditorGUILayout.TextField(PostProcessingInstallation.PACKAGE_PATH, SCPE_GUI.PathField, GUILayout.MaxWidth(180f)); if (GUILayout.Button("...", GUILayout.MaxWidth(30f))) { PostProcessingInstallation.PACKAGE_PATH = EditorUtility.OpenFilePanel("Package download location", "", "unitypackage"); } } } else { } } //End if-installed EditorGUILayout.Space(); } //Validate for errors before allowing to continue hasError = !UnityVersionCheck.COMPATIBLE; //hasError = !Installer.IS_CORRECT_BASE_FOLDER; hasError = (PostProcessingInstallation.IS_INSTALLED == false); }