您最多选择25个主题
主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
72 行
2.4 KiB
72 行
2.4 KiB
using UnityEngine;
|
|
|
|
namespace UnityEditor.Graphs.Material
|
|
{
|
|
[Title("Art/Colorize Node")]
|
|
class ColorizeNode : Function1Input, IGeneratesFunction
|
|
{
|
|
[SerializeField]
|
|
private Color m_Color = Color.blue;
|
|
[SerializeField]
|
|
private float m_Colorization = 0.0f;
|
|
[SerializeField]
|
|
private float m_Brightness = 1.0f;
|
|
[SerializeField]
|
|
private float m_Contrast = 1.0f;
|
|
|
|
public override void Init()
|
|
{
|
|
name = "ColorizeNode";
|
|
base.Init();
|
|
}
|
|
|
|
protected override string GetFunctionName() {return ""; }
|
|
|
|
protected override string GetFunctionCallBody (string inputValue)
|
|
{
|
|
return "unity_colorize_"+precision+"("+inputValue+", "+precision+"4("+m_Color.r+", "+m_Color.g+", "+m_Color.b+", "+m_Color.a+"), "+m_Colorization+", "+m_Brightness+", "+m_Contrast+")";
|
|
}
|
|
|
|
public void GenerateNodeFunction(ShaderGenerator visitor, GenerationMode generationMode)
|
|
{
|
|
var outputString = new ShaderGenerator ();
|
|
|
|
foreach (var thePrecisision in m_PrecisionNames)
|
|
{
|
|
outputString.AddShaderChunk ("inline " + thePrecisision + "4 unity_colorize_" + thePrecisision + " (" + thePrecisision + "4 arg1, " + thePrecisision + "4 color, " + thePrecisision + " amount, " + thePrecisision + " brightness, " + thePrecisision + " contrast)", false);
|
|
outputString.AddShaderChunk ("{", false);
|
|
outputString.Indent ();
|
|
outputString.AddShaderChunk (thePrecisision + "4 x = lerp(arg1, arg1 * color, amount);", false);
|
|
outputString.AddShaderChunk ("x *= brightness;", false);
|
|
outputString.AddShaderChunk ("x = pow(x, contrast);", false);
|
|
outputString.AddShaderChunk ("return x;", false);
|
|
outputString.Deindent ();
|
|
outputString.AddShaderChunk ("}", false);
|
|
}
|
|
|
|
visitor.AddShaderChunk (outputString.GetShaderString (0), true);
|
|
}
|
|
|
|
static float Slider (string title, float value, float from, float to)
|
|
{
|
|
GUILayout.BeginHorizontal ();
|
|
GUILayout.Label (title);
|
|
value = GUILayout.HorizontalSlider(value, from, to, GUILayout.Width(64));
|
|
GUILayout.EndHorizontal ();
|
|
return value;
|
|
}
|
|
|
|
public override void NodeUI (Graphs.GraphGUI host)
|
|
{
|
|
base.NodeUI(host);
|
|
|
|
EditorGUI.BeginChangeCheck ();
|
|
m_Color = EditorGUILayout.ColorField("Tint", m_Color);
|
|
m_Colorization = Slider ("Colorization", m_Colorization, 0f, 1f);
|
|
m_Brightness = Slider ("Brightness", m_Brightness, 0f, 2f);
|
|
m_Contrast = Slider ("Contrast", m_Contrast, 0.3f, 4f);
|
|
if (EditorGUI.EndChangeCheck ())
|
|
RegeneratePreviewShaders ();
|
|
}
|
|
}
|
|
}
|