Welcome to WSL!

Make yourself at home, but before posting, please may I ask you to read the following topics.


Posting 101
Server space, screenshots, and you

Thank you!

PS. please pretty please:


Image

Multiline Text Animation

Moderator: SecondMan

User avatar
gez
Fusioneer
Posts: 168
Joined: Mon Jul 16, 2018 6:21 pm
Answers: 1
Location: Argentina
Been thanked: 4 times
Contact:

Multiline Text Animation

#1

Post by gez » Thu Jul 19, 2018 8:02 pm

Hi,
I'm trying to animate multi-line text from a single Text+ node and I can't figure out how it has to be done.
I've been watching lots of tutorials, but all the text animations showed are only based on single-line text (I saw the follower, which is pretty neat but it only seems to work on character-basis).
Is there a way to do something similar to what you get with the follower char by char, but word by word, or line by line?
I've been running through the forum looking for some hints and I'm afraid I know the answer, but I'll ask the experts first :D

Thanks in advance!

Tags:

User avatar
SirEdric
Fusionator
Posts: 2343
Joined: Tue Aug 05, 2014 10:04 am
Answers: 12
Real name: Eric Westphal
Been thanked: 47 times
Contact:

Re: Multiline Text Animation

#2

Post by SirEdric » Thu Jul 19, 2018 8:58 pm

The Controls in the Transform/Line tab can surely be animated.
But that's obviously 'only' for transform.

Code: Select all

