| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 | // Amplify Shader Editor - Visual Shader Editing Tool// Copyright (c) Amplify Creations, Lda <info@amplify.pt>using System;using UnityEngine;namespace AmplifyShaderEditor{	public enum UnpackInputMode	{		Tangent,		Object	}	[NodeAttributes( "Unpack Scale Normal", "Textures", "Applies UnpackNormal/UnpackScaleNormal function" )]	[Serializable]	public class UnpackScaleNormalNode : ParentNode	{		[SerializeField]		private UnpackInputMode m_inputMode = UnpackInputMode.Tangent;		protected override void CommonInit( int uniqueId )		{			base.CommonInit( uniqueId );			AddInputPort( WirePortDataType.FLOAT4, false, "Value" );			AddInputPort( WirePortDataType.FLOAT, false, "Scale" );			m_inputPorts[ 1 ].FloatInternalData = 1;			AddOutputVectorPorts( WirePortDataType.FLOAT3, "XYZ" );			m_useInternalPortData = true;			m_autoWrapProperties = true;			m_previewShaderGUID = "8b0ae05e25d280c45af81ded56f8012e";		}		public override void DrawProperties()		{			base.DrawProperties();			m_inputMode = (UnpackInputMode)EditorGUILayoutEnumPopup( "Type" , m_inputMode );		}		public override string GenerateShaderForOutput( int outputId, ref MasterNodeDataCollector dataCollector, bool ignoreLocalvar )		{			string src = m_inputPorts[ 0 ].GeneratePortInstructions( ref dataCollector );						bool isScaledNormal = false;			if ( m_inputPorts[ 1 ].IsConnected )			{				isScaledNormal = true;			}			else			{				if ( m_inputPorts[ 1 ].FloatInternalData != 1 )				{					isScaledNormal = true;				}			}			string normalMapUnpackMode = string.Empty;			string scaleValue = isScaledNormal?m_inputPorts[ 1 ].GeneratePortInstructions( ref dataCollector ):"1.0";			normalMapUnpackMode = GeneratorUtils.GenerateUnpackNormalStr( ref dataCollector, CurrentPrecisionType, UniqueId, OutputId, src, isScaledNormal, scaleValue , m_inputMode );			if( isScaledNormal && !( dataCollector.IsTemplate && dataCollector.IsSRP ) )			{				dataCollector.AddToIncludes( UniqueId, Constants.UnityStandardUtilsLibFuncs );			}						int outputUsage = 0;			for ( int i = 0; i < m_outputPorts.Count; i++ )			{				if ( m_outputPorts[ i ].IsConnected )					outputUsage += 1;			}			if ( outputUsage > 1 && !dataCollector.IsSRP )			{				string varName = "localUnpackNormal" + OutputId;				dataCollector.AddLocalVariable( UniqueId, "float3 " + varName + " = " + normalMapUnpackMode + ";" );				return GetOutputVectorItem( 0, outputId, varName );			}			else			{				return GetOutputVectorItem( 0, outputId, normalMapUnpackMode );			}		}		public override void WriteToString( ref string nodeInfo , ref string connectionsInfo )		{			base.WriteToString( ref nodeInfo , ref connectionsInfo );			IOUtils.AddFieldValueToString( ref nodeInfo , m_inputMode );		}		public override void ReadFromString( ref string[] nodeParams )		{			base.ReadFromString( ref nodeParams );			if( UIUtils.CurrentShaderVersion() > 18912 )			{				m_inputMode = (UnpackInputMode)Enum.Parse( typeof( UnpackInputMode ) , GetCurrentParam( ref nodeParams ) );			}		}	}}
 |