summaryrefslogtreecommitdiff
path: root/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/HelperFuncs/DecodeLightmapHlpNode.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/HelperFuncs/DecodeLightmapHlpNode.cs')
-rw-r--r--Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/HelperFuncs/DecodeLightmapHlpNode.cs109
1 files changed, 109 insertions, 0 deletions
diff --git a/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/HelperFuncs/DecodeLightmapHlpNode.cs b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/HelperFuncs/DecodeLightmapHlpNode.cs
new file mode 100644
index 00000000..a7f52ddf
--- /dev/null
+++ b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/HelperFuncs/DecodeLightmapHlpNode.cs
@@ -0,0 +1,109 @@
+// Amplify Shader Editor - Visual Shader Editing Tool
+// Copyright (c) Amplify Creations, Lda <info@amplify.pt>
+
+using System;
+using UnityEngine;
+
+namespace AmplifyShaderEditor
+{
+ [Serializable]
+ [NodeAttributes( "Decode Lightmap", "Miscellaneous", "Decodes color from Unity lightmap (RGBM or dLDR depending on platform)" )]
+ public sealed class DecodeLightmapHlpNode : ParentNode
+ {
+ private const string m_funcStandard = "DecodeLightmap({0})";
+ private string m_funcSRP = "DecodeLightmap({0},{1})";
+
+ private const string DecodeInstructionsLWValueStr = "half4 decodeLightmapInstructions = half4(LIGHTMAP_HDR_MULTIPLIER, LIGHTMAP_HDR_EXPONENT, 0.0h, 0.0h);";
+ private const string DecodeInstructionsNameStr = "decodeLightmapInstructions";
+ private readonly string[] DecodeInstructionsHDValueStr =
+ {
+ "#ifdef UNITY_LIGHTMAP_FULL_HDR//ase_decode_lightmap_0",
+ "\tbool useRGBMLightmap = false;//ase_decode_lightmap_1",
+ "\tfloat4 decodeLightmapInstructions = float4( 0.0, 0.0, 0.0, 0.0 );//ase_decode_lightmap_2",
+ "#else//ase_decode_lightmap//ase_decode_lightmap_3",
+ "\tbool useRGBMLightmap = true;//ase_decode_lightmap_4",
+ "#if defined(UNITY_LIGHTMAP_RGBM_ENCODING)//ase_decode_lightmap_5",
+ "\tfloat4 decodeLightmapInstructions = float4(34.493242, 2.2, 0.0, 0.0);//ase_decode_lightmap_6",
+ "#else//ase_decode_lightmap_7",
+ "\tfloat4 decodeLightmapInstructions = float4( 2.0, 2.2, 0.0, 0.0 );//ase_decode_lightmap_8",
+ "#endif//ase_decode_lightmap_9",
+ "#endif//ase_decode_lightmap_10"
+ };
+ private string m_localVarName = null;
+
+ protected override void CommonInit( int uniqueId )
+ {
+ base.CommonInit( uniqueId );
+ AddInputPort( WirePortDataType.FLOAT4, false, "Value" );
+ AddInputPort( WirePortDataType.FLOAT4, false, "Instructions" );
+
+ AddOutputPort( WirePortDataType.FLOAT3, Constants.EmptyPortValue );
+
+ m_previewShaderGUID = "c2d3bee1aee183343b31b9208cb402e9";
+ m_useInternalPortData = true;
+ }
+
+ public override string GetIncludes()
+ {
+ return Constants.UnityCgLibFuncs;
+ }
+
+ protected override void OnUniqueIDAssigned()
+ {
+ base.OnUniqueIDAssigned();
+ m_localVarName = "decodeLightMap" + OutputId;
+ }
+
+ public override void OnNodeLogicUpdate( DrawInfo drawInfo )
+ {
+ base.OnNodeLogicUpdate( drawInfo );
+ m_inputPorts[ 1 ].Visible = m_containerGraph.ParentWindow.IsShaderFunctionWindow || m_containerGraph.IsSRP;
+ }
+
+ public override string GenerateShaderForOutput( int outputId, ref MasterNodeDataCollector dataCollector, bool ignoreLocalvar )
+ {
+ if( m_outputPorts[ 0 ].IsLocalValue( dataCollector.PortCategory ) )
+ return GetOutputVectorItem( 0, outputId, m_outputPorts[ 0 ].LocalValue( dataCollector.PortCategory ) );
+
+ base.GenerateShaderForOutput( outputId, ref dataCollector, ignoreLocalvar );
+
+ string value = m_inputPorts[ 0 ].GeneratePortInstructions( ref dataCollector );
+ string finalResult = string.Empty;
+ if( dataCollector.IsTemplate && dataCollector.IsSRP )
+ {
+ string instructions = string.Empty;
+ if( m_inputPorts[ 1 ].IsConnected )
+ {
+ instructions = m_inputPorts[ 1 ].GeneratePortInstructions( ref dataCollector );
+ }
+ else
+ {
+ if( dataCollector.TemplateDataCollectorInstance.IsHDRP )
+ {
+ for( int i = 0; i < DecodeInstructionsHDValueStr.Length; i++ )
+ {
+ dataCollector.AddLocalVariable( UniqueId, DecodeInstructionsHDValueStr[ i ] );
+ }
+ }
+ else
+ {
+ dataCollector.AddLocalVariable( UniqueId, DecodeInstructionsLWValueStr );
+ }
+ instructions = DecodeInstructionsNameStr;
+
+ }
+
+ finalResult = string.Format( m_funcSRP, value , instructions );
+
+ }
+ else
+ {
+ dataCollector.AddToIncludes( UniqueId, Constants.UnityCgLibFuncs );
+ finalResult = string.Format( m_funcStandard, value );
+ }
+
+ RegisterLocalVariable( 0, finalResult, ref dataCollector, m_localVarName );
+ return GetOutputVectorItem( 0, outputId, m_outputPorts[ 0 ].LocalValue( dataCollector.PortCategory ) );
+ }
+ }
+}