Heroes_of_Hiis/Assets/Fantasy Adventure Environment/Editor/TreeTrunkShaderGUI.cs

133 lines
4.7 KiB
C#
Raw Normal View History

2022-03-07 16:33:30 +00:00
// Fantasy Adventure Environment
// Copyright Staggart Creations
// staggart.xyz
using UnityEngine;
using UnityEditor;
using System.Collections;
namespace FAE
{
public class TreeTrunkShaderGUI : ShaderGUI
{
//Main maps
MaterialProperty _MainTex;
MaterialProperty _BumpMap;
MaterialProperty _UseSpeedTreeWind;
//Color
MaterialProperty _AmbientOcclusion;
MaterialProperty _GradientBrightness;
MaterialProperty _Smoothness;
MaterialEditor m_MaterialEditor;
#if UNITY_2019_3_OR_NEWER
private Material targetMat;
#endif
//Meta
bool showHelp;
GUIContent mainTexName = new GUIContent("Diffuse", "Diffuse (RGB) and Transparency (A)");
GUIContent normalMapName = new GUIContent("Normal Map");
public override void OnGUI(MaterialEditor materialEditor, MaterialProperty[] props)
{
this.m_MaterialEditor = materialEditor;
#if UNITY_2019_3_OR_NEWER
targetMat = materialEditor.target as Material;
#endif
this.FindProperties(props);
//Style similar to Standard shader
m_MaterialEditor.SetDefaultGUIWidths();
m_MaterialEditor.UseDefaultMargins();
EditorGUIUtility.labelWidth = 0f;
#if UNITY_2019_3_OR_NEWER
if (UnityEngine.Rendering.GraphicsSettings.currentRenderPipeline != null &&
!targetMat.shader.name.Contains("Universal Render Pipeline"))
{
EditorGUILayout.HelpBox("Universal Render Pipeline is in use, but this material is using a shader for the Built-in render pipeline.\n\nShaders and materials can be converted through the Help window", MessageType.Error);
EditorGUILayout.Space();
}
#endif
EditorGUI.BeginChangeCheck();
//Draw fields
DoHeader();
DoMapsArea();
DoColorArea();
if (EditorGUI.EndChangeCheck())
{
//Apply changes
}
GUILayout.Label("Advanced Options", EditorStyles.boldLabel);
GUIHelper.DrawExtraFields(m_MaterialEditor);
m_MaterialEditor.ShaderProperty(_UseSpeedTreeWind, new GUIContent("Sample SpeedTree wind"));
if (showHelp) EditorGUILayout.HelpBox("If this is a tree created using the SpeedTree Unity Modeler, this toggle will make the shader read the wind information as stored by SpeedTree.", MessageType.None);
if(showHelp) GUIHelper.DrawWindInfo();
GUIHelper.DrawFooter();
}
void DoHeader()
{
EditorGUILayout.BeginHorizontal();
showHelp = GUILayout.Toggle(showHelp, "Toggle help", "Button");
GUILayout.Label("FAE Tree Trunk Shader", GUIHelper.Header);
EditorGUILayout.EndHorizontal();
if (showHelp) EditorGUILayout.HelpBox("Tree trunk shader, featuring global wind motion", MessageType.Info);
}
void DoMapsArea()
{
GUILayout.Label("Main maps", EditorStyles.boldLabel);
this.m_MaterialEditor.TexturePropertySingleLine(mainTexName, this._MainTex);
this.m_MaterialEditor.TexturePropertySingleLine(normalMapName, this._BumpMap);
EditorGUILayout.Space();
}
void DoColorArea()
{
m_MaterialEditor.ShaderProperty(_AmbientOcclusion, _AmbientOcclusion.displayName);
if (showHelp) EditorGUILayout.HelpBox("Darkens the areas of the mesh where red vertex colors are applied", MessageType.None);
m_MaterialEditor.ShaderProperty(_GradientBrightness, _GradientBrightness.displayName);
if (showHelp) EditorGUILayout.HelpBox("Adds a gradient to the branch mesh from bottom to top. This information is stored in the alpha vertex color channel.\n\nWithout this information, the parameter will have no effect.", MessageType.None);
m_MaterialEditor.ShaderProperty(_Smoothness, _Smoothness.displayName);
if (showHelp) EditorGUILayout.HelpBox("Multiplies the value of the texture's alpha channel to decrease the roughness amount", MessageType.None);
EditorGUILayout.Space();
}
public void FindProperties(MaterialProperty[] props)
{
_UseSpeedTreeWind = FindProperty("_UseSpeedTreeWind", props);
//Main maps
_MainTex = FindProperty("_MainTex", props);
_BumpMap = FindProperty("_BumpMap", props);
//Color
_AmbientOcclusion = FindProperty("_AmbientOcclusion", props);
_GradientBrightness = FindProperty("_GradientBrightness", props);
_Smoothness = FindProperty("_Smoothness", props);
}
}
}