133 lines
4.7 KiB
C#
133 lines
4.7 KiB
C#
|
// 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);
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
}
|