diff --git a/com.unity.shadergraph/Editor/Data/Nodes/Math/Vector/TransformNode.cs b/com.unity.shadergraph/Editor/Data/Nodes/Math/Vector/TransformNode.cs index 88c5728cc1c..7f4fb345118 100644 --- a/com.unity.shadergraph/Editor/Data/Nodes/Math/Vector/TransformNode.cs +++ b/com.unity.shadergraph/Editor/Data/Nodes/Math/Vector/TransformNode.cs @@ -1,4 +1,5 @@ using System; +using System.Linq; using UnityEditor.Graphing; using UnityEditor.ShaderGraph.Drawing.Controls; using UnityEditor.ShaderGraph.Internal; @@ -138,10 +139,7 @@ public NeededCoordinateSpace RequiresNormal(ShaderStageCapability stageCapabilit public NeededTransform[] RequiresTransform(ShaderStageCapability stageCapability) { - return new[] - { - new NeededTransform(conversion.from.ToNeededCoordinateSpace(), conversion.to.ToNeededCoordinateSpace()) - }; + return spaceTransform.RequiresTransform.ToArray(); } NeededCoordinateSpace IMayRequirePosition.RequiresPosition(ShaderStageCapability stageCapability) diff --git a/com.unity.shadergraph/Editor/Data/Util/SpaceTransformUtil.cs b/com.unity.shadergraph/Editor/Data/Util/SpaceTransformUtil.cs index 05f7751b6aa..67a8c23493c 100644 --- a/com.unity.shadergraph/Editor/Data/Util/SpaceTransformUtil.cs +++ b/com.unity.shadergraph/Editor/Data/Util/SpaceTransformUtil.cs @@ -1,4 +1,5 @@ // using System; +using System.Collections.Generic; using UnityEditor.ShaderGraph.Internal; namespace UnityEditor.ShaderGraph @@ -49,6 +50,9 @@ internal string NormalizeString() public NeededCoordinateSpace RequiresPosition => ((type == ConversionType.Position) && ((from == CoordinateSpace.Tangent) || (to == CoordinateSpace.Tangent)) && (from != to)) ? NeededCoordinateSpace.World : NeededCoordinateSpace.None; + + public IEnumerable RequiresTransform => + SpaceTransformUtil.ComputeTransformRequirement(this); }; static class SpaceTransformUtil @@ -371,6 +375,20 @@ public static void AbsoluteWorldToWorld(SpaceTransform xform, string inputValue, } }; + internal static IEnumerable ComputeTransformRequirement(SpaceTransform xform) + { + var func = k_TransformFunctions[(int)xform.from, (int)xform.to]; + if (func == ViaWorld || func == ObjectToAbsoluteWorld) + { + yield return new NeededTransform(xform.from.ToNeededCoordinateSpace(), NeededCoordinateSpace.World); + yield return new NeededTransform(NeededCoordinateSpace.World, xform.to.ToNeededCoordinateSpace()); + } + else + { + yield return new NeededTransform(xform.from.ToNeededCoordinateSpace(), xform.to.ToNeededCoordinateSpace()); + } + } + public static void GenerateTransformCodeStatement(SpaceTransform xform, string inputValue, string outputVariable, ShaderStringBuilder sb) { var func = k_TransformFunctions[(int)xform.from, (int)xform.to]; diff --git a/com.unity.visualeffectgraph/CHANGELOG.md b/com.unity.visualeffectgraph/CHANGELOG.md index bb817c590ab..bafa43f7da2 100644 --- a/com.unity.visualeffectgraph/CHANGELOG.md +++ b/com.unity.visualeffectgraph/CHANGELOG.md @@ -12,6 +12,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - Editing the values in the graph did not impact the system in real-time after saving [Case 1371089](https://issuetracker.unity3d.com/product/unity/issues/guid/1371089/) - Fixed null reference exception when opening another VFX and a debug mode is enabled [Case 1347420](https://issuetracker.unity3d.com/product/unity/issues/guid/1347420/) - Creating a new VFX of the same name as an already opened VFX will reuse the existing window [Case 1382841](https://issuetracker.unity3d.com/product/unity/issues/guid/1382841/) +- Incorrect behavior of Tangent Space in ShaderGraph [Case 1363279](https://issuetracker.unity3d.com/product/unity/issues/guid/1363279/) ## [13.1.2] - 2021-11-05