Files
Cielonos/Assets/Shaders/PandaVFX/Editor/PandavfxGUI.UVDistort.cs
SoulliesOfficial f7af60351b 阶段性完成
2025-12-08 05:27:53 -05:00

509 lines
20 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// -----------------------------------------------------------------------
// This file is part of PandaShader VFXGUI.
//
// (c) sunhainan (2022/11/28 14:55:16)
//
// For the full copyright and license information, please view the LICENSE
// file that was distributed with this source code.
// -----------------------------------------------------------------------
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
namespace Yoka.MGame.PandaShader
{
public partial class PandavfxGUI
{
//UV扭曲属性
private MaterialProperty Distort_Tex = null;
private MaterialProperty Distort_Factor = null;
private MaterialProperty Distort_Uspeed = null;
private MaterialProperty Distort_Vspeed = null;
private MaterialProperty IfFlowmap = null;
private MaterialProperty DistortTexAR = null;
private MaterialProperty DistortMaskTexAR = null;
private MaterialProperty DistortMaskTex = null;
private MaterialProperty DistortMaskTexC = null;
private MaterialProperty DistortMaskTexCV = null;
//private MaterialProperty DistortMaskTexR = null;
private MaterialProperty DistortRemap = null;
private MaterialProperty DistortFactorC1 = null;
private MaterialProperty DistortFactorC2Vec4 = null;
private CUSTOMDATA DistortFactorC2Enum = CUSTOMDATA.Z;
private MaterialProperty DistortSceenTex = null;
private MaterialProperty DistortMask = null;
MaterialProperty DistortMaskTexR = null;
private MaterialProperty IfBeingDistorted = null;
void OnGUIUVDistort(Material material)
{
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
_Distort_Foldout = Foldout(_Distort_Foldout, "UV扭曲(UVDistort)");
if (_Distort_Foldout)
{
EditorGUI.indentLevel++;
GUIUVDistort(material);
EditorGUI.indentLevel--;
}
CheckKeyword(material);
EditorGUILayout.EndVertical();
}
//UV扭曲内容
void GUIUVDistort(Material material)
{
m_MaterialEditor.TexturePropertySingleLine(new GUIContent("UV扭曲贴图"), Distort_Tex);
if (_tips == true)
{
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
style.fontSize = 10;
style.normal.textColor = new Color(0.5f, 0.5f, 0.5f);
GUILayout.Label("*扭曲贴图uv信息可以根据需求选择需要扭曲的贴图扭曲uv后贴图出现液化效果很适合制作水波纹写实类能量涌动效果", style);
EditorGUILayout.EndVertical();
}
m_MaterialEditor.ShaderProperty(IfBeingDistorted, "是否被扭曲");
if (Distort_Tex.textureValue != null)
{ EditorGUILayout.BeginVertical(EditorStyles.helpBox);
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
_DistortTexxx = Foldouts(_DistortTexxx, "贴图设置(点击打开)");
if (_DistortTexxx)
{
EditorGUI.indentLevel++;
if (material.GetFloat("_IfFlowmap") == 0)
{
m_MaterialEditor.ShaderProperty(DistortTexAR, "使用R通道");
if (_tips == true)
{
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
style.fontSize = 10;
style.normal.textColor = new Color(0.5f, 0.5f, 0.5f);
GUILayout.Label("*开启后R通道将做为扭曲通道不开启使用Alpha通道为扭曲通道黑白图没有Alpha通道请勾选此选项有Alpha通道的贴图请不要勾选",
style);
EditorGUILayout.EndVertical();
}
}
m_MaterialEditor.ShaderProperty(IfFlowmap, "使用FlowMap图");
if (_tips == true)
{
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
style.fontSize = 10;
style.normal.textColor = new Color(0.5f, 0.5f, 0.5f);
GUILayout.Label("*开启后使用FLowMap算法来做为扭曲贴图可以用来制作烟尘消散效果", style);
EditorGUILayout.EndVertical();
}
EditorGUI.indentLevel--;
}
EditorGUILayout.EndVertical();
m_MaterialEditor.TextureScaleOffsetProperty(Distort_Tex);
EditorGUILayout.EndVertical();
GUILayout.Space(5);
m_MaterialEditor.ShaderProperty(DistortSceenTex, "使用屏幕");
//m_MaterialEditor.ShaderProperty(DistortMask, "UV扭曲遮罩图");
EditorGUILayout.BeginHorizontal(EditorStyles.helpBox);
EditorGUILayout.PrefixLabel("UV扭曲遮罩图");
if (material.GetFloat("_DistortMask") == 0)
{
if (GUILayout.Button("已关闭", shortButtonStyle))
{
material.SetFloat("_DistortMask", 1);
material.EnableKeyword("_DISORT_MASK_TEX");
}
}
else
{
if (GUILayout.Button("已开启", shortButtonStyle))
{
material.SetFloat("_DistortMask", 0);
material.DisableKeyword("_DISORT_MASK_TEX");
}
}
EditorGUILayout.EndHorizontal();
if (DistortMask.floatValue > 0)
{
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
m_MaterialEditor.TexturePropertySingleLine(new GUIContent("UV扭曲遮罩贴图"), DistortMaskTex);
if (_tips == true)
{
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
style.fontSize = 10;
style.normal.textColor = new Color(0.5f, 0.5f, 0.5f);
GUILayout.Label("*uv扭曲遮罩图", style);
EditorGUILayout.EndVertical();
}
_DistortMaskTexxx = Foldouts(_DistortMaskTexxx, "贴图设置(点击打开)");
if (_DistortMaskTexxx)
{
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
EditorGUI.indentLevel++;
EditorGUILayout.BeginHorizontal();
m_MaterialEditor.ShaderProperty(DistortMaskTexC, "UVClamp");
m_MaterialEditor.ShaderProperty(DistortMaskTexCV, "");
EditorGUILayout.EndHorizontal();
if (_tips == true)
{
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
style.fontSize = 10;
style.normal.textColor = new Color(0.5f, 0.5f, 0.5f);
GUILayout.Label("*两个复选框分别表示贴图U方向Clamp和V方向Clamp可以勾选其中一个也可以两个方向都勾选", style);
EditorGUILayout.EndVertical();
}
m_MaterialEditor.ShaderProperty(DistortMaskTexAR, "使用R通道");
if (_tips == true)
{
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
style.fontSize = 10;
style.normal.textColor = new Color(0.5f, 0.5f, 0.5f);
GUILayout.Label("*开启后R通道将做为扭曲遮罩通道不开启使用Alpha通道为扭曲遮罩通道黑白图没有Alpha通道请勾选此选项有Alpha通道的贴图请不要勾选",
style);
EditorGUILayout.EndVertical();
}
m_MaterialEditor.ShaderProperty(DistortMaskTexR, "贴图旋转");
if (_tips == true)
{
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
style.fontSize = 10;
style.normal.textColor = new Color(0.5f, 0.5f, 0.5f);
GUILayout.Label("*贴图旋转,处理贴图朝向,省去复制贴图改变朝向", style);
EditorGUILayout.EndVertical();
}
EditorGUI.indentLevel--;
EditorGUILayout.EndVertical();
}
m_MaterialEditor.TextureScaleOffsetProperty(DistortMaskTex);
EditorGUILayout.EndVertical();
GUILayout.Space(5);
}
GUILayout.Space(5);
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
EditorGUILayout.BeginHorizontal();
EditorGUILayout.PrefixLabel("自定义强度");
if (material.GetFloat("_CustomDistort") == 0)
{
if (GUILayout.Button("已关闭", shortButtonStyle))
{
material.SetFloat("_CustomDistort", 1);
}
}
else
{
if (GUILayout.Button("已开启", shortButtonStyle))
{
material.SetFloat("_CustomDistort", 0);
}
}
EditorGUILayout.EndHorizontal();
if (material.GetFloat("_CustomDistort") == 1)
{
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
m_MaterialEditor.ShaderProperty(DistortFactorC1, "数据");
DrawCustomDataEnum(ref DistortFactorC2Vec4, ref DistortFactorC2Enum, "通道");
EditorGUILayout.EndVertical();
}
EditorGUILayout.EndVertical();
if (_tips == true)
{
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
style.fontSize = 10;
style.normal.textColor = new Color(0.5f, 0.5f, 0.5f);
GUILayout.Label(
"*开启自定义数据控制贴图扭曲程度配合溶解可以用来制作flowmap溶解效果开启自定义数据时请先custom1.xyzw,再添加custom2.xyzw然后custom2.w控制扭曲程度开启自定义数据后扭曲程度将会失效并隐藏",
style);
EditorGUILayout.EndVertical();
}
GUILayout.Space(5);
if (material.GetFloat("_CustomDistort") == 0)
{
m_MaterialEditor.ShaderProperty(Distort_Factor, "UV扭曲程度");
if (_tips == true)
{
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
style.fontSize = 10;
style.normal.textColor = new Color(0.5f, 0.5f, 0.5f);
GUILayout.Label("*扭曲程度,开启自定义数据后,扭曲程度将会失效,并隐藏", style);
EditorGUILayout.EndVertical();
}
GUILayout.Space(5);
}
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
GUILayout.Label(" UV与主帖图一致");
EditorGUILayout.EndVertical();
GUILayout.Space(5);
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
m_MaterialEditor.ShaderProperty(Distort_Uspeed, "U流动");
m_MaterialEditor.ShaderProperty(Distort_Vspeed, "V流动");
if (_tips == true)
{
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
style.fontSize = 10;
style.normal.textColor = new Color(0.5f, 0.5f, 0.5f);
GUILayout.Label("*扭曲贴图的UV流动速度", style);
EditorGUILayout.EndVertical();
}
EditorGUILayout.EndVertical();
/*
GUILayout.Space(5);
EditorGUILayout.BeginHorizontal();
EditorGUILayout.PrefixLabel("扭动主帖图");
if (material.GetFloat("_DistortMainTex") == 0)
{
if (GUILayout.Button("已关闭", shortButtonStyle))
{
material.SetFloat("_DistortMainTex", 1);
}
}
else
{
if (GUILayout.Button("已开启", shortButtonStyle))
{
material.SetFloat("_DistortMainTex", 0);
}
}
EditorGUILayout.EndHorizontal();
if (material.GetFloat("_IfAddTex") == 1)
{
EditorGUILayout.BeginHorizontal();
EditorGUILayout.PrefixLabel("扭动附加图");
if (material.GetFloat("_DistortAddTex") == 0)
{
if (GUILayout.Button("已关闭", shortButtonStyle))
{
material.SetFloat("_DistortAddTex", 1);
}
}
else
{
if (GUILayout.Button("已开启", shortButtonStyle))
{
material.SetFloat("_DistortAddTex", 0);
}
}
EditorGUILayout.EndHorizontal();
}
if (Mask_Sampler.textureValue != null)
{
EditorGUILayout.BeginHorizontal();
EditorGUILayout.PrefixLabel("扭动遮罩图");
if (material.GetFloat("_DistortMask") == 0)
{
if (GUILayout.Button("已关闭", shortButtonStyle))
{
material.SetFloat("_DistortMask", 1);
}
}
else
{
if (GUILayout.Button("已开启", shortButtonStyle))
{
material.SetFloat("_DistortMask", 0);
}
}
EditorGUILayout.EndHorizontal();
}
if (Dissolve_Tex.textureValue != null)
{
EditorGUILayout.BeginHorizontal();
EditorGUILayout.PrefixLabel("扭动溶解帖图");
if (material.GetFloat("_DistortDisTex") == 0)
{
if (GUILayout.Button("已关闭", shortButtonStyle))
{
material.SetFloat("_DistortDisTex", 1);
}
}
else
{
if (GUILayout.Button("已开启", shortButtonStyle))
{
material.SetFloat("_DistortDisTex", 0);
}
}
EditorGUILayout.EndHorizontal();
}
if (NormalTex.textureValue != null && material.GetFloat("_IfCustomLight") == 1)
{
EditorGUILayout.BeginHorizontal();
EditorGUILayout.PrefixLabel("扭动法线图");
if (material.GetFloat("_DistortNormalTex") == 0)
{
if (GUILayout.Button("已关闭", shortButtonStyle))
{
material.SetFloat("_DistortNormalTex", 1);
}
}
else
{
if (GUILayout.Button("已开启", shortButtonStyle))
{
material.SetFloat("_DistortNormalTex", 0);
}
}
EditorGUILayout.EndHorizontal();
}
*/
}
if (_tips == true)
{
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
style.fontSize = 10;
style.normal.textColor = new Color(0.5f, 0.5f, 0.5f);
GUILayout.Label("*分别开启或关闭扭曲各个图层的UV信息", style);
EditorGUILayout.EndVertical();
}
GUILayout.Space(5);
}
void CheckKeyword(Material material)
{
if (Distort_Tex.textureValue == null)
{
material.DisableKeyword("_DISORT_TEX");
material.DisableKeyword("_SCEENTEX_ON");
material.DisableKeyword("_DISORT_MASK_TEX");
DistortMaskTex.textureValue = null;
material.SetShaderPassEnabled("Distortion", false);
material.SetShaderPassEnabled("UniversalForward", true);
material.SetShaderPassEnabled("AfterDistortion", false);
}
else
{
material.EnableKeyword("_DISORT_TEX");
if (material.GetFloat("_SceenTex") != 0)
{
material.EnableKeyword("_SCEENTEX_ON");
material.SetShaderPassEnabled("Distortion", true);
material.SetShaderPassEnabled("UniversalForward", false);
material.SetShaderPassEnabled("AfterDistortion", false);
}
else
{
material.DisableKeyword("_SCEENTEX_ON");
material.SetShaderPassEnabled("Distortion", false);
material.SetShaderPassEnabled("UniversalForward", true);
material.SetShaderPassEnabled("AfterDistortion", false);
}
}
if (material.GetFloat("_IfBeingDistorted") == 0)
{
material.SetShaderPassEnabled("AfterDistortion", true);
material.SetShaderPassEnabled("Distortion", false);
material.SetShaderPassEnabled("UniversalForward", false);
}
else if (material.GetFloat("_IfBeingDistorted") == 1)
{
}
}
void FindPropertyUVDistort(MaterialProperty[] props)
{
//UV扭曲
Distort_Tex = FindProperty("_DistortTex", props);
Distort_Factor = FindProperty("_DistortFactor", props);
Distort_Uspeed = FindProperty("_DistortTex_Uspeed", props);
Distort_Vspeed = FindProperty("_DistortTex_Vspeed", props);
IfFlowmap = FindProperty("_IfFlowmap", props);
DistortTexAR = FindProperty("_DistortTexAR", props);
DistortMaskTexAR = FindProperty("_DistortMaskTexAR", props);
DistortMaskTex = FindProperty("_DistortMaskTex", props);
DistortMaskTexC = FindProperty("_DistortMaskTexC", props);
DistortMaskTexCV = FindProperty("_DistortMaskTexCV", props);
//DistortMaskTexR = FindProperty("_DistortMaskTexR", props);
DistortRemap = FindProperty("_DistortRemap", props);
DistortFactorC1 = FindProperty("_DistortFactorC1", props);
DistortSceenTex = FindProperty("_SceenTex", props);
IfBeingDistorted = FindProperty("_IfBeingDistorted", props);
DistortMask = FindProperty("_DistortMask", props);
DistortFactorC2Vec4 = FindProperty("_DistortFactorC2Vec4", props);
DistortFactorC2Enum = ConvertCustomDataEnum(DistortFactorC2Vec4);
DistortMaskTexR = FindProperty("_DistortMaskTexR", props);
}
}
}