|
|
- // Amplify Shader Editor - Visual Shader Editing Tool
- // Copyright (c) Amplify Creations, Lda <info@amplify.pt>
-
- using System;
- using UnityEngine;
-
- namespace AmplifyShaderEditor
- {
- public enum CoordinateSpaces
- {
- Tangent,
- Local,
- World,
- View,
- Clip,
- Screen
- }
-
- [Serializable]
- [NodeAttributes( "Transform Vector", "Math Operators", "Transforma a vector into another", null, KeyCode.None, false )]
- public sealed class TransformVectorOpNode : ParentNode
- {
- [SerializeField]
- private CoordinateSpaces m_source = CoordinateSpaces.Tangent;
- [SerializeField]
- private CoordinateSpaces m_destination = CoordinateSpaces.World;
-
- private const string InputTangentrStr = "float4 tangent: TANGENT";
- private const string ColorValueStr = ".tangent";
-
- private const string InputNormalStr = "float3 normal : NORMAL";
- private const string NormalValueStr = ".normal";
-
- protected override void CommonInit( int uniqueId )
- {
- base.CommonInit( uniqueId );
- AddInputPort( WirePortDataType.FLOAT4, false, Constants.EmptyPortValue );
- AddOutputPort( WirePortDataType.FLOAT4, Constants.EmptyPortValue );
- m_useInternalPortData = true;
- }
-
- void AddTangentInfo( ref MasterNodeDataCollector dataCollector )
- {
- dataCollector.AddToInput( UniqueId, InputTangentrStr, true );
- dataCollector.AddToInput( UniqueId, InputTangentrStr, true );
- dataCollector.AddToInput( UniqueId, InputNormalStr, true );
- dataCollector.AddToLocalVariables( UniqueId, "float3 binormal = cross( normalize( v.normal ), normalize( v.tangent.xyz ) ) * v.tangent.w;" );
- dataCollector.AddToLocalVariables( UniqueId, "float3x3 rotation = float3x3( v.tangent.xyz, binormal, v.normal );" );
-
- }
-
- public override string GenerateShaderForOutput( int outputId, ref MasterNodeDataCollector dataCollector, bool ignoreLocalvar )
- {
-
- //if ( !InputPorts[ 0 ].IsConnected )
- //{
- // return UIUtils.NoConnection( this );
- //}
-
- string value = m_inputPorts[ 0 ].GeneratePortInstructions( ref dataCollector );
-
- dataCollector.AddToIncludes( UniqueId, Constants.UnityShaderVariables );
-
-
-
- switch ( m_source )
- {
- case CoordinateSpaces.Tangent:
- {
- AddTangentInfo( ref dataCollector );
- switch ( m_destination )
- {
- case CoordinateSpaces.Tangent:
- {
- return value;
- }
- //case eCoordinateSpaces.Local:
- //{
- //}
- //case eCoordinateSpaces.World:
- //{
- //}
- //case eCoordinateSpaces.View:
- //{
- //}
- }
- }
- break;
- case CoordinateSpaces.Local:
- {
- switch ( m_destination )
- {
- case CoordinateSpaces.Tangent:
- {
- AddTangentInfo( ref dataCollector );
- return "float4(mul( rotation , " + value + ".xyz ),1)";
- }
- case CoordinateSpaces.Local:
- {
- return value;
- }
- case CoordinateSpaces.World:
- {
- return "mul( _Object2World , " + value + " )";
- }
- case CoordinateSpaces.View:
- {
- return "mul( UNITY_MATRIX_MV , " + value + " )";
- }
- }
- }
- break;
- case CoordinateSpaces.World:
- {
- switch ( m_destination )
- {
- //case eCoordinateSpaces.Tangent:
- //{
- //}
- case CoordinateSpaces.Local:
- {
- return "mul( _World2Object , " + value + " )";
- }
- case CoordinateSpaces.World:
- {
- return value;
- }
- case CoordinateSpaces.View:
- {
- return "mul( UNITY_MATRIX_V , " + value + " )";
- }
- }
- }
- break;
- case CoordinateSpaces.View:
- {
- UIUtils.ShowMessage( "View as Source is not supported", MessageSeverity.Warning );
- return value;
- }
- }
-
- return UIUtils.UnknownError( this );
- }
-
-
- public override void ReadFromString( ref string[] nodeParams )
- {
- base.ReadFromString( ref nodeParams );
- m_source = ( CoordinateSpaces ) Enum.Parse( typeof( CoordinateSpaces ), GetCurrentParam( ref nodeParams ) );
- m_destination = ( CoordinateSpaces ) Enum.Parse( typeof( CoordinateSpaces ), GetCurrentParam( ref nodeParams ) );
- }
-
- public override void WriteToString( ref string nodeInfo, ref string connectionsInfo )
- {
- base.WriteToString( ref nodeInfo, ref connectionsInfo );
- IOUtils.AddFieldValueToString( ref nodeInfo, m_source );
- IOUtils.AddFieldValueToString( ref nodeInfo, m_destination );
- }
- }
- }
|