summaryrefslogtreecommitdiff
path: root/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2020-10-23 13:08:43 +0800
committerchai <chaifix@163.com>2020-10-23 13:08:43 +0800
commitb82da95b5181ac8bbae38efb13e950d5e88a4caa (patch)
tree48a6f3269276484bbc7cfc95f0651f40a2176aa1 /Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex
parent917e9e0b320775634dc2e710f7deac74fd0822f0 (diff)
*移动amplify shader editor到third party目录
Diffstat (limited to 'Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex')
-rw-r--r--Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/BillboardNode.cs123
-rw-r--r--Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/BillboardNode.cs.meta12
-rw-r--r--Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/BitangentVertexDataNode.cs37
-rw-r--r--Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/BitangentVertexDataNode.cs.meta12
-rw-r--r--Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/ColorVertexDataNode.cs18
-rw-r--r--Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/ColorVertexDataNode.cs.meta12
-rw-r--r--Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/NormalVertexDataNode.cs44
-rw-r--r--Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/NormalVertexDataNode.cs.meta12
-rw-r--r--Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/ObjectScaleNode.cs75
-rw-r--r--Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/ObjectScaleNode.cs.meta12
-rw-r--r--Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/OutlineNode.cs366
-rw-r--r--Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/OutlineNode.cs.meta12
-rw-r--r--Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/PosVertexDataNode.cs138
-rw-r--r--Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/PosVertexDataNode.cs.meta12
-rw-r--r--Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/TangentSignVertexDataNode.cs23
-rw-r--r--Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/TangentSignVertexDataNode.cs.meta12
-rw-r--r--Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/TangentVertexDataNode.cs120
-rw-r--r--Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/TangentVertexDataNode.cs.meta12
-rw-r--r--Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/Tessellation.meta9
-rw-r--r--Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/Tessellation/DistanceBasedTessNode.cs30
-rw-r--r--Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/Tessellation/DistanceBasedTessNode.cs.meta12
-rw-r--r--Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/Tessellation/EdgeLengthCullTessNode.cs27
-rw-r--r--Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/Tessellation/EdgeLengthCullTessNode.cs.meta12
-rw-r--r--Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/Tessellation/EdgeLengthTessNode.cs23
-rw-r--r--Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/Tessellation/EdgeLengthTessNode.cs.meta12
-rw-r--r--Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/Tessellation/TessellationParentNode.cs29
-rw-r--r--Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/Tessellation/TessellationParentNode.cs.meta12
-rw-r--r--Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/TexCoord1VertexDataNode.cs16
-rw-r--r--Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/TexCoord1VertexDataNode.cs.meta12
-rw-r--r--Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/TexCoordVertexDataNode.cs235
-rw-r--r--Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/TexCoordVertexDataNode.cs.meta12
-rw-r--r--Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/VertexBinormalNode.cs48
-rw-r--r--Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/VertexBinormalNode.cs.meta12
-rw-r--r--Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/VertexColorNode.cs47
-rw-r--r--Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/VertexColorNode.cs.meta12
-rw-r--r--Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/VertexDataNode.cs50
-rw-r--r--Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/VertexDataNode.cs.meta12
-rw-r--r--Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/VertexTangentNode.cs50
-rw-r--r--Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/VertexTangentNode.cs.meta12
-rw-r--r--Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/VertexToFragmentNode.cs120
-rw-r--r--Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/VertexToFragmentNode.cs.meta12
41 files changed, 1868 insertions, 0 deletions
diff --git a/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/BillboardNode.cs b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/BillboardNode.cs
new file mode 100644
index 00000000..0cb8787a
--- /dev/null
+++ b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/BillboardNode.cs
@@ -0,0 +1,123 @@
+// Amplify Shader Editor - Visual Shader Editing Tool
+// Copyright (c) Amplify Creations, Lda <info@amplify.pt>
+
+using System;
+using UnityEngine;
+using UnityEditor;
+namespace AmplifyShaderEditor
+{
+ [Serializable]
+ [NodeAttributes( "Billboard", "Miscellaneous", "Calculates new Vertex positions and normals to achieve a billboard effect." )]
+ public sealed class BillboardNode : ParentNode
+ {
+ private const string ErrorMessage = "Billboard node should only be connected to vertex ports.";
+ private const string WarningMessage = "This node is a bit different from all others as it injects the necessary code into the vertex body and writes directly on the vertex position and normal.\nIt outputs a value of 0 so it can be connected directly to a vertex port.\n[Only if that port is a relative vertex offset].";
+
+ [SerializeField]
+ private BillboardType m_billboardType = BillboardType.Cylindrical;
+
+ [SerializeField]
+ private bool m_rotationIndependent = false;
+
+ private UpperLeftWidgetHelper m_upperLeftWidget = new UpperLeftWidgetHelper();
+
+ protected override void CommonInit( int uniqueId )
+ {
+ base.CommonInit( uniqueId );
+ AddOutputPort( WirePortDataType.FLOAT3, "Out" );
+ m_textLabelWidth = 115;
+ m_hasLeftDropdown = true;
+ SetAdditonalTitleText( string.Format( Constants.SubTitleTypeFormatStr, m_billboardType ) );
+ }
+
+ public override void Destroy()
+ {
+ base.Destroy();
+ m_upperLeftWidget = null;
+ }
+
+ public override void AfterCommonInit()
+ {
+ base.AfterCommonInit();
+
+ if( PaddingTitleLeft == 0 )
+ {
+ PaddingTitleLeft = Constants.PropertyPickerWidth + Constants.IconsLeftRightMargin;
+ if( PaddingTitleRight == 0 )
+ PaddingTitleRight = Constants.PropertyPickerWidth + Constants.IconsLeftRightMargin;
+ }
+ }
+
+ public override void Draw( DrawInfo drawInfo )
+ {
+ base.Draw( drawInfo );
+ m_upperLeftWidget.DrawWidget<BillboardType>( ref m_billboardType, this, OnWidgetUpdate );
+ }
+
+ private readonly Action<ParentNode> OnWidgetUpdate = ( x ) =>
+ {
+ x.SetAdditonalTitleText( string.Format( Constants.SubTitleTypeFormatStr, ( x as BillboardNode ).Type ) );
+ };
+
+ public override void DrawProperties()
+ {
+ base.DrawProperties();
+ NodeUtils.DrawPropertyGroup( ref m_propertiesFoldout, Constants.ParameterLabelStr, () =>
+ {
+ EditorGUI.BeginChangeCheck();
+ m_billboardType = (BillboardType)EditorGUILayoutEnumPopup( BillboardOpHelper.BillboardTypeStr, m_billboardType );
+ if( EditorGUI.EndChangeCheck() )
+ {
+ SetAdditonalTitleText( string.Format( Constants.SubTitleTypeFormatStr, m_billboardType ) );
+ }
+ m_rotationIndependent = EditorGUILayoutToggle( BillboardOpHelper.BillboardRotIndStr, m_rotationIndependent );
+ } );
+ EditorGUILayout.HelpBox( WarningMessage, MessageType.Warning );
+ }
+
+ public override string GenerateShaderForOutput( int outputId, ref MasterNodeDataCollector dataCollector, bool ignoreLocalvar )
+ {
+ if( dataCollector.IsFragmentCategory )
+ {
+ UIUtils.ShowMessage( UniqueId, ErrorMessage,MessageSeverity.Error );
+ return m_outputPorts[0].ErrorValue;
+ }
+ if( m_outputPorts[ 0 ].IsLocalValue( dataCollector.PortCategory ) )
+ return m_outputPorts[ 0 ].ErrorValue;
+
+ m_outputPorts[ 0 ].SetLocalValue( "0", dataCollector.PortCategory );
+ string vertexPosValue = dataCollector.IsTemplate ? dataCollector.TemplateDataCollectorInstance.GetVertexPosition( WirePortDataType.OBJECT, CurrentPrecisionType ) : "v.vertex";
+ string vertexNormalValue = dataCollector.IsTemplate ? dataCollector.TemplateDataCollectorInstance.GetVertexNormal( CurrentPrecisionType ) : "v.normal";
+ bool vertexIsFloat3 = false;
+ if( dataCollector.IsTemplate )
+ {
+ InterpDataHelper info = dataCollector.TemplateDataCollectorInstance.GetInfo( TemplateInfoOnSematics.POSITION );
+ if( info != null )
+ {
+ vertexIsFloat3 = info.VarType == WirePortDataType.FLOAT3;
+ }
+ }
+
+ BillboardOpHelper.FillDataCollector( ref dataCollector, m_billboardType, m_rotationIndependent, vertexPosValue, vertexNormalValue, vertexIsFloat3 );
+
+ return "0";
+ }
+
+ public override void ReadFromString( ref string[] nodeParams )
+ {
+ base.ReadFromString( ref nodeParams );
+ m_billboardType = (BillboardType)Enum.Parse( typeof( BillboardType ), GetCurrentParam( ref nodeParams ) );
+ m_rotationIndependent = Convert.ToBoolean( GetCurrentParam( ref nodeParams ) );
+ }
+
+ public override void WriteToString( ref string nodeInfo, ref string connectionsInfo )
+ {
+ base.WriteToString( ref nodeInfo, ref connectionsInfo );
+ IOUtils.AddFieldValueToString( ref nodeInfo, m_billboardType );
+ IOUtils.AddFieldValueToString( ref nodeInfo, m_rotationIndependent );
+ SetAdditonalTitleText( string.Format( Constants.SubTitleTypeFormatStr, m_billboardType ) );
+ }
+
+ public BillboardType Type { get { return m_billboardType; } }
+ }
+}
diff --git a/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/BillboardNode.cs.meta b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/BillboardNode.cs.meta
new file mode 100644
index 00000000..7b2c540b
--- /dev/null
+++ b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/BillboardNode.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 08fd3dd8f623aca42b7eb9962a89753d
+timeCreated: 1501161489
+licenseType: Store
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/BitangentVertexDataNode.cs b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/BitangentVertexDataNode.cs
new file mode 100644
index 00000000..828a4993
--- /dev/null
+++ b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/BitangentVertexDataNode.cs
@@ -0,0 +1,37 @@
+// Amplify Shader Editor - Visual Shader Editing Tool
+// Copyright (c) Amplify Creations, Lda <info@amplify.pt>
+
+namespace AmplifyShaderEditor
+{
+ [System.Serializable]
+ [NodeAttributes( "Vertex Bitangent", "Vertex Data", "Calculated bitangent vector in object space, can be used in both local vertex offset and fragment outputs. Already has tangent sign and object transform into account" )]
+ public sealed class BitangentVertexDataNode : ParentNode
+ {
+ protected override void CommonInit( int uniqueId )
+ {
+ base.CommonInit( uniqueId );
+ AddOutputVectorPorts( WirePortDataType.FLOAT3, "XYZ" );
+ m_drawPreviewAsSphere = true;
+ m_previewShaderGUID = "76873532ab67d2947beaf07151383cbe";
+ }
+
+ public override void PropagateNodeData( NodeData nodeData, ref MasterNodeDataCollector dataCollector )
+ {
+ base.PropagateNodeData( nodeData, ref dataCollector );
+ dataCollector.DirtyNormal = true;
+ }
+
+ public override string GenerateShaderForOutput( int outputId, ref MasterNodeDataCollector dataCollector, bool ignoreLocalVar )
+ {
+ if ( dataCollector.PortCategory == MasterNodePortCategory.Fragment || dataCollector.PortCategory == MasterNodePortCategory.Debug )
+ {
+ dataCollector.ForceNormal = true;
+ dataCollector.AddToInput( UniqueId, SurfaceInputs.WORLD_NORMAL, CurrentPrecisionType );
+ dataCollector.AddToInput( UniqueId, SurfaceInputs.INTERNALDATA, addSemiColon: false );
+ }
+
+ string vertexBitangent = GeneratorUtils.GenerateVertexBitangent( ref dataCollector, UniqueId, CurrentPrecisionType );
+ return GetOutputVectorItem( 0, outputId, vertexBitangent );
+ }
+ }
+}
diff --git a/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/BitangentVertexDataNode.cs.meta b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/BitangentVertexDataNode.cs.meta
new file mode 100644
index 00000000..1c5ff97a
--- /dev/null
+++ b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/BitangentVertexDataNode.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 839ecbdfc8ed4fd4d8a08ec07f7159fa
+timeCreated: 1481126958
+licenseType: Store
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/ColorVertexDataNode.cs b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/ColorVertexDataNode.cs
new file mode 100644
index 00000000..0cea1618
--- /dev/null
+++ b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/ColorVertexDataNode.cs
@@ -0,0 +1,18 @@
+// Amplify Shader Editor - Visual Shader Editing Tool
+// Copyright (c) Amplify Creations, Lda <info@amplify.pt>
+
+using UnityEngine;
+namespace AmplifyShaderEditor
+{
+ [System.Serializable]
+ [NodeAttributes( "[VS] Vertex Color", "Vertex Data", "Vertex color. Only works on Vertex Shaders ports ( p.e. Local Vertex Offset Port ).", null,KeyCode.None,true,true,"Vertex Color",typeof(VertexColorNode))]
+ public sealed class ColorVertexDataNode : VertexDataNode
+ {
+ protected override void CommonInit( int uniqueId )
+ {
+ base.CommonInit( uniqueId );
+ m_currentVertexData = "color";
+ ConvertFromVectorToColorPorts();
+ }
+ }
+}
diff --git a/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/ColorVertexDataNode.cs.meta b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/ColorVertexDataNode.cs.meta
new file mode 100644
index 00000000..b8990fe9
--- /dev/null
+++ b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/ColorVertexDataNode.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: ca76669baa9fa204b8ce5200eb07c1db
+timeCreated: 1481126959
+licenseType: Store
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/NormalVertexDataNode.cs b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/NormalVertexDataNode.cs
new file mode 100644
index 00000000..b5fc4b5f
--- /dev/null
+++ b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/NormalVertexDataNode.cs
@@ -0,0 +1,44 @@
+// Amplify Shader Editor - Visual Shader Editing Tool
+// Copyright (c) Amplify Creations, Lda <info@amplify.pt>
+
+namespace AmplifyShaderEditor
+{
+ [System.Serializable]
+ [NodeAttributes( "Vertex Normal", "Vertex Data", "Vertex normal vector in object space, can be used in both local vertex offset and fragment outputs" )]
+ public sealed class NormalVertexDataNode : VertexDataNode
+ {
+ protected override void CommonInit( int uniqueId )
+ {
+ base.CommonInit( uniqueId );
+ m_currentVertexData = "normal";
+ ChangeOutputProperties( 0, "XYZ", WirePortDataType.FLOAT3 );
+ m_outputPorts[ 4 ].Visible = false;
+ m_drawPreviewAsSphere = true;
+ m_previewShaderGUID = "6b24b06c33f9fe84c8a2393f13ab5406";
+ }
+
+ public override string GenerateShaderForOutput( int outputId, ref MasterNodeDataCollector dataCollector, bool ignoreLocalVar )
+ {
+ string vertexNormal = string.Empty;
+
+ if( dataCollector.MasterNodeCategory == AvailableShaderTypes.Template )
+ {
+ vertexNormal = dataCollector.TemplateDataCollectorInstance.GetVertexNormal( CurrentPrecisionType );
+ return GetOutputVectorItem( 0, outputId, vertexNormal );
+ }
+
+ if( dataCollector.PortCategory == MasterNodePortCategory.Fragment || dataCollector.PortCategory == MasterNodePortCategory.Debug )
+ {
+ dataCollector.AddToInput( UniqueId, SurfaceInputs.WORLD_NORMAL, CurrentPrecisionType );
+ if( dataCollector.DirtyNormal )
+ {
+ dataCollector.AddToInput( UniqueId, SurfaceInputs.INTERNALDATA, addSemiColon: false );
+ dataCollector.ForceNormal = true;
+ }
+ }
+
+ vertexNormal = GeneratorUtils.GenerateVertexNormal( ref dataCollector, UniqueId, CurrentPrecisionType );
+ return GetOutputVectorItem( 0, outputId, vertexNormal );
+ }
+ }
+}
diff --git a/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/NormalVertexDataNode.cs.meta b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/NormalVertexDataNode.cs.meta
new file mode 100644
index 00000000..62b8c9d6
--- /dev/null
+++ b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/NormalVertexDataNode.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 4c7b60515f9cf6043bf8d03531d268f9
+timeCreated: 1481126955
+licenseType: Store
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/ObjectScaleNode.cs b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/ObjectScaleNode.cs
new file mode 100644
index 00000000..6dd1b8d3
--- /dev/null
+++ b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/ObjectScaleNode.cs
@@ -0,0 +1,75 @@
+// Amplify Shader Editor - Visual Shader Editing Tool
+// Copyright (c) Amplify Creations, Lda <info@amplify.pt>
+
+using System;
+using UnityEngine;
+using UnityEditor;
+namespace AmplifyShaderEditor
+{
+ [Serializable]
+ [NodeAttributes( "Object Scale", "Vertex Data", "Object Scale extracted directly from its transform matrix" )]
+ public class ObjectScaleNode : ParentNode
+ {
+ private const string RotationIndependentScaleStr = "Rotation Independent Scale";
+
+ [SerializeField]
+ private bool m_rotationIndependentScale = false;
+
+ protected override void CommonInit( int uniqueId )
+ {
+ base.CommonInit( uniqueId );
+ AddOutputVectorPorts( WirePortDataType.FLOAT3, "XYZ" );
+ m_drawPreviewAsSphere = true;
+ m_previewShaderGUID = "5540033c6c52f51468938c1a42bd2730";
+ m_textLabelWidth = 180;
+ UpdateMaterialPass();
+ m_autoWrapProperties = true;
+ }
+
+ public override void DrawProperties()
+ {
+ base.DrawProperties();
+ EditorGUI.BeginChangeCheck();
+ m_rotationIndependentScale = EditorGUILayoutToggle( RotationIndependentScaleStr, m_rotationIndependentScale );
+ if( EditorGUI.EndChangeCheck() )
+ {
+ UpdateMaterialPass();
+ }
+ }
+
+ public override string GenerateShaderForOutput( int outputId, ref MasterNodeDataCollector dataCollector, bool ignoreLocalvar )
+ {
+ string objectScale = m_rotationIndependentScale ? GeneratorUtils.GenerateRotationIndependentObjectScale( ref dataCollector, UniqueId ):
+ GeneratorUtils.GenerateObjectScale( ref dataCollector, UniqueId );
+
+ return GetOutputVectorItem( 0, outputId, objectScale );
+ }
+
+ public override void ReadFromString( ref string[] nodeParams )
+ {
+ base.ReadFromString( ref nodeParams );
+ if( UIUtils.CurrentShaderVersion() < 17402 )
+ {
+ m_rotationIndependentScale = false;
+ }
+ else
+ {
+ m_rotationIndependentScale = Convert.ToBoolean( GetCurrentParam( ref nodeParams ) );
+ }
+ UpdateMaterialPass();
+ }
+
+ public override void WriteToString( ref string nodeInfo, ref string connectionsInfo )
+ {
+ base.WriteToString( ref nodeInfo, ref connectionsInfo );
+ IOUtils.AddFieldValueToString( ref nodeInfo, m_rotationIndependentScale );
+ }
+
+ void UpdateMaterialPass()
+ {
+ m_previewMaterialPassId = m_rotationIndependentScale ? 1 : 0;
+ PreviewIsDirty = true;
+ }
+
+ }
+}
diff --git a/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/ObjectScaleNode.cs.meta b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/ObjectScaleNode.cs.meta
new file mode 100644
index 00000000..7103bef2
--- /dev/null
+++ b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/ObjectScaleNode.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: ef1fe46d0cc472e45ad13ac737db2c1e
+timeCreated: 1493993914
+licenseType: Store
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/OutlineNode.cs b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/OutlineNode.cs
new file mode 100644
index 00000000..cec8fb39
--- /dev/null
+++ b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/OutlineNode.cs
@@ -0,0 +1,366 @@
+// Amplify Shader Editor - Visual Shader Editing Tool
+// Copyright (c) Amplify Creations, Lda <info@amplify.pt>
+
+using System;
+
+using UnityEngine;
+using UnityEditor;
+namespace AmplifyShaderEditor
+{
+ [Serializable]
+ [NodeAttributes( "Outline", "Miscellaneous", "Uses vertices to simulate an outline around the object" )]
+ public sealed class OutlineNode : ParentNode
+ {
+ enum OutlineAlphaModes
+ {
+ None = 0,
+ Masked,
+ Transparent,
+ AlphaPremultiplied
+ };
+
+ private const string CullModePortNameStr = "Cull Mode";
+ private const string AlphaModePortNameStr = "Alpha";
+ private const string MaskedModePortNamStr = "Opacity Mask";
+ private const string OutlineAlphaModeStr = "Alpha Mode";
+ private const string OpacityMaskClipValueStr = "Mask Clip Value";
+ private const string ErrorMessage = "Outline node should only be connected to vertex ports.";
+
+ [SerializeField]
+ private bool m_noFog = true;
+
+ [SerializeField]
+ private string[] AvailableOutlineModes = { "Vertex Offset", "Vertex Scale", "Custom" };
+
+ [SerializeField]
+ private int[] AvailableOutlineValues = { 0, 1, 2 };
+
+ [SerializeField]
+ private int m_currentSelectedMode = 0;
+
+ [SerializeField]
+ private OutlineAlphaModes m_currentAlphaMode = OutlineAlphaModes.None;
+
+ private UpperLeftWidgetHelper m_upperLeftWidget = new UpperLeftWidgetHelper();
+
+ [NonSerialized]
+ private StandardSurfaceOutputNode m_masterNode = null;
+
+ [SerializeField]
+ private int m_zTestMode = 0;
+
+ [SerializeField]
+ private int m_zWriteMode = 0;
+
+ [SerializeField]
+ private CullMode m_cullMode = CullMode.Front;
+
+ protected override void CommonInit( int uniqueId )
+ {
+ base.CommonInit( uniqueId );
+
+ AddOutputPort( WirePortDataType.FLOAT3, "Out" );
+
+ AddInputPort( WirePortDataType.FLOAT3, false, "Color", -1, MasterNodePortCategory.Fragment, 0 );
+ AddInputPort( WirePortDataType.FLOAT, false, "Alpha", -1, MasterNodePortCategory.Fragment, 2 );
+ AddInputPort( WirePortDataType.FLOAT, false, "Width", -1, MasterNodePortCategory.Fragment, 1 );
+ GetInputPortByUniqueId( 2 ).Visible = false;
+ m_textLabelWidth = 115;
+ m_hasLeftDropdown = true;
+ SetAdditonalTitleText( string.Format( Constants.SubTitleTypeFormatStr, AvailableOutlineModes[ m_currentSelectedMode ] ) );
+ }
+
+ public override void PropagateNodeData( NodeData nodeData, ref MasterNodeDataCollector dataCollector )
+ {
+ base.PropagateNodeData( nodeData, ref dataCollector );
+ if( GetInputPortByUniqueId( 0 ).IsConnected )
+ dataCollector.UsingCustomOutlineColor = true;
+
+ if( GetInputPortByUniqueId( 1 ).IsConnected )
+ dataCollector.UsingCustomOutlineWidth = true;
+
+ if( GetInputPortByUniqueId( 2 ).IsConnected )
+ dataCollector.UsingCustomOutlineAlpha = true;
+
+ if( !dataCollector.IsTemplate )
+ {
+ UIUtils.CurrentWindow.OutsideGraph.CurrentStandardSurface.OutlineHelper.ZWriteMode = m_zWriteMode;
+ UIUtils.CurrentWindow.OutsideGraph.CurrentStandardSurface.OutlineHelper.OffsetMode = m_currentSelectedMode;
+ }
+ }
+
+ public override void AfterCommonInit()
+ {
+ base.AfterCommonInit();
+
+ if( PaddingTitleLeft == 0 )
+ {
+ PaddingTitleLeft = Constants.PropertyPickerWidth + Constants.IconsLeftRightMargin;
+ if( PaddingTitleRight == 0 )
+ PaddingTitleRight = Constants.PropertyPickerWidth + Constants.IconsLeftRightMargin;
+ }
+ }
+
+ public override void Destroy()
+ {
+ base.Destroy();
+ m_upperLeftWidget = null;
+ }
+
+ public override void Draw( DrawInfo drawInfo )
+ {
+ base.Draw( drawInfo );
+ EditorGUI.BeginChangeCheck();
+ m_currentSelectedMode = m_upperLeftWidget.DrawWidget( this, m_currentSelectedMode, AvailableOutlineModes );
+ if( EditorGUI.EndChangeCheck() )
+ {
+ SetAdditonalTitleText( string.Format( Constants.SubTitleTypeFormatStr, AvailableOutlineModes[ m_currentSelectedMode ] ) );
+ UpdatePorts();
+ }
+ }
+
+ void CheckAlphaPortVisibility()
+ {
+ InputPort alphaPort = GetInputPortByUniqueId( 2 );
+ if( m_currentAlphaMode != OutlineAlphaModes.None )
+ {
+ if( !alphaPort.Visible )
+ alphaPort.Visible = true;
+
+ if( m_currentAlphaMode == OutlineAlphaModes.Masked )
+ {
+ GetInputPortByUniqueId( 2 ).Name = MaskedModePortNamStr;
+ }
+ else
+ {
+ GetInputPortByUniqueId( 2 ).Name = AlphaModePortNameStr;
+ }
+ m_sizeIsDirty = true;
+ }
+
+ if( m_currentAlphaMode == OutlineAlphaModes.None && alphaPort.Visible )
+ {
+ alphaPort.Visible = false;
+ m_sizeIsDirty = true;
+ }
+ }
+
+ public override void DrawProperties()
+ {
+ base.DrawProperties();
+ NodeUtils.DrawPropertyGroup( ref m_propertiesFoldout, Constants.ParameterLabelStr, () =>
+ {
+ EditorGUI.BeginChangeCheck();
+ m_currentSelectedMode = EditorGUILayoutIntPopup( "Type", m_currentSelectedMode, AvailableOutlineModes, AvailableOutlineValues );
+ if( EditorGUI.EndChangeCheck() )
+ {
+ SetAdditonalTitleText( string.Format( Constants.SubTitleTypeFormatStr, AvailableOutlineModes[ m_currentSelectedMode ] ) );
+ UpdatePorts();
+ }
+
+ EditorGUI.BeginChangeCheck();
+ m_currentAlphaMode = (OutlineAlphaModes)EditorGUILayoutEnumPopup( OutlineAlphaModeStr, m_currentAlphaMode );
+ if( EditorGUI.EndChangeCheck() )
+ {
+ CheckAlphaPortVisibility();
+ }
+
+ if( m_currentAlphaMode == OutlineAlphaModes.Masked )
+ {
+ if( m_masterNode == null )
+ {
+ m_masterNode = UIUtils.CurrentWindow.OutsideGraph.CurrentMasterNode as StandardSurfaceOutputNode;
+ }
+
+ if( m_masterNode != null )
+ {
+ m_masterNode.ShowOpacityMaskValueUI();
+ }
+ }
+
+ m_cullMode = (CullMode)EditorGUILayoutEnumPopup( CullModePortNameStr, m_cullMode );
+ m_zWriteMode = EditorGUILayoutPopup( ZBufferOpHelper.ZWriteModeStr, m_zWriteMode, ZBufferOpHelper.ZWriteModeValues );
+ m_zTestMode = EditorGUILayoutPopup( ZBufferOpHelper.ZTestModeStr, m_zTestMode, ZBufferOpHelper.ZTestModeLabels );
+ m_noFog = EditorGUILayoutToggle( "No Fog", m_noFog );
+
+ } );
+ }
+
+ void UpdatePorts()
+ {
+ if( m_currentSelectedMode == 2 ) //custom mode
+ {
+ GetInputPortByUniqueId( 1 ).ChangeProperties( "Offset", WirePortDataType.FLOAT3, false );
+ }
+ else
+ {
+ GetInputPortByUniqueId( 1 ).ChangeProperties( "Width", WirePortDataType.FLOAT, false );
+ }
+
+ }
+
+ public override string GenerateShaderForOutput( int outputId, ref MasterNodeDataCollector dataCollector, bool ignoreLocalvar )
+ {
+ if( dataCollector.IsTemplate )
+ return m_outputPorts[0].ErrorValue;
+
+ if( dataCollector.IsFragmentCategory )
+ {
+ UIUtils.ShowMessage( UniqueId, ErrorMessage );
+ return m_outputPorts[ 0 ].ErrorValue;
+ }
+
+ if( m_outputPorts[ 0 ].IsLocalValue( dataCollector.PortCategory ) )
+ return m_outputPorts[ 0 ].ErrorValue;
+
+ m_outputPorts[ 0 ].SetLocalValue( "0", dataCollector.PortCategory );
+
+ StandardSurfaceOutputNode masterNode = UIUtils.CurrentWindow.OutsideGraph.CurrentMasterNode as StandardSurfaceOutputNode;
+
+ MasterNodeDataCollector outlineDataCollector = new MasterNodeDataCollector();
+ outlineDataCollector.IsOutlineDataCollector = true;
+ outlineDataCollector.DirtyNormal = true;
+ InputPort colorPort = GetInputPortByUniqueId( 0 );
+ InputPort alphaPort = GetInputPortByUniqueId( 2 );
+ InputPort vertexPort = GetInputPortByUniqueId( 1 );
+
+ if( vertexPort.IsConnected )
+ {
+ outlineDataCollector.PortCategory = MasterNodePortCategory.Vertex;
+ string outlineWidth = vertexPort.GenerateShaderForOutput( ref outlineDataCollector, vertexPort.DataType, true, true );
+ outlineDataCollector.AddToVertexLocalVariables( UniqueId, PrecisionType.Float, vertexPort.DataType, "outlineVar", outlineWidth );
+
+ outlineDataCollector.AddVertexInstruction( outlineDataCollector.SpecialLocalVariables, UniqueId, false );
+ outlineDataCollector.ClearSpecialLocalVariables();
+
+ outlineDataCollector.AddVertexInstruction( outlineDataCollector.VertexLocalVariables, UniqueId, false );
+ outlineDataCollector.ClearVertexLocalVariables();
+
+ // need to check whether this breaks other outputs or not
+ UIUtils.CurrentWindow.OutsideGraph.ResetNodesLocalVariables();
+ }
+
+ outlineDataCollector.PortCategory = MasterNodePortCategory.Fragment;
+ string outlineColor = colorPort.GeneratePortInstructions( ref outlineDataCollector );// "\to.Emission = " + colorPort.GeneratePortInstructions( ref outlineDataCollector ) + ";";
+ string alphaValue = alphaPort.Visible ? alphaPort.GeneratePortInstructions( ref outlineDataCollector ) : string.Empty;
+
+ bool addTabs = outlineDataCollector.DirtySpecialLocalVariables || alphaPort.Available;
+ outlineDataCollector.AddInstructions( "\t" + outlineDataCollector.SpecialLocalVariables.TrimStart( '\t' ) );
+ outlineDataCollector.ClearSpecialLocalVariables();
+ outlineDataCollector.AddInstructions( ( addTabs ? "\t\t\t" : "" ) + "o.Emission = " + outlineColor + ";" );
+ if( alphaPort.Visible )
+ {
+ if( m_currentAlphaMode == OutlineAlphaModes.Masked )
+ {
+ float maskClipValue = 0.5f;
+
+ if( masterNode != null )
+ maskClipValue = masterNode.OpacityMaskClipValue;
+
+ if( masterNode.InlineOpacityMaskClipValue.IsValid )
+ {
+ RangedFloatNode fnode = UIUtils.GetNode( masterNode.InlineOpacityMaskClipValue.NodeId ) as RangedFloatNode;
+ if( fnode != null )
+ {
+ outlineDataCollector.AddToProperties( fnode.UniqueId, fnode.GetPropertyValue(), fnode.OrderIndex );
+ outlineDataCollector.AddToUniforms( fnode.UniqueId, fnode.GetUniformValue() );
+ }
+ else
+ {
+ IntNode inode = UIUtils.GetNode( masterNode.InlineOpacityMaskClipValue.NodeId ) as IntNode;
+ outlineDataCollector.AddToProperties( inode.UniqueId, inode.GetPropertyValue(), inode.OrderIndex );
+ outlineDataCollector.AddToUniforms( inode.UniqueId, inode.GetUniformValue() );
+ }
+ }
+ else
+ {
+ outlineDataCollector.AddToProperties( -1, string.Format( IOUtils.MaskClipValueProperty, OpacityMaskClipValueStr, maskClipValue ), -1 );
+ outlineDataCollector.AddToUniforms( -1, string.Format( IOUtils.MaskClipValueUniform, maskClipValue ) );
+ }
+
+ outlineDataCollector.AddInstructions( ( addTabs ? "\n\t\t\t" : "" ) + "clip( " + alphaValue + " - " + masterNode.InlineOpacityMaskClipValue.GetValueOrProperty( IOUtils.MaskClipValueName, false ) + " );" );
+ }
+ else
+ {
+ outlineDataCollector.AddInstructions( ( addTabs ? "\n\t\t\t" : "" ) + "o.Alpha = " + alphaValue + ";" );
+ }
+ }
+
+ if( outlineDataCollector.UsingWorldNormal )
+ outlineDataCollector.AddInstructions( ( addTabs ? "\n\t\t\t" : "" ) + "o.Normal = float3(0,0,-1);" );
+
+ if( masterNode != null )
+ {
+ //masterNode.AdditionalIncludes.AddToDataCollector( ref outlineDataCollector );
+ //masterNode.AdditionalPragmas.AddToDataCollector( ref outlineDataCollector );
+ //masterNode.AdditionalDefines.AddToDataCollector( ref outlineDataCollector );
+ masterNode.AdditionalDirectives.AddAllToDataCollector( ref outlineDataCollector );
+ }
+
+ UIUtils.CurrentWindow.OutsideGraph.CurrentStandardSurface.OutlineHelper.InputList = outlineDataCollector.InputList;
+ UIUtils.CurrentWindow.OutsideGraph.CurrentStandardSurface.OutlineHelper.Inputs = outlineDataCollector.Inputs;
+ UIUtils.CurrentWindow.OutsideGraph.CurrentStandardSurface.OutlineHelper.DirtyInput = outlineDataCollector.DirtyInputs;
+ UIUtils.CurrentWindow.OutsideGraph.CurrentStandardSurface.OutlineHelper.Includes = outlineDataCollector.Includes;
+ UIUtils.CurrentWindow.OutsideGraph.CurrentStandardSurface.OutlineHelper.Pragmas = outlineDataCollector.Pragmas;
+ UIUtils.CurrentWindow.OutsideGraph.CurrentStandardSurface.OutlineHelper.Defines = outlineDataCollector.Defines;
+ UIUtils.CurrentWindow.OutsideGraph.CurrentStandardSurface.OutlineHelper.Uniforms = outlineDataCollector.Uniforms;
+ UIUtils.CurrentWindow.OutsideGraph.CurrentStandardSurface.OutlineHelper.InstancedProperties = outlineDataCollector.InstancedProperties;
+ UIUtils.CurrentWindow.OutsideGraph.CurrentStandardSurface.OutlineHelper.GrabPasses = outlineDataCollector.GrabPass;
+ UIUtils.CurrentWindow.OutsideGraph.CurrentStandardSurface.OutlineHelper.UniformList = outlineDataCollector.UniformsList;
+ UIUtils.CurrentWindow.OutsideGraph.CurrentStandardSurface.OutlineHelper.InstancedPropertiesList = outlineDataCollector.InstancedPropertiesList;
+ UIUtils.CurrentWindow.OutsideGraph.CurrentStandardSurface.OutlineHelper.VertexData = outlineDataCollector.VertexData;
+ UIUtils.CurrentWindow.OutsideGraph.CurrentStandardSurface.OutlineHelper.Instructions = outlineDataCollector.Instructions;
+ UIUtils.CurrentWindow.OutsideGraph.CurrentStandardSurface.OutlineHelper.Functions = outlineDataCollector.Functions;
+ UIUtils.CurrentWindow.OutsideGraph.CurrentStandardSurface.OutlineHelper.LocalFunctions = outlineDataCollector.LocalFunctions;
+ UIUtils.CurrentWindow.OutsideGraph.CurrentStandardSurface.OutlineHelper.OutlineCullMode = m_cullMode;
+ UIUtils.CurrentWindow.OutsideGraph.CurrentStandardSurface.OutlineHelper.ZTestMode = m_zTestMode;
+ UIUtils.CurrentWindow.OutsideGraph.CurrentStandardSurface.OutlineHelper.ZWriteMode = m_zWriteMode;
+ UIUtils.CurrentWindow.OutsideGraph.CurrentStandardSurface.OutlineHelper.OffsetMode = m_currentSelectedMode;
+ UIUtils.CurrentWindow.OutsideGraph.CurrentStandardSurface.OutlineHelper.CustomNoFog = m_noFog;
+ dataCollector.CustomOutlineSelectedAlpha = (int)m_currentAlphaMode;
+
+ for( int i = 0; i < outlineDataCollector.PropertiesList.Count; i++ )
+ {
+ dataCollector.AddToProperties( UniqueId, outlineDataCollector.PropertiesList[ i ].PropertyName, outlineDataCollector.PropertiesList[ i ].OrderIndex );
+ }
+
+ UIUtils.CurrentWindow.OutsideGraph.ResetNodesLocalVariablesIfNot( MasterNodePortCategory.Vertex );
+ return "0";
+ }
+
+ public override void ReadFromString( ref string[] nodeParams )
+ {
+ base.ReadFromString( ref nodeParams );
+ m_currentSelectedMode = Convert.ToInt32( GetCurrentParam( ref nodeParams ) );
+ m_noFog = Convert.ToBoolean( GetCurrentParam( ref nodeParams ) );
+ if( UIUtils.CurrentShaderVersion() > 14202 )
+ m_currentAlphaMode = (OutlineAlphaModes)Enum.Parse( typeof( OutlineAlphaModes ), GetCurrentParam( ref nodeParams ) );
+
+ if( UIUtils.CurrentShaderVersion() > 14302 )
+ {
+ m_zWriteMode = Convert.ToInt32( GetCurrentParam( ref nodeParams ) );
+ m_zTestMode = Convert.ToInt32( GetCurrentParam( ref nodeParams ) );
+ }
+
+ if( UIUtils.CurrentShaderVersion() > 15304 )
+ {
+ m_cullMode = (CullMode)Enum.Parse( typeof( CullMode ), GetCurrentParam( ref nodeParams ) );
+ }
+
+ SetAdditonalTitleText( string.Format( Constants.SubTitleTypeFormatStr, AvailableOutlineModes[ m_currentSelectedMode ] ) );
+ UpdatePorts();
+ CheckAlphaPortVisibility();
+ }
+
+ public override void WriteToString( ref string nodeInfo, ref string connectionsInfo )
+ {
+ base.WriteToString( ref nodeInfo, ref connectionsInfo );
+ IOUtils.AddFieldValueToString( ref nodeInfo, m_currentSelectedMode );
+ IOUtils.AddFieldValueToString( ref nodeInfo, m_noFog );
+ IOUtils.AddFieldValueToString( ref nodeInfo, m_currentAlphaMode );
+ IOUtils.AddFieldValueToString( ref nodeInfo, m_zWriteMode );
+ IOUtils.AddFieldValueToString( ref nodeInfo, m_zTestMode );
+ IOUtils.AddFieldValueToString( ref nodeInfo, m_cullMode );
+ }
+ }
+}
diff --git a/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/OutlineNode.cs.meta b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/OutlineNode.cs.meta
new file mode 100644
index 00000000..60f49a8e
--- /dev/null
+++ b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/OutlineNode.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 24f267627c002964badad2901309c96a
+timeCreated: 1501161489
+licenseType: Store
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/PosVertexDataNode.cs b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/PosVertexDataNode.cs
new file mode 100644
index 00000000..a71ed207
--- /dev/null
+++ b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/PosVertexDataNode.cs
@@ -0,0 +1,138 @@
+// Amplify Shader Editor - Visual Shader Editing Tool
+// Copyright (c) Amplify Creations, Lda <info@amplify.pt>
+
+using System;
+using UnityEngine;
+using UnityEditor;
+
+namespace AmplifyShaderEditor
+{
+ [Serializable]
+ [NodeAttributes( "Vertex Position", "Vertex Data", "Vertex position vector in object space, can be used in both local vertex offset and fragment outputs" )]
+ public sealed class PosVertexDataNode : VertexDataNode
+ {
+ private const string PropertyLabel = "Size";
+ private readonly string[] SizeLabels = { "XYZ", "XYZW" };
+
+ [SerializeField]
+ private int m_sizeOption = 0;
+
+ private UpperLeftWidgetHelper m_upperLeftWidget = new UpperLeftWidgetHelper();
+
+ protected override void CommonInit( int uniqueId )
+ {
+ base.CommonInit( uniqueId );
+ m_currentVertexData = "vertex";
+ ChangeOutputProperties( 0, "XYZ", WirePortDataType.FLOAT3 );
+ m_drawPreviewAsSphere = true;
+ m_outputPorts[ 4 ].Visible = false;
+ m_hasLeftDropdown = true;
+ m_autoWrapProperties = true;
+ m_previewShaderGUID = "a5c14f759dd021b4b8d4b6eeb85ac227";
+ }
+
+ public override void Destroy()
+ {
+ base.Destroy();
+ m_upperLeftWidget = null;
+ }
+
+ public override void Draw( DrawInfo drawInfo )
+ {
+ base.Draw( drawInfo );
+ EditorGUI.BeginChangeCheck();
+ m_sizeOption = m_upperLeftWidget.DrawWidget( this, m_sizeOption, SizeLabels );
+ if( EditorGUI.EndChangeCheck() )
+ {
+ UpdatePorts();
+ }
+ }
+
+ public override void DrawProperties()
+ {
+ EditorGUI.BeginChangeCheck();
+ m_sizeOption = EditorGUILayoutPopup( PropertyLabel, m_sizeOption, SizeLabels );
+ if ( EditorGUI.EndChangeCheck() )
+ {
+ UpdatePorts();
+ }
+ }
+
+ void UpdatePorts()
+ {
+ if ( m_sizeOption == 0 )
+ {
+ ChangeOutputProperties( 0, SizeLabels[ 0 ], WirePortDataType.FLOAT3, false );
+ m_outputPorts[ 4 ].Visible = false;
+ }
+ else
+ {
+ ChangeOutputProperties( 0, SizeLabels[ 1 ], WirePortDataType.FLOAT4, false );
+ m_outputPorts[ 4 ].Visible = true;
+ }
+ }
+ public override string GenerateShaderForOutput( int outputId, ref MasterNodeDataCollector dataCollector, bool ignoreLocalVar )
+ {
+
+ if ( dataCollector.MasterNodeCategory == AvailableShaderTypes.Template )
+ {
+ string vertexPos = dataCollector.TemplateDataCollectorInstance.GetVertexPosition( ( m_sizeOption == 0 ) ? WirePortDataType.FLOAT3 : WirePortDataType.FLOAT4, CurrentPrecisionType );
+ return GetOutputVectorItem( 0, outputId, vertexPos );
+ }
+
+
+ if ( dataCollector.PortCategory == MasterNodePortCategory.Fragment || dataCollector.PortCategory == MasterNodePortCategory.Debug )
+ base.GenerateShaderForOutput( outputId, ref dataCollector, ignoreLocalVar );
+
+ WirePortDataType sizeType = m_sizeOption == 0 ? WirePortDataType.FLOAT3 : WirePortDataType.FLOAT4;
+
+ string vertexPosition = GeneratorUtils.GenerateVertexPosition( ref dataCollector, UniqueId, sizeType );
+ return GetOutputVectorItem( 0, outputId, vertexPosition );
+
+ //if ( dataCollector.PortCategory == MasterNodePortCategory.Vertex || dataCollector.PortCategory == MasterNodePortCategory.Tessellation )
+ //{
+ // string vertexVar = base.GenerateShaderForOutput( 0, ref dataCollector, ignoreLocalVar );
+ // if ( outputId != 0 )
+ // {
+ // return GetOutputVectorItem( 0, outputId, vertexVar );
+ // }
+ // else if ( m_sizeOption == 0 )
+ // {
+ // vertexVar += ".xyz";
+ // }
+
+ // return vertexVar;
+ //}
+ //else
+ //{
+
+ // string vertexVar = GeneratorUtils.GenerateVertexPositionOnFrag( ref dataCollector, UniqueId, m_currentPrecisionType );
+ // if ( outputId != 0 )
+ // {
+ // return GetOutputVectorItem( 0, outputId, vertexVar );
+ // }
+ // else if ( m_sizeOption == 0 )
+ // {
+ // vertexVar += ".xyz";
+ // }
+ // return GetOutputVectorItem( 0, outputId, vertexVar );
+ //}
+ }
+
+ public override void ReadFromString( ref string[] nodeParams )
+ {
+ base.ReadFromString( ref nodeParams );
+ if ( UIUtils.CurrentShaderVersion() > 7101 )
+ {
+ m_sizeOption = Convert.ToInt32( GetCurrentParam( ref nodeParams ) );
+ UpdatePorts();
+ }
+ }
+
+ public override void WriteToString( ref string nodeInfo, ref string connectionsInfo )
+ {
+ base.WriteToString( ref nodeInfo, ref connectionsInfo );
+ IOUtils.AddFieldValueToString( ref nodeInfo, m_sizeOption );
+ }
+ }
+}
diff --git a/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/PosVertexDataNode.cs.meta b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/PosVertexDataNode.cs.meta
new file mode 100644
index 00000000..9ff223e8
--- /dev/null
+++ b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/PosVertexDataNode.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: fc77801277f0faf4ca0be33f565b5604
+timeCreated: 1481126960
+licenseType: Store
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/TangentSignVertexDataNode.cs b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/TangentSignVertexDataNode.cs
new file mode 100644
index 00000000..f9beb05c
--- /dev/null
+++ b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/TangentSignVertexDataNode.cs
@@ -0,0 +1,23 @@
+// Amplify Shader Editor - Visual Shader Editing Tool
+// Copyright (c) Amplify Creations, Lda <info@amplify.pt>
+
+namespace AmplifyShaderEditor
+{
+ [System.Serializable]
+ [NodeAttributes( "Vertex Tangent Sign", "Vertex Data", "Vertex tangent sign in object space, return the W value of tangent vector that contains only the sign of the tangent" )]
+ public sealed class TangentSignVertexDataNode : ParentNode
+ {
+ protected override void CommonInit( int uniqueId )
+ {
+ base.CommonInit( uniqueId );
+ AddOutputVectorPorts( WirePortDataType.FLOAT, "Sign" );
+ m_drawPreviewAsSphere = true;
+ m_previewShaderGUID = "f5466d126f4bb1f49917eac88b1cb6af";
+ }
+
+ public override string GenerateShaderForOutput( int outputId, ref MasterNodeDataCollector dataCollector, bool ignoreLocalVar )
+ {
+ return GeneratorUtils.GenerateVertexTangentSign( ref dataCollector, UniqueId, CurrentPrecisionType ); ;
+ }
+ }
+}
diff --git a/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/TangentSignVertexDataNode.cs.meta b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/TangentSignVertexDataNode.cs.meta
new file mode 100644
index 00000000..c07ffb6c
--- /dev/null
+++ b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/TangentSignVertexDataNode.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 1f79f23d5c10c9e4fb6a59c1ef70f6fc
+timeCreated: 1481126958
+licenseType: Store
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/TangentVertexDataNode.cs b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/TangentVertexDataNode.cs
new file mode 100644
index 00000000..da6d25ff
--- /dev/null
+++ b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/TangentVertexDataNode.cs
@@ -0,0 +1,120 @@
+// Amplify Shader Editor - Visual Shader Editing Tool
+// Copyright (c) Amplify Creations, Lda <info@amplify.pt>
+using System;
+using UnityEditor;
+using UnityEngine;
+
+namespace AmplifyShaderEditor
+{
+ [Serializable]
+ [NodeAttributes( "Vertex Tangent", "Vertex Data", "Vertex tangent vector in object space, can be used in both local vertex offset and fragment outputs" )]
+ public sealed class TangentVertexDataNode : VertexDataNode
+ {
+ private const string PropertyLabel = "Size";
+ private readonly string[] SizeLabels = { "XYZ", "XYZW" };
+
+ [SerializeField]
+ private int m_sizeOption = 0;
+
+ private UpperLeftWidgetHelper m_upperLeftWidget = new UpperLeftWidgetHelper();
+
+ protected override void CommonInit( int uniqueId )
+ {
+ base.CommonInit( uniqueId );
+ m_currentVertexData = "tangent";
+ ChangeOutputProperties( 0, "XYZ", WirePortDataType.FLOAT3 );
+ m_outputPorts[ 4 ].Visible = false;
+ m_drawPreviewAsSphere = true;
+ m_hasLeftDropdown = true;
+ m_previewShaderGUID = "0a44bb521d06d6143a4acbc3602037f8";
+ }
+
+ public override void Destroy()
+ {
+ base.Destroy();
+ m_upperLeftWidget = null;
+ }
+
+ public override void Draw( DrawInfo drawInfo )
+ {
+ base.Draw( drawInfo );
+ EditorGUI.BeginChangeCheck();
+ m_sizeOption = m_upperLeftWidget.DrawWidget( this, m_sizeOption, SizeLabels );
+ if( EditorGUI.EndChangeCheck() )
+ {
+ UpdatePorts();
+ }
+ }
+
+ public override void DrawProperties()
+ {
+ EditorGUI.BeginChangeCheck();
+ m_sizeOption = EditorGUILayoutPopup( PropertyLabel, m_sizeOption, SizeLabels );
+ if( EditorGUI.EndChangeCheck() )
+ {
+ UpdatePorts();
+ }
+ }
+
+ void UpdatePorts()
+ {
+ if( m_sizeOption == 0 )
+ {
+ ChangeOutputProperties( 0, SizeLabels[ 0 ], WirePortDataType.FLOAT3, false );
+ m_outputPorts[ 4 ].Visible = false;
+ }
+ else
+ {
+ ChangeOutputProperties( 0, SizeLabels[ 1 ], WirePortDataType.FLOAT4, false );
+ m_outputPorts[ 4 ].Visible = true;
+ }
+ }
+
+ public override void PropagateNodeData( NodeData nodeData, ref MasterNodeDataCollector dataCollector )
+ {
+ base.PropagateNodeData( nodeData, ref dataCollector );
+ dataCollector.DirtyNormal = true;
+ }
+
+ public override string GenerateShaderForOutput( int outputId, ref MasterNodeDataCollector dataCollector, bool ignoreLocalVar )
+ {
+ string vertexTangent = string.Empty;
+ if ( dataCollector.MasterNodeCategory == AvailableShaderTypes.Template )
+ {
+ vertexTangent = dataCollector.TemplateDataCollectorInstance.GetVertexTangent( WirePortDataType.FLOAT4, CurrentPrecisionType );
+ if( m_sizeOption == 0 )
+ vertexTangent += ".xyz";
+
+ return GetOutputVectorItem( 0, outputId, vertexTangent );
+ }
+
+ if ( dataCollector.PortCategory == MasterNodePortCategory.Fragment || dataCollector.PortCategory == MasterNodePortCategory.Debug )
+ {
+ dataCollector.ForceNormal = true;
+ dataCollector.AddToInput( UniqueId, SurfaceInputs.WORLD_NORMAL, CurrentPrecisionType );
+ dataCollector.AddToInput( UniqueId, SurfaceInputs.INTERNALDATA, addSemiColon: false );
+ }
+
+ WirePortDataType sizeType = m_sizeOption == 0 ? WirePortDataType.FLOAT3 : WirePortDataType.FLOAT4;
+
+ vertexTangent = GeneratorUtils.GenerateVertexTangent( ref dataCollector, UniqueId, CurrentPrecisionType, sizeType );
+ return GetOutputVectorItem( 0, outputId, vertexTangent );
+ }
+
+ public override void ReadFromString( ref string[] nodeParams )
+ {
+ base.ReadFromString( ref nodeParams );
+ if( UIUtils.CurrentShaderVersion() > 16100 )
+ {
+ m_sizeOption = Convert.ToInt32( GetCurrentParam( ref nodeParams ) );
+ UpdatePorts();
+ }
+ }
+
+ public override void WriteToString( ref string nodeInfo, ref string connectionsInfo )
+ {
+ base.WriteToString( ref nodeInfo, ref connectionsInfo );
+ IOUtils.AddFieldValueToString( ref nodeInfo, m_sizeOption );
+ }
+ }
+}
diff --git a/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/TangentVertexDataNode.cs.meta b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/TangentVertexDataNode.cs.meta
new file mode 100644
index 00000000..2ce6f77a
--- /dev/null
+++ b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/TangentVertexDataNode.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: b544118f39abfe84581b8249973d52c5
+timeCreated: 1481126958
+licenseType: Store
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/Tessellation.meta b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/Tessellation.meta
new file mode 100644
index 00000000..89948ec8
--- /dev/null
+++ b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/Tessellation.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 518d8e72c2385b9488817fee5368f56c
+folderAsset: yes
+timeCreated: 1482150091
+licenseType: Store
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/Tessellation/DistanceBasedTessNode.cs b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/Tessellation/DistanceBasedTessNode.cs
new file mode 100644
index 00000000..c49df07f
--- /dev/null
+++ b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/Tessellation/DistanceBasedTessNode.cs
@@ -0,0 +1,30 @@
+
+// Amplify Shader Editor - Visual Shader Editing Tool
+// Copyright (c) Amplify Creations, Lda <info@amplify.pt>
+
+
+namespace AmplifyShaderEditor
+{
+ [System.Serializable]
+ [NodeAttributes( "Distance-based Tessellation", "Miscellaneous", "Calculates tessellation based on distance from camera" )]
+ public sealed class DistanceBasedTessNode : TessellationParentNode
+ {
+ private const string FunctionBody = "UnityDistanceBasedTess( v0.vertex, v1.vertex, v2.vertex, {0},{1},{2})";
+ protected override void CommonInit( int uniqueId )
+ {
+ base.CommonInit( uniqueId );
+ AddInputPort( WirePortDataType.FLOAT, false,"Factor");
+ AddInputPort( WirePortDataType.FLOAT, false, "Min Dist" );
+ AddInputPort( WirePortDataType.FLOAT, false, "Max Dist" );
+ AddOutputPort( WirePortDataType.FLOAT4, Constants.EmptyPortValue );
+ }
+
+ protected override string BuildTessellationFunction( ref MasterNodeDataCollector dataCollector )
+ {
+ return string.Format( FunctionBody,
+ m_inputPorts[ 1 ].GeneratePortInstructions( ref dataCollector ),
+ m_inputPorts[ 2 ].GeneratePortInstructions( ref dataCollector ),
+ m_inputPorts[ 0 ].GeneratePortInstructions( ref dataCollector ) );
+ }
+ }
+}
diff --git a/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/Tessellation/DistanceBasedTessNode.cs.meta b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/Tessellation/DistanceBasedTessNode.cs.meta
new file mode 100644
index 00000000..18016c1b
--- /dev/null
+++ b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/Tessellation/DistanceBasedTessNode.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 5a83fb450d164d34bb756f46b3f4290e
+timeCreated: 1482150091
+licenseType: Store
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/Tessellation/EdgeLengthCullTessNode.cs b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/Tessellation/EdgeLengthCullTessNode.cs
new file mode 100644
index 00000000..48c5db07
--- /dev/null
+++ b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/Tessellation/EdgeLengthCullTessNode.cs
@@ -0,0 +1,27 @@
+// Amplify Shader Editor - Visual Shader Editing Tool
+// Copyright (c) Amplify Creations, Lda <info@amplify.pt>
+
+
+namespace AmplifyShaderEditor
+{
+ [System.Serializable]
+ [NodeAttributes( "Edge Length Tessellation With Cull", "Miscellaneous", "Tessellation level computed based on triangle edge length on the screen with patch frustum culling" )]
+ public sealed class EdgeLengthCullTessNode : TessellationParentNode
+ {
+ private const string FunctionBody = "UnityEdgeLengthBasedTessCull( v0.vertex, v1.vertex, v2.vertex, {0},{1})";
+ protected override void CommonInit( int uniqueId )
+ {
+ base.CommonInit( uniqueId );
+ AddInputPort( WirePortDataType.FLOAT, false, "Edge Length" );
+ AddInputPort( WirePortDataType.FLOAT, false, "Max Disp." );
+ AddOutputPort( WirePortDataType.FLOAT4, Constants.EmptyPortValue );
+ }
+
+ protected override string BuildTessellationFunction( ref MasterNodeDataCollector dataCollector )
+ {
+ return string.Format( FunctionBody,
+ m_inputPorts[ 0 ].GeneratePortInstructions( ref dataCollector ),
+ m_inputPorts[ 1 ].GeneratePortInstructions( ref dataCollector ) );
+ }
+ }
+}
diff --git a/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/Tessellation/EdgeLengthCullTessNode.cs.meta b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/Tessellation/EdgeLengthCullTessNode.cs.meta
new file mode 100644
index 00000000..20d4dd27
--- /dev/null
+++ b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/Tessellation/EdgeLengthCullTessNode.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 4b09c64ce2fd06a4cb4036d8cc0f8b2a
+timeCreated: 1482150962
+licenseType: Store
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/Tessellation/EdgeLengthTessNode.cs b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/Tessellation/EdgeLengthTessNode.cs
new file mode 100644
index 00000000..f4905bf1
--- /dev/null
+++ b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/Tessellation/EdgeLengthTessNode.cs
@@ -0,0 +1,23 @@
+// Amplify Shader Editor - Visual Shader Editing Tool
+// Copyright (c) Amplify Creations, Lda <info@amplify.pt>
+
+namespace AmplifyShaderEditor
+{
+ [System.Serializable]
+ [NodeAttributes( "Edge Length Tessellation", "Miscellaneous", "Tessellation level computed based on triangle edge length on the screen" )]
+ public sealed class EdgeLengthTessNode : TessellationParentNode
+ {
+ private const string FunctionBody = "UnityEdgeLengthBasedTess (v0.vertex, v1.vertex, v2.vertex, {0})";
+ protected override void CommonInit( int uniqueId )
+ {
+ base.CommonInit( uniqueId );
+ AddInputPort( WirePortDataType.FLOAT, false, "Edge Length" );
+ AddOutputPort( WirePortDataType.FLOAT4, Constants.EmptyPortValue );
+ }
+
+ protected override string BuildTessellationFunction( ref MasterNodeDataCollector dataCollector )
+ {
+ return string.Format( FunctionBody, m_inputPorts[ 0 ].GeneratePortInstructions( ref dataCollector ) );
+ }
+ }
+}
diff --git a/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/Tessellation/EdgeLengthTessNode.cs.meta b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/Tessellation/EdgeLengthTessNode.cs.meta
new file mode 100644
index 00000000..2c936ef7
--- /dev/null
+++ b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/Tessellation/EdgeLengthTessNode.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: abe3e8fa4d49c9742a95ac801fd14d7d
+timeCreated: 1482150962
+licenseType: Store
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/Tessellation/TessellationParentNode.cs b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/Tessellation/TessellationParentNode.cs
new file mode 100644
index 00000000..be14febc
--- /dev/null
+++ b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/Tessellation/TessellationParentNode.cs
@@ -0,0 +1,29 @@
+namespace AmplifyShaderEditor
+{
+ public class TessellationParentNode : ParentNode
+ {
+
+ protected override void CommonInit( int uniqueId )
+ {
+ base.CommonInit( uniqueId );
+ m_useInternalPortData = true;
+ }
+
+
+ public override string GenerateShaderForOutput( int outputId, ref MasterNodeDataCollector dataCollector, bool ignoreLocalvar )
+ {
+ if ( dataCollector.PortCategory != MasterNodePortCategory.Tessellation )
+ {
+ UIUtils.ShowMessage( UniqueId, m_nodeAttribs.Name + " can only be used on Master Node Tessellation port" );
+ return "(-1)";
+ }
+
+ return BuildTessellationFunction( ref dataCollector );
+ }
+
+ protected virtual string BuildTessellationFunction( ref MasterNodeDataCollector dataCollector )
+ {
+ return string.Empty;
+ }
+ }
+}
diff --git a/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/Tessellation/TessellationParentNode.cs.meta b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/Tessellation/TessellationParentNode.cs.meta
new file mode 100644
index 00000000..0799224c
--- /dev/null
+++ b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/Tessellation/TessellationParentNode.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 79c24faef1fec884d937e74bdc9209da
+timeCreated: 1482162387
+licenseType: Store
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/TexCoord1VertexDataNode.cs b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/TexCoord1VertexDataNode.cs
new file mode 100644
index 00000000..5297ac7d
--- /dev/null
+++ b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/TexCoord1VertexDataNode.cs
@@ -0,0 +1,16 @@
+// Amplify Shader Editor - Visual Shader Editing Tool
+// Copyright (c) Amplify Creations, Lda <info@amplify.pt>
+
+namespace AmplifyShaderEditor
+{
+ [System.Serializable]
+ [NodeAttributes( "[VS] Vertex TexCoord1", "Vertex Data", "Second set of vertex texture coordinates. Only works on Vertex Shaders ports ( p.e. Local Vertex Offset Port )." ,null,UnityEngine.KeyCode.None,true,true, "[VS] Vertex TexCoord" )]
+ public sealed class TexCoord1VertexDataNode : VertexDataNode
+ {
+ protected override void CommonInit( int uniqueId )
+ {
+ base.CommonInit( uniqueId );
+ m_currentVertexData = "texcoord1";
+ }
+ }
+}
diff --git a/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/TexCoord1VertexDataNode.cs.meta b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/TexCoord1VertexDataNode.cs.meta
new file mode 100644
index 00000000..68529273
--- /dev/null
+++ b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/TexCoord1VertexDataNode.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: ebd7eb3a7f6149e4e9dacbcda2d8089f
+timeCreated: 1481126960
+licenseType: Store
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/TexCoordVertexDataNode.cs b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/TexCoordVertexDataNode.cs
new file mode 100644
index 00000000..832b02a2
--- /dev/null
+++ b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/TexCoordVertexDataNode.cs
@@ -0,0 +1,235 @@
+// Amplify Shader Editor - Visual Shader Editing Tool
+// Copyright (c) Amplify Creations, Lda <info@amplify.pt>
+
+using System;
+using UnityEngine;
+using UnityEditor;
+
+namespace AmplifyShaderEditor
+{
+ [Serializable]
+ [NodeAttributes( "Vertex TexCoord", "Vertex Data", "Vertex texture coordinates, can be used in both local vertex offset and fragment outputs", tags: "uv" )]
+ public sealed class TexCoordVertexDataNode : VertexDataNode
+ {
+ [SerializeField]
+ private int m_texcoordSize = 2;
+
+ [SerializeField]
+ private int m_index = 0;
+
+ protected override void CommonInit( int uniqueId )
+ {
+ base.CommonInit( uniqueId );
+ m_currentVertexData = "texcoord";
+ ChangeOutputProperties( 0, "UV", WirePortDataType.FLOAT2, false );
+ m_outputPorts[ 1 ].Name = "U";
+ m_outputPorts[ 2 ].Name = "V";
+ m_outputPorts[ 3 ].Visible = false;
+ m_outputPorts[ 4 ].Visible = false;
+ m_outputPorts[ 3 ].Name = "W";
+ m_outputPorts[ 4 ].Name = "T";
+ m_autoWrapProperties = true;
+ m_hasLeftDropdown = true;
+ m_previewShaderGUID = "6c1bee77276896041bbb73b1b9e7f8ac";
+ }
+
+ public override void DrawProperties()
+ {
+ base.DrawProperties();
+ EditorGUI.BeginChangeCheck();
+ m_texcoordSize = EditorGUILayoutIntPopup( Constants.AvailableUVSizesLabel, m_texcoordSize, Constants.AvailableUVSizesStr, Constants.AvailableUVSizes );
+ if( EditorGUI.EndChangeCheck() )
+ {
+ UpdateOutput();
+ }
+
+ EditorGUI.BeginChangeCheck();
+ m_index = EditorGUILayoutIntPopup( Constants.AvailableUVChannelLabel, m_index, Constants.AvailableUVSetsStr, Constants.AvailableUVChannels );
+ if( EditorGUI.EndChangeCheck() )
+ {
+ m_currentVertexData = ( m_index == 0 ) ? "texcoord" : "texcoord" + Constants.AvailableUVChannelsStr[ m_index ];
+ }
+ }
+
+ public override void Draw( DrawInfo drawInfo )
+ {
+ base.Draw( drawInfo );
+
+ if( m_dropdownEditing )
+ {
+ EditorGUI.BeginChangeCheck();
+ m_texcoordSize = EditorGUIIntPopup( m_dropdownRect, m_texcoordSize, Constants.AvailableUVSizesStr, Constants.AvailableUVSizes, UIUtils.PropertyPopUp );
+ if( EditorGUI.EndChangeCheck() )
+ {
+ UpdateOutput();
+ DropdownEditing = false;
+ }
+ }
+ }
+
+ private void UpdateOutput()
+ {
+ if( m_texcoordSize == 3 )
+ {
+ m_outputPorts[ 0 ].ChangeType( WirePortDataType.FLOAT3, false );
+ m_outputPorts[ 0 ].Name = "UVW";
+ m_outputPorts[ 3 ].Visible = true;
+ m_outputPorts[ 4 ].Visible = false;
+ }
+ else if( m_texcoordSize == 4 )
+ {
+ m_outputPorts[ 0 ].ChangeType( WirePortDataType.FLOAT4, false );
+ m_outputPorts[ 0 ].Name = "UVWT";
+ m_outputPorts[ 3 ].Visible = true;
+ m_outputPorts[ 4 ].Visible = true;
+ }
+ else
+ {
+ m_texcoordSize = 2;
+ m_outputPorts[ 0 ].ChangeType( WirePortDataType.FLOAT2, false );
+ m_outputPorts[ 0 ].Name = "UV";
+ m_outputPorts[ 3 ].Visible = false;
+ m_outputPorts[ 4 ].Visible = false;
+ }
+ m_sizeIsDirty = true;
+ }
+
+ public override string GenerateShaderForOutput( int outputId, ref MasterNodeDataCollector dataCollector, bool ignoreLocalVar )
+ {
+ if( dataCollector.IsTemplate )
+ {
+ if( !dataCollector.TemplateDataCollectorInstance.HasUV( m_index ) )
+ {
+ dataCollector.TemplateDataCollectorInstance.RegisterUV( m_index, m_outputPorts[ 0 ].DataType );
+ }
+
+ if( dataCollector.TemplateDataCollectorInstance.HasUV( m_index ) )
+ {
+ InterpDataHelper info = dataCollector.TemplateDataCollectorInstance.GetUVInfo( m_index );
+ if( outputId == 0 )
+ {
+ return dataCollector.TemplateDataCollectorInstance.GetUVName( m_index, m_outputPorts[ 0 ].DataType );
+ }
+ else if( outputId <= TemplateHelperFunctions.DataTypeChannelUsage[ info.VarType ] )
+ {
+ return GetOutputVectorItem( 0, outputId, info.VarName );
+ }
+ Debug.LogWarning( "Attempting to access inexisting UV channel" );
+ }
+ else
+ {
+ Debug.LogWarning( "Attempting to access non-registered UV" );
+ }
+ return "0";
+ }
+
+ if( dataCollector.PortCategory == MasterNodePortCategory.Fragment || dataCollector.PortCategory == MasterNodePortCategory.Debug )
+ {
+ if( m_texcoordSize > 2 )
+ dataCollector.UsingHigherSizeTexcoords = true;
+ }
+
+ WirePortDataType size = (WirePortDataType)( 1 << ( m_texcoordSize + 1 ) );
+ string texcoords = GeneratorUtils.GenerateAutoUVs( ref dataCollector, UniqueId, m_index, null, size );
+ return GetOutputVectorItem( 0, outputId, texcoords );
+ }
+
+ /// <summary>
+ /// Generates UV properties and uniforms and returns the varible name to use in the fragment shader
+ /// </summary>
+ /// <param name="dataCollector"></param>
+ /// <param name="uniqueId"></param>
+ /// <param name="index"></param>
+ /// <returns>frag variable name</returns>
+ static public string GenerateFragUVs( ref MasterNodeDataCollector dataCollector, int uniqueId, int index, string propertyName = null, WirePortDataType size = WirePortDataType.FLOAT2 )
+ {
+ string dummyPropUV = "_texcoord" + ( index > 0 ? ( index + 1 ).ToString() : "" );
+ string dummyUV = "uv" + ( index > 0 ? ( index + 1 ).ToString() : "" ) + dummyPropUV;
+
+ dataCollector.AddToProperties( uniqueId, "[HideInInspector] " + dummyPropUV + "( \"\", 2D ) = \"white\" {}", 100 );
+ dataCollector.AddToInput( uniqueId, dummyUV, size );
+
+ string result = Constants.InputVarStr + "." + dummyUV;
+ if( !string.IsNullOrEmpty( propertyName ) )
+ {
+ dataCollector.AddToUniforms( uniqueId, "uniform float4 " + propertyName + "_ST;" );
+ dataCollector.AddToLocalVariables( uniqueId, PrecisionType.Float, size, "uv" + propertyName, result + " * " + propertyName + "_ST.xy + " + propertyName + "_ST.zw" );
+ result = "uv" + propertyName;
+ }
+
+ return result;
+ }
+
+ static public string GenerateVertexUVs( ref MasterNodeDataCollector dataCollector, int uniqueId, int index, string propertyName = null, WirePortDataType size = WirePortDataType.FLOAT2 )
+ {
+
+ string result = Constants.VertexShaderInputStr + ".texcoord";
+ if( index > 0 )
+ {
+ result += index.ToString();
+ }
+
+ switch( size )
+ {
+ default:
+ case WirePortDataType.FLOAT2:
+ {
+ result += ".xy";
+ }
+ break;
+ case WirePortDataType.FLOAT3:
+ {
+ result += ".xyz";
+ }
+ break;
+ case WirePortDataType.FLOAT4: break;
+ }
+
+ if( !string.IsNullOrEmpty( propertyName ) )
+ {
+ dataCollector.AddToUniforms( uniqueId, "uniform float4 " + propertyName + "_ST;" );
+ dataCollector.AddToVertexLocalVariables( uniqueId, UIUtils.WirePortToCgType( size ) + " uv" + propertyName + " = " + Constants.VertexShaderInputStr + ".texcoord" + ( index > 0 ? index.ToString() : string.Empty ) + " * " + propertyName + "_ST.xy + " + propertyName + "_ST.zw;" );
+ result = "uv" + propertyName;
+ }
+
+ return result;
+ }
+
+ public override void ReadFromString( ref string[] nodeParams )
+ {
+ base.ReadFromString( ref nodeParams );
+ if( UIUtils.CurrentShaderVersion() > 2502 )
+ {
+ m_index = Convert.ToInt32( GetCurrentParam( ref nodeParams ) );
+ }
+
+ if( UIUtils.CurrentShaderVersion() > 5111 )
+ {
+ m_texcoordSize = Convert.ToInt32( GetCurrentParam( ref nodeParams ) );
+ UpdateOutput();
+ }
+ }
+
+ public override void WriteToString( ref string nodeInfo, ref string connectionsInfo )
+ {
+ base.WriteToString( ref nodeInfo, ref connectionsInfo );
+ IOUtils.AddFieldValueToString( ref nodeInfo, m_index );
+ IOUtils.AddFieldValueToString( ref nodeInfo, m_texcoordSize );
+ }
+
+ public override void PropagateNodeData( NodeData nodeData, ref MasterNodeDataCollector dataCollector )
+ {
+ base.PropagateNodeData( nodeData, ref dataCollector );
+ if( dataCollector.IsTemplate )
+ {
+ dataCollector.TemplateDataCollectorInstance.SetUVUsage( m_index, m_texcoordSize );
+ }
+ else if( m_index > 3 )
+ {
+ dataCollector.AddCustomAppData( string.Format( TemplateHelperFunctions.TexUVFullSemantic, m_index ) );
+ }
+ }
+
+
+ }
+}
diff --git a/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/TexCoordVertexDataNode.cs.meta b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/TexCoordVertexDataNode.cs.meta
new file mode 100644
index 00000000..54fd39ff
--- /dev/null
+++ b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/TexCoordVertexDataNode.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: b865968ce22b9d949993e5e60126eb11
+timeCreated: 1481126958
+licenseType: Store
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/VertexBinormalNode.cs b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/VertexBinormalNode.cs
new file mode 100644
index 00000000..70a7d7b5
--- /dev/null
+++ b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/VertexBinormalNode.cs
@@ -0,0 +1,48 @@
+// Amplify Shader Editor - Visual Shader Editing Tool
+// Copyright (c) Amplify Creations, Lda <info@amplify.pt>
+//
+// Custom Node Vertex Binormal World
+// Donated by Community Member Kebrus
+
+using UnityEngine;
+using System;
+
+namespace AmplifyShaderEditor
+{
+ [Serializable]
+ [NodeAttributes( "World Bitangent", "Surface Data", "Per pixel world bitangent vector", null, KeyCode.None, true, false, null, null, "kebrus" )]
+ public sealed class VertexBinormalNode : ParentNode
+ {
+ protected override void CommonInit( int uniqueId )
+ {
+ base.CommonInit( uniqueId );
+ AddOutputVectorPorts( WirePortDataType.FLOAT3, "XYZ" );
+ m_drawPreviewAsSphere = true;
+ m_previewShaderGUID = "76873532ab67d2947beaf07151383cbe";
+ }
+
+ public override void PropagateNodeData( NodeData nodeData, ref MasterNodeDataCollector dataCollector )
+ {
+ base.PropagateNodeData( nodeData, ref dataCollector );
+ dataCollector.DirtyNormal = true;
+ }
+
+ public override string GenerateShaderForOutput( int outputId, ref MasterNodeDataCollector dataCollector, bool ignoreLocalvar )
+ {
+ if ( dataCollector.IsTemplate )
+ return GetOutputVectorItem( 0, outputId, dataCollector.TemplateDataCollectorInstance.GetWorldBinormal( CurrentPrecisionType ) );
+
+ if( dataCollector.PortCategory == MasterNodePortCategory.Fragment || dataCollector.PortCategory == MasterNodePortCategory.Debug )
+ {
+ dataCollector.ForceNormal = true;
+
+ dataCollector.AddToInput( UniqueId, SurfaceInputs.WORLD_NORMAL, CurrentPrecisionType );
+ dataCollector.AddToInput( UniqueId, SurfaceInputs.INTERNALDATA, addSemiColon: false );
+ }
+
+ string worldBitangent = GeneratorUtils.GenerateWorldBitangent( ref dataCollector, UniqueId );
+
+ return GetOutputVectorItem( 0, outputId, worldBitangent );
+ }
+ }
+}
diff --git a/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/VertexBinormalNode.cs.meta b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/VertexBinormalNode.cs.meta
new file mode 100644
index 00000000..b990b9a0
--- /dev/null
+++ b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/VertexBinormalNode.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 8ae297dac4e208f4e86c8f7a022fc5bd
+timeCreated: 1481126957
+licenseType: Store
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/VertexColorNode.cs b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/VertexColorNode.cs
new file mode 100644
index 00000000..53ef5763
--- /dev/null
+++ b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/VertexColorNode.cs
@@ -0,0 +1,47 @@
+// Amplify Shader Editor - Visual Shader Editing Tool
+// Copyright (c) Amplify Creations, Lda <info@amplify.pt>
+
+namespace AmplifyShaderEditor
+{
+ [System.Serializable]
+ [NodeAttributes( "Vertex Color", "Vertex Data", "Vertex color interpolated on fragment" )]
+ public sealed class VertexColorNode : VertexDataNode
+ {
+ protected override void CommonInit( int uniqueId )
+ {
+ base.CommonInit( uniqueId );
+ m_currentVertexData = "color";
+ m_outputPorts[ 0 ].Name = "RGBA";
+ ConvertFromVectorToColorPorts();
+ m_drawPreviewAsSphere = true;
+ m_previewShaderGUID = "ca1d22db6470c5f4d9f93a9873b4f5bc";
+ }
+
+ public override string GenerateShaderForOutput( int outputId, ref MasterNodeDataCollector dataCollector, bool ignoreLocalVar )
+ {
+ if( dataCollector.MasterNodeCategory == AvailableShaderTypes.Template )
+ {
+ string color = dataCollector.TemplateDataCollectorInstance.GetVertexColor( CurrentPrecisionType );
+ return GetOutputColorItem( 0, outputId, color );
+ }
+
+ if( dataCollector.PortCategory == MasterNodePortCategory.Vertex || dataCollector.PortCategory == MasterNodePortCategory.Tessellation )
+ {
+ return base.GenerateShaderForOutput( outputId, ref dataCollector, ignoreLocalVar );
+ }
+ else
+ {
+ dataCollector.AddToInput( UniqueId, SurfaceInputs.COLOR );
+ string result = Constants.InputVarStr + "." + Constants.ColorVariable;
+ switch( outputId )
+ {
+ case 1: result += ".r"; break;
+ case 2: result += ".g"; break;
+ case 3: result += ".b"; break;
+ case 4: result += ".a"; break;
+ }
+ return result;
+ }
+ }
+ }
+}
diff --git a/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/VertexColorNode.cs.meta b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/VertexColorNode.cs.meta
new file mode 100644
index 00000000..ac1eee78
--- /dev/null
+++ b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/VertexColorNode.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 6271f602b9ab61e4c9a96a91e473c1e0
+timeCreated: 1481126956
+licenseType: Store
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/VertexDataNode.cs b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/VertexDataNode.cs
new file mode 100644
index 00000000..9fa8cffd
--- /dev/null
+++ b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/VertexDataNode.cs
@@ -0,0 +1,50 @@
+// Amplify Shader Editor - Visual Shader Editing Tool
+// Copyright (c) Amplify Creations, Lda <info@amplify.pt>
+
+using UnityEngine;
+using System;
+
+namespace AmplifyShaderEditor
+{
+ //public enum VertexData
+ //{
+ // vertex = 0,
+ // tangent,
+ // normal,
+ // texcoord,
+ // texcoord1,
+ // color
+ //}
+
+ [Serializable]
+ public class VertexDataNode : ParentNode
+ {
+ [SerializeField]
+ protected string m_currentVertexData;
+
+ protected override void CommonInit( int uniqueId )
+ {
+ base.CommonInit( uniqueId );
+ m_currentVertexData = "vertex";
+
+// Type type = typeof( StandardSurfaceOutputNode );
+ //m_restictions.AddPortRestriction( type, 0 );
+ //m_restictions.AddPortRestriction( type, 2 );
+ //m_restictions.AddPortRestriction( type, 3 );
+ //m_restictions.AddPortRestriction( type, 4 );
+ //m_restictions.AddPortRestriction( type, 5 );
+ //m_restictions.AddPortRestriction( type, 6 );
+ //m_restictions.AddPortRestriction( type, 7 );
+ //m_restictions.AddPortRestriction( type, 8 );
+ //m_restictions.AddPortRestriction( type, 9 );
+ //m_restictions.AddPortRestriction( type, 10 );
+ AddOutputVectorPorts( WirePortDataType.FLOAT4, "Out" );
+ }
+
+ public override string GenerateShaderForOutput( int outputId, ref MasterNodeDataCollector dataCollector, bool ignoreLocalVar )
+ {
+ base.GenerateShaderForOutput( outputId, ref dataCollector, ignoreLocalVar );
+ return GetOutputVectorItem( 0, outputId, Constants.VertexShaderInputStr + "." + m_currentVertexData );
+ }
+ }
+}
diff --git a/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/VertexDataNode.cs.meta b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/VertexDataNode.cs.meta
new file mode 100644
index 00000000..66737ecd
--- /dev/null
+++ b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/VertexDataNode.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: e5f8fa23e49e4be478b283a704459767
+timeCreated: 1481126960
+licenseType: Store
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/VertexTangentNode.cs b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/VertexTangentNode.cs
new file mode 100644
index 00000000..b4e6064f
--- /dev/null
+++ b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/VertexTangentNode.cs
@@ -0,0 +1,50 @@
+// Amplify Shader Editor - Visual Shader Editing Tool
+// Copyright (c) Amplify Creations, Lda <info@amplify.pt>
+//
+// Custom Node Vertex Tangent World
+// Donated by Community Member Kebrus
+
+using UnityEngine;
+using System;
+
+namespace AmplifyShaderEditor
+{
+ [Serializable]
+ [NodeAttributes( "World Tangent", "Surface Data", "Per pixel world tangent vector", null, KeyCode.None, true, false, null, null, "kebrus" )]
+ public sealed class VertexTangentNode : ParentNode
+ {
+ protected override void CommonInit( int uniqueId )
+ {
+ base.CommonInit( uniqueId );
+ AddOutputVectorPorts( WirePortDataType.FLOAT3, "XYZ" );
+ m_drawPreviewAsSphere = true;
+ m_previewShaderGUID = "61f0b80493c9b404d8c7bf56d59c3f81";
+ }
+
+ public override void PropagateNodeData( NodeData nodeData, ref MasterNodeDataCollector dataCollector )
+ {
+ base.PropagateNodeData( nodeData , ref dataCollector );
+ dataCollector.DirtyNormal = true;
+ }
+
+ public override string GenerateShaderForOutput( int outputId, ref MasterNodeDataCollector dataCollector, bool ignoreLocalvar )
+ {
+ if ( dataCollector.IsTemplate )
+ {
+ return GetOutputVectorItem( 0, outputId, dataCollector.TemplateDataCollectorInstance.GetWorldTangent( CurrentPrecisionType ) );
+ }
+
+ if( dataCollector.PortCategory == MasterNodePortCategory.Fragment || dataCollector.PortCategory == MasterNodePortCategory.Debug )
+ {
+ dataCollector.ForceNormal = true;
+
+ dataCollector.AddToInput( UniqueId, SurfaceInputs.WORLD_NORMAL, CurrentPrecisionType );
+ dataCollector.AddToInput( UniqueId, SurfaceInputs.INTERNALDATA, addSemiColon: false );
+ }
+
+ string worldTangent = GeneratorUtils.GenerateWorldTangent( ref dataCollector, UniqueId );
+
+ return GetOutputVectorItem( 0, outputId, worldTangent );
+ }
+ }
+}
diff --git a/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/VertexTangentNode.cs.meta b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/VertexTangentNode.cs.meta
new file mode 100644
index 00000000..d3f0bbf2
--- /dev/null
+++ b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/VertexTangentNode.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 3aca1dfe55df44d4cbaf99d5a40f7470
+timeCreated: 1481126955
+licenseType: Store
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/VertexToFragmentNode.cs b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/VertexToFragmentNode.cs
new file mode 100644
index 00000000..844675f4
--- /dev/null
+++ b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/VertexToFragmentNode.cs
@@ -0,0 +1,120 @@
+// Amplify Shader Editor - Visual Shader Editing Tool
+// Copyright (c) Amplify Creations, Lda <info@amplify.pt>
+//
+// Custom Node Vertex To Fragment
+// Donated by Jason Booth - http://u3d.as/DND
+
+using UnityEngine;
+
+namespace AmplifyShaderEditor
+{
+ [System.Serializable]
+ [NodeAttributes( "Vertex To Fragment", "Miscellaneous", "Pass vertex data to the pixel shader", null, KeyCode.None, true, false, null, null, "Jason Booth - http://u3d.as/DND" )]
+ public sealed class VertexToFragmentNode : SingleInputOp
+ {
+
+ protected override void CommonInit( int uniqueId )
+ {
+ base.CommonInit( uniqueId );
+ m_inputPorts[ 0 ].AddPortForbiddenTypes( WirePortDataType.FLOAT3x3,
+ WirePortDataType.FLOAT4x4,
+ WirePortDataType.SAMPLER1D,
+ WirePortDataType.SAMPLER2D,
+ WirePortDataType.SAMPLER3D,
+ WirePortDataType.SAMPLERCUBE );
+ m_inputPorts[ 0 ].Name = "(VS) In";
+ m_outputPorts[ 0 ].Name = "Out";
+ m_useInternalPortData = false;
+ m_previewShaderGUID = "74e4d859fbdb2c0468de3612145f4929";
+ }
+
+ public override string GenerateShaderForOutput( int outputId, ref MasterNodeDataCollector dataCollector, bool ignoreLocalVar )
+ {
+ if( m_outputPorts[ 0 ].IsLocalValue( dataCollector.PortCategory ) )
+ return m_outputPorts[ 0 ].LocalValue( dataCollector.PortCategory );
+
+ string varName = GenerateInputInVertex( ref dataCollector, 0, "vertexToFrag" + OutputId,true );
+ m_outputPorts[ 0 ].SetLocalValue( varName, dataCollector.PortCategory );
+
+ return varName;
+
+ ////TEMPLATES
+ //if( dataCollector.IsTemplate )
+ //{
+ // if( !dataCollector.IsFragmentCategory )
+ // return m_inputPorts[ 0 ].GeneratePortInstructions( ref dataCollector );
+
+ // string varName = "vertexToFrag" + OutputId;
+ // if( dataCollector.TemplateDataCollectorInstance.HasCustomInterpolatedData( varName ) )
+ // return varName;
+
+ // MasterNodePortCategory category = dataCollector.PortCategory;
+ // dataCollector.PortCategory = MasterNodePortCategory.Vertex;
+ // bool dirtyVertexVarsBefore = dataCollector.DirtyVertexVariables;
+ // ContainerGraph.ResetNodesLocalVariablesIfNot( this, MasterNodePortCategory.Vertex );
+
+ // string data = m_inputPorts[ 0 ].GeneratePortInstructions( ref dataCollector );
+
+ // dataCollector.PortCategory = category;
+ // if( !dirtyVertexVarsBefore && dataCollector.DirtyVertexVariables )
+ // {
+ // dataCollector.AddVertexInstruction( dataCollector.VertexLocalVariables, UniqueId, false );
+ // dataCollector.ClearVertexLocalVariables();
+ // ContainerGraph.ResetNodesLocalVariablesIfNot( this, MasterNodePortCategory.Vertex );
+ // }
+
+ // ContainerGraph.ResetNodesLocalVariablesIfNot( this, MasterNodePortCategory.Fragment );
+
+ // dataCollector.TemplateDataCollectorInstance.RegisterCustomInterpolatedData( varName, m_inputPorts[ 0 ].DataType, m_currentPrecisionType, data );
+ // //return varName;
+
+ // m_outputPorts[ 0 ].SetLocalValue( varName );
+ // return m_outputPorts[ 0 ].LocalValue;
+ //}
+
+ ////SURFACE
+ //{
+ // if( !dataCollector.IsFragmentCategory )
+ // {
+ // return m_inputPorts[ 0 ].GeneratePortInstructions( ref dataCollector );
+ // }
+
+ // if( dataCollector.TesselationActive )
+ // {
+ // UIUtils.ShowMessage( "Unable to use Vertex to Frag when Tessellation is active" );
+ // return m_outputPorts[ 0 ].ErrorValue;
+ // }
+
+
+ // string interpName = "data" + OutputId;
+ // dataCollector.AddToInput( UniqueId, interpName, m_inputPorts[ 0 ].DataType, m_currentPrecisionType );
+
+ // MasterNodePortCategory portCategory = dataCollector.PortCategory;
+ // dataCollector.PortCategory = MasterNodePortCategory.Vertex;
+
+ // bool dirtyVertexVarsBefore = dataCollector.DirtyVertexVariables;
+
+ // ContainerGraph.ResetNodesLocalVariablesIfNot( this, MasterNodePortCategory.Vertex );
+
+ // string vertexVarValue = m_inputPorts[ 0 ].GeneratePortInstructions( ref dataCollector );
+ // dataCollector.AddLocalVariable( UniqueId, Constants.VertexShaderOutputStr + "." + interpName, vertexVarValue + ";" );
+
+ // dataCollector.PortCategory = portCategory;
+
+ // if( !dirtyVertexVarsBefore && dataCollector.DirtyVertexVariables )
+ // {
+ // dataCollector.AddVertexInstruction( dataCollector.VertexLocalVariables, UniqueId, false );
+ // dataCollector.ClearVertexLocalVariables();
+ // ContainerGraph.ResetNodesLocalVariablesIfNot( this, MasterNodePortCategory.Vertex );
+ // }
+
+ // ContainerGraph.ResetNodesLocalVariablesIfNot( this, MasterNodePortCategory.Fragment );
+
+ // //return Constants.InputVarStr + "." + interpName;
+
+ // m_outputPorts[ 0 ].SetLocalValue( Constants.InputVarStr + "." + interpName );
+ // return m_outputPorts[ 0 ].LocalValue;
+ //}
+ }
+ }
+}
diff --git a/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/VertexToFragmentNode.cs.meta b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/VertexToFragmentNode.cs.meta
new file mode 100644
index 00000000..0131f745
--- /dev/null
+++ b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Vertex/VertexToFragmentNode.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 9ecea5c13558ad4499dd4bc558670b8e
+timeCreated: 1481126958
+licenseType: Store
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant: