public static GPUInstancerShaderBindings GetDefaultGPUInstancerShaderBindings() { GPUInstancerShaderBindings shaderBindings = Resources.Load <GPUInstancerShaderBindings>(GPUInstancerConstants.SETTINGS_PATH + GPUInstancerConstants.SHADER_BINDINGS_DEFAULT_NAME); if (shaderBindings == null) { shaderBindings = ScriptableObject.CreateInstance <GPUInstancerShaderBindings>(); shaderBindings.ResetShaderInstances(); #if UNITY_EDITOR if (!Application.isPlaying) { if (!System.IO.Directory.Exists(GPUInstancerConstants.GetDefaultPath() + GPUInstancerConstants.RESOURCES_PATH + GPUInstancerConstants.SETTINGS_PATH)) { System.IO.Directory.CreateDirectory(GPUInstancerConstants.GetDefaultPath() + GPUInstancerConstants.RESOURCES_PATH + GPUInstancerConstants.SETTINGS_PATH); } AssetDatabase.CreateAsset(shaderBindings, GPUInstancerConstants.GetDefaultPath() + GPUInstancerConstants.RESOURCES_PATH + GPUInstancerConstants.SETTINGS_PATH + GPUInstancerConstants.SHADER_BINDINGS_DEFAULT_NAME + ".asset"); AssetDatabase.SaveAssets(); AssetDatabase.Refresh(); } #endif } return(shaderBindings); }
private void GenerateMapMagicTerrainSettings() { if (terrainSettings) { return; } terrainSettings = ScriptableObject.CreateInstance <GPUInstancerTerrainSettings>(); terrainSettings.name = "GPUI_MapMagic_" + mapMagicInstance.gens.name + "_" + mapMagicInstance.gens.GetInstanceID(); terrainSettings.maxDetailDistance = mapMagicInstance.detailDistance; terrainSettings.maxTreeDistance = mapMagicInstance.treeDistance; terrainSettings.detailDensity = mapMagicInstance.detailDensity; terrainSettings.healthyDryNoiseTexture = Resources.Load <Texture2D>(GPUInstancerConstants.NOISE_TEXTURES_PATH + GPUInstancerConstants.DEFAULT_HEALTHY_DRY_NOISE); terrainSettings.windWaveNormalTexture = Resources.Load <Texture2D>(GPUInstancerConstants.NOISE_TEXTURES_PATH + GPUInstancerConstants.DEFAULT_WIND_WAVE_NOISE); #if UNITY_EDITOR if (!Application.isPlaying) { string assetPath = GPUInstancerConstants.GetDefaultPath() + GPUInstancerConstants.PROTOTYPES_TERRAIN_PATH + terrainSettings.name + ".asset"; if (!System.IO.Directory.Exists(GPUInstancerConstants.GetDefaultPath() + GPUInstancerConstants.PROTOTYPES_TERRAIN_PATH)) { System.IO.Directory.CreateDirectory(GPUInstancerConstants.GetDefaultPath() + GPUInstancerConstants.PROTOTYPES_TERRAIN_PATH); } AssetDatabase.CreateAsset(terrainSettings, assetPath); AssetDatabase.SaveAssets(); AssetDatabase.Refresh(); } #endif }
private GPUInstancerTerrainSettings GenerateTerrainSettings(Terrain terrain, GameObject gameObject) { #if UNITY_EDITOR if (!Application.isPlaying) { string[] guids = AssetDatabase.FindAssets("t:GPUInstancerTerrainSettings"); for (int i = 0; i < guids.Length; i++) { GPUInstancerTerrainSettings ts = AssetDatabase.LoadAssetAtPath <GPUInstancerTerrainSettings>(AssetDatabase.GUIDToAssetPath(guids[i])); if (ts != null && ts.terrainDataInstanceID == terrain.terrainData.GetInstanceID()) { prototypeList.Clear(); if (this is GPUInstancerDetailManager) { GPUInstancerUtility.SetPrototypeListFromAssets(ts, prototypeList, typeof(GPUInstancerDetailPrototype)); } return(ts); } } } #endif GPUInstancerTerrainSettings terrainSettings = ScriptableObject.CreateInstance <GPUInstancerTerrainSettings>(); terrainSettings.name = (string.IsNullOrEmpty(terrain.terrainData.name) ? terrain.gameObject.name : terrain.terrainData.name) + "_" + terrain.terrainData.GetInstanceID(); terrainSettings.terrainDataInstanceID = terrain.terrainData.GetInstanceID(); terrainSettings.maxDetailDistance = terrain.detailObjectDistance; terrainSettings.maxTreeDistance = terrain.treeDistance; terrainSettings.detailDensity = terrain.detailObjectDensity; terrainSettings.healthyDryNoiseTexture = Resources.Load <Texture2D>(GPUInstancerConstants.NOISE_TEXTURES_PATH + GPUInstancerConstants.DEFAULT_HEALTHY_DRY_NOISE); terrainSettings.windWaveNormalTexture = Resources.Load <Texture2D>(GPUInstancerConstants.NOISE_TEXTURES_PATH + GPUInstancerConstants.DEFAULT_WIND_WAVE_NOISE); #if UNITY_EDITOR if (!Application.isPlaying) { string assetPath = GPUInstancerConstants.GetDefaultPath() + GPUInstancerConstants.PROTOTYPES_TERRAIN_PATH + terrainSettings.name + ".asset"; if (!System.IO.Directory.Exists(GPUInstancerConstants.GetDefaultPath() + GPUInstancerConstants.PROTOTYPES_TERRAIN_PATH)) { System.IO.Directory.CreateDirectory(GPUInstancerConstants.GetDefaultPath() + GPUInstancerConstants.PROTOTYPES_TERRAIN_PATH); } AssetDatabase.CreateAsset(terrainSettings, assetPath); AssetDatabase.SaveAssets(); AssetDatabase.Refresh(); } #endif return(terrainSettings); }
public static ShaderVariantCollection GetDefaultShaderVariantCollection() { ShaderVariantCollection shaderVariantCollection = Resources.Load <ShaderVariantCollection>(GPUInstancerConstants.SETTINGS_PATH + GPUInstancerConstants.SHADER_VARIANT_COLLECTION_DEFAULT_NAME); if (shaderVariantCollection == null) { shaderVariantCollection = new ShaderVariantCollection(); #if UNITY_EDITOR if (!Application.isPlaying) { if (!System.IO.Directory.Exists(GPUInstancerConstants.GetDefaultPath() + GPUInstancerConstants.RESOURCES_PATH + GPUInstancerConstants.SETTINGS_PATH)) { System.IO.Directory.CreateDirectory(GPUInstancerConstants.GetDefaultPath() + GPUInstancerConstants.RESOURCES_PATH + GPUInstancerConstants.SETTINGS_PATH); } AssetDatabase.CreateAsset(shaderVariantCollection, GPUInstancerConstants.GetDefaultPath() + GPUInstancerConstants.RESOURCES_PATH + GPUInstancerConstants.SETTINGS_PATH + GPUInstancerConstants.SHADER_VARIANT_COLLECTION_DEFAULT_NAME + ".shadervariants"); AssetDatabase.SaveAssets(); AssetDatabase.Refresh(); } #endif } return(shaderVariantCollection); }
private GPUInstancerTerrainSettings GenerateTerrainSettings(Terrain terrain, GameObject gameObject) { #if UNITY_EDITOR if (!Application.isPlaying) { string[] guids = AssetDatabase.FindAssets("t:GPUInstancerTerrainSettings"); string guid = GPUInstancerUtility.GetAssetGUID(terrain.terrainData); for (int i = 0; i < guids.Length; i++) { GPUInstancerTerrainSettings ts = AssetDatabase.LoadAssetAtPath <GPUInstancerTerrainSettings>(AssetDatabase.GUIDToAssetPath(guids[i])); if (ts != null && !string.IsNullOrEmpty(guid) && ts.terrainDataGUID == guid) { prototypeList.Clear(); if (this is GPUInstancerDetailManager) { List <GPUInstancerPrototype> detailPrototypeList = new List <GPUInstancerPrototype>(); GPUInstancerUtility.SetPrototypeListFromAssets(ts, detailPrototypeList, typeof(GPUInstancerDetailPrototype)); for (int p = 0; p < detailPrototypeList.Count; p++) { foreach (GPUInstancerDetailPrototype detailPrototype in detailPrototypeList) { if (detailPrototype.prototypeIndex == p) { prototypeList.Add(detailPrototype); break; } } } } if (this is GPUInstancerTreeManager) { List <GPUInstancerPrototype> treePrototypeList = new List <GPUInstancerPrototype>(); GPUInstancerUtility.SetPrototypeListFromAssets(ts, treePrototypeList, typeof(GPUInstancerTreePrototype)); for (int p = 0; p < treePrototypeList.Count; p++) { foreach (GPUInstancerTreePrototype treePrototype in treePrototypeList) { if (treePrototype.prototypeIndex == p) { prototypeList.Add(treePrototype); break; } } } } return(ts); } } } #endif GPUInstancerTerrainSettings terrainSettings = ScriptableObject.CreateInstance <GPUInstancerTerrainSettings>(); terrainSettings.name = (string.IsNullOrEmpty(terrain.terrainData.name) ? terrain.gameObject.name : terrain.terrainData.name) + "_" + terrain.terrainData.GetInstanceID(); terrainSettings.terrainDataGUID = GPUInstancerUtility.GetAssetGUID(terrain.terrainData); terrainSettings.maxDetailDistance = terrain.detailObjectDistance; terrainSettings.maxTreeDistance = terrain.treeDistance; terrainSettings.detailDensity = terrain.detailObjectDensity; terrainSettings.healthyDryNoiseTexture = Resources.Load <Texture2D>(GPUInstancerConstants.NOISE_TEXTURES_PATH + GPUInstancerConstants.DEFAULT_HEALTHY_DRY_NOISE); terrainSettings.windWaveNormalTexture = Resources.Load <Texture2D>(GPUInstancerConstants.NOISE_TEXTURES_PATH + GPUInstancerConstants.DEFAULT_WIND_WAVE_NOISE); #if UNITY_EDITOR if (!Application.isPlaying) { string assetPath = GPUInstancerConstants.GetDefaultPath() + GPUInstancerConstants.PROTOTYPES_TERRAIN_PATH + terrainSettings.name + ".asset"; // If there is already a file with the same name, change file name int counter = 2; while (System.IO.File.Exists(assetPath)) { assetPath = GPUInstancerConstants.GetDefaultPath() + GPUInstancerConstants.PROTOTYPES_TERRAIN_PATH + terrainSettings.name + "_" + counter + ".asset"; counter++; } if (!System.IO.Directory.Exists(GPUInstancerConstants.GetDefaultPath() + GPUInstancerConstants.PROTOTYPES_TERRAIN_PATH)) { System.IO.Directory.CreateDirectory(GPUInstancerConstants.GetDefaultPath() + GPUInstancerConstants.PROTOTYPES_TERRAIN_PATH); } AssetDatabase.CreateAsset(terrainSettings, assetPath); AssetDatabase.SaveAssets(); AssetDatabase.Refresh(); } #endif return(terrainSettings); }