public static LoadUnityMaterial ( string materialPath ) : Material | ||
materialPath | string | |
return | Material |
/// <summary> /// Sets a material on the given Terrain object. /// Currently sets the default Terrain material from the plugin settings, if its valid. /// </summary> /// <param name="terrain">The terrain to set material for</param> public static void SetTerrainMaterial(Terrain terrain, string specifiedMaterialName) { // Use material specified in Plugin settings. string terrainMaterialPath = string.IsNullOrEmpty(specifiedMaterialName) ? HEU_PluginSettings.DefaultTerrainMaterial : specifiedMaterialName; if (!string.IsNullOrEmpty(terrainMaterialPath)) { Material material = HEU_MaterialFactory.LoadUnityMaterial(terrainMaterialPath); if (material != null) { #if UNITY_2019_2_OR_NEWER terrain.materialTemplate = material; #else terrain.materialType = Terrain.MaterialType.Custom; terrain.materialTemplate = material; #endif } else { Debug.LogWarning("Warning: Specified material does not exist!"); } } else { #if UNITY_2019_2_OR_NEWER terrain.materialTemplate = HEU_MaterialFactory.LoadUnityMaterial("Resources/unity_builtin_extra::name::Default-Terrain-Diffuse"); #endif } // TODO: If none specified, guess based on Render settings? }
public static HEU_MaterialData CreateUnitySubstanceMaterialData(int materialKey, string materialPath, string substanceName, int substanceIndex, List<HEU_MaterialData> materialCache, string assetCacheFolderPath) { // Let's make sure we can find the Unity or Substance material first Material material = null; HEU_MaterialData.Source sourceType = HEU_MaterialData.Source.UNITY; if (!string.IsNullOrEmpty(substanceName)) { sourceType = HEU_MaterialData.Source.SUBSTANCE; material = HEU_MaterialFactory.LoadSubstanceMaterialWithName(materialPath, substanceName); } else if (substanceIndex >= 0) { sourceType = HEU_MaterialData.Source.SUBSTANCE; material = HEU_MaterialFactory.LoadSubstanceMaterialWithIndex(materialPath, substanceIndex); } else if (!string.IsNullOrEmpty(materialPath)) { material = HEU_MaterialFactory.LoadUnityMaterial(materialPath); } if (material != null) { HEU_MaterialData materialData = ScriptableObject.CreateInstance<HEU_MaterialData>(); materialData._materialSource = sourceType; materialData._materialKey = materialKey; materialData._material = material; materialCache.Add(materialData); return materialData; } else { // We can't find the material in Unity, so notify user and use a default one which allows to at least get the geometry in. if (string.IsNullOrEmpty(materialPath)) { HEU_Logger.LogWarningFormat("Empty material name found. Using default material."); } else if (materialPath.Contains("Resources/unity_builtin_extra")) { // Built in material. Don't display error. } else { HEU_Logger.LogErrorFormat("Unable to find {0} material {1}. Using a default material instead. Please check material exists in project and reload asset!", sourceType, materialPath); } // The materialKey helps uniquely identify this material for further look ups. But we also need to get a valid file name // to create the default material, so strip out just the file name. string strippedFileName = HEU_Platform.GetFileName(materialPath); return CreateMaterialInCache(materialKey, strippedFileName, HEU_MaterialData.Source.UNITY, false, materialCache, assetCacheFolderPath); } }
/// <summary> /// Sets a material on the given Terrain object. /// Currently sets the default Terrain material from the plugin settings, if its valid. /// </summary> /// <param name="terrain">The terrain to set material for</param> public static void SetTerrainMaterial(Terrain terrain) { // Use material specified in Plugin settings. string terrainMaterialPath = HEU_PluginSettings.DefaultTerrainMaterial; if (!string.IsNullOrEmpty(terrainMaterialPath)) { Material material = HEU_MaterialFactory.LoadUnityMaterial(terrainMaterialPath); if (material != null) { #if UNITY_2019_2_OR_NEWER terrain.materialTemplate = material; #else terrain.materialType = Terrain.MaterialType.Custom; terrain.materialTemplate = material; #endif } } // TODO: If none specified, guess based on Render settings? }
private bool DrawDetailsGeometry() { bool bChanged = false; EditorGUIUtility.labelWidth = 250; { bool oldValue = HEU_PluginSettings.Curves_ShowInSceneView; bool newValue = HEU_EditorUI.DrawToggleLeft(oldValue, "Show Curves in Scene View"); if (newValue != oldValue) { HEU_PluginSettings.Curves_ShowInSceneView = newValue; HEU_HoudiniAsset.SetCurvesVisibilityInScene(newValue); bChanged = true; } } HEU_EditorUI.DrawSeparator(); { int oldValue = HEU_PluginSettings.MaxVerticesPerPrimitive; int newValue = EditorGUILayout.DelayedIntField("Max Vertices Per Primitive", oldValue); if (newValue != oldValue) { if (newValue == 3 || newValue == 4) { HEU_PluginSettings.MaxVerticesPerPrimitive = newValue; bChanged = true; } else { Debug.LogWarningFormat("Plugin only supports 3 (triangles) or 4 (quads) max vertices values."); } } } HEU_EditorUI.DrawSeparator(); { float oldValue = HEU_PluginSettings.NormalGenerationThresholdAngle; float newValue = EditorGUILayout.DelayedFloatField("Normal Generation Threshold Angle", oldValue); if (newValue != oldValue) { HEU_PluginSettings.NormalGenerationThresholdAngle = newValue; bChanged = true; } } HEU_EditorUI.DrawSeparator(); { string oldValue = HEU_PluginSettings.DefaultTerrainMaterial; if (_terrainMaterial == null && !string.IsNullOrEmpty(oldValue)) { //Debug.Log("Loading terrain material at: " + oldValue); _terrainMaterial = HEU_MaterialFactory.LoadUnityMaterial(oldValue); } Material newMaterial = EditorGUILayout.ObjectField("Default Terrain Material", _terrainMaterial, typeof(Material), false) as Material; if (newMaterial != _terrainMaterial) { string materialPath = ""; if (newMaterial != null) { materialPath = HEU_AssetDatabase.GetAssetPathWithSubAssetSupport(newMaterial); if (!string.IsNullOrEmpty(materialPath) && (materialPath.StartsWith(HEU_Defines.DEFAULT_UNITY_BUILTIN_RESOURCES))) { // Default materials need to be specially handled materialPath = HEU_AssetDatabase.GetUniqueAssetPathForUnityAsset(newMaterial); newMaterial = HEU_AssetDatabase.LoadUnityAssetFromUniqueAssetPath<Material>(materialPath); } } HEU_PluginSettings.DefaultTerrainMaterial = materialPath; _terrainMaterial = newMaterial; bChanged = true; } } HEU_EditorUI.DrawSeparator(); { string oldValue = HEU_PluginSettings.TerrainSplatTextureDefault; string newValue = EditorGUILayout.DelayedTextField("Default Terrain Splat Texture", oldValue); if (!newValue.Equals(oldValue)) { HEU_PluginSettings.TerrainSplatTextureDefault = newValue; bChanged = true; } } HEU_EditorUI.DrawSeparator(); { string oldValue = HEU_PluginSettings.DefaultStandardShader; string newValue = EditorGUILayout.DelayedTextField("Default Standard Shader", oldValue); if (!newValue.Equals(oldValue)) { HEU_PluginSettings.DefaultStandardShader = newValue; bChanged = true; } } HEU_EditorUI.DrawSeparator(); { string oldValue = HEU_PluginSettings.DefaultTransparentShader; string newValue = EditorGUILayout.DelayedTextField("Default Transparent Shader", oldValue); if (!newValue.Equals(oldValue)) { HEU_PluginSettings.DefaultTransparentShader = newValue; bChanged = true; } } HEU_EditorUI.DrawSeparator(); { string oldValue = HEU_PluginSettings.DefaultVertexColorShader; string newValue = EditorGUILayout.DelayedTextField("Default Vertex Color Shader", oldValue); if (!newValue.Equals(oldValue)) { HEU_PluginSettings.DefaultVertexColorShader = newValue; bChanged = true; } } HEU_EditorUI.DrawSeparator(); { string oldValue = HEU_PluginSettings.DefaultCurveShader; string newValue = EditorGUILayout.DelayedTextField("Default Curve Shader", oldValue); if (!newValue.Equals(oldValue)) { HEU_PluginSettings.DefaultCurveShader = newValue; bChanged = true; } } HEU_EditorUI.DrawSeparator(); EditorGUIUtility.labelWidth = 0; return bChanged; }
private bool DrawDetailsGeometry() { bool bChanged = false; EditorGUIUtility.labelWidth = 250; { bool oldValue = HEU_PluginSettings.Curves_ShowInSceneView; bool newValue = HEU_EditorUI.DrawToggleLeft(oldValue, "Show Curves in Scene View"); if (newValue != oldValue) { HEU_PluginSettings.Curves_ShowInSceneView = newValue; HEU_HoudiniAsset.SetCurvesVisibilityInScene(newValue); bChanged = true; } } HEU_EditorUI.DrawSeparator(); { float oldValue = HEU_PluginSettings.NormalGenerationThresholdAngle; float newValue = EditorGUILayout.DelayedFloatField("Normal Generation Threshold Angle", oldValue); if (newValue != oldValue) { HEU_PluginSettings.NormalGenerationThresholdAngle = newValue; bChanged = true; } } HEU_EditorUI.DrawSeparator(); { string oldValue = HEU_PluginSettings.DefaultTerrainMaterial; if (_terrainMaterial == null && !string.IsNullOrEmpty(oldValue)) { //Debug.Log("Loading terrain material at: " + oldValue); _terrainMaterial = HEU_MaterialFactory.LoadUnityMaterial(oldValue); } Material newMaterial = EditorGUILayout.ObjectField("Default Terrain Material", _terrainMaterial, typeof(Material), false) as Material; if (newMaterial != _terrainMaterial) { HEU_PluginSettings.DefaultTerrainMaterial = (newMaterial != null) ? HEU_AssetDatabase.GetAssetPathWithSubAssetSupport(newMaterial) : ""; _terrainMaterial = newMaterial; bChanged = true; } } HEU_EditorUI.DrawSeparator(); { string oldValue = HEU_PluginSettings.TerrainSplatTextureDefault; string newValue = EditorGUILayout.DelayedTextField("Default Terrain Splat Texture", oldValue); if (!newValue.Equals(oldValue)) { HEU_PluginSettings.TerrainSplatTextureDefault = newValue; bChanged = true; } } HEU_EditorUI.DrawSeparator(); { string oldValue = HEU_PluginSettings.DefaultStandardShader; string newValue = EditorGUILayout.DelayedTextField("Default Standard Shader", oldValue); if (!newValue.Equals(oldValue)) { HEU_PluginSettings.DefaultStandardShader = newValue; bChanged = true; } } HEU_EditorUI.DrawSeparator(); { string oldValue = HEU_PluginSettings.DefaultTransparentShader; string newValue = EditorGUILayout.DelayedTextField("Default Transparent Shader", oldValue); if (!newValue.Equals(oldValue)) { HEU_PluginSettings.DefaultTransparentShader = newValue; bChanged = true; } } HEU_EditorUI.DrawSeparator(); { string oldValue = HEU_PluginSettings.DefaultVertexColorShader; string newValue = EditorGUILayout.DelayedTextField("Default Vertex Color Shader", oldValue); if (!newValue.Equals(oldValue)) { HEU_PluginSettings.DefaultVertexColorShader = newValue; bChanged = true; } } HEU_EditorUI.DrawSeparator(); { string oldValue = HEU_PluginSettings.DefaultCurveShader; string newValue = EditorGUILayout.DelayedTextField("Default Curve Shader", oldValue); if (!newValue.Equals(oldValue)) { HEU_PluginSettings.DefaultCurveShader = newValue; bChanged = true; } } HEU_EditorUI.DrawSeparator(); EditorGUIUtility.labelWidth = 0; return bChanged; }