1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
// 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" + OutputId;
dataCollector.AddLocalVariable( UniqueId, "float3 " + varName + " = " + normalMapUnpackMode + ";" );
return GetOutputVectorItem( 0, outputId, varName );
}
else
{
return GetOutputVectorItem( 0, outputId, normalMapUnpackMode );
}
}
}
}
|