Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Gradient Nodes #310

Merged
merged 14 commits into from
Apr 20, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System;
using System.Collections.Generic;
using UnityEditor.Graphing;
using UnityEditor.ShaderGraph.Drawing.Slots;
using UnityEngine;
Expand Down Expand Up @@ -71,14 +72,14 @@ public override void AddDefaultProperty(PropertyCollector properties, Generation
public override SlotValueType valueType { get { return SlotValueType.Boolean; } }
public override ConcreteSlotValueType concreteValueType { get { return ConcreteSlotValueType.Boolean; } }

public override PreviewProperty GetPreviewProperty(string name)
public override void GetPreviewProperties(List<PreviewProperty> properties, string name)
{
var pp = new PreviewProperty(PropertyType.Boolean)
{
name = name,
booleanValue = value
};
return pp;
properties.Add(pp);
}

public override void CopyValuesFrom(MaterialSlot foundSlot)
Expand Down
5 changes: 3 additions & 2 deletions com.unity.shadergraph/Editor/Data/Graphs/ColorMaterialSlot.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System;
using System.Collections.Generic;
using UnityEditor.Graphing;
using UnityEditor.ShaderGraph.Drawing.Slots;
using UnityEngine;
Expand Down Expand Up @@ -55,14 +56,14 @@ public override void AddDefaultProperty(PropertyCollector properties, Generation
properties.AddShaderProperty(property);
}

public override PreviewProperty GetPreviewProperty(string name)
public override void GetPreviewProperties(List<PreviewProperty> properties, string name)
{
var pp = new PreviewProperty(PropertyType.Color)
{
name = name,
colorValue = new Color(value.x, value.x, value.z, value.w),
};
return pp;
properties.Add(pp);
}
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System;
using System.Collections.Generic;
using UnityEditor.Graphing;
using UnityEditor.ShaderGraph.Drawing.Slots;
using UnityEngine;
Expand Down Expand Up @@ -54,14 +55,14 @@ public override void AddDefaultProperty(PropertyCollector properties, Generation
properties.AddShaderProperty(property);
}

public override PreviewProperty GetPreviewProperty(string name)
public override void GetPreviewProperties(List<PreviewProperty> properties, string name)
{
var pp = new PreviewProperty(PropertyType.Color)
{
name = name,
colorValue = new Color(value.x, value.y, value.z, 1),
};
return pp;
properties.Add(pp);
}
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System;
using System.Collections.Generic;
using UnityEditor.Graphing;
using UnityEditor.ShaderGraph.Drawing.Slots;
using UnityEngine;
Expand Down Expand Up @@ -58,14 +59,14 @@ public override void AddDefaultProperty(PropertyCollector properties, Generation
properties.AddShaderProperty(prop);
}

public override PreviewProperty GetPreviewProperty(string name)
public override void GetPreviewProperties(List<PreviewProperty> properties, string name)
{
var pp = new PreviewProperty(PropertyType.Cubemap)
{
name = name,
cubemapValue = cubemap
};
return pp;
properties.Add(pp);
}

public override void CopyValuesFrom(MaterialSlot foundSlot)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System;
using System.Collections.Generic;
using System.Linq;
using UnityEditor.Graphing;
using UnityEditor.ShaderGraph.Drawing.Slots;
Expand Down Expand Up @@ -63,16 +64,16 @@ public void SetConcreteType(ConcreteSlotValueType valueType)
m_ConcreteValueType = valueType;
}

public override PreviewProperty GetPreviewProperty(string name)
{
var propType = ConvertConcreteSlotValueTypeToPropertyType(concreteValueType);
public override void GetPreviewProperties(List<PreviewProperty> properties, string name)
{
var propType = ConvertConcreteSlotValueTypeToPropertyType(concreteValueType);
var pp = new PreviewProperty(propType) { name = name };
if (propType == PropertyType.Vector1)
pp.floatValue = value.m00;
else
pp.vector4Value = new Vector4(value.m00, value.m01, value.m02, value.m03);
return pp;
}
properties.Add(pp);
}

protected override string ConcreteSlotValueAsVariable(AbstractMaterialNode.OutputPrecision precision)
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System;
using System.Collections.Generic;
using System.Linq;
using UnityEditor.Graphing;
using UnityEditor.ShaderGraph.Drawing.Slots;
Expand Down Expand Up @@ -63,15 +64,15 @@ public void SetConcreteType(ConcreteSlotValueType valueType)
m_ConcreteValueType = valueType;
}

public override PreviewProperty GetPreviewProperty(string name)
public override void GetPreviewProperties(List<PreviewProperty> properties, string name)
{
var propType = ConvertConcreteSlotValueTypeToPropertyType(concreteValueType);
var pp = new PreviewProperty(propType) { name = name };
if (propType == PropertyType.Vector1)
pp.floatValue = value.x;
else
pp.vector4Value = new Vector4(value.x, value.y, value.z, value.w);
return pp;
properties.Add(pp);
}

protected override string ConcreteSlotValueAsVariable(AbstractMaterialNode.OutputPrecision precision)
Expand Down
162 changes: 162 additions & 0 deletions com.unity.shadergraph/Editor/Data/Graphs/GradientInputMaterialSlot.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,162 @@
using System;
using System.Collections.Generic;
using UnityEditor.Graphing;
using UnityEditor.ShaderGraph.Drawing.Slots;
using UnityEngine;
using UnityEngine.Experimental.UIElements;

