private static void RemoveOverCloud() { GameObject overCloudPrefab = GameObject.Find("OverCloud"); if (overCloudPrefab != null) { GameObject.DestroyImmediate(overCloudPrefab); } Camera mainCamera = GaiaUtils.GetCamera(); if (mainCamera != null) { OverCloudCamera ocCamera = mainCamera.gameObject.GetComponent <OverCloudCamera>(); if (ocCamera != null) { GameObject.DestroyImmediate(ocCamera); } } if (GaiaUtils.CheckIfSceneProfileExists()) { GaiaGlobal.Instance.SceneProfile.m_waterSystemMode = GaiaConstants.GlobalSystemMode.Gaia; GaiaSettings gaiaSettings = GaiaUtils.GetGaiaSettings(); if (gaiaSettings != null) { UnityPipelineProfile pipelineProfile = gaiaSettings.m_pipelineProfile; if (pipelineProfile != null) { GaiaLighting.GetProfile(GaiaGlobal.Instance.SceneProfile, pipelineProfile, GaiaUtils.GetActivePipeline()); } } } }
/// <summary> /// Does a quick optimize to your scene/project settings /// </summary> public static void GX_Optimization_QuickOptimize() { GaiaSettings gaiaSettings = GaiaUtils.GetGaiaSettings(); if (gaiaSettings != null) { GaiaLighting.QuickOptimize(gaiaSettings); } }
/// <summary> /// Bakes lightmapping /// </summary> public static void GX_Lightmaps_BakeLighting() { GaiaSettings settings = GaiaUtils.GetGaiaSettings(); if (settings != null) { if (GaiaUtils.CheckIfSceneProfileExists()) { GaiaLighting.BakeLighting(GaiaGlobal.Instance.SceneProfile.m_lightingBakeMode, GaiaGlobal.Instance.SceneProfile.m_lightingProfiles[GaiaGlobal.Instance.SceneProfile.m_selectedLightingProfileValuesIndex]); } } }
/// <summary> /// Finalizes the LWRP setup for your project /// </summary> /// <param name="profile"></param> private static void FinalizeLWRP(UnityPipelineProfile profile, GaiaSettings gaiaSettings) { MarkSceneDirty(true); EditorUtility.SetDirty(profile); profile.m_activePipelineInstalled = GaiaConstants.EnvironmentRenderer.Lightweight; GaiaManagerEditor manager = EditorWindow.GetWindow <Gaia.GaiaManagerEditor>(false, "Gaia Manager"); if (manager != null) { manager.GaiaManagerStatusCheck(true); } }
/// <summary> /// Gets the pipeline profile /// </summary> /// <returns></returns> private static UnityPipelineProfile GetPipelineProfile() { UnityPipelineProfile profile = null; GaiaSettings settings = GaiaUtils.GetGaiaSettings(); if (settings != null) { profile = settings.m_pipelineProfile; } return(profile); }
/// <summary> /// Configures water to LWRP /// </summary> /// <param name="profile"></param> private static void ConfigureWater(UnityPipelineProfile profile, GaiaSettings gaiaSettings) { if (gaiaSettings == null) { Debug.LogError("Gaia settings could not be found. Please make sure gaia settings is import into your project"); } else { if (profile.m_underwaterHorizonMaterial != null) { profile.m_underwaterHorizonMaterial.shader = Shader.Find(profile.m_lightweightHorizonObjectShader); } //Increasing Water mesh quality for LWRP gaiaSettings.m_gaiaWaterProfile.m_customMeshQuality = 8; if (GaiaGlobal.Instance != null) { GaiaWater.UpdateWaterMeshQuality(GaiaGlobal.Instance.SceneProfile, GaiaGlobal.Instance.SceneProfile.m_waterPrefab); } GameObject waterObject = GameObject.Find(gaiaSettings.m_gaiaWaterProfile.m_waterPrefab.name); if (waterObject != null) { Material waterMat = GaiaWater.GetGaiaOceanMaterial(); if (waterMat != null) { if (GaiaGlobal.Instance != null) { GaiaWater.GetProfile(0, waterMat, GaiaGlobal.Instance.SceneProfile, true, false); } } else { Debug.Log("Material could not be found"); } } } PWS_WaterSystem reflection = Object.FindObjectOfType <PWS_WaterSystem>(); if (reflection != null) { Object.DestroyImmediate(reflection); } }
/// <summary> /// Adds water system to the scene /// </summary> public static void GX_WaterSetup_AddWater() { GaiaSettings gaiaSettings = GaiaUtils.GetGaiaSettings(); GaiaWaterProfile waterProfile = AssetDatabase.LoadAssetAtPath <GaiaWaterProfile>(GetAssetPath("Gaia Water System Profile")); Material material = GaiaWater.GetGaiaOceanMaterial(); if (material != null) { GaiaUtils.GetRuntimeSceneObject(); if (GaiaGlobal.Instance != null) { GaiaWater.GetProfile(0, material, GaiaGlobal.Instance.SceneProfile, true, false); } } else { Debug.Log("Material could not be found"); } }
/// <summary> /// Configures project for LWRP /// </summary> /// <param name="profile"></param> private static void ConfigureSceneToLWRP(UnityPipelineProfile profile) { GaiaSettings gaiaSettings = GaiaUtils.GetGaiaSettings(); if (gaiaSettings.m_currentRenderer != GaiaConstants.EnvironmentRenderer.Lightweight) { Debug.LogError("Unable to configure your scene/project to LWRP as the current render inside of gaia does not equal Lightweight as it's active render pipeline. This process [GaiaLWRPPipelineUtils.ConfigureSceneToLWRP()] will now exit."); return; } if (profile.m_setLWPipelineProfile) { SetPipelineAsset(profile); } if (profile.m_LWAutoConfigureCamera) { ConfigureCamera(); } if (profile.m_LWAutoConfigureLighting) { ConfigureLighting(gaiaSettings.m_gaiaLightingProfile); } if (profile.m_LWAutoConfigureWater) { ConfigureWater(profile, gaiaSettings); } if (profile.m_LWAutoConfigureProbes) { ConfigureReflectionProbes(); } if (profile.m_LWAutoConfigureTerrain) { ConfigureTerrain(profile); } FinalizeLWRP(profile, gaiaSettings); }
/// <summary> /// Configures water to URP /// </summary> /// <param name="profile"></param> private static void ConfigureWater(UnityPipelineProfile profile, GaiaSettings gaiaSettings) { try { if (gaiaSettings == null) { Debug.LogError("Gaia settings could not be found. Please make sure gaia settings is import into your project"); } else { if (profile.m_underwaterHorizonMaterial != null) { profile.m_underwaterHorizonMaterial.shader = Shader.Find(profile.m_universalHorizonObjectShader); } GameObject waterObject = GameObject.Find(gaiaSettings.m_gaiaWaterProfile.m_waterPrefab.name); if (waterObject != null) { Material waterMat = GaiaWater.GetGaiaOceanMaterial(); if (waterMat != null) { if (GaiaGlobal.Instance != null) { GaiaWater.GetProfile(gaiaSettings.m_gaiaWaterProfile.m_selectedWaterProfileValuesIndex, waterMat, GaiaGlobal.Instance.SceneProfile, true, false); } } else { Debug.Log("Material could not be found"); } } } } catch (Exception e) { Console.WriteLine(e); throw; } }
/// <summary> /// Set the post processing in the scene /// </summary> private static void SetPostProcessingStyle(string ppName) { //Hack to not set PP on ultralight and mobile - because it is too expensive GaiaSettings settings = GaiaUtils.GetGaiaSettings(); if (settings.m_currentEnvironment == GaiaConstants.EnvironmentTarget.UltraLight || settings.m_currentEnvironment == GaiaConstants.EnvironmentTarget.MobileAndVR) { return; } #if UNITY_5_6_0 return; #endif #if UNITY_POST_PROCESSING_STACK_V2 RemovePostProcessingV1(); GameObject theParentObject = GetOrCreateEnvironmentParent(); GameObject postProcessingVolumeObject = GameObject.Find("Global Post Processing"); GameObject mainCameraObject = GetOrCreateMainCamera(); //If the post processing volume is null it creates one if (postProcessingVolumeObject == null) { postProcessingVolumeObject = new GameObject("Global Post Processing"); postProcessingVolumeObject.transform.parent = theParentObject.transform; postProcessingVolumeObject.layer = LayerMask.NameToLayer("TransparentFX"); var ppVol = postProcessingVolumeObject.AddComponent <PostProcessVolume>(); ppVol.isGlobal = true; ppVol.priority = 0f; ppVol.sharedProfile = AssetDatabase.LoadAssetAtPath <PostProcessProfile>(GetAssetPath(ppName)); ppVol.weight = 1f; ppVol.blendDistance = 0f; UnityEditorInternal.InternalEditorUtility.SetIsInspectorExpanded(ppVol, false); } else { var ppVol = postProcessingVolumeObject.GetComponent <PostProcessVolume>(); ppVol.isGlobal = true; ppVol.priority = 0f; ppVol.sharedProfile = AssetDatabase.LoadAssetAtPath <PostProcessProfile>(GetAssetPath(ppName)); ppVol.weight = 1f; ppVol.blendDistance = 0f; UnityEditorInternal.InternalEditorUtility.SetIsInspectorExpanded(ppVol, false); } //Set the main camera to support post processing mainCameraObject.GetComponent <Camera>().renderingPath = RenderingPath.UsePlayerSettings; mainCameraObject.GetComponent <Camera>().allowMSAA = false; var ppLayer = mainCameraObject.GetComponent <PostProcessLayer>(); if (ppLayer == null) { ppLayer = mainCameraObject.AddComponent <PostProcessLayer>(); ppLayer.volumeTrigger = mainCameraObject.transform; ppLayer.volumeLayer = 2; #if !UNITY_2017_1_OR_NEWER ppLayer.antialiasingMode = PostProcessLayer.Antialiasing.SubpixelMorphologicalAntialiasing; #else ppLayer.antialiasingMode = PostProcessLayer.Antialiasing.TemporalAntialiasing; #endif ppLayer.fog.excludeSkybox = true; ppLayer.fog.enabled = true; ppLayer.stopNaNPropagation = true; } #endif }
/// <summary> /// Cleans up LWRP components in the scene /// </summary> public static void CleanUpURP(UnityPipelineProfile profile, GaiaSettings gaiaSettings) { try { #if UPPipeline UniversalAdditionalCameraData[] camerasData = GameObject.FindObjectsOfType <UniversalAdditionalCameraData>(); GaiaURPRuntimeUtils.ClearUPCameraData(camerasData); UniversalAdditionalLightData[] lightsData = GameObject.FindObjectsOfType <UniversalAdditionalLightData>(); GaiaURPRuntimeUtils.ClearUPLightData(lightsData); GameObject volumeObject = GameObject.Find("Global Post Processing"); if (volumeObject != null) { GameObject.DestroyImmediate(volumeObject); } Camera camera = GaiaUtils.GetCamera(); if (camera != null) { UniversalAdditionalCameraData cameraData = camera.GetComponent <UniversalAdditionalCameraData>(); if (cameraData == null) { cameraData = camera.gameObject.AddComponent <UniversalAdditionalCameraData>(); } cameraData.renderPostProcessing = false; } #endif if (profile.m_underwaterHorizonMaterial != null) { profile.m_underwaterHorizonMaterial.shader = Shader.Find(profile.m_builtInHorizonObjectShader); } GameObject waterPrefab = GameObject.Find(gaiaSettings.m_gaiaWaterProfile.m_waterPrefab.name); if (waterPrefab != null) { //reverting default water mesh quality gaiaSettings.m_gaiaWaterProfile.m_customMeshQuality = 2; if (GaiaGlobal.Instance != null) { GaiaWater.UpdateWaterMeshQuality(GaiaGlobal.Instance.SceneProfile, gaiaSettings.m_gaiaWaterProfile.m_waterPrefab); } PWS_WaterSystem reflection = waterPrefab.GetComponent <PWS_WaterSystem>(); if (reflection == null) { reflection = waterPrefab.AddComponent <PWS_WaterSystem>(); } } Terrain[] terrains = Terrain.activeTerrains; if (terrains != null) { foreach (Terrain terrain in terrains) { #if !UNITY_2019_2_OR_NEWER terrain.materialType = Terrain.MaterialType.BuiltInStandard; #else terrain.materialTemplate = profile.m_builtInTerrainMaterial; #endif } } Terrain terrainDetail = Terrain.activeTerrain; if (terrainDetail != null) { if (terrainDetail.detailObjectDensity == 0f) { if (EditorUtility.DisplayDialog("Detail Density Disabled!", "Details density is disabled on your terrain would you like to activate it?", "Yes", "No")) { terrainDetail.detailObjectDensity = 0.3f; } } } GameObject LWRPReflections = GameObject.Find("URP Water Reflection Probe"); if (LWRPReflections != null) { Object.DestroyImmediate(LWRPReflections); } GraphicsSettings.renderPipelineAsset = null; QualitySettings.renderPipeline = null; if (GaiaGlobal.Instance != null) { //GaiaUtils.GetRuntimeSceneObject(); if (GaiaGlobal.Instance.SceneProfile != null && GaiaGlobal.Instance.SceneProfile.m_lightingProfiles.Count > 0) { GaiaLighting.GetProfile(GaiaGlobal.Instance.SceneProfile, gaiaSettings.m_pipelineProfile, GaiaConstants.EnvironmentRenderer.BuiltIn); } } //Clean up the UPR post processing objects in the underwater effects //We need to look for transform instead of GameObjects, since the GOs can be disabled and won't be found then GameObject uwe = GameObject.Find(GaiaConstants.underwaterEffectsName); if (uwe != null) { Transform utoTransform = uwe.transform.Find(GaiaConstants.underwaterTransitionObjectName); if (utoTransform != null) { Object.DestroyImmediate(utoTransform.gameObject); } Transform uppTransform = uwe.transform.Find(GaiaConstants.underwaterPostProcessingName); if (uppTransform != null) { Object.DestroyImmediate(uppTransform.gameObject); } Transform horizonTransform = uwe.transform.Find(GaiaConstants.underwaterHorizonName); if (horizonTransform != null) { Object.DestroyImmediate(horizonTransform.gameObject); } } if (waterPrefab != null) { Material waterMat = GaiaWater.GetGaiaOceanMaterial(); if (waterMat != null) { if (GaiaGlobal.Instance != null) { GaiaWater.GetProfile(gaiaSettings.m_gaiaWaterProfile.m_selectedWaterProfileValuesIndex, waterMat, GaiaGlobal.Instance.SceneProfile, true, false); } } else { Debug.Log("Material could not be found"); } } MarkSceneDirty(false); EditorUtility.SetDirty(profile); profile.m_activePipelineInstalled = GaiaConstants.EnvironmentRenderer.BuiltIn; GaiaManagerEditor manager = EditorWindow.GetWindow <Gaia.GaiaManagerEditor>(false, "Gaia Manager"); if (manager != null) { manager.GaiaManagerStatusCheck(true); } bool isChanged = false; string currBuildSettings = PlayerSettings.GetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup); if (currBuildSettings.Contains("UPPipeline")) { currBuildSettings = currBuildSettings.Replace("UPPipeline;", ""); currBuildSettings = currBuildSettings.Replace("UPPipeline", ""); isChanged = true; } if (isChanged) { PlayerSettings.SetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup, currBuildSettings); } } catch (Exception e) { Console.WriteLine(e); throw; } }
/// <summary> /// Configures project for LWRP /// </summary> /// <param name="profile"></param> private static void ConfigureSceneToURP(UnityPipelineProfile profile) { try { GaiaSettings gaiaSettings = GaiaUtils.GetGaiaSettings(); if (gaiaSettings.m_currentRenderer != GaiaConstants.EnvironmentRenderer.Universal) { Debug.LogError("Unable to configure your scene/project to URP as the current render inside of gaia does not equal Universal as it's active render pipeline. This process [GaiaLWRPPipelineUtils.ConfigureSceneToURP()] will now exit."); return; } if (profile.m_setUPPipelineProfile) { SetPipelineAsset(profile); } if (profile.m_UPAutoConfigureCamera) { ConfigureCamera(); } if (gaiaSettings.m_gaiaLightingProfile.m_enablePostProcessing) { if (GaiaGlobal.Instance != null) { if (gaiaSettings.m_gaiaLightingProfile.m_selectedLightingProfileValuesIndex <= gaiaSettings.m_gaiaLightingProfile.m_lightingProfiles.Count - 1) { ApplyURPPostProcessing(gaiaSettings.m_gaiaLightingProfile.m_lightingProfiles[gaiaSettings.m_gaiaLightingProfile.m_selectedLightingProfileValuesIndex], GaiaGlobal.Instance.SceneProfile); } } } if (profile.m_UPAutoConfigureLighting) { ConfigureLighting(); } if (profile.m_UPAutoConfigureWater) { ConfigureWater(profile, gaiaSettings); } if (profile.m_UPAutoConfigureProbes) { GaiaURPRuntimeUtils.ConfigureReflectionProbes(); } if (profile.m_UPAutoConfigureTerrain) { GaiaURPRuntimeUtils.ConfigureTerrain(profile); } if (profile.m_UPAutoConfigureBiomePostFX) { UpdateBiomePostFX(); } FinalizeURP(profile); } catch (Exception e) { Console.WriteLine(e); throw; } }
/// <summary> /// Cleans up LWRP components in the scene /// </summary> public static void CleanUpLWRP(UnityPipelineProfile profile, GaiaSettings gaiaSettings) { #if LWPipeline LWRPAdditionalCameraData[] camerasData = Object.FindObjectsOfType <LWRPAdditionalCameraData>(); if (camerasData != null) { foreach (LWRPAdditionalCameraData data in camerasData) { Object.DestroyImmediate(data); } } LWRPAdditionalLightData[] lightsData = Object.FindObjectsOfType <LWRPAdditionalLightData>(); if (lightsData != null) { foreach (LWRPAdditionalLightData data in lightsData) { Object.DestroyImmediate(data); } } #endif if (profile.m_underwaterHorizonMaterial != null) { profile.m_underwaterHorizonMaterial.shader = Shader.Find(profile.m_builtInHorizonObjectShader); } //reverting default water mesh quality gaiaSettings.m_gaiaWaterProfile.m_customMeshQuality = 2; if (GaiaGlobal.Instance != null) { GaiaWater.UpdateWaterMeshQuality(GaiaGlobal.Instance.SceneProfile, gaiaSettings.m_gaiaWaterProfile.m_waterPrefab); } GameObject waterPrefab = GameObject.Find(gaiaSettings.m_gaiaWaterProfile.m_waterPrefab.name); if (waterPrefab != null) { PWS_WaterSystem reflection = waterPrefab.GetComponent <PWS_WaterSystem>(); if (reflection == null) { reflection = waterPrefab.AddComponent <PWS_WaterSystem>(); } } Terrain[] terrains = Terrain.activeTerrains; if (terrains != null) { foreach (Terrain terrain in terrains) { #if !UNITY_2019_2_OR_NEWER terrain.materialType = Terrain.MaterialType.BuiltInStandard; #else terrain.materialTemplate = profile.m_builtInTerrainMaterial; #endif } } Terrain terrainDetail = Terrain.activeTerrain; if (terrainDetail != null) { if (terrainDetail.detailObjectDensity == 0f) { if (EditorUtility.DisplayDialog("Detail Density Disabled!", "Details density is disabled on your terrain would you like to activate it?", "Yes", "No")) { terrainDetail.detailObjectDensity = 0.3f; } } } GameObject LWRPReflections = GameObject.Find("LWRP Water Reflection Probe"); if (LWRPReflections != null) { Object.DestroyImmediate(LWRPReflections); } GraphicsSettings.renderPipelineAsset = null; if (GaiaGlobal.Instance != null) { GaiaUtils.GetRuntimeSceneObject(); GaiaLighting.GetProfile(GaiaGlobal.Instance.SceneProfile, gaiaSettings.m_pipelineProfile, GaiaConstants.EnvironmentRenderer.BuiltIn); } if (waterPrefab != null) { Material waterMat = GaiaWater.GetGaiaOceanMaterial(); if (waterMat != null) { if (GaiaGlobal.Instance != null) { GaiaWater.GetProfile(0, waterMat, GaiaGlobal.Instance.SceneProfile, true, false); } } else { Debug.Log("Material could not be found"); } } MarkSceneDirty(false); EditorUtility.SetDirty(profile); profile.m_activePipelineInstalled = GaiaConstants.EnvironmentRenderer.BuiltIn; GaiaManagerEditor manager = EditorWindow.GetWindow <Gaia.GaiaManagerEditor>(false, "Gaia Manager"); if (manager != null) { manager.GaiaManagerStatusCheck(true); } bool isChanged = false; string currBuildSettings = PlayerSettings.GetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup); if (currBuildSettings.Contains("LWPipeline")) { currBuildSettings = currBuildSettings.Replace("LWPipeline;", ""); currBuildSettings = currBuildSettings.Replace("LWPipeline", ""); isChanged = true; } if (isChanged) { PlayerSettings.SetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup, currBuildSettings); } }
/// <summary> /// Disables water reflections /// </summary> public static void GX_WaterReflections_DisableReflections() { GaiaSettings gaiaSettings = GaiaUtils.GetGaiaSettings(); GaiaWater.SetWaterReflectionsType(false, gaiaSettings.m_pipelineProfile.m_activePipelineInstalled, gaiaSettings.m_gaiaWaterProfile, gaiaSettings.m_gaiaWaterProfile.m_waterProfiles[gaiaSettings.m_gaiaWaterProfile.m_selectedWaterProfileValuesIndex]); }