You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

68 lines
2.1 KiB

// Amplify Shader Editor - Visual Shader Editing Tool
// Copyright (c) Amplify Creations, Lda <info@amplify.pt>
using System;
namespace AmplifyShaderEditor
{
[NodeAttributes( "Unpack Scale Normal", "Textures", "Applies UnpackNormal/UnpackScaleNormal function" )]
[Serializable]
public class UnpackScaleNormalNode : ParentNode
{
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_previewShaderGUID = "8b0ae05e25d280c45af81ded56f8012e";
}
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 = string.Format( TemplateHelperFunctions.CreateUnpackNormalStr( dataCollector, isScaledNormal, scaleValue ), src);
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 )
{
string varName = "localUnpackNormal" + UniqueId;
dataCollector.AddLocalVariable( UniqueId, "float3 " + varName + " = " + normalMapUnpackMode + ";" );
return GetOutputVectorItem( 0, outputId, varName );
}
else
{
return GetOutputVectorItem( 0, outputId, normalMapUnpackMode );
}
}
}
}