diff options
Diffstat (limited to 'Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Textures/BlendNormalsNode.cs')
-rw-r--r-- | Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Textures/BlendNormalsNode.cs | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Textures/BlendNormalsNode.cs b/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Textures/BlendNormalsNode.cs new file mode 100644 index 00000000..6c063c65 --- /dev/null +++ b/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Textures/BlendNormalsNode.cs @@ -0,0 +1,99 @@ +// 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( "Blend Normals", "Textures", "Blend Normals" )] + public class BlendNormalsNode : ParentNode + { + public readonly static string[] ModeListStr = { "Tangent Normals", "Reoriented Tangent Normals", "Reoriented World Normals" }; + public readonly static int[] ModeListInt = { 0, 1, 2 }; + + [SerializeField] + public int m_selectedMode = 0; + + protected override void CommonInit( int uniqueId ) + { + base.CommonInit( uniqueId ); + AddInputPort( WirePortDataType.FLOAT3, false, "Normal A" ); + AddInputPort( WirePortDataType.FLOAT3, false, "Normal B" ); + AddInputPort( WirePortDataType.FLOAT3, false, "Vertex Normal" ); + m_inputPorts[ 2 ].Visible = false; + AddOutputPort( WirePortDataType.FLOAT3, "XYZ" ); + m_useInternalPortData = true; + m_previewShaderGUID = "bcdf750ff5f70444f98b8a3efa50dc6f"; + } + + public override string GenerateShaderForOutput( int outputId, ref MasterNodeDataCollector dataCollector, bool ignoreLocalvar ) + { + if( !( dataCollector.IsTemplate && dataCollector.IsSRP ) ) + dataCollector.AddToIncludes( UniqueId, Constants.UnityStandardUtilsLibFuncs ); + + string _inputA = m_inputPorts[ 0 ].GeneratePortInstructions( ref dataCollector ); + string _inputB = m_inputPorts[ 1 ].GeneratePortInstructions( ref dataCollector ); + string result = "BlendNormals( " + _inputA + " , " + _inputB + " )"; + + if( dataCollector.IsTemplate && dataCollector.IsSRP ) + { + switch( m_selectedMode ) + { + default: + case 0: + result = "BlendNormal( " + _inputA + " , " + _inputB + " )"; + break; + case 1: + result = "BlendNormalRNM( " + _inputA + " , " + _inputB + " )"; + break; + case 2: + string inputC = m_inputPorts[ 2 ].GeneratePortInstructions( ref dataCollector ); + result = "BlendNormalWorldspaceRNM( " + _inputA + " , " + _inputB + ", " + inputC + " )"; + break; + } + } + return CreateOutputLocalVariable( 0, result, ref dataCollector ); + } + + public override void DrawProperties() + { + base.DrawProperties(); + if( ContainerGraph.IsSRP ) + { + NodeUtils.DrawPropertyGroup( ref m_propertiesFoldout, Constants.ParameterLabelStr, () => + { + EditorGUI.BeginChangeCheck(); + m_selectedMode = EditorGUILayoutIntPopup( "Mode", m_selectedMode, ModeListStr, ModeListInt ); + if( EditorGUI.EndChangeCheck() ) + { + if( m_selectedMode == 2 ) + { + m_inputPorts[ 2 ].Visible = true; + } + else + { + m_inputPorts[ 2 ].Visible = false; + } + m_sizeIsDirty = true; + } + } ); + } + } + + public override void ReadFromString( ref string[] nodeParams ) + { + base.ReadFromString( ref nodeParams ); + if( UIUtils.CurrentShaderVersion() > 14503 ) + m_selectedMode = Convert.ToInt32( GetCurrentParam( ref nodeParams ) ); + } + + public override void WriteToString( ref string nodeInfo, ref string connectionsInfo ) + { + base.WriteToString( ref nodeInfo, ref connectionsInfo ); + IOUtils.AddFieldValueToString( ref nodeInfo, m_selectedMode ); + } + } +} |