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

233 lines
8.2 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:45:31)
//
// 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
{
//菲尼尔
private MaterialProperty Fnl_Scale = null;
private MaterialProperty Fnl_Power = null;
private MaterialProperty Fnl_Color = null;
private MaterialProperty Fnl_Soft = null;
private MaterialProperty Dir = null;
private MaterialProperty IfFNLAlpha = null;
void OnGUIFresnel(Material material)
{
//FNL下拉菜单
if (material.GetFloat("_fnl_sacle") != 0)
{
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
_FNL_Foldout = Foldout(_FNL_Foldout, "菲尼尔效果(Fresnel)");
if (_FNL_Foldout)
{
EditorGUI.indentLevel++;
GUIFresnel(material);
EditorGUI.indentLevel--;
}
EditorGUILayout.EndVertical();
}
else if (material.GetFloat("_FNLfanxiangkaiguan") != 0)
{
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
_FNL_Foldout = Foldout(_FNL_Foldout, "菲尼尔效果(Fresnel)");
if (_FNL_Foldout)
{
EditorGUI.indentLevel++;
GUIFresnel(material);
EditorGUI.indentLevel--;
}
EditorGUILayout.EndVertical();
}
else
{
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
_FNL_Foldout = Foldout2(_FNL_Foldout, "菲尼尔效果(Fresnel)");
if (_FNL_Foldout)
{
EditorGUI.indentLevel++;
GUIFresnel(material);
EditorGUI.indentLevel--;
}
EditorGUILayout.EndVertical();
}
}
//Fresnel内容
void GUIFresnel(Material material)
{
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
EditorGUILayout.BeginHorizontal();
EditorGUILayout.PrefixLabel("反向菲尼尔");
if (material.GetFloat("_FNLfanxiangkaiguan") == 0)
{
if (GUILayout.Button("已关闭", shortButtonStyle))
{
material.SetFloat("_FNLfanxiangkaiguan", 1);
}
}
else
{
if (GUILayout.Button("已开启", shortButtonStyle))
{
material.SetFloat("_FNLfanxiangkaiguan", 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("*反向菲尼尔后可以软化模型边缘,减少特效的模型感", style);
EditorGUILayout.EndVertical();
}
if (material.GetFloat("_FNLfanxiangkaiguan") == 1)
{
GUILayout.Space(5);
m_MaterialEditor.ShaderProperty(Fnl_Soft, "模型软化程度");
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.BeginHorizontal();
EditorGUILayout.PrefixLabel("软化剔除背面");
if (material.GetFloat("_softback") == 0)
{
if (GUILayout.Button("已关闭", shortButtonStyle))
{
material.SetFloat("_softback", 1);
}
}
else
{
if (GUILayout.Button("已开启", shortButtonStyle))
{
material.SetFloat("_softback", 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("*反向菲尼尔直接剔除掉背面,在开启菲尼尔颜色时,模型边缘容易破面,此选项可以一定程度减少破面,一般不用开启", style);
EditorGUILayout.EndVertical();
}
GUILayout.Space(5);
*/
}
if (material.GetFloat("_FNLfanxiangkaiguan") == 0)
{
material.SetFloat("_softFacotr", 0);
}
EditorGUILayout.EndVertical();
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
m_MaterialEditor.ShaderProperty(IfFNLAlpha, "影响透明通道");
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);
m_MaterialEditor.ShaderProperty(Fnl_Color, "菲尼尔颜色");
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);
m_MaterialEditor.ShaderProperty(Fnl_Scale, "菲尼尔强度");
if (_tips == true)
{
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
style.fontSize = 10;
style.normal.textColor = new Color(0.5f, 0.5f, 0.5f);
GUILayout.Label("*菲尼尔的强度颜色里也可以调强度这里增加这个参数是为了方便k帧", style);
EditorGUILayout.EndVertical();
}
GUILayout.Space(5);
m_MaterialEditor.ShaderProperty(Fnl_Power, "菲尼尔锐化");
if (_tips == true)
{
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
style.fontSize = 10;
style.normal.textColor = new Color(0.5f, 0.5f, 0.5f);
GUILayout.Label("*菲尼尔的PowerExp值使菲尼尔效果更加锐利", style);
EditorGUILayout.EndVertical();
}
GUILayout.Space(5);
EditorGUILayout.EndVertical();
EditorGUILayout.EndVertical();
GUILayout.Space(5);
}
void FindPropertiesFresnel(MaterialProperty[] props)
{
//菲尼尔
Fnl_Color = FindProperty("_fnl_color", props);
Fnl_Scale = FindProperty("_fnl_sacle", props);
Fnl_Power = FindProperty("_fnl_power", props);
Fnl_Soft = FindProperty("_softFacotr", props);
Dir = FindProperty("_Dir", props);
IfFNLAlpha = FindProperty("_IfFNLAlpha", props);
}
}
}