浏览代码

[shader graph]Fix fix up defaults for node inputs. Moving towards typed inputs.

/main
Tim Cooper 9 年前
当前提交
229ce4f5
共有 53 个文件被更改,包括 441 次插入262 次删除
  1. 2
      UnityProject/Assets/UnityShaderEditor/Editor/Source/BaseMaterialGraphGUI.cs
  2. 2
      UnityProject/Assets/UnityShaderEditor/Editor/Source/Drawing/MaterialWindow.cs
  3. 5
      UnityProject/Assets/UnityShaderEditor/Editor/Source/Editors/BaseMaterialNodeEditor.cs
  4. 4
      UnityProject/Assets/UnityShaderEditor/Editor/Source/MaterialSubGraph.cs
  5. 4
      UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/AbsoluteNode.cs
  6. 6
      UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/AddNode.cs
  7. 140
      UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/BaseMaterialNode.cs
  8. 4
      UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/BlendNode.cs
  9. 4
      UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/ClampNode.cs
  10. 18
      UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/ColorNode.cs
  11. 4
      UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/ColorizeNode.cs
  12. 4
      UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/CombineNode.cs
  13. 4
      UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/DivNode.cs
  14. 4
      UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/DotNode.cs
  15. 4
      UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/FresnelNode.cs
  16. 27
      UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/Function1Input.cs
  17. 59
      UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/Function2Input.cs
  18. 74
      UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/Function3Input.cs
  19. 8
      UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/FunctionMultiInput.cs
  20. 12
      UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/KaleidoscopeNode.cs
  21. 4
      UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/LengthNode.cs
  22. 4
      UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/LerpNode.cs
  23. 10
      UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/MandelbrotNode.cs
  24. 4
      UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/MaxNode.cs
  25. 4
      UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/MinNode.cs
  26. 6
      UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/MultiplyNode.cs
  27. 11
      UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/NormalNode.cs
  28. 4
      UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/NormalizeNode.cs
  29. 4
      UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/PerlinNode.cs
  30. 31
      UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/PixelShaderNode.cs
  31. 4
      UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/PowerNode.cs
  32. 4
      UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/QuantizeNode.cs
  33. 4
      UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/ReflectNode.cs
  34. 11
      UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/ScreenPosNode.cs
  35. 4
      UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/SinNode.cs
  36. 14
      UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/SinTimeNode.cs
  37. 41
      UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/SlotDefaultValue.cs
  38. 4
      UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/SmoothStepNode.cs
  39. 4
      UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/SplatNode.cs
  40. 6
      UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/SubGraphInputsNode.cs
  41. 10
      UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/SubGraphNode.cs
  42. 6
      UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/SubGraphOutputsNode.cs
  43. 4
      UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/SubtractNode.cs
  44. 4
      UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/SwizzleNode.cs
  45. 21
      UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/TextureNode.cs
  46. 12
      UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/TimeNode.cs
  47. 11
      UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/UVNode.cs
  48. 4
      UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/UnpackNormalNode.cs
  49. 18
      UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/Vector1Node.cs
  50. 22
      UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/Vector4Node.cs
  51. 11
      UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/ViewDirectionNode.cs
  52. 11
      UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/WorldPosNode.cs
  53. 2
      UnityProject/Assets/UnityShaderEditor/Editor/Source/PixelGraph.cs

2
UnityProject/Assets/UnityShaderEditor/Editor/Source/BaseMaterialGraphGUI.cs


return;
var node = (BaseMaterialNode)CreateInstance(posObj.m_Type);
node.Init();
node.OnCreate();
node.position = new Rect(posObj.m_Pos.x, posObj.m_Pos.y, node.position.width, node.position.height);
// graph.AddNode(node);
}

2
UnityProject/Assets/UnityShaderEditor/Editor/Source/Drawing/MaterialWindow.cs


return;
var node = (BaseMaterialNode)CreateInstance(posObj.m_Type);
node.Init();
node.OnCreate();
node.position = new Rect(posObj.m_Pos.x, posObj.m_Pos.y, node.position.width, node.position.height);
m_MaterialGraph.currentGraph.AddNode(node);

5
UnityProject/Assets/UnityShaderEditor/Editor/Source/Editors/BaseMaterialNodeEditor.cs


SlotDefaultValue defaultValue = node.GetSlotDefaultValue(slot.name);
if (defaultValue == null)
return;
if (defaultValue.editable)
slot.title = EditorGUILayout.TextField("Title", slot.title);
var def = node.GetSlotDefaultValue(slot.name);
if (def != null && def.OnGUI())
{

4
UnityProject/Assets/UnityShaderEditor/Editor/Source/MaterialSubGraph.cs


{
m_InputsNode = CreateInstance<SubGraphInputsNode>();
m_InputsNode.hideFlags = HideFlags.HideInHierarchy;
m_InputsNode.Init();
m_InputsNode.OnCreate();
AddMasterNodeNoAddToAsset(m_InputsNode);
}

m_OutputsNode.hideFlags = HideFlags.HideInHierarchy;
m_OutputsNode.Init();
m_OutputsNode.OnCreate();
AddMasterNodeNoAddToAsset(m_OutputsNode);
}
}

4
UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/AbsoluteNode.cs