{
	Tools = ordered() {
		Text1 = TextPlus {
			CtrlWZoom = false,
			Inputs = {
				Width = Input { Value = 1920, },
				Height = Input { Value = 1080, },
				["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
				Size = Input { Value = 0.1282, },
				Font = Input { Value = "Open Sans", },
				StyledText = Input {
					SourceOp = "Follower1",
					Source = "StyledText",
				},
				Style = Input { Value = "Bold", },
				ManualFontKerningPlacement = Input {
					Value = StyledText {
						Array = {
						},
						Value = ""
					},
				},
				SelectTransform = Input { Value = 2, },
			},
			ViewInfo = OperatorInfo { Pos = { 55, 16.5 } },
		},
		Follower1 = StyledTextFollower {
			CtrlWZoom = false,
			Inputs = {
				Delay = Input { Value = 0.5, },
				Text = Input {
					Value = StyledText {
						Array = {
						},
						Value = "Just to\ndraw a\nthin line"
					},
				},
				SelectTransform = Input { Value = 2, },
				LineSpacing = Input {
					SourceOp = "Follower1LineSpacing",
					Source = "Value",
				},
				LineRotation = Input { Value = 1, },
				LineAngleX = Input {
					SourceOp = "Follower1LineAngleX",
					Source = "Value",
				},
				LineAngleY = Input {
					SourceOp = "Follower1LineAngleY",
					Source = "Value",
				},
			},
		},
		Follower1LineSpacing = BezierSpline {
			SplineColor = { Red = 229, Green = 93, Blue = 2 },
			NameSet = true,
			KeyFrames = {
				[0] = { 3, RH = { 3.33333333333333, 2.33333333333333 }, Flags = { Linear = true } },
				[10] = { 1, LH = { 6.66666666666667, 1.66666666666667 }, Flags = { Linear = true } }
			}
		},
		Follower1LineAngleX = BezierSpline {
			SplineColor = { Red = 229, Green = 83, Blue = 130 },
			NameSet = true,
			KeyFrames = {
				[41] = { 0, RH = { 42.3333333333333, 30 }, Flags = { Linear = true } },
				[45] = { 90, LH = { 43.6666666666667, 60 }, Flags = { Linear = true } }
			}
		},
		Follower1LineAngleY = BezierSpline {
			SplineColor = { Red = 229, Green = 83, Blue = 48 },
			NameSet = true,
			KeyFrames = {
				[41] = { 0, RH = { 42.3333333333333, 30 }, Flags = { Linear = true } },
				[45] = { 90, LH = { 43.6666666666667, 60 }, Flags = { Linear = true } }
			}
		}
	}
}

User avatar
gez
Fusioneer
Posts: 168
Joined: Mon Jul 16, 2018 6:21 pm
Answers: 1
Location: Argentina
Been thanked: 4 times
Contact:

Re: Multiline Text Animation

#3

Post by gez » Fri Jul 20, 2018 7:34 am

Cool, SirEdric!
That example helped me to understand the procedure better, but I still can't figure out how to animate the position of each line/word, for instance from outside the screen to its destination position.
I know how to do this with characters by animating the offset value in the transform properties under the shading tab (odd placing, btw), but I can't figure out how to do it with lines.
Tried with the Line Pivot, but it doesn't seem to have any effect.
I can imagine workarounds, like creating extra modifiers for each line and limiting the first/last character range for each, but it sounds a tedious task (and a pain when the paragraph has many lines).
Any tips?
Last edited by gez on Fri Jul 20, 2018 10:29 am, edited 1 time in total.

User avatar
intelligent machine
Fusionista
Posts: 626
Joined: Fri May 13, 2016 10:01 pm
Answers: 6
Location: Austin, Texas, USA
Real name: Sam Treadway
Been thanked: 38 times
Contact:

Re: Multiline Text Animation

#4

Post by intelligent machine » Fri Jul 20, 2018 9:32 am

I've noticed Text+ can get clunky and slow sometimes when too many parameters are animated using follower.

Here are two examples for you.

The first is a per word animate it. I set the the Y to -1 on the transform > word > word pivot for the main tool and the follower modifier and then animated the word size Y.

The second example works like the first but with lines.

In the third example, I animated the lines with another trick using several copies of the text+ tool. At first it seems like more work than working with a single node but it's actually a lot easier to control. You write out your multiline text, then make a copy of the node for each line and use character level styling to hide all but one line on each by changing the shading. Then animate in reverse order. By hiding the lines you maintain the line spacing and you can always use instancing to maintain all other parameters.

Example 1:
.
Code: [Select all] [Expand/Collapse] [Download] (WSLsnippet-2018-07-20--11.16.03.setting)
  1. {
  2.     Tools = ordered() {
  3.         Text_WordLevelPositiononpath = BezierSpline {
  4.             SplineColor = { Red = 237, Green = 132, Blue = 220 },
  5.             NameSet = true,
  6.             KeyFrames = {
  7.                 [0] = { -0.1778846, RH = { 50, 0.275641033333333 }, Flags = { Linear = true } },
  8.                 [150] = { 1.1826923, Flags = { Linear = true }, LH = { 100, 0.729166666666667 } }
  9.             }
  10.         },
  11.         Text_WordLevelWordAngleX = BezierSpline {
  12.             SplineColor = { Red = 249, Green = 6, Blue = 71 },
  13.             NameSet = true,
  14.             KeyFrames = {
  15.                 [0] = { 0, Flags = { Linear = true } }
  16.             }
  17.         },
  18.         Text_WordLevelWordAngleY = BezierSpline {
  19.             SplineColor = { Red = 249, Green = 34, Blue = 71 },
  20.             NameSet = true,
  21.             KeyFrames = {
  22.                 [0] = { 0, RH = { 50, 120 }, Flags = { Linear = true } },
  23.                 [150] = { 360, Flags = { Linear = true }, LH = { 100, 240 } }
  24.             }
  25.         },
  26.         Text_WordLevelWordAngleZ = BezierSpline {
  27.             SplineColor = { Red = 249, Green = 6, Blue = 71 },
  28.             NameSet = true,
  29.             KeyFrames = {
  30.                 [0] = { 0, RH = { 50, 120 }, Flags = { Linear = true } },
  31.                 [150] = { 360, Flags = { Linear = true }, LH = { 100, 240 } }
  32.             }
  33.         },
  34.         Follower1 = StyledTextFollower {
  35.             CtrlWZoom = false,
  36.             Inputs = {
  37.                 WordSizeX = Input {
  38.                     Source = "Value",
  39.                     SourceOp = "Follower1WordSizeX"
  40.                 },
  41.                 Delay = Input { Value = 5 },
  42.                 Color1 = Input { Value = 0 },
  43.                 Options1 = Input { Value = 0 },
  44.                 WordRotation = Input { Value = 1 },
  45.                 WordPivot = Input { Value = { 0, -2 } },
  46.                 LinePivot = Input { Value = { 0, -2 } },
  47.                 LineSpacing = Input { Value = 10 },
  48.                 SelectTransform = Input { Value = 1 },
  49.                 Text = Input {
  50.                     Source = "StyledText",
  51.                     SourceOp = "Follower2"
  52.                 }
  53.             }
  54.         },
  55.         Follower2 = StyledTextFollower {
  56.             CtrlWZoom = false,
  57.             Inputs = {
  58.                 WordSizeX = Input {
  59.                     Source = "Value",
  60.                     SourceOp = "Follower2WordSizeX"
  61.                 },
  62.                 SelectTransform = Input { Value = 1 },
  63.                 Text = Input {
  64.                     Value = StyledText {
  65.                         Array = {
  66.                         },
  67.                         Value = "Word Level Transformations"
  68.                     }
  69.                 }
  70.             }
  71.         },
  72.         Follower2WordSizeX = BezierSpline {
  73.             SplineColor = { Red = 253, Green = 36, Blue = 205 },
  74.             NameSet = true,
  75.             KeyFrames = {
  76.                 [0] = { 1, RH = { 3.33333333333333, 0.666666666666667 }, Flags = { Linear = true } },
  77.                 [10] = { 0, Flags = { Linear = true }, LH = { 6.66666666666667, 0.333333333333333 } }
  78.             }
  79.         },
  80.         Follower1WordSizeX = BezierSpline {
  81.             SplineColor = { Red = 227, Green = 36, Blue = 253 },
  82.             NameSet = true,
  83.             KeyFrames = {
  84.                 [0] = { 0, RH = { 3.33333333333333, 0.333333333333333 }, Flags = { Linear = true } },
  85.                 [10] = { 1, Flags = { Linear = true }, LH = { 6.66666666666667, 0.666666666666667 } }
  86.             }
  87.         },
  88.         Text3D1ExtrusionProfile = LUTBezier {
  89.             KeyColorSplines = {
  90.                 [0] = {
  91.                     [0] = { 0, RH = { 0.0666666666666667, 0.333333333333333 }, Flags = { Linear = true } },
  92.                     [0.2] = { 1, RH = { 0.4, 1 }, Flags = { Linear = true }, LH = { 0.133333333333333, 0.666666666666667 } },
  93.                     [0.8] = { 1, RH = { 0.866666666666667, 0.666666666666667 }, Flags = { Linear = true }, LH = { 0.6, 1 } },
  94.                     { 0, Flags = { Linear = true }, LH = { 0.933333333333333, 0.333333333333333 } }
  95.                 }
  96.             },
  97.             NameSet = true,
  98.             SplineColor = { Red = 192, Green = 128, Blue = 64 }
  99.         },
  100.         Follower3 = StyledTextFollower {
  101.             CtrlWZoom = false,
  102.             Inputs = {
  103.                 WordPivot = Input { Value = { 0, -2 } },
  104.                 CharacterPivot = Input { Value = { 0, -5 } },
  105.                 Delay = Input { Value = 2 },
  106.                 WordSizeY = Input {
  107.                     Source = "Value",
  108.                     SourceOp = "Follower3WordSizeY"
  109.                 },
  110.                 SelectTransform = Input { Value = 1 },
  111.                 Text = Input {
  112.                     Value = StyledText {
  113.                         Array = {
  114.                         },
  115.                         Value = "Text 3D\nis fun"
  116.                     }
  117.                 }
  118.             }
  119.         },
  120.         Follower3WordSizeY = BezierSpline {
  121.             SplineColor = { Red = 226, Green = 36, Blue = 253 },
  122.             NameSet = true,
  123.             KeyFrames = {
  124.                 [0] = { 0, RH = { 3.33333333333333, 0.333333333333333 }, Flags = { Linear = true } },
  125.                 [10] = { 1, Flags = { Linear = true }, LH = { 6.66666666666667, 0.666666666666667 } }
  126.             }
  127.         },
  128.         Text2 = TextPlus {
  129.             CtrlWZoom = false,
  130.             ViewInfo = OperatorInfo { Pos = { 935, 214.5 } },
  131.             Inputs = {
  132.                 Center = Input { Value = { 0.148409893992933, 0.706751054852321 } },
  133.                 GlobalOut = Input { Value = 60 },
  134.                 ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" } },
  135.                 VerticalJustification = Input { Value = 0 },
  136.                 ManualFontKerningPlacement = Input {
  137.                     Value = StyledText {
  138.                         Array = {
  139.                         },
  140.                         Value = ""
  141.                     }
  142.                 },
  143.                 StyledText = Input {
  144.                     Source = "StyledText",
  145.                     SourceOp = "Follower4"
  146.                 },
  147.                 Style = Input { Value = "Bold" },
  148.                 SelectTransform = Input { Value = 1 },
  149.                 WordPivot = Input { Value = { 0, -1 } },
  150.                 Size = Input { Value = 0.1345 },
  151.                 Font = Input { Value = "Open Sans" },
  152.                 HorizontalJustification = Input { Value = 0 },
  153.                 Alignment = Input { Value = 1 },
  154.                 Height = Input { Value = 858 },
  155.                 Width = Input { Value = 2048 }
  156.             }
  157.         },
  158.         Follower4 = StyledTextFollower {
  159.             CtrlWZoom = false,
  160.             Inputs = {
  161.                 WordPivot = Input { Value = { 0, -1 } },
  162.                 Delay = Input { Value = 0.5 },
  163.                 WordSizeY = Input {
  164.                     Source = "Value",
  165.                     SourceOp = "Follower4WordSizeY"
  166.                 },
  167.                 SelectTransform = Input { Value = 1 },
  168.                 Text = Input {
  169.                     Value = StyledText {
  170.                         Array = {
  171.                         },
  172.                         Value = "Playing with Text+\nis so much fun!"
  173.                     }
  174.                 }
  175.             }
  176.         },
  177.         Follower4WordSizeY = BezierSpline {
  178.             SplineColor = { Red = 226, Green = 36, Blue = 253 },
  179.             NameSet = true,
  180.             KeyFrames = {
  181.                 [0] = { 0, RH = { 0, 0 }, Flags = { Linear = true } },
  182.                 [20] = { 1, LH = { 9.8989898989899, 1 } }
  183.             }
  184.         }
  185.     }
  186. }
.
.

Example 2:
.
Code: [Select all] [Expand/Collapse] [Download] (WSLsnippet-2018-07-20--11.29.37.setting)
  1. {
  2.     Tools = ordered() {
  3.         Text_WordLevelPositiononpath = BezierSpline {
  4.             SplineColor = { Red = 237, Green = 132, Blue = 220 },
  5.             NameSet = true,
  6.             KeyFrames = {
  7.                 [0] = { -0.1778846, RH = { 50, 0.275641033333333 }, Flags = { Linear = true } },
  8.                 [150] = { 1.1826923, Flags = { Linear = true }, LH = { 100, 0.729166666666667 } }
  9.             }
  10.         },
  11.         Text_WordLevelWordAngleX = BezierSpline {
  12.             SplineColor = { Red = 249, Green = 6, Blue = 71 },
  13.             NameSet = true,
  14.             KeyFrames = {
  15.                 [0] = { 0, Flags = { Linear = true } }
  16.             }
  17.         },
  18.         Text_WordLevelWordAngleY = BezierSpline {
  19.             SplineColor = { Red = 249, Green = 34, Blue = 71 },
  20.             NameSet = true,
  21.             KeyFrames = {
  22.                 [0] = { 0, RH = { 50, 120 }, Flags = { Linear = true } },
  23.                 [150] = { 360, Flags = { Linear = true }, LH = { 100, 240 } }
  24.             }
  25.         },
  26.         Text_WordLevelWordAngleZ = BezierSpline {
  27.             SplineColor = { Red = 249, Green = 6, Blue = 71 },
  28.             NameSet = true,
  29.             KeyFrames = {
  30.                 [0] = { 0, RH = { 50, 120 }, Flags = { Linear = true } },
  31.                 [150] = { 360, Flags = { Linear = true }, LH = { 100, 240 } }
  32.             }
  33.         },
  34.         Follower1 = StyledTextFollower {
  35.             CtrlWZoom = false,
  36.             Inputs = {
  37.                 WordSizeX = Input {
  38.                     Source = "Value",
  39.                     SourceOp = "Follower1WordSizeX"
  40.                 },
  41.                 Delay = Input { Value = 5 },
  42.                 Color1 = Input { Value = 0 },
  43.                 Options1 = Input { Value = 0 },
  44.                 WordRotation = Input { Value = 1 },
  45.                 WordPivot = Input { Value = { 0, -2 } },
  46.                 LinePivot = Input { Value = { 0, -2 } },
  47.                 LineSpacing = Input { Value = 10 },
  48.                 SelectTransform = Input { Value = 1 },
  49.                 Text = Input {
  50.                     Source = "StyledText",
  51.                     SourceOp = "Follower2"
  52.                 }
  53.             }
  54.         },
  55.         Follower2 = StyledTextFollower {
  56.             CtrlWZoom = false,
  57.             Inputs = {
  58.                 WordSizeX = Input {
  59.                     Source = "Value",
  60.                     SourceOp = "Follower2WordSizeX"
  61.                 },
  62.                 SelectTransform = Input { Value = 1 },
  63.                 Text = Input {
  64.                     Value = StyledText {
  65.                         Array = {
  66.                         },
  67.                         Value = "Word Level Transformations"
  68.                     }
  69.                 }
  70.             }
  71.         },
  72.         Follower2WordSizeX = BezierSpline {
  73.             SplineColor = { Red = 253, Green = 36, Blue = 205 },
  74.             NameSet = true,
  75.             KeyFrames = {
  76.                 [0] = { 1, RH = { 3.33333333333333, 0.666666666666667 }, Flags = { Linear = true } },
  77.                 [10] = { 0, Flags = { Linear = true }, LH = { 6.66666666666667, 0.333333333333333 } }
  78.             }
  79.         },
  80.         Follower1WordSizeX = BezierSpline {
  81.             SplineColor = { Red = 227, Green = 36, Blue = 253 },
  82.             NameSet = true,
  83.             KeyFrames = {
  84.                 [0] = { 0, RH = { 3.33333333333333, 0.333333333333333 }, Flags = { Linear = true } },
  85.                 [10] = { 1, Flags = { Linear = true }, LH = { 6.66666666666667, 0.666666666666667 } }
  86.             }
  87.         },
  88.         Text3D1ExtrusionProfile = LUTBezier {
  89.             KeyColorSplines = {
  90.                 [0] = {
  91.                     [0] = { 0, RH = { 0.0666666666666667, 0.333333333333333 }, Flags = { Linear = true } },
  92.                     [0.2] = { 1, RH = { 0.4, 1 }, Flags = { Linear = true }, LH = { 0.133333333333333, 0.666666666666667 } },
  93.                     [0.8] = { 1, RH = { 0.866666666666667, 0.666666666666667 }, Flags = { Linear = true }, LH = { 0.6, 1 } },
  94.                     { 0, Flags = { Linear = true }, LH = { 0.933333333333333, 0.333333333333333 } }
  95.                 }
  96.             },
  97.             NameSet = true,
  98.             SplineColor = { Red = 192, Green = 128, Blue = 64 }
  99.         },
  100.         Follower3 = StyledTextFollower {
  101.             CtrlWZoom = false,
  102.             Inputs = {
  103.                 WordPivot = Input { Value = { 0, -2 } },
  104.                 CharacterPivot = Input { Value = { 0, -5 } },
  105.                 Delay = Input { Value = 2 },
  106.                 WordSizeY = Input {
  107.                     Source = "Value",
  108.                     SourceOp = "Follower3WordSizeY"
  109.                 },
  110.                 SelectTransform = Input { Value = 1 },
  111.                 Text = Input {
  112.                     Value = StyledText {
  113.                         Array = {
  114.                         },
  115.                         Value = "Text 3D\nis fun"
  116.                     }
  117.                 }
  118.             }
  119.         },
  120.         Follower3WordSizeY = BezierSpline {
  121.             SplineColor = { Red = 226, Green = 36, Blue = 253 },
  122.             NameSet = true,
  123.             KeyFrames = {
  124.                 [0] = { 0, RH = { 3.33333333333333, 0.333333333333333 }, Flags = { Linear = true } },
  125.                 [10] = { 1, Flags = { Linear = true }, LH = { 6.66666666666667, 0.666666666666667 } }
  126.             }
  127.         },
  128.         Follower4 = StyledTextFollower {
  129.             CtrlWZoom = false,
  130.             Inputs = {
  131.                 WordPivot = Input { Value = { 0, -1 } },
  132.                 Delay = Input { Value = 0.5 },
  133.                 WordSizeY = Input {
  134.                     Source = "Value",
  135.                     SourceOp = "Follower4WordSizeY"
  136.                 },
  137.                 SelectTransform = Input { Value = 1 },
  138.                 Text = Input {
  139.                     Value = StyledText {
  140.                         Array = {
  141.                         },
  142.                         Value = "Playing with Text+\nis so much fun!"
  143.                     }
  144.                 }
  145.             }
  146.         },
  147.         Follower4WordSizeY = BezierSpline {
  148.             SplineColor = { Red = 226, Green = 36, Blue = 253 },
  149.             NameSet = true,
  150.             KeyFrames = {
  151.                 [0] = { 0, RH = { 0, 0 }, Flags = { Linear = true } },
  152.                 [20] = { 1, LH = { 9.8989898989899, 1 } }
  153.             }
  154.         },
  155.         Text3 = TextPlus {
  156.             CtrlWZoom = false,
  157.             ViewInfo = OperatorInfo { Pos = { 1210, 247.5 } },
  158.             Inputs = {
  159.                 GlobalOut = Input { Value = 60 },
  160.                 ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" } },
  161.                 ManualFontKerningPlacement = Input {
  162.                     Value = StyledText {
  163.                         Array = {
  164.                         },
  165.                         Value = ""
  166.                     }
  167.                 },
  168.                 StyledText = Input {
  169.                     Source = "StyledText",
  170.                     SourceOp = "Follower5"
  171.                 },
  172.                 Style = Input { Value = "Bold" },
  173.                 Width = Input { Value = 2048 },
  174.                 Font = Input { Value = "Open Sans" },
  175.                 LinePivot = Input { Value = { 0, -2 } },
  176.                 Height = Input { Value = 858 },
  177.                 SelectTransform = Input { Value = 2 }
  178.             }
  179.         },
  180.         Follower5 = StyledTextFollower {
  181.             CtrlWZoom = false,
  182.             Inputs = {
  183.                 LinePivot = Input { Value = { 0, -1 } },
  184.                 LineSizeY = Input {
  185.                     Source = "Value",
  186.                     SourceOp = "Follower5LineSizeY"
  187.                 },
  188.                 Delay = Input { Value = 0.8 },
  189.                 SelectTransform = Input { Value = 2 },
  190.                 Text = Input {
  191.                     Value = StyledText {
  192.                         Array = {
  193.                         },
  194.                         Value = "Playing with\nText+ is\nso\nmuch\nfun!\n"
  195.                     }
  196.                 }
  197.             }
  198.         },
  199.         Follower5LineSizeY = BezierSpline {
  200.             SplineColor = { Red = 113, Green = 46, Blue = 253 },
  201.             NameSet = true,
  202.             KeyFrames = {
  203.                 [0] = { 0, RH = { 0, 0 }, Flags = { Linear = true } },
  204.                 [15] = { 1, LH = { 7.42424242424242, 1 } }
  205.             }
  206.         }
  207.     }
  208. }
.
.

Example 3:
.
Code: [Select all] [Expand/Collapse] [Download] (WSLsnippet-2018-07-20--11.23.57.setting)
  1. {
  2.     Tools = ordered() {
  3.         Background1 = Background {
  4.             ViewInfo = OperatorInfo { Pos = { 770, 610.5 } },
  5.             CurrentSettings = 2,
  6.             CustomData = {
  7.                 Settings = {
  8.                     {
  9.                         Tools = ordered() {
  10.                             Background1 = Background {
  11.                                 ViewInfo = OperatorInfo { Pos = { 770, 610.5 } },
  12.                                 CtrlWZoom = false,
  13.                                 CustomData = {
  14.                                 },
  15.                                 Inputs = {
  16.                                     Depth = Input { Value = 4 },
  17.                                     Width = Input { Value = 2048 },
  18.                                     ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" } },
  19.                                     TopLeftAlpha = Input { Value = 0 },
  20.                                     Height = Input { Value = 858 },
  21.                                     UseFrameFormatSettings = Input { Value = 1 }
  22.                                 }
  23.                             }
  24.                         }
  25.                     },
  26.                     {
  27.                         Tools = ordered() {
  28.                             Background1 = Background {
  29.                                 Name = "Background1",
  30.                                 Inputs = {
  31.                                     Depth = Input { Value = 4 },
  32.                                     ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" } },
  33.                                     Width = Input { Value = 2048 },
  34.                                     UseFrameFormatSettings = Input { Value = 1 },
  35.                                     Height = Input { Value = 858 }
  36.                                 },
  37.                                 CtrlWZoom = false,
  38.                                 CustomData = {
  39.                                 },
  40.                                 ViewInfo = OperatorInfo { Pos = { 825, 214.5 } }
  41.                             }
  42.                         }
  43.                     },
  44.                     {
  45.                         Tools = ordered() {
  46.                             Background1 = Background {
  47.                                 Inputs = {
  48.                                     TopLeftRed = Input { Value = 1 },
  49.                                     TopLeftBlue = Input { Value = 1 },
  50.                                     ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" } },
  51.                                     Width = Input { Value = 2048 },
  52.                                     UseFrameFormatSettings = Input { Value = 1 },
  53.                                     Depth = Input { Value = 4 },
  54.                                     Height = Input { Value = 858 },
  55.                                     TopLeftGreen = Input { Value = 1 }
  56.                                 },
  57.                                 CtrlWZoom = false,
  58.                                 CustomData = {
  59.                                 },
  60.                                 ViewInfo = OperatorInfo { Pos = { 825, 214.5 } }
  61.                             }
  62.                         }
  63.                     },
  64.                     {
  65.                         Tools = ordered() {
  66.                             Background1 = Background {
  67.                                 Inputs = {
  68.                                     TopLeftRed = Input { Value = 1 },
  69.                                     ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" } },
  70.                                     Type = Input { Value = FuID { "Vertical" } },
  71.                                     UseFrameFormatSettings = Input { Value = 1 },
  72.                                     TopLeftGreen = Input { Value = 1 },
  73.                                     TopLeftBlue = Input { Value = 1 },
  74.                                     Width = Input { Value = 2048 },
  75.                                     Height = Input { Value = 858 },
  76.                                     Depth = Input { Value = 4 }
  77.                                 },
  78.                                 CtrlWZoom = false,
  79.                                 CustomData = {
  80.                                 },
  81.                                 ViewInfo = OperatorInfo { Pos = { 825, 214.5 } }
  82.                             }
  83.                         }
  84.                     },
  85.                     {
  86.                         Tools = ordered() {
  87.                             Background1 = Background {
  88.                                 Inputs = {
  89.                                     TopLeftRed = Input { Value = 1 },
  90.                                     TopLeftGreen = Input { Value = 0.5 },
  91.                                     BottomLeftGreen = Input { Value = 1 },
  92.                                     UseFrameFormatSettings = Input { Value = 1 },
  93.                                     Type = Input { Value = FuID { "Corner" } },
  94.                                     Depth = Input { Value = 4 },
  95.                                     BottomLeftRed = Input { Value = 1 },
  96.                                     BottomRightBlue = Input { Value = 0.5 },
  97.                                     BottomRightRed = Input { Value = 1 },
  98.                                     TopLeftBlue = Input { Value = 0.5 },
  99.                                     Width = Input { Value = 2048 },
  100.                                     ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" } },
  101.                                     BottomLeftBlue = Input { Value = 0.5 },
  102.                                     TopRightBlue = Input { Value = 0.5 },
  103.                                     Height = Input { Value = 858 },
  104.                                     TopRightGreen = Input { Value = 1 }
  105.                                 },
  106.                                 CtrlWZoom = false,
  107.                                 CustomData = {
  108.                                 },
  109.                                 ViewInfo = OperatorInfo { Pos = { 825, 214.5 } }
  110.                             }
  111.                         }
  112.                     }
  113.                 }
  114.             },
  115.             Inputs = {
  116.                 GlobalOut = Input { Value = 70 },
  117.                 Width = Input { Value = 2048 },
  118.                 ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" } },
  119.                 Depth = Input { Value = 4 },
  120.                 Height = Input { Value = 858 },
  121.                 UseFrameFormatSettings = Input { Value = 1 }
  122.             }
  123.         },
  124.         Text2_4 = TextPlus {
  125.             ViewInfo = OperatorInfo { Pos = { 935, 115.5 } },
  126.             Inputs = {
  127.                 Center = Input { Value = { 0.0218295218295218, 0.867245657568238 } },
  128.                 GlobalOut = Input { Value = 70 },
  129.                 ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" } },
  130.                 VerticalJustification = Input { Value = 0 },
  131.                 ManualFontKerningPlacement = Input {
  132.                     Value = StyledText {
  133.                         Array = {
  134.                         },
  135.                         Value = ""
  136.                     }
  137.                 },
  138.                 StyledText = Input {
  139.                     Source = "StyledText",
  140.                     SourceOp = "CharacterLevelStyling1_4"
  141.                 },
  142.                 Style = Input { Value = "Bold" },
  143.                 Width = Input { Value = 2048 },
  144.                 Font = Input { Value = "Open Sans" },
  145.                 HorizontalJustification = Input { Value = 0 },
  146.                 Height = Input { Value = 858 },
  147.                 Alignment = Input { Value = 1 }
  148.             }
  149.         },
  150.         CharacterLevelStyling1_4 = StyledTextCLS {
  151.             CtrlWZoom = false,
  152.             Inputs = {
  153.                 Thickness = Input { Value = 0.02 },
  154.                 Alpha = Input { Value = 0 },
  155.                 JoinStyle = Input { Value = 1 },
  156.                 VerticalTopCenterBottom = Input { Value = -1 },
  157.                 RightClickHereToAnimateCharacterLevelStyling = Input {
  158.                     Value = StyledText {
  159.                         Array = {
  160.                             {
  161.                                 First = 0,
  162.                                 Parameter = 2401,
  163.                                 String = "",
  164.                                 Value = 0,
  165.                                 Index = 0,
  166.                                 Last = 158
  167.                             },
  168.                             {
  169.                                 First = 0,
  170.                                 Parameter = 2402,
  171.                                 String = "",
  172.                                 Value = 0,
  173.                                 Index = 0,
  174.                                 Last = 158
  175.                             },
  176.                             {
  177.                                 First = 0,
  178.                                 Parameter = 2403,
  179.                                 String = "",
  180.                                 Value = 0,
  181.                                 Index = 0,
  182.                                 Last = 158
  183.                             },
  184.                             {
  185.                                 First = 0,
  186.                                 Parameter = 2404,
  187.                                 String = "",
  188.                                 Value = 0,
  189.                                 Index = 0,
  190.                                 Last = 158
  191.                             }
  192.                         },
  193.                         Value = ""
  194.                     }
  195.                 },
  196.                 Level = Input { Value = 3 },
  197.                 AdaptCharacterWidthToAngle = Input { Value = -1 },
  198.                 AdaptWordWidthToAngle = Input { Value = -1 },
  199.                 PriorityBack = Input { Value = 8 },
  200.                 Style = Input { Value = "Bold" },
  201.                 HorizontalLeftCenterRight = Input { Value = -1 },
  202.                 BevelWidth = Input { Value = 0 },
  203.                 BevelDepth = Input { Value = 0 },
  204.                 Font = Input { Value = "Open Sans" },
  205.                 Blue = Input { Value = 0 },
  206.                 Red = Input { Value = 0 },
  207.                 Green = Input { Value = 0 },
  208.                 Text = Input {
  209.                     Value = StyledText {
  210.                         Array = {
  211.                         },
  212.                         Value = "I know how to do this with characters\nby animating the offset value in the\ntransform properties under the shading\ntab (odd placing, btw), but I can't figure\nout how to do it with lines."
  213.                     }
  214.                 }
  215.             }
  216.         },
  217.         Transform1 = Transform {
  218.             ViewInfo = OperatorInfo { Pos = { 1155, 115.5 } },
  219.             Inputs = {
  220.                 Center = Input {
  221.                     Source = "Position",
  222.                     SourceOp = "Path1"
  223.                 },
  224.                 Input = Input {
  225.                     Source = "Output",
  226.                     SourceOp = "Text2_4"
  227.                 }
  228.             }
  229.         },
  230.         Path1 = PolyPath {
  231.             DrawMode = "InsertAndModify",
  232.             Inputs = {
  233.                 Displacement = Input {
  234.                     Source = "Value",
  235.                     SourceOp = "Path1Displacement"
  236.                 },
  237.                 PolyLine = Input {
  238.                     Value = Polyline {
  239.                         Points = {
  240.                             { Linear = true, X = 0, RY = 0.0925, LockY = true, RX = 0, Y = -0.2775 },
  241.                             { Linear = true, X = 0, LX = 0, LockY = true, Y = 0, LY = -0.0925 }
  242.                         }
  243.                     }
  244.                 }
  245.             }
  246.         },
  247.         Path1Displacement = BezierSpline {
  248.             SplineColor = { Red = 255, Green = 0, Blue = 255 },
  249.             NameSet = true,
  250.             KeyFrames = {
  251.                 [40] = { 0, RH = { 40, 0 }, Flags = { LockedY = true, Linear = true } },
  252.                 [55] = { 1, Flags = { LockedY = true }, LH = { 43.7858851674641, 1 } }
  253.             }
  254.         },
  255.         Text2_3 = TextPlus {
  256.             ViewInfo = OperatorInfo { Pos = { 935, 214.5 } },
  257.             Inputs = {
  258.                 Center = Input { Value = { 0.0218295218295218, 0.867245657568238 } },
  259.                 GlobalOut = Input { Value = 70 },
  260.                 ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" } },
  261.                 VerticalJustification = Input { Value = 0 },
  262.                 ManualFontKerningPlacement = Input {
  263.                     Value = StyledText {
  264.                         Array = {
  265.                         },
  266.                         Value = ""
  267.                     }
  268.                 },
  269.                 StyledText = Input {
  270.                     Source = "StyledText",
  271.                     SourceOp = "CharacterLevelStyling1_3"
  272.                 },
  273.                 Style = Input { Value = "Bold" },
  274.                 Width = Input { Value = 2048 },
  275.                 Font = Input { Value = "Open Sans" },
  276.                 HorizontalJustification = Input { Value = 0 },
  277.                 Height = Input { Value = 858 },
  278.                 Alignment = Input { Value = 1 }
  279.             }
  280.         },
  281.         CharacterLevelStyling1_3 = StyledTextCLS {
  282.             CtrlWZoom = false,
  283.             Inputs = {
  284.                 Thickness = Input { Value = 0.02 },
  285.                 Alpha = Input { Value = 0 },
  286.                 JoinStyle = Input { Value = 1 },
  287.                 VerticalTopCenterBottom = Input { Value = -1 },
  288.                 RightClickHereToAnimateCharacterLevelStyling = Input {
  289.                     Value = StyledText {
  290.                         Array = {
  291.                             {
  292.                                 First = 161,
  293.                                 Parameter = 2401,
  294.                                 String = "",
  295.                                 Value = 0,
  296.                                 Index = 0,
  297.                                 Last = 188
  298.                             },
  299.                             {
  300.                                 First = 161,
  301.                                 Parameter = 2402,
  302.                                 String = "",
  303.                                 Value = 0,
  304.                                 Index = 0,
  305.                                 Last = 188
  306.                             },
  307.                             {
  308.                                 First = 161,
  309.                                 Parameter = 2403,
  310.                                 String = "",
  311.                                 Value = 0,
  312.                                 Index = 0,
  313.                                 Last = 188
  314.                             },
  315.                             {
  316.                                 First = 161,
  317.                                 Parameter = 2404,
  318.                                 String = "",
  319.                                 Value = 0,
  320.                                 Index = 0,
  321.                                 Last = 188
  322.                             },
  323.                             {
  324.                                 First = 0,
  325.                                 Parameter = 2401,
  326.                                 String = "",
  327.                                 Value = 0,
  328.                                 Index = 0,
  329.                                 Last = 114
  330.                             },
  331.                             {
  332.                                 First = 0,
  333.                                 Parameter = 2402,
  334.                                 String = "",
  335.                                 Value = 0,
  336.                                 Index = 0,
  337.                                 Last = 114
  338.                             },
  339.                             {
  340.                                 First = 0,
  341.                                 Parameter = 2403,
  342.                                 String = "",
  343.                                 Value = 0,
  344.                                 Index = 0,
  345.                                 Last = 114
  346.                             },
  347.                             {
  348.                                 First = 0,
  349.                                 Parameter = 2404,
  350.                                 String = "",
  351.                                 Value = 0,
  352.                                 Index = 0,
  353.                                 Last = 114
  354.                             }
  355.                         },
  356.                         Value = ""
  357.                     }
  358.                 },
  359.                 Level = Input { Value = 3 },
  360.                 AdaptCharacterWidthToAngle = Input { Value = -1 },
  361.                 AdaptWordWidthToAngle = Input { Value = -1 },
  362.                 PriorityBack = Input { Value = 8 },
  363.                 Style = Input { Value = "Bold" },
  364.                 HorizontalLeftCenterRight = Input { Value = -1 },
  365.                 BevelWidth = Input { Value = 0 },
  366.                 BevelDepth = Input { Value = 0 },
  367.                 Font = Input { Value = "Open Sans" },
  368.                 Blue = Input { Value = 0 },
  369.                 Red = Input { Value = 0 },
  370.                 Green = Input { Value = 0 },
  371.                 Text = Input {
  372.                     Value = StyledText {
  373.                         Array = {
  374.                         },
  375.                         Value = "I know how to do this with characters\nby animating the offset value in the\ntransform properties under the shading\ntab (odd placing, btw), but I can't figure\nout how to do it with lines."
  376.                     }
  377.                 }
  378.             }
  379.         },
  380.         Merge2_2 = Merge {
  381.             Colors = {
  382.                 TileColor = { B = 0.0784313725490196, R = 0.847058823529412, G = 0.596078431372549 },
  383.                 TextColor = { B = 0.117647058823529, R = 0.0980392156862745, G = 0.0980392156862745 }
  384.             },
  385.             ViewInfo = OperatorInfo { Pos = { 1155, 214.5 } },
  386.             Inputs = {
  387.                 Center = Input {
  388.                     Source = "Position",
  389.                     SourceOp = "Path2"
  390.                 },
  391.                 Background = Input {
  392.                     Source = "Output",
  393.                     SourceOp = "Transform1"
  394.                 },
  395.                 Foreground = Input {
  396.                     Source = "Output",
  397.                     SourceOp = "Text2_3"
  398.                 },
  399.                 PerformDepthMerge = Input { Value = 0 }
  400.             }
  401.         },
  402.         Path2 = PolyPath {
  403.             DrawMode = "InsertAndModify",
  404.             Inputs = {
  405.                 Displacement = Input {
  406.                     Source = "Value",
  407.                     SourceOp = "Path2Displacement"
  408.                 },
  409.                 PolyLine = Input {
  410.                     Value = Polyline {
  411.                         Points = {
  412.                             { Linear = true, X = 0, RY = 0.1425, LockY = true, RX = 0, Y = -0.4275 },
  413.                             { Linear = true, X = 0, LX = 0, LockY = true, Y = 0, LY = -0.1425 }
  414.                         }
  415.                     }
  416.                 }
  417.             }
  418.         },
  419.         Path2Displacement = BezierSpline {
  420.             SplineColor = { Red = 255, Green = 0, Blue = 255 },
  421.             NameSet = true,
  422.             KeyFrames = {
  423.                 [30] = { 0, RH = { 30, 0 }, Flags = { LockedY = true, Linear = true } },
  424.                 [45] = { 1, Flags = { LockedY = true }, LH = { 33.6363636363636, 1 } }
  425.             }
  426.         },
  427.         Text2_2 = TextPlus {
  428.             ViewInfo = OperatorInfo { Pos = { 935, 313.5 } },
  429.             Inputs = {
  430.                 Center = Input { Value = { 0.0218295218295218, 0.867245657568238 } },
  431.                 GlobalOut = Input { Value = 70 },
  432.                 ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" } },
  433.                 VerticalJustification = Input { Value = 0 },
  434.                 ManualFontKerningPlacement = Input {
  435.                     Value = StyledText {
  436.                         Array = {
  437.                         },
  438.                         Value = ""
  439.                     }
  440.                 },
  441.                 StyledText = Input {
  442.                     Source = "StyledText",
  443.                     SourceOp = "CharacterLevelStyling1_2"
  444.                 },
  445.                 Style = Input { Value = "Bold" },
  446.                 Width = Input { Value = 2048 },
  447.                 Font = Input { Value = "Open Sans" },
  448.                 HorizontalJustification = Input { Value = 0 },
  449.                 Height = Input { Value = 858 },
  450.                 Alignment = Input { Value = 1 }
  451.             }
  452.         },
  453.         CharacterLevelStyling1_2 = StyledTextCLS {
  454.             CtrlWZoom = false,
  455.             Inputs = {
  456.                 Thickness = Input { Value = 0.02 },
  457.                 Alpha = Input { Value = 0 },
  458.                 JoinStyle = Input { Value = 1 },
  459.                 VerticalTopCenterBottom = Input { Value = -1 },
  460.                 RightClickHereToAnimateCharacterLevelStyling = Input {
  461.                     Value = StyledText {
  462.                         Array = {
  463.                             {
  464.                                 First = 117,
  465.                                 Parameter = 2401,
  466.                                 String = "",
  467.                                 Value = 0,
  468.                                 Index = 0,
  469.                                 Last = 188
  470.                             },
  471.                             {
  472.                                 First = 117,
  473.                                 Parameter = 2402,
  474.                                 String = "",
  475.                                 Value = 0,
  476.                                 Index = 0,
  477.                                 Last = 188
  478.                             },
  479.                             {
  480.                                 First = 117,
  481.                                 Parameter = 2403,
  482.                                 String = "",
  483.                                 Value = 0,
  484.                                 Index = 0,
  485.                                 Last = 188
  486.                             },
  487.                             {
  488.                                 First = 117,
  489.                                 Parameter = 2404,
  490.                                 String = "",
  491.                                 Value = 0,
  492.                                 Index = 0,
  493.                                 Last = 188
  494.                             },
  495.                             {
  496.                                 First = 0,
  497.                                 Parameter = 2401,
  498.                                 String = "",
  499.                                 Value = 0,
  500.                                 Index = 0,
  501.                                 Last = 74
  502.                             },
  503.                             {
  504.                                 First = 0,
  505.                                 Parameter = 2402,
  506.                                 String = "",
  507.                                 Value = 0,
  508.                                 Index = 0,
  509.                                 Last = 74
  510.                             },
  511.                             {
  512.                                 First = 0,
  513.                                 Parameter = 2403,
  514.                                 String = "",
  515.                                 Value = 0,
  516.                                 Index = 0,
  517.                                 Last = 74
  518.                             },
  519.                             {
  520.                                 First = 0,
  521.                                 Parameter = 2404,
  522.                                 String = "",
  523.                                 Value = 0,
  524.                                 Index = 0,
  525.                                 Last = 74
  526.                             }
  527.                         },
  528.                         Value = ""
  529.                     }
  530.                 },
  531.                 Level = Input { Value = 3 },
  532.                 AdaptCharacterWidthToAngle = Input { Value = -1 },
  533.                 AdaptWordWidthToAngle = Input { Value = -1 },
  534.                 PriorityBack = Input { Value = 8 },
  535.                 Style = Input { Value = "Bold" },
  536.                 HorizontalLeftCenterRight = Input { Value = -1 },
  537.                 BevelWidth = Input { Value = 0 },
  538.                 BevelDepth = Input { Value = 0 },
  539.                 Font = Input { Value = "Open Sans" },
  540.                 Blue = Input { Value = 0 },
  541.                 Red = Input { Value = 0 },
  542.                 Green = Input { Value = 0 },
  543.                 Text = Input {
  544.                     Value = StyledText {
  545.                         Array = {
  546.                         },
  547.                         Value = "I know how to do this with characters\nby animating the offset value in the\ntransform properties under the shading\ntab (odd placing, btw), but I can't figure\nout how to do it with lines."
  548.                     }
  549.                 }
  550.             }
  551.         },
  552.         Merge2_1 = Merge {
  553.             Colors = {
  554.                 TileColor = { B = 0.0784313725490196, R = 0.847058823529412, G = 0.596078431372549 },
  555.                 TextColor = { B = 0.117647058823529, R = 0.0980392156862745, G = 0.0980392156862745 }
  556.             },
  557.             ViewInfo = OperatorInfo { Pos = { 1155, 313.5 } },
  558.             Inputs = {
  559.                 Center = Input {
  560.                     Source = "Position",
  561.                     SourceOp = "Path3"
  562.                 },
  563.                 Background = Input {
  564.                     Source = "Output",
  565.                     SourceOp = "Merge2_2"
  566.                 },
  567.                 Foreground = Input {
  568.                     Source = "Output",
  569.                     SourceOp = "Text2_2"
  570.                 },
  571.                 PerformDepthMerge = Input { Value = 0 }
  572.             }
  573.         },
  574.         Path3 = PolyPath {
  575.             DrawMode = "InsertAndModify",
  576.             Inputs = {
  577.                 Displacement = Input {
  578.                     Source = "Value",
  579.                     SourceOp = "Path3Displacement"
  580.                 },
  581.                 PolyLine = Input {
  582.                     Value = Polyline {
  583.                         Points = {
  584.                             { Linear = true, X = 0, RY = 0.1925, LockY = true, RX = 0, Y = -0.5775 },
  585.                             { Linear = true, X = 0, LX = 0, LockY = true, Y = 0, LY = -0.1925 }
  586.                         }
  587.                     }
  588.                 }
  589.             }
  590.         },
  591.         Path3Displacement = BezierSpline {
  592.             SplineColor = { Red = 255, Green = 0, Blue = 255 },
  593.             NameSet = true,
  594.             KeyFrames = {
  595.                 [20] = { 0, RH = { 20, 0 }, Flags = { LockedY = true, Linear = true } },
  596.                 [35] = { 1, Flags = { LockedY = true }, LH = { 23.6363636363636, 1 } }
  597.             }
  598.         },
  599.         Text2_1 = TextPlus {
  600.             ViewInfo = OperatorInfo { Pos = { 935, 412.5 } },
  601.             Inputs = {
  602.                 Center = Input { Value = { 0.0218295218295218, 0.867245657568238 } },
  603.                 GlobalOut = Input { Value = 70 },
  604.                 ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" } },
  605.                 VerticalJustification = Input { Value = 0 },
  606.                 ManualFontKerningPlacement = Input {
  607.                     Value = StyledText {
  608.                         Array = {
  609.                         },
  610.                         Value = ""
  611.                     }
  612.                 },
  613.                 StyledText = Input {
  614.                     Source = "StyledText",
  615.                     SourceOp = "CharacterLevelStyling1_1"
  616.                 },
  617.                 Style = Input { Value = "Bold" },
  618.                 Width = Input { Value = 2048 },
  619.                 Font = Input { Value = "Open Sans" },
  620.                 HorizontalJustification = Input { Value = 0 },
  621.                 Height = Input { Value = 858 },
  622.                 Alignment = Input { Value = 1 }
  623.             }
  624.         },
  625.         CharacterLevelStyling1_1 = StyledTextCLS {
  626.             CtrlWZoom = false,
  627.             Inputs = {
  628.                 Thickness = Input { Value = 0.02 },
  629.                 Alpha = Input { Value = 0 },
  630.                 JoinStyle = Input { Value = 1 },
  631.                 VerticalTopCenterBottom = Input { Value = -1 },
  632.                 RightClickHereToAnimateCharacterLevelStyling = Input {
  633.                     Value = StyledText {
  634.                         Array = {
  635.                             {
  636.                                 First = 0,
  637.                                 Parameter = 2401,
  638.                                 String = "",
  639.                                 Value = 0,
  640.                                 Index = 0,
  641.                                 Last = 36
  642.                             },
  643.                             {
  644.                                 First = 0,
  645.                                 Parameter = 2402,
  646.                                 String = "",
  647.                                 Value = 0,
  648.                                 Index = 0,
  649.                                 Last = 36
  650.                             },
  651.                             {
  652.                                 First = 0,
  653.                                 Parameter = 2403,
  654.                                 String = "",
  655.                                 Value = 0,
  656.                                 Index = 0,
  657.                                 Last = 36
  658.                             },
  659.                             {
  660.                                 First = 0,
  661.                                 Parameter = 2404,
  662.                                 String = "",
  663.                                 Value = 0,
  664.                                 Index = 0,
  665.                                 Last = 36
  666.                             },
  667.                             {
  668.                                 First = 77,
  669.                                 Parameter = 2401,
  670.                                 String = "",
  671.                                 Value = 0,
  672.                                 Index = 0,
  673.                                 Last = 188
  674.                             },
  675.                             {
  676.                                 First = 77,
  677.                                 Parameter = 2402,
  678.                                 String = "",
  679.                                 Value = 0,
  680.                                 Index = 0,
  681.                                 Last = 188
  682.                             },
  683.                             {
  684.                                 First = 77,
  685.                                 Parameter = 2403,
  686.                                 String = "",
  687.                                 Value = 0,
  688.                                 Index = 0,
  689.                                 Last = 188
  690.                             },
  691.                             {
  692.                                 First = 77,
  693.                                 Parameter = 2404,
  694.                                 String = "",
  695.                                 Value = 0,
  696.                                 Index = 0,
  697.                                 Last = 188
  698.                             }
  699.                         },
  700.                         Value = ""
  701.                     }
  702.                 },
  703.                 Level = Input { Value = 3 },
  704.                 AdaptCharacterWidthToAngle = Input { Value = -1 },
  705.                 AdaptWordWidthToAngle = Input { Value = -1 },
  706.                 PriorityBack = Input { Value = 8 },
  707.                 Style = Input { Value = "Bold" },
  708.                 HorizontalLeftCenterRight = Input { Value = -1 },
  709.                 BevelWidth = Input { Value = 0 },
  710.                 BevelDepth = Input { Value = 0 },
  711.                 Font = Input { Value = "Open Sans" },
  712.                 Blue = Input { Value = 0 },
  713.                 Red = Input { Value = 0 },
  714.                 Green = Input { Value = 0 },
  715.                 Text = Input {
  716.                     Value = StyledText {
  717.                         Array = {
  718.                         },
  719.                         Value = "I know how to do this with characters\nby animating the offset value in the\ntransform properties under the shading\ntab (odd placing, btw), but I can't figure\nout how to do it with lines."
  720.                     }
  721.                 }
  722.             }
  723.         },
  724.         Merge2 = Merge {
  725.             Colors = {
  726.                 TileColor = { B = 0.0784313725490196, R = 0.847058823529412, G = 0.596078431372549 },
  727.                 TextColor = { B = 0.117647058823529, R = 0.0980392156862745, G = 0.0980392156862745 }
  728.             },
  729.             ViewInfo = OperatorInfo { Pos = { 1155, 412.5 } },
  730.             Inputs = {
  731.                 Center = Input {
  732.                     Source = "Position",
  733.                     SourceOp = "Path4"
  734.                 },
  735.                 Background = Input {
  736.                     Source = "Output",
  737.                     SourceOp = "Merge2_1"
  738.                 },
  739.                 Foreground = Input {
  740.                     Source = "Output",
  741.                     SourceOp = "Text2_1"
  742.                 },
  743.                 PerformDepthMerge = Input { Value = 0 }
  744.             }
  745.         },
  746.         Path4 = PolyPath {
  747.             DrawMode = "InsertAndModify",
  748.             Inputs = {
  749.                 Displacement = Input {
  750.                     Source = "Value",
  751.                     SourceOp = "Path4Displacement"
  752.                 },
  753.                 PolyLine = Input {
  754.                     Value = Polyline {
  755.                         Points = {
  756.                             { Linear = true, X = 0, RY = 0.243333333333333, LockY = true, RX = 0, Y = -0.73 },
  757.                             { Linear = true, X = 0, LX = 0, LockY = true, Y = 0, LY = -0.243333333333333 }
  758.                         }
  759.                     }
  760.                 }
  761.             }
  762.         },
  763.         Path4Displacement = BezierSpline {
  764.             SplineColor = { Red = 255, Green = 0, Blue = 255 },
  765.             NameSet = true,
  766.             KeyFrames = {
  767.                 [10] = { 0, RH = { 10, 0 }, Flags = { LockedY = true, Linear = true } },
  768.                 [25] = { 1, Flags = { LockedY = true }, LH = { 13.6363636363636, 1 } }
  769.             }
  770.         },
  771.         Text2 = TextPlus {
  772.             ViewInfo = OperatorInfo { Pos = { 935, 511.5 } },
  773.             Inputs = {
  774.                 Center = Input { Value = { 0.0218295218295218, 0.867245657568238 } },
  775.                 GlobalOut = Input { Value = 70 },
  776.                 ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" } },
  777.                 VerticalJustification = Input { Value = 0 },
  778.                 ManualFontKerningPlacement = Input {
  779.                     Value = StyledText {
  780.                         Array = {
  781.                         },
  782.                         Value = ""
  783.                     }
  784.                 },
  785.                 StyledText = Input {
  786.                     Source = "StyledText",
  787.                     SourceOp = "CharacterLevelStyling1"
  788.                 },
  789.                 Style = Input { Value = "Bold" },
  790.                 Width = Input { Value = 2048 },
  791.                 Font = Input { Value = "Open Sans" },
  792.                 HorizontalJustification = Input { Value = 0 },
  793.                 Height = Input { Value = 858 },
  794.                 Alignment = Input { Value = 1 }
  795.             }
  796.         },
  797.         CharacterLevelStyling1 = StyledTextCLS {
  798.             CtrlWZoom = false,
  799.             Inputs = {
  800.                 Thickness = Input { Value = 0.02 },
  801.                 Alpha = Input { Value = 0 },
  802.                 JoinStyle = Input { Value = 1 },
  803.                 VerticalTopCenterBottom = Input { Value = -1 },
  804.                 RightClickHereToAnimateCharacterLevelStyling = Input {
  805.                     Value = StyledText {
  806.                         Array = {
  807.                             {
  808.                                 First = 39,
  809.                                 Parameter = 2404,
  810.                                 String = "",
  811.                                 Value = 0,
  812.                                 Index = 0,
  813.                                 Last = 188
  814.                             },
  815.                             {
  816.                                 First = 39,
  817.                                 Parameter = 2401,
  818.                                 String = "",
  819.                                 Value = 0,
  820.                                 Index = 0,
  821.                                 Last = 188
  822.                             },
  823.                             {
  824.                                 First = 39,
  825.                                 Parameter = 2402,
  826.                                 String = "",
  827.                                 Value = 0,
  828.                                 Index = 0,
  829.                                 Last = 188
  830.                             },
  831.                             {
  832.                                 First = 39,
  833.                                 Parameter = 2403,
  834.                                 String = "",
  835.                                 Value = 0,
  836.                                 Index = 0,
  837.                                 Last = 188
  838.                             }
  839.                         },
  840.                         Value = ""
  841.                     }
  842.                 },
  843.                 Level = Input { Value = 3 },
  844.                 AdaptCharacterWidthToAngle = Input { Value = -1 },
  845.                 AdaptWordWidthToAngle = Input { Value = -1 },
  846.                 PriorityBack = Input { Value = 8 },
  847.                 Style = Input { Value = "Bold" },
  848.                 HorizontalLeftCenterRight = Input { Value = -1 },
  849.                 BevelWidth = Input { Value = 0 },
  850.                 BevelDepth = Input { Value = 0 },
  851.                 Font = Input { Value = "Open Sans" },
  852.                 Blue = Input { Value = 0 },
  853.                 Red = Input { Value = 0 },
  854.                 Green = Input { Value = 0 },
  855.                 Text = Input {
  856.                     Value = StyledText {
  857.                         Array = {
  858.                         },
  859.                         Value = "I know how to do this with characters\nby animating the offset value in the\ntransform properties under the shading\ntab (odd placing, btw), but I can't figure\nout how to do it with lines."
  860.                     }
  861.                 }
  862.             }
  863.         },
  864.         Merge2_5 = Merge {
  865.             Colors = {
  866.                 TileColor = { B = 0.0784313725490196, R = 0.847058823529412, G = 0.596078431372549 },
  867.                 TextColor = { B = 0.117647058823529, R = 0.0980392156862745, G = 0.0980392156862745 }
  868.             },
  869.             CtrlWZoom = false,
  870.             Inputs = {
  871.                 Center = Input {
  872.                     Source = "Position",
  873.                     SourceOp = "Path5"
  874.                 },
  875.                 Background = Input {
  876.                     Source = "Output",
  877.                     SourceOp = "Merge2"
  878.                 },
  879.                 Foreground = Input {
  880.                     Source = "Output",
  881.                     SourceOp = "Text2"
  882.                 },
  883.                 PerformDepthMerge = Input { Value = 0 }
  884.             },
  885.             ViewInfo = OperatorInfo { Pos = { 1155, 511.5 } }
  886.         },
  887.         Path5 = PolyPath {
  888.             DrawMode = "InsertAndModify",
  889.             Inputs = {
  890.                 Displacement = Input {
  891.                     Source = "Value",
  892.                     SourceOp = "Path5Displacement"
  893.                 },
  894.                 PolyLine = Input {
  895.                     Value = Polyline {
  896.                         Points = {
  897.                             { Linear = true, X = 0, RY = 0.295833333333333, LockY = true, RX = 0, Y = -0.8875 },
  898.                             { Linear = true, X = 0, LX = 0, LockY = true, Y = 0, LY = -0.295833333333333 }
  899.                         }
  900.                     }
  901.                 }
  902.             }
  903.         },
  904.         Path5Displacement = BezierSpline {
  905.             SplineColor = { Red = 255, Green = 0, Blue = 255 },
  906.             NameSet = true,
  907.             KeyFrames = {
  908.                 [0] = { 0, RH = { 0, 0 }, Flags = { LockedY = true, Linear = true } },
  909.                 [15] = { 1, Flags = { LockedY = true }, LH = { 3.63636363636364, 1 } }
  910.             }
  911.         },
  912.         Merge2_4 = Merge {
  913.             Colors = {
  914.                 TileColor = { B = 0.0784313725490196, R = 0.847058823529412, G = 0.596078431372549 },
  915.                 TextColor = { B = 0.117647058823529, R = 0.0980392156862745, G = 0.0980392156862745 }
  916.             },
  917.             ViewInfo = OperatorInfo { Pos = { 1155, 610.5 } },
  918.             Inputs = {
  919.                 Background = Input {
  920.                     Source = "Output",
  921.                     SourceOp = "Background1"
  922.                 },
  923.                 Foreground = Input {
  924.                     Source = "Output",
  925.                     SourceOp = "Merge2_5"
  926.                 },
  927.                 PerformDepthMerge = Input { Value = 0 }
  928.             }
  929.         }
  930.     }
  931. }

User avatar
gez
Fusioneer
Posts: 168
Joined: Mon Jul 16, 2018 6:21 pm
Answers: 1
Location: Argentina
Been thanked: 4 times
Contact:

Re: Multiline Text Animation

#5

Post by gez » Fri Jul 20, 2018 10:28 am

Wow, thanks Intelligent machine.
Nice and smart trick! Pivot + scale never crossed my mind, and it works as a charm.

The third one, although it's nice too and gives you a great deal of control, seems a bit overkill for simple stuff like that, and having to isolate each line myself is exactly what I'm trying to avoid (another similar option would be creating a single text block and mask each line, then transform each line individually).
Both alternatives can work for text with a few lines, but as you add more text it becomes less covenient and more tedious to set up.

Anyway, thank you both for the replies, they helped me to get the big picture better and understand what can and can't be done wit the current tools.
I'd love to see a little uprade to the follower modifier so we can select ranges based on words and lines and not only characters, but the workarounds described here will help me get through for now. Thanks!

User avatar
Andrew
Posts: 44
Joined: Mon Mar 19, 2018 12:50 pm
Location: Los Angeles

Text+ fade in/out by line?

#6

Post by Andrew » Mon Aug 13, 2018 12:41 pm

Like it says on the tin, I want to fade text in/out by line. I can do it at character level with a follower, but I can't figure out how to do it per word or per line. Is it possible, or should I just instance the Text+ node and animate opacity via merge nodes? Thanks.

User avatar
SirEdric
Fusionator
Posts: 2343
Joined: Tue Aug 05, 2014 10:04 am
Answers: 12
Real name: Eric Westphal
Been thanked: 47 times
Contact:

Re: Text+ fade in/out by line?

#7

Post by SirEdric » Mon Aug 13, 2018 1:23 pm

Unfortunately there's no "line opacity".
You could work with masks on a single Text+ though:

Code: Select all

{
	Tools = ordered() {
		Rectangle1_1 = RectangleMask {
			Inputs = {
				Level = Input {
					SourceOp = "Rectangle1_1Level",
					Source = "Value",
				},
				MaskWidth = Input { Value = 1920, },
				MaskHeight = Input { Value = 1080, },
				PixelAspect = Input { Value = { 1, 1 }, },
				ClippingMode = Input { Value = FuID { "None" }, },
				Center = Input { Value = { 0.5, 0.491341991341991 }, },
				Width = Input { Value = 1.20802919708029, },
				Height = Input { Value = 0.093073593073593, },
				EffectMask = Input {
					SourceOp = "Rectangle1",
					Source = "Mask",
				}
			},
			ViewInfo = OperatorInfo { Pos = { 330, 16.5 } },
		},
		Rectangle1_1Level = BezierSpline {
			SplineColor = { Red = 130, Green = 246, Blue = 132 },
			NameSet = true,
			KeyFrames = {
				[15] = { 0, RH = { 16.6666666666667, 0.333333333333333 }, Flags = { Linear = true } },
				[20] = { 1, LH = { 18.3333333333333, 0.666666666666667 }, RH = { 23.3333333333333, 1 }, Flags = { Linear = true } },
				[30] = { 1, LH = { 26.6666666666667, 1 }, RH = { 31.6666666666667, 0.666666666666667 }, Flags = { Linear = true } },
				[35] = { 0, LH = { 33.3333333333333, 0.333333333333333 }, Flags = { Linear = true } }
			}
		},
		Rectangle1_2 = RectangleMask {
			CtrlWZoom = false,
			Inputs = {
				Level = Input {
					SourceOp = "Rectangle1_2Level",
					Source = "Value",
				},
				MaskWidth = Input { Value = 1920, },
				MaskHeight = Input { Value = 1080, },
				PixelAspect = Input { Value = { 1, 1 }, },
				ClippingMode = Input { Value = FuID { "None" }, },
				Center = Input { Value = { 0.5, 0.376623376623377 }, },
				Width = Input { Value = 1.20802919708029, },
				Height = Input { Value = 0.093073593073593, },
				EffectMask = Input {
					SourceOp = "Rectangle1_1",
					Source = "Mask",
				}
			},
			ViewInfo = OperatorInfo { Pos = { 330, 49.5 } },
		},
		Rectangle1_2Level = BezierSpline {
			SplineColor = { Red = 0, Green = 170, Blue = 255 },
			NameSet = true,
			KeyFrames = {
				[25] = { 0, RH = { 26.6666666666667, 0.333333333333333 }, Flags = { Linear = true } },
				[30] = { 1, LH = { 28.3333333333333, 0.666666666666667 }, RH = { 33.3333333333333, 1 }, Flags = { Linear = true } },
				[40] = { 1, LH = { 36.6666666666667, 1 }, RH = { 41.6666666666667, 0.666666666666667 }, Flags = { Linear = true } },
				[45] = { 0, LH = { 43.3333333333333, 0.333333333333333 }, Flags = { Linear = true } }
			}
		},
		Rectangle1 = RectangleMask {
			Inputs = {
				Level = Input {
					SourceOp = "Rectangle1Level",
					Source = "Value",
				},
				MaskWidth = Input { Value = 1920, },
				MaskHeight = Input { Value = 1080, },
				PixelAspect = Input { Value = { 1, 1 }, },
				ClippingMode = Input { Value = FuID { "None" }, },
				Center = Input { Value = { 0.5, 0.606060606060606 }, },
				Width = Input { Value = 1.20802919708029, },
				Height = Input { Value = 0.093073593073593, },
			},
			ViewInfo = OperatorInfo { Pos = { 330, -16.5 } },
		},
		Rectangle1Level = BezierSpline {
			SplineColor = { Red = 130, Green = 246, Blue = 132 },
			NameSet = true,
			KeyFrames = {
				[0] = { 0, RH = { 1.66666666666667, 0.333333333333333 }, Flags = { Linear = true } },
				[5] = { 1, LH = { 3.33333333333333, 0.666666666666667 }, RH = { 8.33333333333333, 1 }, Flags = { Linear = true } },
				[15] = { 1, LH = { 11.6666666666667, 1 }, RH = { 16.65, 0.67 }, Flags = { Linear = true } },
				[20] = { 0, LH = { 18.35, 0.33 }, Flags = { Linear = true } }
			}
		},
		Text2 = TextPlus {
			Inputs = {
				Width = Input { Value = 1920, },
				Height = Input { Value = 1080, },
				["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
				Font = Input { Value = "Open Sans", },
				StyledText = Input {
					SourceOp = "Follower1",
					Source = "StyledText",
				},
				Style = Input { Value = "Bold", },
				ManualFontKerningPlacement = Input {
					Value = StyledText {
						Array = {
						},
						Value = ""
					},
				},
				SelectTransform = Input { Value = 2, },
				EffectMask = Input {
					SourceOp = "Rectangle1_2",
					Source = "Mask",
				}
			},
			ViewInfo = OperatorInfo { Pos = { 330, 82.5 } },
		},
		Follower1 = StyledTextFollower {
			CtrlWZoom = false,
			Inputs = {
				Text = Input {
					Value = StyledText {
						Array = {
						},
						Value = "one\ntwo\nthree"
					},
				},
				SelectTransform = Input { Value = 2, },
			},
		}
	}
}

User avatar
SecondMan
Site Admin
Posts: 4576
Joined: Thu Jul 31, 2014 5:31 pm
Answers: 28
Location: Vancouver, Canada
Been thanked: 129 times
Contact:

Re: Text+ fade in/out by line?

#8

Post by SecondMan » Mon Aug 13, 2018 1:26 pm

A similar topic came up a few weeks ago and resulted in some interest techniques: viewtopic.php?p=18479#p18479

User avatar
SirEdric
Fusionator
Posts: 2343
Joined: Tue Aug 05, 2014 10:04 am
Answers: 12
Real name: Eric Westphal
Been thanked: 47 times
Contact:

Re: Text+ fade in/out by line?

#9

Post by SirEdric » Mon Aug 13, 2018 1:40 pm

Alternatively, use multiple Text+,
connect all the opacity-animation to the "Master" Text+ (i.e. animate only once),
use TimeSpeeds to offset the animation.
(Observe the GlobalIn on the Text+ in order not to fail with the TimeSpeed)

Code: Select all

{
	Tools = ordered() {
		Text2_1_1 = TextPlus {
			ExtentSet = true,
			CtrlWZoom = false,
			Inputs = {
				GlobalIn = Input { Value = -500, },
				Width = Input { Value = 1920, },
				Height = Input { Value = 1080, },
				["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
				Font = Input { Value = "Open Sans", },
				StyledText = Input { Value = "two", },
				Style = Input { Value = "Bold", },
				ManualFontKerningPlacement = Input {
					Value = StyledText {
						Array = {
						},
						Value = ""
					},
				},
				SelectTransform = Input { Value = 2, },
				Opacity1 = Input {
					Value = 0,
					Expression = "Text2_1.Opacity1",
				},
			},
			ViewInfo = OperatorInfo { Pos = { 495, 82.5 } },
		},
		Text2_1 = TextPlus {
			Inputs = {
				Width = Input { Value = 1920, },
				Height = Input { Value = 1080, },
				["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
				Center = Input { Value = { 0.5, 0.601731601731602 }, },
				Font = Input { Value = "Open Sans", },
				StyledText = Input { Value = "one", },
				Style = Input { Value = "Bold", },
				ManualFontKerningPlacement = Input {
					Value = StyledText {
						Array = {
						},
						Value = ""
					},
				},
				SelectTransform = Input { Value = 2, },
				Opacity1 = Input {
					SourceOp = "Text2_1Opacity",
					Source = "Value",
				},
			},
			ViewInfo = OperatorInfo { Pos = { 495, 49.5 } },
		},
		Text2_1Opacity = BezierSpline {
			SplineColor = { Red = 179, Green = 28, Blue = 244 },
			NameSet = true,
			KeyFrames = {
				[0] = { 0, RH = { 1.66666666666667, 0.333333333333333 }, Flags = { Linear = true } },
				[5] = { 1, LH = { 3.33333333333333, 0.666666666666667 }, RH = { 8.33333333333333, 1 }, Flags = { Linear = true } },
				[15] = { 1, LH = { 11.6666666666667, 1 }, RH = { 16.65, 0.67 }, Flags = { Linear = true } },
				[20] = { 0, LH = { 18.35, 0.33 }, Flags = { Linear = true } }
			}
		},
		TimeSpeed2 = TimeSpeed {
			CtrlWZoom = false,
			Inputs = {
				Delay = Input { Value = 10, },
				Input = Input {
					SourceOp = "Text2_1_1",
					Source = "Output",
				},
			},
			ViewInfo = OperatorInfo { Pos = { 605, 82.5 } },
		},
		Merge1 = Merge {
			Inputs = {
				Background = Input {
					SourceOp = "TimeSpeed2",
					Source = "Output",
				},
				Foreground = Input {
					SourceOp = "Text2_1",
					Source = "Output",
				},
				PerformDepthMerge = Input { Value = 0, },
			},
			ViewInfo = OperatorInfo { Pos = { 715, 82.5 } },
		},
		Text2_1_2 = TextPlus {
			ExtentSet = true,
			Inputs = {
				GlobalIn = Input { Value = -500, },
				Width = Input { Value = 1920, },
				Height = Input { Value = 1080, },
				["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
				Center = Input { Value = { 0.5, 0.385281385281385 }, },
				Font = Input { Value = "Open Sans", },
				StyledText = Input { Value = "three", },
				Style = Input { Value = "Bold", },
				ManualFontKerningPlacement = Input {
					Value = StyledText {
						Array = {
						},
						Value = ""
					},
				},
				SelectTransform = Input { Value = 2, },
				Opacity1 = Input {
					Value = 0,
					Expression = "Text2_1.Opacity1",
				},
			},
			ViewInfo = OperatorInfo { Pos = { 495, 115.5 } },
		},
		TimeSpeed1 = TimeSpeed {
			Inputs = {
				Delay = Input {
					Value = 20,
					Expression = "TimeSpeed2.Delay*2",
				},
				Input = Input {
					SourceOp = "Text2_1_2",
					Source = "Output",
				},
			},
			ViewInfo = OperatorInfo { Pos = { 605, 115.5 } },
		},
		Merge2 = Merge {
			Inputs = {
				Background = Input {
					SourceOp = "Merge1",
					Source = "Output",
				},
				Foreground = Input {
					SourceOp = "TimeSpeed1",
					Source = "Output",
				},
				PerformDepthMerge = Input { Value = 0, },
			},
			ViewInfo = OperatorInfo { Pos = { 715, 115.5 } },
		}
	}
}

User avatar
Andrew
Posts: 44
Joined: Mon Mar 19, 2018 12:50 pm
Location: Los Angeles

Re: Text+ fade in/out by line?

#10

Post by Andrew » Mon Aug 13, 2018 2:20 pm

SecondMan wrote:
Mon Aug 13, 2018 1:26 pm
A similar topic came up a few weeks ago and resulted in some interest techniques: viewtopic.php?p=18479#p18479

I did see that post but I wasn't sure if I should add on. Feel free to merge this if I made a mistake. Following the example there, I animated Modifiers>Shading>Opacity, but it was applied at the character level. It's possible that I did something wrong though.

  1. {
  2.     Tools = ordered() {
  3.         Text2 = TextPlus {
  4.             CtrlWZoom = false,
  5.             Inputs = {
  6.                 GlobalOut = Input { Value = 120, },
  7.                 Width = Input { Value = 2048, },
  8.                 Height = Input { Value = 858, },
  9.                 ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
  10.                 Center = Input { Value = { 0.148409893992933, 0.706751054852321 }, },
  11.                 Size = Input { Value = 0.1345, },
  12.                 Font = Input { Value = "Open Sans", },
  13.                 StyledText = Input {
  14.                     SourceOp = "Follower4_1",
  15.                     Source = "StyledText",
  16.                 },
  17.                 Style = Input { Value = "Bold", },
  18.                 ManualFontKerningPlacement = Input {
  19.                     Value = StyledText {
  20.                         Array = {
  21.                         },
  22.                         Value = ""
  23.                     },
  24.                 },
  25.                 Alignment = Input { Value = 1, },
  26.                 HorizontalJustification = Input { Value = 0, },
  27.                 VerticalJustification = Input { Value = 0, },
  28.                 SelectTransform = Input { Value = 1, },
  29.                 WordPivot = Input { Value = { 0, -1 }, },
  30.             },
  31.             ViewInfo = OperatorInfo { Pos = { 990, 346.5 } },
  32.         },
  33.         Follower4_1 = StyledTextFollower {
  34.             CtrlWZoom = false,
  35.             Inputs = {
  36.                 Delay = Input { Value = 0.5, },
  37.                 Text = Input {
  38.                     Value = StyledText {
  39.                         Array = {
  40.                         },
  41.                         Value = "Playing with Text+\nis so much fun!"
  42.                     },
  43.                 },
  44.                 SelectTransform = Input { Value = 1, },
  45.                 WordPivot = Input { Value = { 0, -1 }, },
  46.                 WordSizeY = Input {
  47.                     SourceOp = "Follower4_1WordSizeY",
  48.                     Source = "Value",
  49.                 },
  50.                 Opacity1 = Input {
  51.                     SourceOp = "Follower4_1Opacity",
  52.                     Source = "Value",
  53.                 },
  54.             },
  55.         },
  56.         Follower4_1WordSizeY = BezierSpline {
  57.             SplineColor = { Red = 226, Green = 36, Blue = 253 },
  58.             NameSet = true,
  59.             KeyFrames = {
  60.                 [0] = { 0, RH = { 0, 0 }, Flags = { Linear = true } },
  61.                 [20] = { 1, LH = { 9.8989898989899, 1 } }
  62.             }
  63.         },
  64.         Follower4_1Opacity = BezierSpline {
  65.             SplineColor = { Red = 244, Green = 28, Blue = 244 },
  66.             NameSet = true,
  67.             KeyFrames = {
  68.                 [13] = { 0, RH = { 15.3333333333333, 0.333333333333333 }, Flags = { Linear = true } },
  69.                 [20] = { 1, LH = { 17.6666666666667, 0.666666666666667 }, Flags = { Linear = true } }
  70.             }
  71.         }
  72.     }
  73. }

I got the idea for using merge nodes from the third example, though I used Write On instead of Per Character Styling to reveal individual lines.

Thanks SirEdric. (btw, how does one make the @someone tag?) Looks like every solution has some compromises.

User avatar
SirEdric
Fusionator
Posts: 2343
Joined: Tue Aug 05, 2014 10:04 am
Answers: 12
Real name: Eric Westphal
Been thanked: 47 times
Contact:

Re: Text+ fade in/out by line?

#11

Post by SirEdric » Mon Aug 13, 2018 3:11 pm

Andrew wrote:
Mon Aug 13, 2018 2:20 pm
(btw, how does one make the @someone tag?
Just type @ followed by the user name.
Like @Andrew.

Added in 33 seconds:
Which for some weird reason doesn't seem to work....:-/

User avatar
Midgardsormr
Fusionator
Posts: 1942
Joined: Wed Nov 26, 2014 8:04 pm
Answers: 19
Location: Los Angeles, CA, USA
Been thanked: 147 times
Contact:

Re: Text+ fade in/out by line?

#12

Post by Midgardsormr » Mon Aug 13, 2018 3:17 pm

The @ notation should pop up a list of potential matches, but if it doesn't, you can enclose the name in mention tags:

[mention]SirEdric[/mention]

User avatar
SecondMan
Site Admin
Posts: 4576
Joined: Thu Jul 31, 2014 5:31 pm
Answers: 28
Location: Vancouver, Canada
Been thanked: 129 times
Contact:

Re: Text+ fade in/out by line?

#13

Post by SecondMan » Mon Aug 13, 2018 3:56 pm

Online active users can use the tag. You're not quite there yet, @Andrew :)

SirEdric wrote:
Mon Aug 13, 2018 3:12 pm
Which for some weird reason doesn't seem to work....:-/

Because there was already an @ used in your quote - it's a usage limitation.

User avatar
SecondMan
Site Admin
Posts: 4576
Joined: Thu Jul 31, 2014 5:31 pm
Answers: 28
Location: Vancouver, Canada
Been thanked: 129 times
Contact:

Re: Multiline Text Animation

#14

Post by SecondMan » Mon Aug 13, 2018 4:09 pm

Andrew wrote:
Mon Aug 13, 2018 2:20 pm
Feel free to merge this if I made a mistake. Following the example there...

No problem, but since you build on the example there I've merged the topics. I kept your handy text tag though... ;)