|
|
|
|
|
|
using UnityEngine.Graphing; |
|
|
|
|
|
|
|
namespace UnityEngine.MaterialGraph |
|
|
|
{ |
|
|
|
[Title("Input/Geometry/Vertex Normal")] |
|
|
|
public class VertexNormalNode : AbstractMaterialNode |
|
|
|
{ |
|
|
|
private const string kOutputSlotName = "XYZW"; |
|
|
|
private const string kOutputSlotNameXYZ = "XYZ"; |
|
|
|
private const string kOutputSlotNameX = "X"; |
|
|
|
private const string kOutputSlotNameY = "Y"; |
|
|
|
private const string kOutputSlotNameZ = "Z"; |
|
|
|
private const string kOutputSlotNameW = "W"; |
|
|
|
|
|
|
|
public const int OutputSlotId = 0; |
|
|
|
public const int OutputSlotIdXYZ = 1; |
|
|
|
public const int OutputSlotIdX = 2; |
|
|
|
public const int OutputSlotIdY = 3; |
|
|
|
public const int OutputSlotIdZ = 4; |
|
|
|
public const int OutputSlotIdW = 5; |
|
|
|
|
|
|
|
public VertexNormalNode() |
|
|
|
{ |
|
|
|
name = "VertexNormal"; |
|
|
|
UpdateNodeAfterDeserialization(); |
|
|
|
} |
|
|
|
|
|
|
|
public sealed override void UpdateNodeAfterDeserialization() |
|
|
|
{ |
|
|
|
AddSlot(new Vector4MaterialSlot(OutputSlotId, kOutputSlotName, kOutputSlotName, SlotType.Output, Vector4.zero)); |
|
|
|
AddSlot(new Vector3MaterialSlot(OutputSlotIdXYZ, kOutputSlotNameXYZ, kOutputSlotNameXYZ, SlotType.Output, Vector4.zero)); |
|
|
|
AddSlot(new Vector1MaterialSlot(OutputSlotIdX, kOutputSlotNameX, kOutputSlotNameX, SlotType.Output,0)); |
|
|
|
AddSlot(new Vector1MaterialSlot(OutputSlotIdY, kOutputSlotNameY, kOutputSlotNameY, SlotType.Output,0)); |
|
|
|
AddSlot(new Vector1MaterialSlot(OutputSlotIdZ, kOutputSlotNameZ, kOutputSlotNameZ, SlotType.Output, 0)); |
|
|
|
AddSlot(new Vector1MaterialSlot(OutputSlotIdW, kOutputSlotNameW, kOutputSlotNameW, SlotType.Output, 0)); |
|
|
|
|
|
|
|
RemoveSlotsNameNotMatching(validSlots); |
|
|
|
} |
|
|
|
|
|
|
|
protected int[] validSlots |
|
|
|
{ |
|
|
|
get { return new[] { OutputSlotId, OutputSlotIdXYZ, OutputSlotIdX, OutputSlotIdY, OutputSlotIdZ, OutputSlotIdW }; } |
|
|
|
} |
|
|
|
|
|
|
|
public override string GetVariableNameForSlot(int slotId) |
|
|
|
{ |
|
|
|
switch (slotId) |
|
|
|
{ |
|
|
|
case OutputSlotIdXYZ: |
|
|
|
return "v.normal.xyz"; |
|
|
|
case OutputSlotIdX: |
|
|
|
return "v.normal.x"; |
|
|
|
case OutputSlotIdY: |
|
|
|
return "v.normal.y"; |
|
|
|
case OutputSlotIdZ: |
|
|
|
return "v.normal.z"; |
|
|
|
case OutputSlotIdW: |
|
|
|
return "v.normal.w"; |
|
|
|
default: |
|
|
|
return "v.normal"; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |