public static void TangentToWorld(SpaceTransform xform, string inputValue, string outputVariable, ShaderStringBuilder sb) { // prior to version 2 all transforms were Normal, and directional transforms were normalized if (xform.version <= 1) { if (xform.type != ConversionType.Position) { xform.normalize = true; } xform.type = ConversionType.Normal; } using (sb.BlockScope()) { string tangentTransform = GenerateTangentTransform(sb, CoordinateSpace.World); switch (xform.type) { case ConversionType.Position: sb.AddLine(outputVariable, " = TransformTangentToWorldDir(", inputValue, ", ", tangentTransform, ", false).xyz + IN.WorldSpacePosition;"); break; case ConversionType.Direction: sb.AddLine(outputVariable, " = TransformTangentToWorldDir(", inputValue, ", ", tangentTransform, ", ", xform.NormalizeString(), ").xyz;"); break; case ConversionType.Normal: sb.AddLine(outputVariable, " = TransformTangentToWorld(", inputValue, ", ", tangentTransform, ", ", xform.NormalizeString(), ");"); break; } } }
public static void ViewToWorld(SpaceTransform xform, string inputValue, string outputVariable, ShaderStringBuilder sb) { switch (xform.type) { case ConversionType.Position: sb.AddLine(outputVariable, " = TransformViewToWorld(", inputValue, ");"); break; case ConversionType.Direction: if (xform.version <= 1) { xform.normalize = false; } sb.AddLine(outputVariable, " = TransformViewToWorldDir(", inputValue, ", ", xform.NormalizeString(), ");"); break; case ConversionType.Normal: sb.AddLine(outputVariable, " = TransformViewToWorldNormal(", inputValue, ", ", xform.NormalizeString(), ");"); break; } }
public static void WorldToTangent(SpaceTransform xform, string inputValue, string outputVariable, ShaderStringBuilder sb) { if (xform.version <= 1) { // prior to version 2, all transform were normalized, and all transforms were Normal transforms xform.normalize = true; xform.type = ConversionType.Normal; } using (sb.BlockScope()) { string tangentTransform = GenerateTangentTransform(sb, xform.from); switch (xform.type) { case ConversionType.Position: sb.AddLine(outputVariable, " = TransformWorldToTangentDir(", inputValue, " - IN.WorldSpacePosition, ", tangentTransform, ", false);"); break; case ConversionType.Direction: sb.AddLine(outputVariable, " = TransformWorldToTangentDir(", inputValue, ", ", tangentTransform, ", ", xform.NormalizeString(), ");"); break; case ConversionType.Normal: sb.AddLine(outputVariable, " = TransformWorldToTangent(", inputValue, ", ", tangentTransform, ", ", xform.NormalizeString(), ");"); break; } } }