{
NodeUtils.SlotConfigurationExceptionIfBadConfiguration(this, new[] { InputSlotId }, new[] { OutputSlotId });
string inputValue = GetSlotValue(InputSlotId, generationMode);
string targetTransformString = "tangentTransform_"+ spaceFrom.ToString();
string transformString = "";
bool requiresTangentTransform = false;
else if (spaceTo == CoordinateSpace.Tangent)
requiresTangentTransform = true;
transformString = "mul(tangentTransform, " + inputValue + ").xyz";
transformString = "mul("+ targetTransformString +", " + inputValue + ").xyz";
}
else if (spaceTo == CoordinateSpace.View)
transformString = "mul( tangentTransform, mul( unity_ObjectToWorld, float4(" + inputValue + ", 0) ).xyz).xyz";
transformString = "mul( "+ targetTransformString +", mul( unity_ObjectToWorld, float4(" + inputValue + ", 0) ).xyz).xyz";
if (spaceTo == CoordinateSpace.World)
transformString = "mul( " + inputValue + ", tangentTransform ).xyz";
transformString = "mul( " + inputValue + ", "+ targetTransformString+ " ).xyz";
transformString = "mul( unity_WorldToObject, float4(mul(" + inputValue + ", tangentTransform ),0) ).xyz";
transformString = "mul( unity_WorldToObject, float4(mul(" + inputValue + ", " + targetTransformString + " ),0) ).xyz";
transformString = "mul( UNITY_MATRIX_V, float4(mul(" + inputValue + ", tangentTransform ),0) ).xyz";
transformString = "mul( UNITY_MATRIX_V, float4(mul(" + inputValue + ", " + targetTransformString + " ),0) ).xyz";
else if (spaceFrom == CoordinateSpace.View)
transformString = "mul( tangentTransform, mul( float4(" + inputValue + ", 0), UNITY_MATRIX_V ).xyz ).xyz";
transformString = "mul( " + targetTransformString + ", mul( float4(" + inputValue + ", 0), UNITY_MATRIX_V ).xyz ).xyz";
if (requiresTangentTransform)
visitor.AddShaderChunk("float3x3 tangentTransform = float3x3("+ spaceFrom.ToString() + "SpaceTangent, "+ spaceFrom.ToString() + "SpaceBiTangent, "+ spaceFrom.ToString() + "SpaceNormal);", false);
visitor.AddShaderChunk("float3x3 " + targetTransformString + " = float3x3("+ spaceFrom.ToString() + "SpaceTangent, "+ spaceFrom.ToString() + "SpaceBiTangent, "+ spaceFrom.ToString() + "SpaceNormal);", true);
visitor.AddShaderChunk(string.Format("{0} {1} = {2};",
ConvertConcreteSlotValueTypeToString(precision, FindOutputSlot<MaterialSlot>(OutputSlotId).concreteValueType),