[Title("Math/Absolute Node")]
class AbsoluteNode : Function1Input, IGeneratesFunction
{
public override void Init()
public override void OnCreate()
base.Init();
base.OnCreate();
}
protected override string GetFunctionName() {return "unity_absolute_" + precision; }

6
UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/AddNode.cs


namespace UnityEditor.MaterialGraph
{
[Title("Math/Add Node")]
public class AddNode : FunctionMultiInput, IGeneratesFunction
public class AddNode : Function2Input, IGeneratesFunction
public override void Init()
public override void OnCreate()
base.Init();
base.OnCreate();
}
protected override string GetFunctionName()

140
UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/BaseMaterialNode.cs


Preview3D
}
[Serializable]
class SlotDefaultValueKVP
{
[SerializeField]
public string slotName;
[SerializeField]
public SlotDefaultValue defaultValue;
public SlotDefaultValueKVP(string slotName, SlotDefaultValue defaultValue)
{
this.slotName = slotName;
this.defaultValue = defaultValue;
}
}
public struct MaterialGraphSlot
{
public Slot slot;
public SlotDefaultValue defaultValue;
public MaterialGraphSlot(Slot slot, SlotDefaultValue defaultValue)
{
this.slot = slot;
this.defaultValue = defaultValue;
}
public override string ToString()
{
return string.Format("{0} - {1} - {2}", slot.name, slot.isInputSlot, defaultValue);
}
}
public abstract class BaseMaterialNode : Node, IGenerateProperties
{
#region Fields

private Material m_Material;
[SerializeField]
private List<SlotDefaultValue> m_SlotDefaultValues;
private List<SlotDefaultValueKVP> m_SlotDefaultValues;
#endregion
#region Properties

// lookup custom slot properties
public void SetSlotDefaultValue(string slotName, SlotDefaultValue defaultValue)
{
var existingValue = m_SlotDefaultValues.FirstOrDefault(x => x.slotName == slotName);
if (existingValue != null)
m_SlotDefaultValues.Remove(existingValue);
m_SlotDefaultValues.RemoveAll(x => x.slotName == slotName);
m_SlotDefaultValues.Add(defaultValue);
Debug.LogFormat("Configuring Default: {0} on {1}.{2}", defaultValue, this, slotName);
m_SlotDefaultValues.Add(new SlotDefaultValueKVP(slotName, defaultValue));
}
private void UpdateDefaultSlotValueIfNull(string slotName, SlotDefaultValue defaultValue)
{
var found = m_SlotDefaultValues.FirstOrDefault(x => x.slotName == slotName);
if (found == null || found.defaultValue == null)
SetSlotDefaultValue(slotName, defaultValue);
m_SlotDefaultValues.Add(new SlotDefaultValueKVP(slotName, defaultValue));
}
public string precision

public SlotDefaultValue GetSlotDefaultValue(string slotName)
{
return m_SlotDefaultValues.FirstOrDefault(x => x.slotName == slotName);
var found = m_SlotDefaultValues.FirstOrDefault(x => x.slotName == slotName);
return found != null ? found.defaultValue : null;
private static Shader m_DefaultPreviewShader;
private static Shader s_DefaultPreviewShader;
if (m_DefaultPreviewShader == null)
m_DefaultPreviewShader = Shader.Find("Diffuse");
if (s_DefaultPreviewShader == null)
s_DefaultPreviewShader = Shader.Find("Diffuse");
return m_DefaultPreviewShader;
return s_DefaultPreviewShader;
}
}

#endregion
public virtual void Init()
public virtual void OnCreate()
{
hideFlags = HideFlags.HideInHierarchy;
}

if (m_SlotDefaultValues == null)
{
m_SlotDefaultValues = new List<SlotDefaultValue>();
m_SlotDefaultValues = new List<SlotDefaultValueKVP>();
}
}

{
return name + "_" + Math.Abs(GetInstanceID());
}
[Obsolete ("This call is not supported for Material Graph. Use: AddSlot(MaterialGraphSlot mgSlot)", true)]
AddSlot(slot, GetNewSlotDefaultValue());
throw new NotSupportedException("Material graph requires the use of: AddSlot(MaterialGraphSlot mgSlot)");
public void AddSlot(Slot slot, Vector4 defaultValue)
public void AddSlot(MaterialGraphSlot mgSlot)
if (this[slot.name] != null)
if (mgSlot.slot == null)
base.AddSlot(slot);
Debug.Log(mgSlot);
var slot = mgSlot.slot;
if (this[slot.name] == null)
{
base.AddSlot(slot);
}
// slots are not serialzied but the default values are
// because of this we need to see if the default has

MaterialWindow.DebugMaterialGraph("Node Name: " + GetOutputVariableNameForNode());
Debug.Log("Slot name" + (slot != null ? slot.name : "Null"));
SetSlotDefaultValue(slot.name, new SlotDefaultValue(defaultValue, this, slot.name, true));
var slotthing = GetSlotDefaultValue(slot.name);
MaterialWindow.DebugMaterialGraph("Slot Thing: " + slotthing.inputName);
SetSlotDefaultValue(slot.name, mgSlot.defaultValue);
}
public override void RemoveSlot(Slot slot)