namespace UnityEditor.ShaderGraph
{
[Serializable]
public class GradientInputMaterialSlot : GradientMaterialSlot, IMaterialSlotHasValue<Gradient>
{
[SerializeField]
Gradient m_Value = new Gradient();

[SerializeField]
Gradient m_DefaultValue;

public GradientInputMaterialSlot()
{
}

public GradientInputMaterialSlot(
int slotId,
string displayName,
string shaderOutputName,
ShaderStage shaderStage = ShaderStage.Dynamic,
bool hidden = false)
: base(slotId, displayName, shaderOutputName, SlotType.Input, shaderStage, hidden)
{
}

public Gradient value
{
get { return m_Value; }
set { m_Value = value; }
}

public Gradient defaultValue { get { return m_DefaultValue; } }

public override VisualElement InstantiateControl()
{
return new GradientSlotControlView(this);
}

public override string GetDefaultValue(GenerationMode generationMode)
{
var matOwner = owner as AbstractMaterialNode;
if (matOwner == null)
throw new Exception(string.Format("Slot {0} either has no owner, or the owner is not a {1}", this, typeof(AbstractMaterialNode)));

return string.Format("Unity{0}()", matOwner.GetVariableNameForSlot(id));
}

public override void AddDefaultProperty(PropertyCollector properties, GenerationMode generationMode)
{
var matOwner = owner as AbstractMaterialNode;
if (matOwner == null)
throw new Exception(string.Format("Slot {0} either has no owner, or the owner is not a {1}", this, typeof(AbstractMaterialNode)));

if(generationMode == GenerationMode.Preview)
{
properties.AddShaderProperty(new Vector1ShaderProperty()
{
overrideReferenceName = string.Format("{0}_Type", matOwner.GetVariableNameForSlot(id)),
value = (int)value.mode,
generatePropertyBlock = false
});

properties.AddShaderProperty(new Vector1ShaderProperty()
{
overrideReferenceName = string.Format("{0}_ColorsLength", matOwner.GetVariableNameForSlot(id)),
value = value.colorKeys.Length,
generatePropertyBlock = false
});

properties.AddShaderProperty(new Vector1ShaderProperty()
{
overrideReferenceName = string.Format("{0}_AlphasLength", matOwner.GetVariableNameForSlot(id)),
value = value.alphaKeys.Length,
generatePropertyBlock = false
});

for(int i = 0; i < 8; i++)
{
properties.AddShaderProperty(new Vector4ShaderProperty()
{
overrideReferenceName = string.Format("{0}_ColorKey{1}", matOwner.GetVariableNameForSlot(id), i),
value = i < value.colorKeys.Length ? GradientUtils.ColorKeyToVector(value.colorKeys[i]) : Vector4.zero,
generatePropertyBlock = false
});
}

for(int i = 0; i < 8; i++)
{
properties.AddShaderProperty(new Vector4ShaderProperty()
{
overrideReferenceName = string.Format("{0}_AlphaKey{1}", matOwner.GetVariableNameForSlot(id), i),
value = i < value.alphaKeys.Length ? GradientUtils.AlphaKeyToVector(value.alphaKeys[i]) : Vector2.zero,
generatePropertyBlock = false
});
}
}

var prop = new GradientShaderProperty();
prop.overrideReferenceName = matOwner.GetVariableNameForSlot(id);
prop.generatePropertyBlock = false;
prop.value = value;

if(generationMode == GenerationMode.Preview)
prop.OverrideMembers(matOwner.GetVariableNameForSlot(id));

properties.AddShaderProperty(prop);
}

public override void GetPreviewProperties(List<PreviewProperty> properties, string name)
{
properties.Add(new PreviewProperty(PropertyType.Vector1)
{
name = string.Format("{0}_Type", name),
floatValue = (int)value.mode
});

properties.Add(new PreviewProperty(PropertyType.Vector1)
{
name = string.Format("{0}_ColorsLength", name),
floatValue = value.colorKeys.Length
});

properties.Add(new PreviewProperty(PropertyType.Vector1)
{
name = string.Format("{0}_AlphasLength", name),
floatValue = value.alphaKeys.Length
});

for(int i = 0; i < 8; i++)
{
properties.Add(new PreviewProperty(PropertyType.Vector4)
{
name = string.Format("{0}_ColorKey{1}", name, i),
vector4Value = i < value.colorKeys.Length ? GradientUtils.ColorKeyToVector(value.colorKeys[i]) : Vector4.zero
});
}

for(int i = 0; i < 8; i++)
{
properties.Add(new PreviewProperty(PropertyType.Vector2)
{
name = string.Format("{0}_AlphaKey{1}", name, i),
vector4Value = i < value.alphaKeys.Length ? GradientUtils.AlphaKeyToVector(value.alphaKeys[i]) : Vector2.zero
});
}
}

public override void CopyValuesFrom(MaterialSlot foundSlot)
{
var slot = foundSlot as GradientInputMaterialSlot;
if (slot != null)
value = slot.value;
}
}
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

35 changes: 35 additions & 0 deletions com.unity.shadergraph/Editor/Data/Graphs/GradientMaterialSlot.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
using System;
using UnityEditor.Graphing;

namespace UnityEditor.ShaderGraph
{
[Serializable]
public class GradientMaterialSlot : MaterialSlot
{
public GradientMaterialSlot()
{
}

public GradientMaterialSlot(
int slotId,
string displayName,
string shaderOutputName,
SlotType slotType,
ShaderStage shaderStage = ShaderStage.Dynamic,
bool hidden = false)
: base(slotId, displayName, shaderOutputName, slotType, shaderStage, hidden)
{
}

public override SlotValueType valueType { get { return SlotValueType.Gradient; } }
public override ConcreteSlotValueType concreteValueType { get { return ConcreteSlotValueType.Gradient; } }

public override void AddDefaultProperty(PropertyCollector properties, GenerationMode generationMode)
{
}

public override void CopyValuesFrom(MaterialSlot foundSlot)
{
}
}
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading