using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using UnityEditor;
|
|
using UnityEditorInternal;
|
|
|
|
[CustomEditor(typeof(FogVolumeRenderer))]
|
|
|
|
public class FogVolumeRendererEditor : Editor
|
|
{
|
|
SerializedProperty ShowCamera;
|
|
FogVolumeRenderer _target;
|
|
private Texture2D InspectorImage;
|
|
private GUIStyle HeaderStyle, BodyStyle;
|
|
private static bool DebugTab
|
|
{
|
|
get { return EditorPrefs.GetBool("fvDebugTab"); }
|
|
set { EditorPrefs.SetBool("fvDebugTab", value); }
|
|
}
|
|
private static bool ShowInspectorTooltips
|
|
{
|
|
get { return EditorPrefs.GetBool("ShowInspectorTooltips"); }
|
|
set { EditorPrefs.SetBool("ShowInspectorTooltips", value); }
|
|
}
|
|
GUIContent VariableField(string VariableName, string Tooltip)
|
|
{
|
|
return new GUIContent(VariableName, ShowInspectorTooltips ? Tooltip : "");
|
|
}
|
|
|
|
string[] layerMaskName;
|
|
//int layerMaskNameIndex = 0;
|
|
|
|
|
|
void OnEnable()
|
|
{
|
|
_target = (FogVolumeRenderer)target;
|
|
ShowCamera = serializedObject.FindProperty("ShowCamera");
|
|
InspectorImage = Resources.Load("InspectorImage", typeof(Texture2D)) as Texture2D;
|
|
HeaderStyle = new GUIStyle();
|
|
HeaderStyle.normal.background = InspectorImage;
|
|
BodyStyle = new GUIStyle();
|
|
// BodyStyle.normal.background = (Texture2D)Resources.Load("RendererInspectorBody");
|
|
if (EditorGUIUtility.isProSkin)
|
|
BodyStyle.normal.background = (Texture2D)Resources.Load("RendererInspectorBodyBlack");
|
|
else
|
|
BodyStyle.normal.background = (Texture2D)Resources.Load("RendererInspectorBodyBright");
|
|
|
|
List<string> layerMaskList = new List<string>();
|
|
for (int i = 0; i < 32; i++)
|
|
{
|
|
string layerName = LayerMask.LayerToName(i);
|
|
//if (layerName != "")
|
|
//{
|
|
// if (layerName == _target.DepthLayersName)
|
|
// layerMaskNameIndex = layerMaskList.Count;
|
|
layerMaskList.Add(layerName);
|
|
//}
|
|
}
|
|
layerMaskName = layerMaskList.ToArray();
|
|
}
|
|
|
|
public override void OnInspectorGUI()
|
|
{
|
|
|
|
serializedObject.Update();
|
|
GUILayout.Space(10);
|
|
// GUILayout.Box(InspectorImage, GUILayout.ExpandWidth(true));
|
|
GUILayout.BeginVertical(HeaderStyle);
|
|
|
|
// EditorGUILayout.HelpBox(BodyStyle.name, MessageType.None);
|
|
GUILayout.Space(EditorGUIUtility.currentViewWidth / 4 - 10);
|
|
//end header
|
|
GUILayout.EndVertical();
|
|
//begin body
|
|
GUILayout.Space(1);
|
|
GUILayout.BeginVertical(BodyStyle);
|
|
|
|
EditorGUI.BeginChangeCheck();
|
|
Undo.RecordObject(_target, "Fog volume Renderer parameter");
|
|
|
|
GUILayout.Space(20);
|
|
// GUILayout.BeginVertical("box");
|
|
_target._Downsample = EditorGUILayout.IntSlider("Downscale", _target._Downsample, 1, 16);
|
|
|
|
//if (_target._Downsample>1)
|
|
// _target.RenderableInSceneView = EditorGUILayout.Toggle(VariableField("Render In Scene View", "Makes it visible for reflection probes and Scene viewport"), _target.RenderableInSceneView);
|
|
|
|
//GUILayout.EndVertical();//end box
|
|
if (_target._Downsample > 1)
|
|
_target._BlendMode = (FogVolumeRenderer.BlendMode)EditorGUILayout.EnumPopup("Blend Mode", _target._BlendMode);
|
|
EditorGUILayout.HelpBox("Resolution: " + _target.FogVolumeResolution, MessageType.None);
|
|
if (_target._Downsample > 1)
|
|
{
|
|
|
|
GUILayout.BeginVertical("box");
|
|
_target.GenerateDepth = EditorGUILayout.Toggle(VariableField("Depth", "Compute Depth when rendered in low-res and textured volumes collide with scene elements"), _target.GenerateDepth);
|
|
if (_target.GenerateDepth)
|
|
{
|
|
//GUILayout.BeginHorizontal();
|
|
//EditorGUILayout.LabelField("Exclude layer");
|
|
//int newLayerMaskNameIndex = EditorGUILayout.Popup(layerMaskNameIndex, layerMaskName);
|
|
//if (newLayerMaskNameIndex != layerMaskNameIndex)
|
|
//{
|
|
// layerMaskNameIndex = newLayerMaskNameIndex;
|
|
// _target.DepthLayersName = layerMaskName[layerMaskNameIndex];
|
|
|
|
//}
|
|
//GUILayout.EndHorizontal();
|
|
// GUILayout.BeginHorizontal();
|
|
// EditorGUILayout.LabelField("Depth layers");
|
|
_target.DepthLayer2 = EditorGUILayout.MaskField(VariableField("Depth layers", "Select the layers used to collide with FV\n(Experimental feature)"), _target.DepthLayer2, layerMaskName);
|
|
//_target.DepthLayer2 = EditorGUILayout.LayerField("Depth layers", _target.DepthLayer2);
|
|
//GUILayout.EndHorizontal();
|
|
GUILayout.BeginVertical("box");
|
|
_target.useBilateralUpsampling = EditorGUILayout.Toggle(VariableField("Edge-aware upscale", "Minimize the aliasing at the edges of colliding elements"), _target.useBilateralUpsampling);
|
|
|
|
|
|
if (_target.useBilateralUpsampling)
|
|
{
|
|
_target.upsampleDepthThreshold = EditorGUILayout.Slider("Depth Threshold", _target.upsampleDepthThreshold, 0, .01f);
|
|
_target.showBilateralEdge = EditorGUILayout.Toggle("Show edge mask", _target.showBilateralEdge);
|
|
_target.upsampleMode = (FogVolumeRenderer.UpsampleMode)EditorGUILayout.EnumPopup("Method", _target.upsampleMode);
|
|
|
|
}
|
|
GUILayout.EndVertical();//end box
|
|
}
|
|
GUILayout.EndVertical();//end box
|
|
|
|
#region DeNoise
|
|
if (_target._Downsample > 1)
|
|
{
|
|
GUILayout.BeginVertical("box");
|
|
_target.TAA = EditorGUILayout.Toggle(VariableField("DeNoise", "Performs Playdead's TAA to minimize noise when using jitter. Note: effect works only in 5.5"), _target.TAA);
|
|
if (_target.TAA && _target.HDR)
|
|
EditorGUILayout.HelpBox("Color output is in LDR", MessageType.None);
|
|
GUILayout.EndVertical();//end box
|
|
|
|
}
|
|
#endregion
|
|
|
|
// #region Stereo
|
|
//if ( _target._Downsample > 0)
|
|
//{
|
|
// GUILayout.BeginVertical("box");
|
|
// _target.useRectangularStereoRT = EditorGUILayout.Toggle("Rectangular stereo", _target.useRectangularStereoRT);
|
|
// GUILayout.EndVertical();//end box
|
|
//}
|
|
// #endregion
|
|
|
|
if (GUILayout.Button("Debug", EditorStyles.toolbarButton))
|
|
DebugTab = !DebugTab;
|
|
|
|
if (DebugTab)
|
|
{
|
|
GUILayout.BeginVertical("box");
|
|
{
|
|
EditorGUILayout.PropertyField(ShowCamera, new GUIContent("Show camera", "Unhide the camera used to render FV in low resolution"));
|
|
}
|
|
GUILayout.EndVertical();
|
|
}
|
|
}
|
|
|
|
EditorGUI.EndChangeCheck();
|
|
EditorGUILayout.HelpBox("Fog Volume 3.4 July 2018", MessageType.None);
|
|
GUILayout.EndVertical();
|
|
if (GUI.changed)
|
|
{
|
|
EditorUtility.SetDirty(_target);
|
|
}
|
|
|
|
|
|
|
|
serializedObject.ApplyModifiedProperties();
|
|
}
|
|
|
|
|
|
}
|