| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 | // Amplify Shader Editor - Visual Shader Editing Tool// Copyright (c) Amplify Creations, Lda <info@amplify.pt>//// Custom Node HeightMap Texture Masking// Donated by Reausing UnityEngine;using UnityEditor;using System;namespace AmplifyShaderEditor{	[Serializable]	[NodeAttributes( "HeightMap Texture Blend", "Textures", "Advanced Texture Blending by using heightMap and splatMask, usefull for texture layering ", null, KeyCode.None, true, false, null, null, "Rea" )]	public sealed class HeightMapBlendNode : ParentNode	{		private const string PreventNaNLabel = "Prevent NaN";		private const string PreventNaNInfo = "Prevent NaN clamps negative base numbers over the internal pow instruction to 0 since these originate NaN.";		[SerializeField]		private bool m_preventNaN = false;		protected override void CommonInit( int uniqueId )		{			base.CommonInit( uniqueId );			AddInputPort( WirePortDataType.FLOAT, false, "HeightMap" );			AddInputPort( WirePortDataType.FLOAT, false, "SplatMask" );			AddInputPort( WirePortDataType.FLOAT, false, "BlendStrength" );			AddOutputVectorPorts( WirePortDataType.FLOAT, Constants.EmptyPortValue );			m_textLabelWidth = 120;			m_useInternalPortData = true;			m_inputPorts[ 2 ].FloatInternalData = 1;			m_autoWrapProperties = true;			m_previewShaderGUID = "b2ac23d6d5dcb334982b6f31c2e7a734";		}		public override void DrawProperties()		{			base.DrawProperties();			m_preventNaN = EditorGUILayoutToggle( PreventNaNLabel , m_preventNaN );			EditorGUILayout.HelpBox( PreventNaNInfo , MessageType.Info );		}		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 HeightMap = m_inputPorts[ 0 ].GeneratePortInstructions( ref dataCollector );			string SplatMask = m_inputPorts[ 1 ].GeneratePortInstructions( ref dataCollector);			string Blend = m_inputPorts[ 2 ].GeneratePortInstructions( ref dataCollector );			string baseOp = "((" + HeightMap + "*" + SplatMask + ")*4)+(" + SplatMask + "*2)";			if( m_preventNaN )				baseOp = "max( (" + baseOp + "), 0 )";			string HeightMask =  "saturate(pow("+baseOp+"," + Blend + "))";			string varName = "HeightMask" + OutputId;			RegisterLocalVariable( 0, HeightMask, ref dataCollector , varName );			return m_outputPorts[ 0 ].LocalValue( dataCollector.PortCategory );		}		/*         A = (heightMap * SplatMask)*4         B = SplatMask*2         C = pow(A+B,Blend)         saturate(C)         saturate(pow(((heightMap * SplatMask)*4)+(SplatMask*2),Blend));         */		public override void ReadFromString( ref string[] nodeParams )		{			base.ReadFromString( ref nodeParams );			if( UIUtils.CurrentShaderVersion() > 18910 )				m_preventNaN = 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_preventNaN );		}	}}
 |