浏览代码

Updated matrix mul and transpose (hardcoded to 3x3)

/main
Matt Dean 7 年前
当前提交
3bb72fa1
共有 4 个文件被更改,包括 114 次插入25 次删除
  1. 2
      MaterialGraphProject/Assets/Matt/Test.ShaderGraph
  2. 4
      MaterialGraphProject/Assets/Matt/Test.ShaderGraph.meta
  3. 112
      MaterialGraphProject/Assets/UnityShaderEditor/Runtime/Nodes/MatrixMultiplyNode.cs
  4. 21
      MaterialGraphProject/Assets/UnityShaderEditor/Runtime/Nodes/MatrixTransposeNode.cs

2
MaterialGraphProject/Assets/Matt/Test.ShaderGraph
文件差异内容过多而无法显示
查看文件

4
MaterialGraphProject/Assets/Matt/Test.ShaderGraph.meta


fileFormatVersion: 2
guid: 62568f909ca80d342836892f01cb06c9
timeCreated: 1495663356
guid: fd03b3a3f54f741498f9bea81e951ebb
timeCreated: 1495668190
licenseType: Pro
ScriptedImporter:
userData:

112
MaterialGraphProject/Assets/UnityShaderEditor/Runtime/Nodes/MatrixMultiplyNode.cs


namespace UnityEngine.MaterialGraph
{
[Title("Math/Matrix/Multiply")]
public class MatrixMultiplyNode : Function2Input, IGeneratesFunction
[Title("Math/Matrix/MultiplyMatrix")]
public class MatrixMultiplyNode : AbstractMaterialNode, IGeneratesBodyCode, IGeneratesFunction
protected const string kInputSlot1ShaderName = "Input1";
protected const string kInputSlot2ShaderName = "Input2";
protected const string kOutputSlotShaderName = "Output";
public const int InputSlot1Id = 0;
public const int InputSlot2Id = 1;
public const int OutputSlotId = 2;
public override bool hasPreview
{
get { return false; }
}
name = "MatrixMultiply";
name = "MultiplyMatrix";
UpdateNodeAfterDeserialization();
protected override string GetFunctionName()
protected string GetFunctionName()
public void GenerateNodeFunction(ShaderGenerator visitor, GenerationMode generationMode)
public sealed override void UpdateNodeAfterDeserialization()
var outputString = new ShaderGenerator();
outputString.AddShaderChunk(GetFunctionPrototype("arg1", "arg2"), false);
outputString.AddShaderChunk("{", false);
outputString.Indent();
outputString.AddShaderChunk("return mul(arg1, arg2);", false);
outputString.Deindent();
outputString.AddShaderChunk("}", false);
visitor.AddShaderChunk(outputString.GetShaderString(0), true);
AddSlot(GetInputSlot1());
AddSlot(GetInputSlot2());
AddSlot(GetOutputSlot());
RemoveSlotsNameNotMatching(validSlots);
public override bool hasPreview
protected int[] validSlots
get { return false; }
get { return new[] { InputSlot1Id, InputSlot2Id, OutputSlotId }; }
/*protected override MaterialSlot GetInputSlot1()
protected MaterialSlot GetInputSlot1()
protected override MaterialSlot GetInputSlot2()
protected MaterialSlot GetInputSlot2()
protected override MaterialSlot GetOutputSlot()
protected MaterialSlot GetOutputSlot()
}*/
}
protected virtual string GetInputSlot1Name()
{
return "Input1";
}
protected virtual string GetInputSlot2Name()
{
return "Input2";
}
protected string GetOutputSlotName()
{
return "Output";
}
protected string GetFunctionPrototype(string arg1Name, string arg2Name)
{
return "inline " + precision + outputDimension + " " + GetFunctionName() + " ("
+ precision + input1Dimension + " " + arg1Name + ", "
+ precision + input2Dimension + " " + arg2Name + ")";
}
public void GenerateNodeCode(ShaderGenerator visitor, GenerationMode generationMode)
{
NodeUtils.SlotConfigurationExceptionIfBadConfiguration(this, new[] { InputSlot1Id, InputSlot2Id }, new[] { OutputSlotId });
string input1Value = GetSlotValue(InputSlot1Id, generationMode);
string input2Value = GetSlotValue(InputSlot2Id, generationMode);
visitor.AddShaderChunk(precision + outputDimension + " " + GetVariableNameForSlot(OutputSlotId) + " = " + GetFunctionCallBody(input1Value, input2Value) + ";", true);
}
protected string GetFunctionCallBody(string input1Value, string input2Value)
{
return GetFunctionName() + " (" + input1Value + ", " + input2Value + ")";
}
public string outputDimension
{
get { return ConvertConcreteSlotValueTypeToString(FindInputSlot<MaterialSlot>(InputSlot2Id).concreteValueType); }
}
private string input1Dimension
{
get { return ConvertConcreteSlotValueTypeToString(FindInputSlot<MaterialSlot>(InputSlot1Id).concreteValueType); }
}
private string input2Dimension
{
get { return ConvertConcreteSlotValueTypeToString(FindInputSlot<MaterialSlot>(InputSlot2Id).concreteValueType); }
}
public void GenerateNodeFunction(ShaderGenerator visitor, GenerationMode generationMode)
{
var outputString = new ShaderGenerator();
outputString.AddShaderChunk(GetFunctionPrototype("arg1", "arg2"), false);
outputString.AddShaderChunk("{", false);
outputString.Indent();
outputString.AddShaderChunk("return mul(arg1, arg2);", false);
outputString.Deindent();
outputString.AddShaderChunk("}", false);
visitor.AddShaderChunk(outputString.GetShaderString(0), true);
}
}
}

21
MaterialGraphProject/Assets/UnityShaderEditor/Runtime/Nodes/MatrixTransposeNode.cs


using UnityEngine.Graphing;
[Title("Matrix/Transpose Node")]
[Title("Math/Matrix/TransposeMatrix")]
name = "MatrixTranspose";
name = "TransposeMatrix";
}
public override bool hasPreview
{
get { return false; }
}
public void GenerateNodeFunction(ShaderGenerator visitor, GenerationMode generationMode)

outputString.AddShaderChunk("}", false);
visitor.AddShaderChunk(outputString.GetShaderString(0), true);
}
protected override MaterialSlot GetInputSlot()
{
return new MaterialSlot(InputSlotId, GetInputSlotName(), kInputSlotShaderName, SlotType.Input, SlotValueType.Matrix3, Vector4.zero);
}
protected override MaterialSlot GetOutputSlot()
{
return new MaterialSlot(OutputSlotId, GetOutputSlotName(), kOutputSlotShaderName, SlotType.Output, SlotValueType.Matrix3, Vector4.zero);
}
}
}
正在加载...
取消
保存