var slotsToCheck = type == SlotType.InputSlot ? inputSlots.ToArray() : outputSlots.ToArray();
string format = type == SlotType.InputSlot ? "I{0:00}" : "O{0:00}";
int index = slotsToCheck.Length;
var name = string.Format(format, index);
if (slotsToCheck.All(x => x.name != name))
return name;
var slotName = string.Format(format, index);
if (slotsToCheck.All(x => x.name != slotName))
return slotName;
name = string.Format(format, index++);
slotName = string.Format(format, index++);
while (slotsToCheck.Any(x => x.name == name));
while (slotsToCheck.Any(x => x.name == slotName));
return name;
return slotName;
{
if (!generationMode.IsPreview())
return;
foreach (var inputSlot in inputSlots)
{
if (inputSlot.edges.Count > 0)
continue;
var defaultForSlot = GetSlotDefaultValue(inputSlot.name);
defaultForSlot.GeneratePropertyBlock(visitor, generationMode);
}
}
{}
public virtual void GeneratePropertyUsages(ShaderGenerator visitor, GenerationMode generationMode)
{

continue;
var defaultForSlot = GetSlotDefaultValue(inputSlot.name);
defaultForSlot.GeneratePropertyUsages(visitor, generationMode);
if (defaultForSlot != null)
defaultForSlot.GeneratePropertyUsages(visitor, generationMode);
}
}

else
{
var defaultValue = GetSlotDefaultValue(inputSlot.name);
Debug.LogFormat("Searching for {0} on {1}", inputSlot.name, this);
}
protected void RemoveSlotsNameNotMatching(string[] slotNames)
{
var invalidSlots = slots.Select(x => x.name).Except(slotNames);
foreach (var invalidSlot in invalidSlots)
{
Debug.LogWarningFormat("Removing Invalid Slot: {0}", invalidSlot);
RemoveSlot(this[invalidSlot]);
}
var invalidSlotDefaults = m_SlotDefaultValues.Select(x => x.slotName).Except(slotNames);
foreach (var invalidSlot in invalidSlotDefaults.ToList())
{
Debug.LogWarningFormat("Removing Invalid Slot Default: {0}", invalidSlot);
m_SlotDefaultValues.RemoveAll(x => x.slotName == invalidSlot);
}
}
}
}

4
UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/BlendNode.cs


[Title("Art/Blend Node")]
class BlendNode : Function2Input, IGeneratesFunction
{
public override void Init()
public override void OnCreate()
base.Init();
base.OnCreate();
}
public enum Operation

4
UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/ClampNode.cs


[Title("Math/Clamp Node")]
class ClampNode : Function3Input, IGeneratesFunction
{
public override void Init()
public override void OnCreate()
base.Init();
base.OnCreate();;
}
protected override string GetFunctionName() {return "unity_clamp_" + precision; }

18
UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/ColorNode.cs


private const string kOutputSlotName = "Color";
public override void Init()
public override void OnCreate()
base.Init();
base.OnCreate();
AddSlot(new Slot(SlotType.OutputSlot, kOutputSlotName));
}
public override void OnEnable()
{
base.OnEnable();
AddSlot(new MaterialGraphSlot(new Slot(SlotType.OutputSlot, kOutputSlotName), null));
}
public override PropertyType propertyType

public override void GeneratePropertyBlock(PropertyGenerator visitor, GenerationMode generationMode)
{
if (HasBoundProperty() || !generationMode.IsPreview())
return;
visitor.AddShaderProperty(new ColorPropertyChunk(GetPropertyName(), GetPropertyName(), m_Color, true));
}
{}
public override string GetOutputVariableNameForSlot(Slot s, GenerationMode generationMode)
{

4
UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/ColorizeNode.cs


[SerializeField]
private float m_Contrast = 1.0f;
public override void Init()
public override void OnCreate()
base.Init();
base.OnCreate();
}
protected override string GetFunctionName() {return ""; }

4
UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/CombineNode.cs


[Title("Art/Combine Node")]
class CombineNode : Function2Input, IGeneratesFunction
{
public override void Init()
public override void OnCreate()
base.Init();
base.OnCreate();
}
// Based on information from:

4
UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/DivNode.cs


[Title("Math/Div Node")]
class DivNode : Function2Input, IGeneratesFunction
{
public override void Init()
public override void OnCreate()
base.Init();
base.OnCreate();;
}
protected override string GetFunctionName() {return "unity_div_" + precision; }

4
UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/DotNode.cs


[Title("Math/Dot Node")]
class DotNode : Function2Input
{
public override void Init()
public override void OnCreate()
base.Init();
base.OnCreate();;
}
protected override string GetFunctionName() { return "dot"; }

4
UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/FresnelNode.cs


[Title("Math/Fresnel Node")]
class FresnelNode : Function2Input, IGeneratesFunction
{
public override void Init()
public override void OnCreate()
base.Init();
base.OnCreate();;
}
protected override string GetFunctionName() { return "unity_fresnel_" + precision; }

27
UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/Function1Input.cs


