using UnityEngine;
namespace UnityEditor.Rendering.HighDefinition
{
///
/// The UI block that displays distortion properties for materials.
///
public class DistortionUIBlock : MaterialUIBlock
{
internal static class Styles
{
public static GUIContent distortionEnableText = new GUIContent("Distortion", "When enabled, HDRP processes distortion for this Material.");
public static GUIContent distortionOnlyText = new GUIContent("Distortion Only", "When enabled, HDRP only uses this Material to render distortion.");
public static GUIContent distortionDepthTestText = new GUIContent("Distortion Depth Test", "When enabled, HDRP calculates a depth test for distortion, clipping the distortion contribution if it is occluded.");
public static GUIContent distortionVectorMapText = new GUIContent("Distortion Vector Map (RGB)", "Specifies the Vector Map HDRP used for the distortion effect.\n\nDistortion 2D vector (RG) and Blur amount (B)\n\nHDRP first applies the scale as a multiplicative, and then the bias additively, to the distortion vector only; not the blur amount.");
public static GUIContent distortionBlendModeText = new GUIContent("Distortion Blend Mode", "Specifies the mode HDRP uses to calculate distortion.");
public static GUIContent distortionScaleText = new GUIContent("Distortion Scale", "Sets the scale HDRP applies to the Distortion Vector Map.");
public static GUIContent distortionBlurScaleText = new GUIContent("Distortion Blur Scale", "Sets the scale HDRP applies to the distortion blur effect.");
public static GUIContent distortionBlurRemappingText = new GUIContent("Distortion Blur Remapping", "Controls a remap for the Distortion Blur effect.");
public static GUIContent distortionRoughInfoText = new GUIContent("Blur parameters will have an effect on the distortion if the Rough Distortion Frame Setting is enabled on the target camera.");
}
MaterialProperty distortionEnable = null;
const string kDistortionEnable = "_DistortionEnable";
MaterialProperty distortionOnly = null;
const string kDistortionOnly = "_DistortionOnly";
MaterialProperty distortionDepthTest = null;
const string kDistortionDepthTest = "_DistortionDepthTest";
MaterialProperty distortionVectorMap = null;
const string kDistortionVectorMap = "_DistortionVectorMap";
MaterialProperty distortionBlendMode = null;
const string kDistortionBlendMode = "_DistortionBlendMode";
MaterialProperty distortionScale = null;
const string kDistortionScale = "_DistortionScale";
MaterialProperty distortionVectorScale = null;
const string kDistortionVectorScale = "_DistortionVectorScale";
MaterialProperty distortionVectorBias = null;
const string kDistortionVectorBias = "_DistortionVectorBias";
MaterialProperty distortionBlurScale = null;
const string kDistortionBlurScale = "_DistortionBlurScale";
MaterialProperty distortionBlurRemapMin = null;
const string kDistortionBlurRemapMin = "_DistortionBlurRemapMin";
MaterialProperty distortionBlurRemapMax = null;
const string kDistortionBlurRemapMax = "_DistortionBlurRemapMax";
///
/// Loads the material properties for the block.
///
public override void LoadMaterialProperties()
{
distortionEnable = FindProperty(kDistortionEnable, false);
distortionOnly = FindProperty(kDistortionOnly, false);
distortionDepthTest = FindProperty(kDistortionDepthTest, false);
distortionVectorMap = FindProperty(kDistortionVectorMap, false);
distortionBlendMode = FindProperty(kDistortionBlendMode, false);
distortionScale = FindProperty(kDistortionScale, false);
distortionVectorScale = FindProperty(kDistortionVectorScale, false);
distortionVectorBias = FindProperty(kDistortionVectorBias, false);
distortionBlurScale = FindProperty(kDistortionBlurScale, false);
distortionBlurRemapMin = FindProperty(kDistortionBlurRemapMin, false);
distortionBlurRemapMax = FindProperty(kDistortionBlurRemapMax, false);
}
///
/// Renders the distortion properties.
///
public override void OnGUI()
{
if (distortionEnable != null)
{
materialEditor.ShaderProperty(distortionEnable, Styles.distortionEnableText);
if (distortionEnable.floatValue == 1.0f)
{
EditorGUILayout.HelpBox(Styles.distortionRoughInfoText.text, MessageType.Info, true);
EditorGUI.indentLevel++;
materialEditor.ShaderProperty(distortionBlendMode, Styles.distortionBlendModeText);
if (distortionOnly != null)
materialEditor.ShaderProperty(distortionOnly, Styles.distortionOnlyText);
materialEditor.ShaderProperty(distortionDepthTest, Styles.distortionDepthTestText);
EditorGUI.indentLevel++;
materialEditor.TexturePropertySingleLine(Styles.distortionVectorMapText, distortionVectorMap, distortionVectorScale, distortionVectorBias);
EditorGUI.indentLevel++;
if (distortionVectorMap.textureValue != null)
materialEditor.TextureScaleOffsetProperty(distortionVectorMap);
materialEditor.ShaderProperty(distortionScale, Styles.distortionScaleText);
EditorGUI.BeginChangeCheck();
materialEditor.ShaderProperty(distortionBlurScale, Styles.distortionBlurScaleText);
if (EditorGUI.EndChangeCheck())
distortionBlurScale.floatValue = Mathf.Max(0f, distortionBlurScale.floatValue);
float remapMin = distortionBlurRemapMin.floatValue;
float remapMax = distortionBlurRemapMax.floatValue;
EditorGUI.BeginChangeCheck();
EditorGUILayout.MinMaxSlider(Styles.distortionBlurRemappingText, ref remapMin, ref remapMax, 0.0f, 1.0f);
if (EditorGUI.EndChangeCheck())
{
distortionBlurRemapMin.floatValue = remapMin;
distortionBlurRemapMax.floatValue = remapMax;
}
EditorGUI.indentLevel--;
EditorGUI.indentLevel--;
EditorGUI.indentLevel--;
}
}
}
}
}