{
get { return true; }
}
public override void OnEnable()
{
base.OnEnable();
AddSlot(GetInputSlot());
AddSlot(GetOutputSlot());
RemoveSlotsNameNotMatching(validSlots);
}
public override void Init()
protected string[] validSlots
{
get { return new[] {GetInputSlotName(), GetOutputSlotName()}; }
}
protected virtual MaterialGraphSlot GetInputSlot()
{
var slot = new Slot(SlotType.InputSlot, GetInputSlotName());
return new MaterialGraphSlot(slot, new SlotDefaultValue(this, slot.name, GetNewSlotDefaultValue(), SlotValueType.Vector4Dynamic));
}
protected virtual MaterialGraphSlot GetOutputSlot()
base.Init();
AddSlot(new Slot(SlotType.OutputSlot, GetOutputSlotName()));
AddSlot(new Slot(SlotType.InputSlot, GetInputSlotName()));
var slot = new Slot(SlotType.OutputSlot, GetOutputSlotName());
return new MaterialGraphSlot(slot, null);
}
protected virtual string GetInputSlotName() {return "Input"; }

59
UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/Function2Input.cs


namespace UnityEditor.MaterialGraph
{
abstract class Function2Input : BaseMaterialNode, IGeneratesBodyCode
public abstract class Function2Input : BaseMaterialNode, IGeneratesBodyCode
public override bool hasPreview { get { return true; } }
public override bool hasPreview
{
get { return true; }
}
public override void OnEnable()
{
base.OnEnable();
AddSlot(GetInputSlot1());
AddSlot(GetInputSlot2());
AddSlot(GetOutputSlot());
RemoveSlotsNameNotMatching(validSlots);
}
protected string[] validSlots
{
get { return new[] {GetInputSlot1Name(), GetInputSlot2Name(), GetOutputSlotName()}; }
}
protected virtual MaterialGraphSlot GetInputSlot1()
{
var slot = new Slot(SlotType.InputSlot, GetInputSlot1Name());
return new MaterialGraphSlot(slot, new SlotDefaultValue(this, slot.name, GetNewSlotDefaultValue(), SlotValueType.Vector4Dynamic));
}
protected virtual MaterialGraphSlot GetInputSlot2()
{
var slot = new Slot(SlotType.InputSlot, GetInputSlot2Name());
return new MaterialGraphSlot(slot, new SlotDefaultValue(this, slot.name, GetNewSlotDefaultValue(), SlotValueType.Vector4Dynamic));
}
protected virtual MaterialGraphSlot GetOutputSlot()
{
var slot = new Slot(SlotType.OutputSlot, GetOutputSlotName());
return new MaterialGraphSlot(slot, null);
}
protected virtual string GetInputSlot1Name()
{
return "Input1";
}
public override void Init()
protected virtual string GetInputSlot2Name()
base.Init();
AddSlot(new Slot(SlotType.OutputSlot, GetOutputSlotName()));
AddSlot(new Slot(SlotType.InputSlot, GetInputSlot1Name()));
AddSlot(new Slot(SlotType.InputSlot, GetInputSlot2Name()));
return "Input2";
protected virtual string GetInputSlot1Name() {return "Input1"; }
protected virtual string GetInputSlot2Name() {return "Input2"; }
protected virtual string GetOutputSlotName() {return "Output"; }
protected virtual string GetOutputSlotName()
{
return "Output";
}
protected abstract string GetFunctionName();

74
UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/Function3Input.cs


using System.Linq;
abstract class Function3Input : BaseMaterialNode, IGeneratesBodyCode
internal abstract class Function3Input : BaseMaterialNode, IGeneratesBodyCode
public override bool hasPreview { get { return true; } }
public override bool hasPreview
{
get { return true; }
}
public override void OnEnable()
{
base.OnEnable();
AddSlot(GetInputSlot1());
AddSlot(GetInputSlot2());
AddSlot(GetInputSlot3());
AddSlot(GetOutputSlot());
RemoveSlotsNameNotMatching(validSlots);
}
protected string[] validSlots
{
get { return new[] {GetInputSlot1Name(), GetInputSlot2Name(), GetInputSlot3Name(), GetOutputSlotName()}; }
}
public override void Init()
protected virtual MaterialGraphSlot GetInputSlot1()
base.Init();
AddSlot(new Slot(SlotType.OutputSlot, GetOutputSlotName()));
AddSlot(new Slot(SlotType.InputSlot, GetInputSlot1Name()));
AddSlot(new Slot(SlotType.InputSlot, GetInputSlot2Name()));
AddSlot(new Slot(SlotType.InputSlot, GetInputSlot3Name()));
var slot = new Slot(SlotType.InputSlot, GetInputSlot1Name());
return new MaterialGraphSlot(slot, new SlotDefaultValue(this, slot.name, GetNewSlotDefaultValue(), SlotValueType.Vector4Dynamic));
protected virtual string GetInputSlot1Name() { return "Input1"; }
protected virtual string GetInputSlot2Name() { return "Input2"; }
protected virtual string GetInputSlot3Name() { return "Input3"; }
protected virtual string GetOutputSlotName() { return "Output"; }
protected virtual MaterialGraphSlot GetInputSlot2()
{
var slot = new Slot(SlotType.InputSlot, GetInputSlot2Name());
return new MaterialGraphSlot(slot, new SlotDefaultValue(this, slot.name, GetNewSlotDefaultValue(), SlotValueType.Vector4Dynamic));
}
protected virtual MaterialGraphSlot GetInputSlot3()
{
var slot = new Slot(SlotType.InputSlot, GetInputSlot3Name());
return new MaterialGraphSlot(slot, new SlotDefaultValue(this, slot.name, GetNewSlotDefaultValue(), SlotValueType.Vector4Dynamic));
}
protected virtual MaterialGraphSlot GetOutputSlot()
{
var slot = new Slot(SlotType.OutputSlot, GetOutputSlotName());
return new MaterialGraphSlot(slot, null);
}
protected virtual string GetInputSlot1Name()
{
return "Input1";
}
protected virtual string GetInputSlot2Name()
{
return "Input2";
}
protected virtual string GetInputSlot3Name()
{
return "Input3";
}
protected virtual string GetOutputSlotName()
{
return "Output";
}
protected abstract string GetFunctionName();

8
UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/FunctionMultiInput.cs


namespace UnityEditor.MaterialGraph
{
public abstract class FunctionMultiInput : BaseMaterialNode, IGeneratesBodyCode
/*public abstract class FunctionMultiInput : BaseMaterialNode, IGeneratesBodyCode
{
private const string kOutputSlotName = "Output";
private const string kBaseInputSlotName = "Input";

public override void Init()
public override void OnCreate()
base.Init();
base.OnCreate();
AddSlot(new Slot(SlotType.OutputSlot, kOutputSlotName));
AddSlot(new Slot(SlotType.InputSlot, GetInputSlotName(0)));

functionCall = GetFunctionName() + " (" + functionCall + ", " + inputValues[q] + ")";
return functionCall;
}
}
}*/
}

12
UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/KaleidoscopeNode.cs


public override bool hasPreview { get { return true; } }
public override void Init()
public override void OnCreate()
base.Init();
AddSlot(new Slot(SlotType.InputSlot, kPointInputName));
AddSlot(new Slot(SlotType.InputSlot, kConstant1InputName));
AddSlot(new Slot(SlotType.InputSlot, kConstant2InputName));
AddSlot(new Slot(SlotType.OutputSlot, kOutputSlotName));
base.OnCreate();
// AddSlot(new Slot(SlotType.InputSlot, kPointInputName));
//AddSlot(new Slot(SlotType.InputSlot, kConstant1InputName));
//AddSlot(new Slot(SlotType.InputSlot, kConstant2InputName));
//AddSlot(new Slot(SlotType.OutputSlot, kOutputSlotName));
}
public void GenerateNodeFunction(ShaderGenerator visitor, GenerationMode generationMode)

4
UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/LengthNode.cs


[Title("Math/Length Node")]
class LengthNode : Function1Input
{
public override void Init()
public override void OnCreate()
base.Init();
base.OnCreate();;
}
protected override string GetFunctionName() { return "length"; }

4
UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/LerpNode.cs


[Title("Math/Lerp Node")]
class LerpNode : Function3Input, IGeneratesFunction
{
public override void Init()
public override void OnCreate()
base.Init();
base.OnCreate();
}
protected override string GetFunctionName() {return "unity_lerp_" + precision; }

10
UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/MandelbrotNode.cs


public override bool hasPreview { get { return true; } }
public override void Init()
public override void OnCreate()
base.Init();
AddSlot(new Slot(SlotType.InputSlot, kPointInputName));
AddSlot(new Slot(SlotType.InputSlot, kConstantInputName));
AddSlot(new Slot(SlotType.OutputSlot, kOutputSlotName));
base.OnCreate();
//AddSlot(new Slot(SlotType.InputSlot, kPointInputName));
//AddSlot(new Slot(SlotType.InputSlot, kConstantInputName));
//AddSlot(new Slot(SlotType.OutputSlot, kOutputSlotName));
}
public void GenerateNodeFunction(ShaderGenerator visitor, GenerationMode generationMode)

4
UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/MaxNode.cs


[Title("Math/Maximum Node")]
class MaximumNode : Function2Input
{
public override void Init()
public override void OnCreate()
base.Init();
base.OnCreate();;
}
protected override string GetFunctionName() { return "max"; }

4
UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/MinNode.cs


[Title("Math/Minimum Node")]
class MinimumNode : Function2Input
{
public override void Init()
public override void OnCreate()
base.Init();
base.OnCreate();;
}
protected override string GetFunctionName() { return "min"; }

6
UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/MultiplyNode.cs


namespace UnityEditor.MaterialGraph
{
[Title("Math/Multiply Node")]
class MultiplyNode : FunctionMultiInput, IGeneratesFunction
class MultiplyNode : Function2Input, IGeneratesFunction
public override void Init()
public override void OnCreate()
base.Init();
base.OnCreate();
}
protected override string GetFunctionName() { return "unity_multiply_" + precision; }

11
UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/NormalNode.cs


{
get { return PreviewMode.Preview3D; } }
public override void Init()
public override void OnCreate()
base.Init();
base.OnCreate();
AddSlot(new Slot(SlotType.OutputSlot, kOutputSlotName));
}
public override void OnEnable()
{
base.OnEnable();
AddSlot(new MaterialGraphSlot(new Slot(SlotType.OutputSlot, kOutputSlotName), null));
}
public override string GetOutputVariableNameForSlot(Slot slot, GenerationMode generationMode)

4
UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/NormalizeNode.cs


[Title("Math/Normalize Node")]
class NormalizeNode : Function1Input
{
public override void Init()
public override void OnCreate()
base.Init();
base.OnCreate();;
}
protected override string GetFunctionName() { return "normalize"; }

4
UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/PerlinNode.cs


[SerializeField]
private float m_Frequency = 2.0f;
public override void Init()
public override void OnCreate()
base.Init();
base.OnCreate();
}
public void GenerateNodeFunction(ShaderGenerator visitor, GenerationMode generationMode)

31
UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/PixelShaderNode.cs


{
base.OnEnable();
AddSlot(new Slot(SlotType.InputSlot, kAlbedoSlotName));
AddSlot(new Slot(SlotType.InputSlot, kNormalSlotName));
AddSlot(new Slot(SlotType.InputSlot, kSpecularSlotName));
AddSlot(new Slot(SlotType.InputSlot, kEmissionSlotName));
AddSlot(new Slot(SlotType.InputSlot, kMetallicSlotName));
AddSlot(new Slot(SlotType.InputSlot, kSmoothnessSlotName));
AddSlot(new Slot(SlotType.InputSlot, kOcclusion));
AddSlot(new Slot(SlotType.InputSlot, kAlphaSlotName));
AddSlot(new MaterialGraphSlot(new Slot(SlotType.InputSlot, kAlbedoSlotName), null));
AddSlot(new MaterialGraphSlot(new Slot(SlotType.InputSlot, kNormalSlotName), null));
AddSlot(new MaterialGraphSlot(new Slot(SlotType.InputSlot, kSpecularSlotName), null));
AddSlot(new MaterialGraphSlot(new Slot(SlotType.InputSlot, kEmissionSlotName), null));
AddSlot(new MaterialGraphSlot(new Slot(SlotType.InputSlot, kMetallicSlotName), null));
AddSlot(new MaterialGraphSlot(new Slot(SlotType.InputSlot, kSmoothnessSlotName), null));
AddSlot(new MaterialGraphSlot(new Slot(SlotType.InputSlot, kOcclusion), null));
AddSlot(new MaterialGraphSlot(new Slot(SlotType.InputSlot, kAlphaSlotName), null));
// clear out slot names that do not match the slots
// we support

});
}
private void RemoveSlotsNameNotMatching(string[] slotNames)
{
var invalidSlots = slots.Select(x => x.name).Except(slotNames);
foreach (var invalidSlot in invalidSlots)
{
Debug.LogWarningFormat("Removing Invalid Slot: {0}", invalidSlot);
RemoveSlot(this[invalidSlot]);
}
}
public override void Init()
public override void OnCreate()
base.Init();
base.OnCreate();
}
private static List<BaseLightFunction> GetLightFunctions()

4
UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/PowerNode.cs


[Title("Math/Power Node")]
class PowerNode : Function2Input
{
public override void Init()
public override void OnCreate()
base.Init();
base.OnCreate();;
}
protected override string GetFunctionName() { return "pow"; }

4
UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/QuantizeNode.cs


[Title("Math/Quantize Node")]
class QuantizeNode : Function2Input, IGeneratesFunction
{
public override void Init()
public override void OnCreate()
base.Init();
base.OnCreate();;
}
protected override string GetFunctionName() {return "unity_quantize_" + precision; }

4
UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/ReflectNode.cs


[Title("Math/Reflect Node")]
class ReflectNode : Function2Input, IGeneratesFunction
{
public override void Init()
public override void OnCreate()
base.Init();
base.OnCreate();;
}
protected override string GetInputSlot1Name() {return "Normal"; }

11
UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/ScreenPosNode.cs


public override bool hasPreview { get { return true; } }
public override void Init()
public override void OnCreate()
base.Init();
AddSlot(new Slot(SlotType.OutputSlot, kOutputSlotName));
base.OnCreate();
}
public override void OnEnable()
{
base.OnEnable();
AddSlot(new MaterialGraphSlot(new Slot(SlotType.InputSlot, kOutputSlotName), null));
}
public override string GetOutputVariableNameForSlot(Slot slot, GenerationMode generationMode)

4
UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/SinNode.cs


[Title("Math/Sin Node")]
class SinNode : Function1Input
{
public override void Init()
public override void OnCreate()
base.Init();
base.OnCreate();;
}
protected override string GetFunctionName() {return "sin"; }

14
UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/SinTimeNode.cs


using UnityEditor.Graphs;
using UnityEngine;
namespace UnityEditor.MaterialGraph
{

private const string kOutputSlotName = "SinTime";
public override void Init()
public override void OnCreate()
base.Init();
name = "Sin Time";
AddSlot(new Slot(SlotType.OutputSlot, kOutputSlotName));
base.OnCreate();
name = "Sin Time";
}
public override void OnEnable()
{
base.OnEnable();
AddSlot(new MaterialGraphSlot(new Slot(SlotType.OutputSlot, kOutputSlotName), null));
}
public override bool hasPreview

41
UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/SlotDefaultValue.cs


using System;
using UnityEditor.Graphs;
using UnityEngine;
namespace UnityEditor.MaterialGraph

}*/
[Serializable]
public enum DefaultSlotType
public enum SlotValueType
Vector,
Texture
Vector4Dynamic,
Vector4,
Vector3,
Vector2,
Vector1
}
[Serializable]

get { return m_DefaultVector; }
}
[SerializeField]
private bool m_Editable;
public bool editable
[SerializeField]
private SlotValueType m_SlotValueType;
public SlotValueType slotValueType
get { return m_Editable; }
get { return m_SlotValueType; }
}
[SerializeField]

get { return m_Node.GetOutputVariableNameForNode(); }
}
public SlotDefaultValue(Vector4 value, BaseMaterialNode theNode, string theSlotName, bool isEditable)
public SlotDefaultValue(BaseMaterialNode node, string slotName, Vector4 value, SlotValueType valueType)
m_Editable = isEditable;
m_SlotName = theSlotName;
m_Node = theNode;
m_SlotValueType = valueType;
m_SlotName = slotName;
m_Node = node;
public string inputName
public void GeneratePropertyBlock(PropertyGenerator visitor, GenerationMode generationMode)
get { return nodeName + "_" + slotName; }
// no need to generate a property block.
// we can just set the uniforms.
public void GeneratePropertyBlock(PropertyGenerator visitor, GenerationMode generationMode)
public string inputName
if (!generationMode.IsPreview())
return;
visitor.AddShaderProperty(new VectorPropertyChunk(inputName, inputName, m_DefaultVector, false));
get { return nodeName + "_" + slotName; }
}
public void GeneratePropertyUsages(ShaderGenerator visitor, GenerationMode generationMode)

4
UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/SmoothStepNode.cs


[Title("Math/SmoothStep Node")]
class SmoothStepNode : Function3Input, IGeneratesFunction
{
public override void Init()
public override void OnCreate()
base.Init();
base.OnCreate();;
name = "SmoothStepNode";
}

4
UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/SplatNode.cs


[SerializeField]
private int m_SwizzleChannel;
public override void Init()
public override void OnCreate()
base.Init();
base.OnCreate();
name = "SplatNode";
m_SwizzleChannel = 0;
}

6
UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/SubGraphInputsNode.cs


{
public class SubGraphInputsNode : SubGraphIOBaseNode, IGenerateProperties
{
public override void Init()
public override void OnCreate()
base.Init();
base.OnCreate();
AddSlot(new Slot(SlotType.OutputSlot, GenerateSlotName(SlotType.OutputSlot)));
//AddSlot(new Slot(SlotType.OutputSlot, GenerateSlotName(SlotType.OutputSlot)));
}
public override void GeneratePropertyBlock(PropertyGenerator visitor, GenerationMode generationMode)

10
UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/SubGraphNode.cs


public const int kMaxSlots = 16;
public override void Init()
public override void OnCreate()
base.Init();
base.OnCreate();
name = "SubGraph";
position = new Rect(position.x, position.y, Mathf.Max(300, position.width), position.height);
}

foreach (var slot in innerOutputSlots)
{
var s = current.FirstOrDefault(n => n.name == slot.name);
if (s == null)
AddSlot(new Slot(type, slot.name, slot.title));
else
if (s != null)
// else
// AddSlot(new Slot(type, slot.name, slot.title));
}
var danglingSlots = current.Except(innerOutputSlots, (ls, rs) => ls.name == rs.name).ToArray();

6
UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/SubGraphOutputsNode.cs


{
public class SubGraphOutputsNode : SubGraphIOBaseNode
{
public override void Init()
public override void OnCreate()
base.Init();
base.OnCreate();
name = "SubGraphOutputs";
title = "Outputs";
position = new Rect(BaseMaterialGraphGUI.kDefaultNodeWidth * 8, BaseMaterialGraphGUI.kDefaultNodeHeight * 2, Mathf.Max(300, position.width), position.height);

{
AddSlot(new Slot(SlotType.InputSlot, GenerateSlotName(SlotType.InputSlot)));
//AddSlot(new Slot(SlotType.InputSlot, GenerateSlotName(SlotType.InputSlot)));
}
}
}

4
UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/SubtractNode.cs


[Title("Math/Subtract Node")]
class SubtractNode : Function2Input, IGeneratesFunction
{
public override void Init()
public override void OnCreate()
base.Init();
base.OnCreate();;
name = "SubtractNode";
}

4
UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/SwizzleNode.cs


[SerializeField]
private int[] m_SwizzleChannel = new int[4];
public override void Init()
public override void OnCreate()
base.Init();
base.OnCreate();
name = "SwizzleNode";
}

21
UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/TextureNode.cs


public override bool hasPreview { get { return false; } }
public override void Init()
public override void OnCreate()
base.Init();
AddSlot(new Slot(SlotType.OutputSlot, kOutputSlotName));
AddSlot(new Slot(SlotType.InputSlot, kUVSlotName));
base.OnCreate();
LoadTextureTypes();
}
LoadTextureTypes();
public override void OnEnable()
{
base.OnEnable();
AddSlot(new MaterialGraphSlot(new Slot(SlotType.OutputSlot, kOutputSlotName), null));
AddSlot(new MaterialGraphSlot(new Slot(SlotType.InputSlot, kUVSlotName), null));
}
private void LoadTextureTypes()

// Properties
public override void GeneratePropertyBlock(PropertyGenerator visitor, GenerationMode generationMode)
{
if (HasBoundProperty())
return;
visitor.AddShaderProperty(new TexturePropertyChunk(GetPropertyName(), GetPropertyName(), m_DefaultTexture, m_TextureType, true));
}
{}
public override void GeneratePropertyUsages(ShaderGenerator visitor, GenerationMode generationMode)
{

12
UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/TimeNode.cs


using UnityEditor.Graphs;
using UnityEngine;
namespace UnityEditor.MaterialGraph
{

private const string kOutputSlotName = "Time";
public override void Init()
public override void OnCreate()
base.Init();
base.OnCreate();
AddSlot(new Slot(SlotType.OutputSlot, kOutputSlotName));
}
public override void OnEnable()
{
base.OnEnable();
AddSlot(new MaterialGraphSlot(new Slot(SlotType.OutputSlot, kOutputSlotName), null));
}
public override string GetOutputVariableNameForSlot(Slot s, GenerationMode generationMode)

11
UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/UVNode.cs


public override bool hasPreview { get { return true; } }
public override void Init()
public override void OnCreate()
base.Init();
base.OnCreate();
AddSlot(new Slot(SlotType.OutputSlot, kOutputSlotName));
}
public override void OnEnable()
{
base.OnEnable();
AddSlot(new MaterialGraphSlot(new Slot(SlotType.OutputSlot, kOutputSlotName), null));
}
public static void StaticGenerateVertexToFragmentBlock(ShaderGenerator visitor, GenerationMode generationMode)

4
UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/UnpackNormalNode.cs


get { return false; }
}
public override void Init()
public override void OnCreate()
base.Init();
base.OnCreate();;
name = "UnpackNormalNode";
}

18
UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/Vector1Node.cs


private const string kOutputSlotName = "Value";
public override void Init()
public override void OnCreate()
base.Init();
base.OnCreate();
AddSlot(new Slot(SlotType.OutputSlot, kOutputSlotName));
}
public override void OnEnable()
{
base.OnEnable();
AddSlot(new MaterialGraphSlot(new Slot(SlotType.OutputSlot, kOutputSlotName), null));
}
public override PropertyType propertyType

public override void GeneratePropertyBlock(PropertyGenerator visitor, GenerationMode generationMode)
{
if (HasBoundProperty() || !generationMode.IsPreview())
return;
visitor.AddShaderProperty(new FloatPropertyChunk(GetPropertyName(), GetPropertyName(), m_Value, true));
}
{}
public override string GetOutputVariableNameForSlot(Slot s, GenerationMode generationMode)
{

22
UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/Vector4Node.cs


[Title("Generate/Vector 4 Node")]
class Vector4Node : PropertyNode, IGeneratesBodyCode
{
private const string kOutputSlotName = "Value";
public override void Init()
public override void OnCreate()
base.Init();
name = "V4Node";
AddSlot(new Slot(SlotType.OutputSlot, "Value"));
base.OnCreate();
name = "V4Node";
}
public override void OnEnable()
{
base.OnEnable();
AddSlot(new MaterialGraphSlot(new Slot(SlotType.OutputSlot, kOutputSlotName), null));
}
public override PropertyType propertyType

public override void GeneratePropertyBlock(PropertyGenerator visitor, GenerationMode generationMode)
{
if (HasBoundProperty() || !generationMode.IsPreview())
return;
visitor.AddShaderProperty(new VectorPropertyChunk(GetPropertyName(), GetPropertyName(), m_Value, true));
}
{}
public override string GetOutputVariableNameForSlot(Slot s, GenerationMode generationMode)
{

11
UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/ViewDirectionNode.cs


get { return PreviewMode.Preview3D; }
}
public override void Init()
public override void OnCreate()
base.Init();
base.OnCreate();
AddSlot(new Slot(SlotType.OutputSlot, kOutputSlotName));
}
public override void OnEnable()
{
base.OnEnable();
AddSlot(new MaterialGraphSlot(new Slot(SlotType.OutputSlot, kOutputSlotName), null));
}
public override string GetOutputVariableNameForSlot(Slot slot, GenerationMode generationMode)

11
UnityProject/Assets/UnityShaderEditor/Editor/Source/Nodes/WorldPosNode.cs


public override bool hasPreview { get { return true; } }
public override void Init()
public override void OnCreate()
base.Init();
base.OnCreate();
AddSlot(new Slot(SlotType.OutputSlot, kOutputSlotName));
}
public override void OnEnable()
{
base.OnEnable();
AddSlot(new MaterialGraphSlot(new Slot(SlotType.OutputSlot, kOutputSlotName), null));
}
public override string GetOutputVariableNameForSlot(Slot slot, GenerationMode generationMode)

2
UnityProject/Assets/UnityShaderEditor/Editor/Source/PixelGraph.cs


{
m_PixelMasterNode = CreateInstance<PixelShaderNode>();
m_PixelMasterNode.hideFlags = HideFlags.HideInHierarchy;
m_PixelMasterNode.Init();
m_PixelMasterNode.OnCreate();
m_PixelMasterNode.position = new Rect(700, pixelMasterNode.position.y, pixelMasterNode.position.width, pixelMasterNode.position.height);
AddNode(m_PixelMasterNode);
}

正在加载...
取消
保存